こんにちは、エンジニアのオオバです。
前回からの続きで、今回はノイズのイメージエフェクトを作ってみます。
スクロールをアルファブレンドしたイメージエフェクト
ノイズと言っても様々なものがありますが、今回はこのようなノイズを作ってみました。
※名前が分かりません
画面トランジションや、キャラの登場などで使えなくもない気がしています。
処理の流れを軽く紹介していきます。全ソースコードは記事終盤で貼り付けていますので、そちらをどうぞ。
C#側の処理
C#側は至ってシンプルで、シェーダーに各ピクセルが左右にどれだけピクセルを動かすかという最大float値と、ランダムシードを与えているだけです。
ピクセルを横にずらす値は_HorizonValue
変数でこの値が大きければノイズの動く幅が大きくなります。
m_mat.SetFloat("_HorizonValue", horizonValue);
ランダムシードは、毎フレーム別の値を与える必要があるため、Time.frameCount
でカウントアップさせています。
シェーダー側の処理
シェーダー側もシンプルで、以下の処理で、uvの値をイイ感じに調整して今回のノイズを生成します。
float2 uv = float2(frac(i.uv.x + rndU), i.uv.y);
_HorizonValue
と乱数生成rnd関数で算出したrndU
には[0 ~ 1未満]の乱数値が入ります。
この値が最終的なUV座標のジャンプ値となりますので、現在処理するUV座標i.uv.x
に加算します。
i.uv.y
には変更を加えず座標変換することでピクセルが横方向のみランダムにジャンプし、今回のようなノイズが生成できます。
サンプルコードはコチラ
Noise2.cs · GitHub
step関数、frac関数は便利ですね。
_HorizonValue
をとても小さい値にすると、いつかどこかで使えそうなチリチリした表現ができて個人的にはお気に入り。 この記事が気に入ったらフォローしよう
オススメ記事