ビルトインレンダーパイプラインでは、サーフェスシェーダは、ライティングと連動するシェーダを効率的に記述する方法です。
| 機能名 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| サーフェスシェーダー | いいえ URP でシェーダーオブジェクトを効率的に作成する方法については、Shader Graph を参照してください。 |
いいえ HDRP でシェーダーオブジェクトを効率的に作成する方法については、Shader Graph を参照してください。 |
いいえ | はい |
ライティングと相互作用するシェーダーの記述は複雑です。各種ライト、各種の影のオプション、各種レンダリングパス (フォワードやディファードレンダリング) があり、シェーダーはその複雑さを処理する必要があります。
サーフェスシェーダーは、低レベルの頂点/ピクセルシェーダープログラムを使用するよりもはるかに簡単に lit シェーダーを作成できるコードの生成方法です。
いくつかの例については、サーフェスシェーダー例を参照してください。
入力として必要な UV やデータを取得し、出力構造体の SurfaceOutput に入力する “サーフェス関数”を定義します。SurfaceOutput は、基本的に_サーフェスのプロパティ_ (アルベドの色、法線、エミッション、スペキュラーなど) を表します。このコードは HLSL で作成します。
サーフェスシェーダーコンパイラーは、どのような入力が必要であり、どのような内容を出力するかなどを把握し、実際の頂点シェーダーとピクセルシェーダーを生成するとともに、フォワードレンダリングやディファードレンダリングを処理するレンダリングパスを生成します。
現在サーフェスシェーダーの一部のコンパイルパイプラインは DirectX 11 固有の HLSL 構文を解釈できないため、StructuredBuffers、RWTextures およびその他の非 DX9 構文といった HLSL 機能を使用する場合は、DX11 専用のプリプロセッサーマクロでラッピングする必要があります。
詳細については、プラットフォーム固有の違いページおよび HLSL の使用ページを参照してください。