レンダーステージ
レンダーステージ(Render stages) では、与えられたオブジェクトのレンダリング方法を定義します(通常、関連するエフェクトやシェーダーを使用します)。また、オブジェクトのソートやフィルタリングなどの高度なプロパティをコントロールすることもできます。
オブジェクトは複数のレンダリングステージを予約することができます。例えば、メッシュは通常、Opaque
と ShadowCaster
の両方のステージ、あるいは Transparent
のステージを予約しています。
Note
レンダーステージは、レンダリングの順番を定義するものではありません。レンダリングの順序は、グラフィックス コンポジターによって制御されます。
エフェクト スロット
エフェクトスロット(Effect slots) は、レンダーステージがどのエフェクトとシェーダーを使うのかの指定に使います。 エフェクトスロットは、EffectSlotName で選択します。
複数のレンダーステージが異なるオブジェクトを排他的にレンダリングする場合、ステージは同じエフェクトスロットを共有することができます。例えば、不透明ステージ(opaque)は不透明なオブジェクトのみをレンダリングし、透明ステージ(transparent)は透明なオブジェクトのみをレンダリングするので、両方のステージがメインのエフェクトスロットを使用することができます。
両者が同じオブジェクトをレンダリングする場合には、エフェクトスロットを共有することはできません。不透明なメッシュをメインエフェクトスロットでレンダリングし、影を作るためにシャドウキャスターエフェクトスロットで再度不透明なメッシュをレンダリングするのは、このためです。
レンダーステージの典型的な設定は次の通りです。
レンダーステージ | エフェクトスロット |
---|---|
Opaque | Main |
Transparent | Main |
UI | Main |
Shadow caster | Shadow caster |
レンダーステージでのオブジェクトの並び替え
SortMode は、Stride がそのレンダーステージでオブジェクトを並べ替える方法を定義します。Stride には、以下のようないくつかの SortMode の実装があります。
- FrontToBackSortMode は、限られた精度でオブジェクトを前から後ろに向かってレンダリングし、オブジェクトが同じ深度範囲を持つ場合にはステートの変更を避けようとします(不透明なオブジェクトや影に便利です)。
- BackToFrontSortMode は、オブジェクトを後ろから前に向かって厳密にレンダリングします(透明なオブジェクトに便利です)。
- StateChangeSortMode は、ステートの変化をできる限り減らせるように並び替えます。
もちろん、あなたが独自に実装することも自由です。
レンダーステージでのオブジェクトのフィルタリング
レンダーステージ内のオブジェクトに対する独自のフィルターを作成するには、RenderStageFilter を継承します。
レンダーステージセレクター
レンダーステージセレクター(Render stage selectors) は、シーン内のどのオブジェクトをどのレンダリングステージに送るかを定義し、オブジェクトをレンダリングする際に使用するエフェクトを選択します。
例えば、メッシュに対する典型的な設定は以下の通りです。
- MeshTransparentRenderStageSelector は、マテリアルのプロパティに応じて、
Main
またはTransparent
のいずれかのレンダーステージを選択します。既定のエフェクトは、Stride で定義されたStrideForwardShadingEffect
です(必要であれば、独自に作成することもできます)。 - ShadowMapRenderStageSelector は、影を落とす不透明なメッシュを選択して、
ShadowMapCaster
レンダーステージに追加します。既定のエフェクトは、Stride で定義されたStrideForwardShadingEffect.ShadowMapCaster
です。
どちらも、レンダーグループでフィルタリングすることができます。
すべてカスタマイズできるので、定義済みのレンダーステージセレクターを追加したり(例:後のフルスクリーンパスに UI を追加する)、ゲームに特化した独自のセレクターを作成したりすることができます。