在Unity不使用URP的時候我們尚且可以通過自己寫Shader 代碼,通過兩個Pass(第一個Pass寫入深度不輸出顏色,第二個Pass正常渲染)來獲得正確的半透明效果
在這之前我們可以先來了解一下什么是不正確的半透明效果
在Unity中,如果我們的模型是不透明,或者全透明,或者半透明但是模型自身不存在遮擋關系我們都可以不去考慮這些問題。然而,事情並沒有我們想象的那么簡單和愉快
當模型自身包含遮擋關系,且要求半透明的時候,問題就來了
如圖:
兩個酒杯和酒瓶是同一個模型,且酒瓶子在酒杯的前面,但是做了半透明之后酒瓶子的視覺效果在酒杯子之前
現在我們來解決這個問題。
如題,項目是用了URP的,於是我們可以這么做:
1. Edit -> Project Settings -> Graphic
2. 在Scriptable Render Pipeline Settings 中定位當前使用的管線資源
3. 在RendererList中選擇中選擇管線資源對應的着色器(其實就是'管線資源_Renderer')
4. 點擊Add Renderer Feature -> Render Objects如圖:
5. 將物體修改層級為Tranlucent(自己命名也可)
然后打開Overrides 將出問題的物體的材質球拖拽到Material中
6. 勾選上Depth, 然后對這個新加的Renderer Feature按下圖進行設置
於是就得到了正確的遮擋關系
注:Event要選擇AfterRenderingPostProcessing
模型使用的Shader Graph 節點圖