サーフェスシェーダー を作成する場合、サーフェスのプロパティ (アルベドと法線など) を記述します。 ライティングモデル がライティングの相互作用を計算します。
ライティングモデルには、ディフューズライティングの 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);
これは、ディファードライティングパスに使用されます。
half4 Lighting<Name>_PrePass (SurfaceOutput s, half4 light);
これは、ライトプレパス (古いディファード) ライティングパスに使用されます。
すべての関数を宣言する必要はありません。ライティングモデルは、ビュー方向を使用するか、しないかのいずれかです。同様に、ライティングモデルがフォワードレンダリングでしか機能しない場合は、_Deferred
や _Prepass
関数を宣言しないでください。こうすることによって、それを使用するシェーダーは、フォワードレンダリングだけにコンパイルされます。
以下の関数を宣言して、デコードするライトマップデータとプローブをカスタマイズします。
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_)。
詳しくは サーフェイスシェーダーライティングの例 を参照してください。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.