经过快一周浑浑噩噩的学习,终于把URP相关编程内容学糊涂了。
今天是周五,反省一下,安静下来,把相关的类逐个看清楚,也许没那么难。
现在这个逻辑好像是这样的,我的理解,可能不对。
添加RenderFeature就是在渲染管线中的特定位置添加了某个渲染指令,自定义的RenderFeature继承自ScriptableRenderFeature,内部执行的是自定义的RenderPass,自定义的RenderPass继承自ScriptableRenderPass,这里先对ScriptableRenderPass里面的几个方法的执行顺序做个说明:
1、ScriptabeRenderPass构造函数肯定第一个执行。
2、其次Configure
3、然后Execute
其实中间还有很多方法要执行,这里就简化成这3个。
RenderPass里面核心的功能是添加CommandBuffer,而添加CommandBuffer使用的是ScriptableRenderContext这个对象,ScriptableRenderContext提供了常用的CommandBuffer组合,类似DrawObjects方法,同时也可以通过它的ExecuteCommandBuffer来添加自定义的CommandBuffer组合r,分别说明如下:
1、DrawObjects
这个方法是根据可视的GameObject提供的Render组件来插入渲染命令,其使用参数如下:
a、cullingResults
Rendering.CullingResults类型,要绘制的可见对象集。通常可以从ScriptableRenderContext.Cull获取此内容,这个Cull方法的参数是ScriptableCullingParameters结构体类型,这个参数可以使用Camera.TryGetCullingParameters方法来获取,其原型为
bool TryGetCullingParameters(out ScriptableCullingParameters cullingParameters)
b、drawingSettings
DrawingSettings 通过SortingSettings对象描述如何对可见物体排序,并且通过ShaderPassName来决定使用哪个Shader Pass。
c、filterSettings
FilterSettings描述如何过滤可见对象集的结构体。如果使用默认值defaultValue相当于没有任何过滤。
d、stateBlock
e、tagName
f、isPassTagName
g、tagValues
h、renderTypes
i、stateBlocks
2、ExecuteCommandBuffer
这个方法的参数只有一个CommandBuffer对象,下面对这个对象做一个介绍。
这个对象的内容超级多,休息一下,过两天再写,呵呵。