欢迎光临散文网 会员登陆 & 注册

URP | 后处理-自定义后处理

2022-07-28 18:18 作者:那个人真狗  | 我要投稿


URP逻辑

主要是有3个模块组成

  • Volume 模块

    这个就是后处理组件模块


  • RenderFeature渲染器模块

  • Pass模块

    是编辑后处理核心代码类。

URP管线设置后处理


<aside> 💡 创建渲染管线

找到项目中正在使用的PiplineAsset文件(在Edit->ProjectSetting->Quality->Rendering下可以找到项目正在使用的渲染管线文件),如果没有的话,新建一个Pipline Asset(Project下,右键Create->Rendering->URP->Pipline Asset),创建完成后,项目中除了PiplineAsset文件,还会多出一个Forward Renderer文件,在Forward Renderer文件中点击Add Renderer Feature,就可以添加自定义的后处理效果了。

</aside>

  • 渲染器

现在项目中没有自定义后处理效果,创建一个。

创建Volume 模块

我们调整后处理是在Volume组件调整,所以我们需要定义一个脚本把参数穿过来。

  • 新建一个脚本,命名ColorTint 继承 VolumeComponent类

  • 注意:导入的命名空间是需要注意的。

  • 效果

创建RenderFeature模块

RenderFeature模块 是用来设置Shader以及渲染大体逻辑的,

首先,新建一个继承ScriptableRendererFeature的脚本,

ScriptableRendererFeature是URP提供给用户用来扩展自定义渲染功能的入口

注意:导入的命名空间  using UnityEngine.Rendering.Universal。

这就是这个类最简单的框架结构。

  • 效果

这里我们就是把新建的类,在ForwardRenderer里增加使用。

扩展这个类里自带的俩个函数(Create 和 AddRenderPasses)是什么功能?

  • Create  Feature被创建的时候调用,初始化。

  • AddRenderPasses 每帧都会调用,渲染摄像机内容。

这里是把功能增加,没有增加任何的实际效果代码。

这里我们需要设置窗口,需要获取当前的渲染逻辑和Shader

  • 开方设置窗口

  • 创建Pass,并且初始化队列和Shader

  • 把Pass增加到渲染队列里

设置窗口

  • 定义一个 Setting的

  • 现在是设置完成,公开到界面上。

  • 效果

定义Pass

  • 定义一个Pass ,设置渲染Pass

前定义一个Pass

在Create里初始化属性, 定义一个渲染显示的名字。

注意:这里目前是前把Pass定义好,还没有引入这里。

目前只是初始化,后面我们在AddRenderPasses里更新。


执行PASS模块

  • 上面定义了渲染Pass,但是执行Pass的类还没有定义,所以报错。

    在文件下面,定义一个Pass

扩展ScriptableRenderPass这个类是什么?

这个类是可以设置渲染队列的

  • 这个类需要继承一个 Execute(执行)的方法函数

注意:必须重载一个名为Execute的方法,该方法便是逻辑执行的地方。

  • 定义需要的一些变量

  • 定义构造函数

判断一下Shader是否为空

  • 定义一个Setup函数初始化

在Pass里的算结束了,我们回到RenderFeature模块。

Create( )函数

把ColorTintPass的 初始化Pass完成

  • 上面已经制作

  • 效果

AddRenderPasses()函数

  • 注意:如果出现错误检查是否导入空间导致的。

  • 上面已经把初始化的内容传到渲染里了,我们下面开始写具体执行的内容

Execute() 函数

这里是Unity提供给我们的父类函数Execute的方法,该方法便是逻辑执行的地方。,这里我们重写Execute函数。

  • 判断材质是否为空

这里判断是否为什么空,如果为空,提示错误。

  • 判断是否开启后处理

  • 渲染设置,获取到我们的volume组件

扩展

  • 定义函数的时候 void 和 override void 的区别?

上面我们可以看到定义函数有俩种方法一种是void,另一种是 override void

void 自定义函数方法。

override void   是父里已经有这个函数,使用(override void)这个重写这个函数。 这里还有一个一种使用方法

使用 base 调用父类里的函数。


计算渲染

我们定义一个渲染函数 Render()

这里主要是获取场景渲染结果-在使用Shader进行调试输出。

扩展

#region
#endregion
语法的使用方法。 可以把一个模块合并起来查看方便

  • 渲染模块完成,在执行阶段调用渲染

Execute()函数完善

目前所有效果都完成,开始制作调色Shader

注意:Shader里的属性和渲染调用里的变量名字需要一样。

Shader部分

  • sdader就是最简单的调整颜色Shader



  • 我们目前有3个文件,俩个脚本文件,一个Shader文件。

  • 渲染组件里指定Shader,也可以设置渲染层级

  • 在Volume组件里调整 颜色,就可以看到效果了,

  • 效果

总结

  • URP后处理是有4部分组成,

    分别是渲染器(Forward Renderer)— 后处理(Volume) — Pass模块  —Shader组成

  • 脚本里主要模块

  • ScriptableRendererFeature  主要是有 设置模块(Settings)  初始化模块(Create) 执行逻辑模块(AddRenderPasses)

  • ScriptableRenderPass       有4部分  设置渲染事件(ColorTintPass)    初始化函数(Setup)     执行函数(Execute)     渲染函数(Render)


URP | 后处理-自定义后处理的评论 (共 条)

分享到微博请遵守国家法律