ビルトインレンダーパイプラインでは、サーフェスシェーダー を作成するときに、サーフェスのプロパティ (アルベドカラーや法線など) を記述し、 ライティングモデル がライトの相互作用を計算します。
機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
---|---|---|---|---|
サーフェスシェーダー | あり | 不可 URP で Shader オブジェクトを効率的に作成する方法については、Shader Graph を参照してください。 |
不可 HDRP で Shader オブジェクトを効率的に作成する方法については、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
で始まる名前のある通常の関数です。これらは、シェーダーファイルや含まれているファイルのいずれかの任意の場所で宣言できます。以下の関数があります。
half4 Lighting<Name> (SurfaceOutput s, UnityGI gi);
これは、ビュー方向に依存していないライトモデルのフォワードレンダリングパスで使用されます。
half4 Lighting<Name> (SurfaceOutput s, half3 viewDir, UnityGI gi);
これは、ビュー方向に依存しているライトモデルのフォワードレンダリングパスで使用されます
half4 Lighting<Name>_Deferred (SurfaceOutput s, UnityGI gi, out half4 outDiffuseOcclusion, out half4 outSpecSmoothness, out half4 outNormal);
Use this in deferred shading paths.
Note that you don’t need to declare all functions. A lighting model either uses view direction or it does not. Similarly, if the lighting model only works in forward rendering, do not declare the _Deferred
function. This ensures that Shaders that use it only compile to forward rendering.
以下の関数を宣言して、デコードするライトマップデータとプローブをカスタマイズします。
half4 Lighting<Name>_GI (SurfaceOutput s, UnityGIInput data, inout UnityGI gi);
標準の Unity ライトマップと SH プローブをデコードするには、Unity 内の UnityGlobalIllumination.cginc ファイルの UnityGI_Base
にあるビルトインの DecodeLightmap
と ShadeSHPerPixel
関数を使用します (Windows: <unity install path>/Data/CGIncludes/UnityGlobalIllumination.cginc、macOS: /Applications/Unity/Unity.app/Contents/CGIncludes/UnityGlobalIllumination.cginc_)。
詳しくは サーフェイスシェーダーライティングの例 を参照してください。