# 说明
在 URP 中 Unity 通过定义
RenderFeature来编写自定义后处理效果,实现SRP渲染管线。
Error: Evaluation failed: TypeError: Cannot read property 'initialize' of undefined
at __puppeteer_evaluation_script__:3:32# Step1 编写后处理 Shader
# Setp2 编写 Render Feature
# Render Feature
Render Feature 是一个处理集,继承自
ScriptableRendererFeature,可以包含多个 Render Pass。
public override void Create()
用于在 RenderFeature 创建时调用,一般在这里进行使用到的 RenderPass 的初始化操作。
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
用于指定渲染队列信息,通过 renderer.EnqueuePass(renderpass) 方法来将 renderpass 加入渲染队列。
# Render Pass
RenderPass 类似于 ShaderPass,是一块处理单元,通过继承
ScriptableRenderPass, 实现生命周期和处理行为。
Error: Evaluation failed: TypeError: Cannot read property 'initialize' of undefined
at __puppeteer_evaluation_script__:3:32public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)用于初始化 RenderPass,完成基础操作。
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)用于处理 Pass 逻辑。
public override void OnCameraCleanup(CommandBuffer cmd)用于进行收尾操作,释放资源等。
# Setp3 编写 Volume Component
创建一个类继承自 VolumeComponent , 实现 IPostProcessComponent 接口。
定义 VolumeComponentMenu 菜单路径。
[Serializable, VolumeComponentMenu("MyPost-processing/Translation")] | |
public class TranslationEffect : VolumeComponent, IPostProcessComponent | |
{ | |
[Range(0.0f, 1f)] public FloatParameter width = new FloatParameter(0.5f); | |
[Range(0.0f, 1f)] public FloatParameter height = new FloatParameter(0.5f); | |
[Range(0.0f, 1f)] public FloatParameter scale = new FloatParameter(0.5f); | |
public Vector2Parameter viewport=new Vector2Parameter(new Vector2(0.5f,0.5f)); | |
public bool IsActive() | |
{ | |
return scale.value >= 0f; | |
} | |
public bool IsTileCompatible() | |
{ | |
return false; | |
} | |
} |
PS:书写参数时,必须使用经过保证的参数类型,如 Float 应该使用 FloatParameter 类型代替。
# Setp4 编写控制脚本
# 参考资料
- 【鸡丝菌的 ShaderGraph 小教室】动物森友会转场效果的实现_哔哩哔哩_bilibili
- Unity - Scripting API: ScriptableRenderContext (unity3d.com)
- URP 自定义后处理 - 知乎 (zhihu.com)
- 如何扩展 Unity URP 的后处理 Volume 组件 - 知乎 (zhihu.com)
- URP 系列教程 | 如何使用 Scriptable Renderer Feature 来自定义后处理效果 - 知乎 (zhihu.com)

