unity SRP手机渲染

手机上通常使用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 实际执行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章