URP Render Underwater Transparent Objects
某天在圖學大佬的指導下,開始著手探究 URP 的渲染架構,在此記錄下一些知識點。
在一般的情況下Unity的渲染方式會依據 Shader 內的 Queue 標籤 順序渲染物件,所以在默認
狀況下,水的 Shader 是 Transparent 模式。但是這也會造成 其他 Transparent 的物件在水面下會無法顯示的情況。因此,我們可以對其渲染的機制順序做調整,來讓其餘的 Transparent 物件也能在水底下顯示。
在這裡使用了 Render Feature 功能來擴充原本的URP渲染流程。目的是讓水的渲染能在Transparent之後能才繪製,才不會造成 Transparent 物件被蓋掉的狀況。
至於水的渲染則是參考了 BoatAttack 的專案。並且對其做了些許的調整來實現效果。
從原本 Vertex 波浪效果改成單一 Plane 搭配法線貼圖的使用,降低 Vertex 的使用。
關閉原本管線的 Opaque Texture 與 Depth Texture的引用,改由從 Render Feature 增加 RT 來設置反射 Reflection 與 Depth 等貼圖,來達到 Transparent 物件也能在水面下渲染的效果。
水效果可以分為 SSS, Normal , Refraction , Reflection , Fresnel , Spec , Foam , Depth 等8種面向。
SSS:水體遇到光線造成的通透的效果。
Normal:法線。用於水的波浪與高光。
Refraction:水的折射。
Reflection:水面的反射(鏡射)。
Fresnel:菲涅耳。
Spec:高光。
Foam:邊緣泡沫。
Depth:深度。
Boat Attack: https://github.com/Unity-Technologies/BoatAttack
留言
張貼留言