在 URP 中除了 Pipeline Asset(管道资产) 和 Renderer(渲染器) 之外,还有其他影响游戏性能的配置。其中之一便是后处理。后处理虽然可以很大程度上提升游戏的画面质量,但是它也会耗费大量的时间,理想的情况下:我们应该按照不同的平台进行调整,但是 Unity 目前不支持按照质量水平调整后处理设置的工作流,即使有些后处理组件具有专门用于调整的选项。使用后处理的画面效果对比(左:使用前,右:使用后)本期教程带大家实现的是:使用自定义 Renderer
Feature 为每个 Renderer 注入检查当前质量级别,并基于质量级别获取 Volume
Profile,然后将对应的 Volume Profile 分配给 Global Post
Processing Volume(全局后处理 Volume)。
基于这种方法我们可以对项目的后处理耗费的时间得以控制。使用这种方法在 iPhone SE 和 Switch 上进行测试,效果分别为 -2ms 和 -7ms;接下来就带大家一起来实现这个自定义的 Renderer Feature。点击阅读原文或直接访问以下链接前往课程主页,在课程主页▸教程资料中获取示例 Boat Attack 项目,示例使用版本为 Unity 2021.3.4。
https://learn.u3d.cn/tutorial/CustomRendererFeatureTutorials02
接着在示例项目中 Asset▸Effects 目录下创建 URP Renderer Feature,并重新命名为 GlobalVolumeFeature;
双击 .cs 脚本,我们发现 Unity 已经内置了一些方法和类;从脚本代码可以发现:创建的 GlobalVolumeFeature 类派生自 ScriptableRendererFeature 类,另外在创建的 GlobalVolumeFeature 类中已经默认添加了两个方法 Create() 和 AddRenderPasses();首次加载 RendererFeature 时、当启用或禁用 RendererFeature 时、当在 RendererFeature 的 Inspector 中更改属性的时候调用;我们使用 Create() 来创建和配置所有 ScriptableRenderPass 实例。每帧、每个摄像机调用一次这个方法,我们使用 AddRenderPasses() 将 ScriptableRenderPass 实例注入到渲染器中。除 GlobalVolumeFeature 类之外,Unity 会默认为我们提供一个名为 CustomRenderPass 的“空” Pass,后面将在 CustomRenderPass 中实现自定义的功能。之所以称它为“空” Pass,是因为展开 CustomRenderPass,其中已经内置了几个空方法;那么与 GlobalVolumeFeature 一样,Unity 在脚本运行时会调用这些方法。在执行渲染过程之前调用此方法。用于配置渲染目标及其清除状态,还可以创建临时渲染目标纹理。将 RendererFeature 添加到 Renderer
现在我们就有了一个新 RendererFeature,接下来需要将它添加到 Renderer 渲染器中。为此,在项目窗口中找到 Asset 并选择 Boat Demo Renderer。在检查器窗口中,选择添加 RendererFeature▸GlobalVolumeFeature。以上就是本期课程的预览部分,本期课程包含了如下内容:01 如何创建自定义 Renderer Feature02 将自定义 RendererFeature 添加到 Renderer03 创建 ScriptableRenderPasses 实例并进行排序点击阅读原文前往课程主页,解锁全部课程内容,获取案例学习资料。除此之外课程导师还为大家建立了课程学习交流群,点击阅读原文前往课程主页▸加入 URP 课程交流群,进群和“同桌”一起打卡学习。
长按关注
第一时间了解Unity引擎动向,学习最新开发技巧