本日はShader学習枠です。
今回はShaderGprahを使用して宝石のようなシェーダーを作っていきます。
〇Transmission(伝搬)
Blenderでガラスやクリスタルの表現を行う際はTransmission(伝搬)を使用することが一般的です。
アルファとの違いとしてただ単に透明になるのか?それとも物質として光を通すのかという違いがあります。
Blenderの場合TransmissionとIORを使用することでガラスなどの屈折が表現できます。
今回は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)を使用します。
またNameをRefractと名付けます。
⑥入力と出力を定義します。
入力
・IOR : Float
・View: Vector3
・Normal: Vector3
出力
・Out : Vector3
⑦作成したCustomFunctionノードの入力にViewDirectionノード、新規で作成するNormal Vectorノードを接続します。
⑧CustomFunctionの出力をReflection ProbeのViewDirへ接続します。
またNormalにNormalVectorの出力を接続します。
これによってスカイボックス(正確にはRefrectionProbe)を映し出す表現ができました。
CustomFunctionのIORの値によってスカイボックスの歪みが変わります。
その①では以上です。