Table of Contents

渲染阶段

**渲染阶段(Render stages)**定义给定对象的渲染方式(通常使用其关联的效果/着色器)。它们还让你控制排序和过滤对象等高级属性。

对象可以订阅多个渲染阶段。例如,一个网格通常同时订阅 Opaque 和 ShadowCaster 阶段,或者 Transparent 阶段。

Note

渲染阶段不定义渲染顺序。渲染顺序由图形合成器控制。

效果插槽

**效果插槽(Effect slots)**决定渲染阶段使用哪个效果/着色器。你通过 @'Stride.Rendering.RenderStage.EffectSlotName' 选择效果插槽。

如果多个渲染阶段各自独占地渲染不同的对象,这些阶段可以共享同一个效果插槽。例如,由于 opaque 阶段只渲染不透明对象、transparent 阶段只渲染透明对象,这两个阶段都可以使用主效果插槽。

如果它们渲染了相同的对象,就不能共享效果插槽。这就是为什么,例如,我们通常先用主效果插槽渲染不透明网格,然后再用阴影投射者效果插槽渲染一遍不透明网格以产生阴影。

渲染阶段的典型配置:

渲染阶段 效果插槽
Opaque Main
Transparent Main
UI Main
Shadow caster Shadow caster

在渲染阶段中排序对象

@'Stride.Rendering.RenderStage.SortMode' 定义 Stride 在该渲染阶段中如何排序对象。Stride 自带多个 @'Stride.Rendering.SortMode' 实现,例如:

  • @'Stride.Rendering.FrontToBackSortMode',以有限精度从前向后渲染对象,并尽量避免在同一深度范围内切换状态(适用于不透明对象和阴影)
  • @'Stride.Rendering.BackToFrontSortMode',严格从后向前渲染对象(适用于透明对象)
  • @'Stride.Rendering.StateChangeSortMode',尽量减少状态切换

当然,你也可以自由实现自己的排序模式。

在渲染阶段中过滤对象

要为渲染阶段中的对象创建自己的过滤器,请继承 @'Stride.Rendering.RenderStageFilter'。

渲染阶段选择器

**渲染阶段选择器(Render stage selectors)**定义场景中的哪些对象被发送到哪个渲染阶段,并在渲染给定对象时选择使用哪个效果。

例如,这是网格的典型配置:

  • @'Stride.Rendering.MeshTransparentRenderStageSelector' 根据材质属性选择 Main 或 Transparent 渲染阶段。默认效果是 Stride 定义的 StrideForwardShadingEffect(你也可以创建自己的效果)。
  • @'Stride.Rendering.Shadows.ShadowMapRenderStageSelector' 选择投射阴影的不透明网格,并将它们加入 ShadowMapCaster 渲染阶段。默认效果是 Stride 定义的 StrideForwardShadingEffect.ShadowMapCaster。

两者都可以按渲染组进行过滤。

你可以自定义所有内容,因此可以添加其他预定义的渲染阶段选择器(例如在之后的全屏通道中添加 UI),或创建针对你游戏的选择器。

另请参阅