URP 渲染順序設置 RenderObjects

如下圖,URP默認Shader的設置中,已經沒有了以往的Render Queue的設置。

   

那麼我們要如何來控制渲染順序呢?

我們先簡單的搭建一個測試場景,在場景中創建兩個Cube,使其位置重疊,將其中一個命名爲RedCube。然後新建一個默認的Material(即shader爲URP/Lit),設置Base Map的顏色爲紅色,將該material掛到RedCube上即可。

如上圖,按照默認的渲染順序我們只能看見灰色的方塊。

 

Priority屬性

在Material中有一個名爲Priority屬性,修改其值可以來改變material的渲染順序,值越小,渲染的越晚。

我們將RedCube的Priority值設置爲-1,可以發現我們可以看見紅色小塊了,因爲其渲染在灰色小塊的後面。

這麼簡單?No!

當我們把紅色小塊往後移一點,發現攝像頭變得依舊只能看見灰色小塊了。因此Priority屬性似乎只有在深度測試(Z Test)相同的情況下才能起到效果。

 

Render Objects

使用URP後,會在Project Settings的Graphics關聯一個URP的asset文件,在其Renderer List中,會默認關聯一個Forward Render的asset文件,其內容如下。

  

在Renderer Features中點擊小加號,添加一個Render Objects,在這裏我們就可以進行一些渲染上的處理了。

Event 可以設置在Render的哪個階段觸發效果
Queue 設置影響的是不透明物體還是透明物體
Layer Mask 設置影響的Layer層
Depth 開啓後可以設置深度寫入和深度測試
Camera 重新設置camera效果

此時我們Layer Mask選擇Default,勾選Depth,Depth Test選Disabled(關閉深度測試),如下左圖

    

此時的效果圖如上右圖,攝像機可以看見紅色方塊,但是有莫名其妙的黑影,這其實是灰色小方塊的陰影。將小方塊的Case Shadows選爲Off,此時顯示就正常了,紅色方塊顯示在了前面(注意紅色方塊的Priority依舊要低於灰色的)

 

拓展

我們此時再新建一個material,取名GreenAlphaPanel,將其Surface Type選爲Transparent,Blending Mode爲Alpha這樣就可以通過調整Base Map顏色的透明度影響物體的透明度。然後我們在紅色方塊下面添加一個Panel,設置合適的大小,並使用我們前面的GreenAlphaPanel。同時適當的放大灰色小塊,方便測試。由於我們期望的效果是紅色方塊現在在最前面,然後是綠色的面片,最後是灰色大塊,因此它們三個的Priority值應該是紅色<綠色<灰色。效果圖如下

    

可以發現我們的綠色面片並沒有和紅色小塊一樣顯示在前面,這是因爲我們之前的設置隻影響不透明物體,因此我們需要再新建一個RenderObjects來影響透明物體,效果如下

  

可以發現雖然綠色的透明面片顯示出來了,但是卻覆蓋了紅色方塊,因此我們還需要調整一下設置。由於現在三個物體的Layer都一樣,防止相互影響,我們新建一個Layer層名爲Building,將紅色方塊和綠色面片設置爲該Layer。由於默認情況下,透明物體會在不透明物體後面渲染,因此我們要讓不透明的紅色方塊渲染在透明的綠色面片之後的話,需要修改其Event,使其在透明的設置之後,例如選擇After Rendering Transparents。最終效果如下:

        

 

更多知識點還需後續研究補充。

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