おはこん
おはこんばんにちはUniyaです.
最近Shaderを勉強しておりまして,友人に水面をARで表現するには計算量がたくさんかかって困るという相談を受けたので,なるべく軽い処理を心掛ける形でなんちゃって水面を表現してみました.
波の流れる感じ
UVスクロールを利用して水面のテクスチャを動かしています.
fixed4 frag (v2f i) : SV_Target {
_XShift = _XShift * _HorizontalSpeed;
_YShift = _YShift * _VerticalSpeed;
i.uv.x = i.uv.x +_XShift * _Time;
i.uv.y = i.uv.y +_YShift * _Time;
fixed4 col = tex2D(_MainTex, i.uv);
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
波の高さ
Wave Parameterをの値を調整して波の高さを表現しています
頂点Shaderの値を時間ごとに変更してsin波,cos波の積で出てくるグラフの形がそのまま波の形になります
delta変数で0~2π間で少しずつ波に変化を与えています
v2f vert (appdata v){
v2f o;
float delta = (_SinTime.w + 1.0) / 2.0;
o.vertex = UnityObjectToClipPos(v.vertex);
o.vertex.y += ((sin(v.vertex.x + delta))*(cos(v.vertex.z + delta))) * _WaveHeight;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
動画
version2 pic.twitter.com/wQlfEAYKLt
— ゆにやん (@Uni_yan3) December 24, 2022
今度はRaymarchingとか利用して水面(水)を表現してみたいですね.
本記事は以上になります.ご高覧ありがとうございました
全体のコードや実際に手元で利用してみたい方は以下のリンクからお願いします.
なんちゃって水Shader
参考:https://nn-hokuson.hatenablog.com/entry/2016/10/20/201111