查看原文
其他

URP系列教程 | 使用自定义Renderer Feature实现屏幕空间的镜头光晕效果

李鹏鹏 Unity官方平台 2023-03-15

可扩展性是 URP 的亮点之一,Renderer Features 就是一个很好的例子。它支持使用 C# 脚本进行扩展,可以让我们将额外的渲染通道添加到 URP 渲染器中并配置其行为逻辑。比如在管线中配置渲染的顺序、渲染的对象或者材质等。而这正是修改管线来实现一些自定义需求的好方法。

URP 还将一些功能在 Renderer Features 中实现了模块化,如 SSAO(屏幕空间的环境光遮蔽)、Decals(贴花)和 Render Objects。

使用 SSAO 前后对比

此外,关于如何添加和使用 Render Objects Renderer Features,可以参考之前的 URP 系列教程中《URP 系列教程 | 手把手教你如何用 Renderer Featur》《URP 系列教程 | 如何使用多个 Renderer Feature 来实现角色透视效果》。本文选取了部分课程内容,点击阅读原文,即可免费获取全套课程。

自定义 Renderer Feature 实际案例展示

《自定义 Renderer Feature 进阶三部曲》中将带大家学习如何去自定义 Renderer Feature 来实现一些相对进阶的、特定的功能。那么三部曲中都有哪些内容呢?先来介绍下:

01  使用自定义 Renderer Feature 实现基于屏幕空间的 Lens Flare 镜头光晕效果。

02  使用自定义 Renderer Feature 检查当前项目 Quality Level(质量级别)并基于 Quality Level 获取对应的 Volume Profile(配置文件)(Low Quality Volume Profile、Medium Quality Volume Profile 、High Quality Volume Profile等),然后将对应的 Volume Profile 分配给 Global Post Processing Volume (全局后处理Volume),从而可以对我们游戏的后处理成本得以控制。

03  使用 Renderer Feature 实现水的焦散效果。

创建示例场景和游戏对象

首先我们通过一个简单的例子来给大家介绍下创建自定义 Renderer Feature 的步骤。

在开始之前,我们先来创建一个 URP 的工程,用于确保已经在 (Project Settings > Graphics > Scriptable Render Pipeline Settings) 正确地设置了 URP Asset。

01  接下来我们在工程中新建一个场景,并在场景中创建一个平面 Plane;

02  创建一个新的材质并为其指定 Universal Render Pipeline/Lit 着色器。将基色设置为灰色。重命名材质为 Plane;

03  接着我们创建一个点光源并将其放置在平面上方;

创建 RendererFeature C# 脚本

并将其添加到通用渲染器

创建完场景之后,那么接下来我们来创建一个 C# 脚本,并命名为 LensFlareRendererFeature

双击打开脚本,然后:
01  删掉 LensFlareRendererFeature 类中的所有代码(如下图框中所示);
02  添加 using UnityEngine . Rendering 和 using UnityEngine . Rendering . Universal 命名空间;
03  我们将 LensFlareRendererFeature 所继承 MonoBehaviour 类修改替换为 ScriptableRendererFeature 类;
04  修改完成后我们将鼠标定位到 LensFlareRendererFeature 类后面,快捷键 Alt+Enter;选择 Implement methods. 点击 OK,我们会发现在 LensFlareRendererFeature 类中出现了 Create 和 AddRenderPasses 两个方法;
Unity 在脚本运行时以预先确定的顺序调用这两个方法:
其中 Create():首次加载 RendererFeature 时、当启用或禁用 RendererFeature 时、当在 RendererFeature 的 Inspector 中更改属性的时候调用;我们后面将使用 Create() 来创建和配置所有 ScriptableRenderPass 实例。
AddRenderPasses():每帧调用一次这个方法,每个摄像机调用一次这个方法。我们将使用它将我们的 ScriptableRenderPass 实例注入到 ScriptableRenderer。
现在我们拥有了自定义 LensFlareRendererFeature RendererFeature 及其主要方法。
05  将我们创建的 RendererFeature 添加到 RendererAsset 中
首先我们在 ProjectSettings > Graphics > ScriptableRenderPipelineSetting 下点击 URP Asset。
然后在 Inspector 面板中点击 Renderer List 中的 Renderer。
在 Project 中找到对应的 Renderer 并点击,在 Inspector 面板中点击 AddRendererFeature,添加我们刚刚创建的 LensFlareRendererFeature。
那么到这里我们就创建了空的 LensFlareRendererFeature 并将其添加到渲染器 Renderer 中。



以上便是本系列教程的精选内容,点击阅读原文,即可前往教程主页,解锁全部课程内容、获取案例。





长按关注

Unity 官方微信

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





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


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

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