Custom Pass Volume 工作流程
Custom Pass Volume 的工作流程与 HDRP 体积 (Volumes) 框架类似。但是,两者之间存在以下差异:
- 无法混合多个 Custom Pass Volume,但可以使用 Custom Pass Volume 组件 中的 Fade Radius 在它们之间淡入淡出。
- Unity 将自定义通道数据存储在游戏对象上,而不是项目中的资源上。
- 如果场景中多个 Custom Pass Volume 具有相同的注入点,Unity 将按优先级顺序执行这些体积。
要创建影响场景中每个摄像机的 Custom Pass Volume,请将 Custom Pass Volume 组件的 Mode 设置为 Global。要创建仅影响体积边界内部摄像机的 Custom Pass Volume,请将 Custom Pass Volume 组件的 Mode 设置为 Local。
可使用 Priority 字段来确定场景中多个 Custom Pass Volume 的执行顺序。如果两个 Custom Pass Volume 具有相同的优先级,Unity 将通过以下方式之一执行它们:
- 当两个 Custom Pass Volume 均为 Global 时,执行顺序是不确定的。
- 当两个 Custom Pass Volume 均为 Local 时,Unity 先执行具有最小碰撞体的体积(忽略淡化半径)。如果两个体积具有相同的碰撞体大小,则顺序是不确定的。
- 当一个 Custom Pass Volume 为 Local,另一个为 Global 时,Unity 先执行 Local 体积,然后执行 Global 体积。
如果 Custom Pass Volume 的 Mode 设置为 Local,则可以使用 Custom Pass Volume 组件中的 Fade Radius 属性来平滑正常渲染和自定义通道之间的过渡。淡化半径值以米为单位,在变换分配到的对象时不会缩放。
下图将淡化半径的外边界可视化为线框。此图中的 Custom Pass Volume 有一个 Box Collider 组件用于可视化体积。
使用 C# 更改淡化半径
要在代码中更改淡化半径,可使用着色器中内置的 _FadeValue
变量以及 C# 脚本中的 CustomPass.fadeValue
。这些变量的有效缩放范围是 0 - 1,代表摄像机距碰撞体包围体的距离。要了解更多信息,请参阅用 C# 编写你的自定义通道脚本。