夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

UnityShaderGprahでクリスタルなシェーダーを描く その① リフレクションの実装

本日はShader学習枠です。

今回はShaderGprahを使用して宝石のようなシェーダーを作っていきます。

〇Transmission(伝搬)

Blenderでガラスやクリスタルの表現を行う際はTransmission(伝搬)を使用することが一般的です。

 アルファとの違いとしてただ単に透明になるのか?それとも物質として光を通すのかという違いがあります。

 Blenderの場合TransmissionIORを使用することでガラスなどの屈折が表現できます。

 今回はUnityで同様のシェーダーを開発していきます。

〇TransmissionとIOR(屈折)の実装

①UnityプロジェクトからCreate→Shader→ShaderGraph→URP→Lit ShaderGraphを選択し新しいShaderGraphを作成します。

②まずカメラの情報を取得する必要があります。View Directionノードを配置します。

③次にTransmissionと屈折を実装します。これはデフォルトではないためCustomFunctionで実装します。

CustomFunctionはhlslを記入することで自作の実装をノードとして使用できます。

CustomFunctionノードのGraphInspectorを開きTypeをStringへ切り替えます。

このモードは下のBodyに直接hlslを打ち込み使用します。

⑤Bodyに次のコードを打ち込みます。

Out = refract(View,Normal,IOR);

refract()は屈折ベクトルを取得することができる関数です

引数として入射光線(カメラの角度)、法線、屈折率(IOR)を使用します。

learn.microsoft.com

またNameをRefractと名付けます。

⑥入力と出力を定義します。

入力

・IOR : Float

・View: Vector3

・Normal: Vector3

出力

・Out : Vector3

⑦作成したCustomFunctionノードの入力にViewDirectionノード、新規で作成するNormal Vectorノードを接続します。

CustomFunctionの出力をReflection ProbeのViewDirへ接続します。

またNormalにNormalVectorの出力を接続します。

 これによってスカイボックス(正確にはRefrectionProbe)を映し出す表現ができました。

CustomFunctionのIORの値によってスカイボックスの歪みが変わります。

その①では以上です。