【Unity】カスタムパスで画面に集中線を表示する

投稿者: | 2024-03-12

HDRPのフルスクリーンサンプルを詳しく見てみました。

シェーダーグラフで画面に集中線を表示します。

カスタムパス

Custom Pass Volumeコンポーネントには、通常のフルスクリーンカスタムパスが追加されています。カスタムパスにはFullscreenシェーダーグラフの設定されたマテリアルがアタッチされています。

シェーダーグラフ

シェーダーグラフでノイズを使って集中線を表示します。まず、集中線を回転させるための角度(ラジアン)を作成します。

時間とともに段階的に変化する値によって、コマ送りのような見た目になります。

まず時間の値を調節して、Fractionノードに入力します。増加する値の小数部分だけが得られます。0からほぼ1の範囲を繰り返します。

整数をかけて範囲を大きくし、Floorノードに入れます。入力以下の最大の整数が得られます。整数が段階的に増加し、繰り返します。

同じ整数値で割ることで、値の変化が0-1の範囲になります。

これに2Πをかけます。ラジアンで1周分(360度)になります。

RotateノードでUVを回転させます。2Πをかけた値を回転量として使います。

UVには、Screen Positionノードの値を極座標にした値を入れます。

極座標への変換にはPolar Coordinatesノードを使います。出力ベクトルのxは中心からの距離、yは角度になります。

出力をノイズのUVに使ってみます。

入力の「Radial Scale」が小さいと中心から放射状に伸びる線ができます。

入力の「Length Scale」で線の密度が変わります。

サンプルのシェーダーグラフでは、Rotateノードの出力をSimple Noiseノードに入力します。放射状の線が回転します。

中心に、線のない空間を作ります。Screen Positionと中心の距離を使います。Screen Positionは、Modeが「Default」ときに0~1の範囲になります。

中心は0.5に設定されています。

空所のサイズと、そこから線が徐々に現れていく部分のサイズを設定します。それぞれ、「Inverse Lerp」ノードのA、Bに入力されます。入力のTには中心からの距離を入れます。

「Inverse Lerp」ノードでは、「Lerp」ノードのTと出力が逆になっています。「Inverse Lerp」ノードのTがAとBの間の範囲では、0-1の値になります。

Tがその範囲の外だと、0未満や1より大きい値になります。Saturateノードによって、0から1の範囲に固定されます。

「Simple Noise」ノードの値を「Smoothstep」ノードにいれます。Edgeには、Saturateノードの値を「One Minus」ノードで反転した値を使います。

One Minusノードによって中心の空所が明るくなります。Smoothstepの出力が1になるためには、Edgeよりも大きな入力が必要になります。

Smoothstepの出力をマスタースタックのAlphaに入力します。

これで、画面に集中線が表示されます。

コメントを残す

メールアドレスが公開されることはありません。