查看原文
其他

URP系列教程 | 自定义Renderer Feature实现基于质量等级获取对应的后处理配置文件

李鹏鹏 Unity官方平台 2023-03-15
上一期课程中我们学习了,使用自定义 Renderer Feature 实现屏幕空间的镜头光晕效果,本期课程中我们将学习另一个自定义 Renderer Feature 的实用技能:实现基于质量等级获取对应的后处理配置文件。
在 URP 中除了 Pipeline Asset(管道资产) 和 Renderer(渲染器) 之外,还有其他影响游戏性能的配置。其中之一便是后处理
后处理虽然可以很大程度上提升游戏的画面质量,但是它也会耗费大量的时间,理想的情况下:我们应该按照不同的平台进行调整,但是 Unity 目前不支持按照质量水平调整后处理设置的工作流,即使有些后处理组件具有专门用于调整的选项。
使用后处理的画面效果对比(左:使用前,右:使用后)
后处理 Bloom 组件具有专门用于调整的选项

本期教程带大家实现的是:使用自定义 Renderer Feature 为每个 Renderer 注入检查当前质量级别,并基于质量级别获取 Volume Profile,然后将对应的 Volume Profile 分配给 Global Post Processing Volume(全局后处理 Volume)。

基于这种方法我们可以对项目的后处理耗费的时间得以控制。使用这种方法在 iPhone SE 和 Switch 上进行测试,效果分别为 -2ms 和 -7ms;

如何创建自定义 Renderer Feature

接下来就带大家一起来实现这个自定义的 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()
  Create()
首次加载 RendererFeature 时、当启用或禁用 RendererFeature 时、当在 RendererFeature 的 Inspector 中更改属性的时候调用;我们使用 Create() 来创建和配置所有 ScriptableRenderPass 实例。
  AddRenderPasses()
每帧、每个摄像机调用一次这个方法,我们使用 AddRenderPasses() 将 ScriptableRenderPass 实例注入到渲染器中。
除 GlobalVolumeFeature 类之外,Unity 会默认为我们提供一个名为 CustomRenderPass 的“空” Pass,后面将在 CustomRenderPass 中实现自定义的功能。之所以称它为“空” Pass,是因为展开 CustomRenderPass,其中已经内置了几个空方法;那么与 GlobalVolumeFeature 一样,Unity 在脚本运行时会调用这些方法。
  OnCameraSetup()
在执行渲染过程之前调用此方法。用于配置渲染目标及其清除状态,还可以创建临时渲染目标纹理。
  Execute()
每一帧调用来运行渲染逻辑。
  OnCameraCleanup()
在此渲染通道执行后,调用它来清理所有分配的资源。

将 RendererFeature 添加到 Renderer

现在我们就有了一个新 RendererFeature,接下来需要将它添加到 Renderer 渲染器中。
为此,在项目窗口中找到 Asset 并选择 Boat Demo Renderer。在检查器窗口中,选择添加 RendererFeature▸GlobalVolumeFeature。

以上就是本期课程的预览部分,本期课程包含了如下内容:
01  如何创建自定义 Renderer Feature
02  将自定义 RendererFeature 添加到 Renderer
03  创建 ScriptableRenderPasses 实例并进行排序
04  创建不同质量等级对应的后处理配置文件
点击阅读原文前往课程主页,解锁全部课程内容,获取案例学习资料。除此之外课程导师还为大家建立了课程学习交流群,点击阅读原文前往课程主页▸加入 URP 课程交流群,进群和“同桌”一起打卡学习。



长按关注

Unity 官方微信

第一时间了解Unity引擎动向,学习最新开发技巧







 点击“阅读原文”,前往课程主页 


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存