手機上通常使用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 實際執行