URP后处理的实现:RenderFeature


RenderFeature

之前看入门精要写了一些shader,最近在看URP的时候发现在Buildin里面有些地方是很不一样的,首先URP的光照是单pass,然后shader是用HLSL写的,最大的不同是URP的后处理思路,它不再提供OnRenderImage方法,后处理被提到了专门的Volume框架里面,如果要自己写自定义的后处理效果,要使用RenderFeature去实现,它可以随意插入Render队列中。

主要的思路是:

首先新建一个类,它继承自ScriptableRendererFeature,这里定义的是pass的基本设置,可以定义要创建的pass的初始设置比如各种attachment,passEvent等。它有两个必须要重写的方法:

Create和AddRenderPasses,在Create方法里面会实例化定义好的pass类,它在每一帧都会执行,可以在这里面初始化我们用到的pass,材质,渲染顺序等。在AddRenderPasses里面就使用EnqueuePass这个API去把这个pass插到renderer里面去。

然后就是一个具体的pass类,它继承自ScriptableRenderPass,一般会使用一个构造函数在这里得到要插入的渲染队列时间以及创建需要的材质。在这个类里面必须要实现的是一个Excute方法,里面就是具体的渲染逻辑,在这里就可以使用和buildin一样的方法去做后处理,即使用commandbuffer的Blit方法用指定的材质去做后处理。


Author: cdc
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source cdc !
  TOC