フォワードおよびディファ―ドレンダリング
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) では、フォワードまたはディファ―ドレンダリングのいずれかを使って、Lit マテリアルをレンダリングできます。Unity プロジェクトがこのうちの 1 つのみを使うように設定することも、もしくは両方を使って各 カメラ ベースでランタイムに切り替えるよう設定することも可能です。
フォワードおよびディファ―ドレンダリングの使用
フォワードまたはディファードレンダリングを Unity プロジェクトで使う前に、必ず HDRP アセット がサポートするか確認してください。その手順は以下の通りです。
- プロジェクトウィンドウで HDRP アセットを選択し、Inspector で表示します。
- Rendering セクションで、Lit Shader Mode のドロップダウンを使い、HDRP がサポートするレンダリングモードを選択します。
選べるレンダリングモードは以下の通りです。
Lit Shader Mode | 説明 |
---|---|
Forward | HDRP は個々のゲームオブジェクトをレンダリングするときに、単一パスでライティングを計算します。 |
Deferred | HDRP は画面に表示されるすべてのゲームオブジェクトのマテリアルプロパティーを GBuffer にレンダリングします。その後、HDRP はフレーム内のすべてのピクセルにライティングをプロセスします。 |
Both | フレーム設定 を使って、各かめらベースで Forward と Deferred レンダリングモードを変更します。これを選択すると、プロジェクトの ビルドタイム が増加します。 |
Both を選択すると、デフォルトで使うすべてのカメラに対するレンダリングモードを設定でき、さらにランタイムにこのデフォルトのレンダリングモードを特定のカメラでオーバーライドすることができます。例えば、平面リフレクションプローブにフォワードモードを使い、ディファ―ドモードを使うメインカメラをレンダリングできます。
デフォルトのレンダリングモードを設定するには、
- プロジェクトウィンドウで HDRP アセットを選択し、Inspector で表示します。
- Default Frame Settings For Camera > Rendering に移動し、デフォルトとして使いたいレンダリングモードを Lit Shader Mode のドロップダウンから選択します。
特定のカメラに対するレンダリングモードを編集するには、下記の手順に従ってください。
- ヒエラルキーウィンドウでカメラを選択し、Inspector で表示してから、Custom Frame Settings のチェックボックスを有効にします。
- Rendering セクションで、Lit Shader Mode プロパティの左にある、オーバーライドチェックボックスを有効にします。これにより、このカメラの Lit Shader Mode を変更できるようになり、HDRP が新しい値を使うようにします。
- カメラに使いたいレンダリング Lit Shader Mode のドロップダウン選択します。
Lit シェーダーモードの選択
フォワードまたはディファ―ドモードのどちらを使うかを決定する際は、プロジェクトで求める品質とパフォーマンスのレベルを考慮します。HDRP におけるディファ―ドレンダリングは、例えば様々なマテリアルと複数のローカルライトがあるシーンなどで、ほとんどの場合より早く処理されます。シーンに単一のディレクショナルライトがあるなど、中にはフォワードレンダリングモードの方が早い場合もあります。プロジェクトにパフォーマンスがそれほど重要でない場合は、より質の高いレンダリングを得るためにフォワードレンダリングモードを使います。
HDRP は次のシェーダータイプにフォワードレンダリングを強制します。
- Fabric
- Hair
- AxF
- StackLit
- Unlit
- Lit Shader (Transparent Surface Type)
HDRP アセットで Lit Shader Mode を Deferred に設定すると、HDRP は不透明 Lit マテリアルを使うすべてのマテリアルにディファードレンダリングを適用します。
フォワードおよびディファ―ドレンダリングは、両方とも同じ機能を実装しますが、その質には違いがあります。つまり、HDRP はその Lit Shader Mode を選んだとしても、すべての機能に作用します。例えば、スクリーンスペースリフレクション、スクリーンスペースアンビエントオクルージョン、デカール、そしてコンタクトシャドウは、ディファ―ドまたはフォワード Lit Shade Mode のいずれとも作用します。HDRP において機能が同等であることは重要ですが、技術的制約により Lit Shade Mode 間でエフェクトの質と正確性に、差が生じる場合があります。
HDRP におけるフォワードとディファ―ドレンダリングの違い
外観の違い
- Normal シャドウバイアス: フォワードモードでは、HDRP はシャドウバイアスにマテリアルの幾何学的法線 (頂点法線) を使い、ディファ―ドモードではピクセル法線を使います。つまり、フォワードモードはディファ―ドモードよりも少ないシャドウアーティファクトを生成します。
- エミッシブカラー: ディファ―ドモードでは、技術的制約により、アンビエントオクルージョンはエミッシブカラーに影響します。これはフォワードモードには当てはまりません。
- アンビエントオクルージョン: ディファ―ドモードでは、HDRP はアンビエントオクルージョンとスクリーンスペースアンビエントオクルージョンエフェクトを、間接拡散ライティング (ライトマップおよびライトプローブ) に適用します。その結果、減光が正しく行われません。フォワードモードでは、HDRP は最小限のアンビエントオクルージョンとスクリーンスペースアンビエントオクルージョンを適用し、正しく減光が行われます。
- マテリアルクオリティー: ディファ―ドモードでは、HDRP は GBuffer の法線や接線といったマテリアルプロパティ―を圧縮します。その結果、圧縮アーティファクトが生じます。フォワードモードでは圧縮がないため、圧縮アーティファクトは生じません。
技術的な違い
- HDRP はフォワードモードを使うマテリアルに対して、常に深度プレパスをレンダリングし、深度および法線バッファを出力します。これはデカールを使っていない場合、ディファ―ドモードではオプション装備になります。
- フォワードモードでは、HDRP はデカールの DBuffer パスの後に、法線バッファを更新します。HDRP はスクリーンスペースリフレクションおよびその他のエフェクトに法線バッファを使います。
ビルド時間
フォワードまたはディファ―ドレンダリングのいずれかを使うとき、HDRP プロジェクトのビルドタイムが早くなる場合があります。Lit Shader Mode を Both にする場合の欠点は、Unity が各マテリアルに 2 組 のシェーダー、つまりフォワードとディファ―ドに 1 つずつをビルドするため、プレイヤーにかかるビルドタイムがかなり増すことです。プロジェクト内のすべてにある特定のレンダリングモードを使う場合は、Both ではなくそのレンダリングモードを使って、ビルドタイムを節約してください。またこれは、HDRP がシェーダーに割り当てるメモリーサイズも軽減します。