Version: 2020.3
サーフェイスシェーダーの例
Surface Shader lighting examples

サーフェスシェーダーでのカスタムライティングモデル

In the Built-in Render Pipeline, when writing Surface Shaders, you describe the properties of a surface (such as albedo color and normal), and a Lighting Model computes the lighting interaction.

レンダリングパイプラインの互換性

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) HD レンダーパイプライン (HDRP) Custom SRP
Surface Shaders No

For a streamlined way of creating Shader objects in URP, see Shader Graph.
No

For a streamlined way of creating Shader objects in HDRP, see Shader Graph.
不可

概要

ライティングモデルには、ディフューズライティングの Lambert、スペキュラーライティングの BlinnPhong という 2 つのビルトインモデルがあります。Unity 内部の Lighting.cginc ファイルでこれらのモデルは定義されます (Windows : <unity install path>/Data/CGIncludes/Lighting.cginc、macOS: /Applications/Unity/Unity.app/Contents/CGIncludes/Lighting.cginc)。

カスタムのライティングモデルを使用したい場合があると思いますが、これは、サーフェスシェーダーで行うことができます。ライティングモデルは、規則に一致するいくつかの Cg/HLSL 関数にすぎません。

ライティングモデルの宣言

ライティングモデルは、Lighting で始まる名前のある通常の関数です。これらは、シェーダーファイルや含まれているファイルのいずれかの任意の場所で宣言できます。以下の関数があります。

  1. half4 Lighting<Name> (SurfaceOutput s, UnityGI gi); これは、ビュー方向に依存していないライトモデルのフォワードレンダリングパスで使用されます。

  2. half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi); これは、ビュー方向に依存しているライトモデルのフォワードレンダリングパスで使用されます

  3. half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal); これは、ディファードライティングパスに使用されます。

  4. half4 Lighting<Name>_PrePass (SurfaceOutput s, half4 light); これは、ライトプレパス (古いディファード) ライティングパスに使用されます。

すべての関数を宣言する必要はありません。ライティングモデルは、ビュー方向を使用するか、しないかのいずれかです。同様に、ライティングモデルがフォワードレンダリングでしか機能しない場合は、_Deferred_Prepass 関数を宣言しないでください。こうすることによって、それを使用するシェーダーは、フォワードレンダリングだけにコンパイルされます。

カスタム GI

以下の関数を宣言して、デコードするライトマップデータとプローブをカスタマイズします。

  1. half4 Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);

標準の Unity ライトマップと SH プローブをデコードするには、Unity 内の UnityGlobalIllumination.cginc ファイルの UnityGI_Base にあるビルトインの DecodeLightmapShadeSHPerPixel 関数を使用します (Windows: <unity install path>/Data/CGIncludes/UnityGlobalIllumination.cginc、macOS: /Applications/Unity/Unity.app/Contents/CGIncludes/UnityGlobalIllumination.cginc_)。

詳しくは サーフェイスシェーダーライティングの例 を参照してください。

サーフェイスシェーダーの例
Surface Shader lighting examples