LoginSignup
2
0

More than 1 year has passed since last update.

おはこん

おはこんばんにちは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;
}

動画

今度はRaymarchingとか利用して水面(水)を表現してみたいですね.
本記事は以上になります.ご高覧ありがとうございました
全体のコードや実際に手元で利用してみたい方は以下のリンクからお願いします.

なんちゃって水Shader
参考:https://nn-hokuson.hatenablog.com/entry/2016/10/20/201111

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0