本日は昨日に引き続きフェイズシフト装甲をUnityのシェーダーで再現していきます。
昨日は一番の機能となるグレースケールに対応しました。
〇フェイズシフト展開時のノイズ
フェイズシフト装甲を展開する際は一様に展開するのではなく装甲表面にノイズが走りながらむらがある展開をします。
本日はこちらを再現します。
まずは一様に展開するのではなく展開のむらを再現します。
水の波紋のようなノイズを追加するときはVoronoi
を使用すると最適です。
CustonFunction
ノードにNoiseを追加してむらを作ります。
float sumComponent = inputColor.r*0.299+inputColor.g*0.587+ inputColor.b*0.114; sumComponent = sumComponent >= 0.2 ? 0.2 : sumComponent; //Noise = clamp(Noise, 0.0, 1); // NoiseをPowerに応じて滑らかに適用します sumComponent *= lerp(1, Noise*10, Power); output = float3(sumComponent,sumComponent,sumComponent)*(1-Power)+float3(inputColor.r,inputColor.g,inputColor.b)*Power;
これを実行すると次のようになります。
GIF画像では少しわかりずらいですが、中央部などよく見ればむらを確認できます。
しかし映像での表現を見ると『展開』するように広がっていきます。
これを再現するために一度CustomFunctionのノード内容を戻します。
float sumComponent = inputColor.r*0.299+inputColor.g*0.587+ inputColor.b*0.114; sumComponent = sumComponent >= 0.2 ? 0.2 : sumComponent; output = float3(sumComponent,sumComponent,sumComponent)*(1-Power)+float3(inputColor.r,inputColor.g,inputColor.b)*Power;
Power側でむらをつくるために次のようにノードを接続しました。
ボロノイノードをPowerと接続しPowerの初期値(0付近の値)では一様に0に近い値を返し、Addの値と足し合わせ、二乗化することでよりむらをはっきりさせ0~1にクランプした値を使用するようにします。
これで先ほどよりもはっきりとしたむらが加わり、展開されている様子がはっきり出ます。
これでよりアニメ劇中描写に近いシェーダーができました。
本日は以上です。