手机上通常使用URP
URP 拥有一个ForwardRenderer, 用于管理整个渲染流程
渲染分为多个Pass, 每个Pass渲染的时候需要设置 Color Depth Target, 同时需要指定是否需要将 RenderTexture数据 写入到 TiledGPU的高速缓存中,是否需要将高速缓存数据写会到RenderTexture中
这种写入写会 通常消耗比较大
URP有自己的渲染顺序控制,以RenderPassEvent定义
通常顺序 先执行 MainLight的ShadowPass
接着Opaque 天空盒 Transparent PostProcess
Opaque结束后,可能拷贝Color 和深度, 用于Transparent部分的水渲染
默认绘制通过 DrawObjectsPass 执行,输出到CameraTarget中
每个Pass配置有自己需要输出到的Color和Depth Target
如果Pass的Target和当前Tiled相同,则不做操作,否则,如果是非ClearColor 则需要Load,否则DontCare,不需要加载Color和depth RenderTexture
但是最后都需要执行Store将结果写回
如果需要访问颜色和深度数据,现在的实现是需要做一次拷贝
如果采用TiledGPU的subpass技术可以减少复制数据的次数
https://developer.arm.com/documentation/101897/0200/fragment-shading/multipass-rendering
URP整体流程
UniversalRenderPipeline -->执行 FowardRender -->执行每个 RenderPass
RenderFeature 添加RenderPass 到 ForwardRender 中
每个RenderPass 可以配置RenderTarget
实现基于 CommandBuffer , 提交到RenderContext内部
当RenderContext Submit时相关的Command 实际执行