企業(yè)級游戲開發(fā)筆記,URP卡通水體復盤

懶得去找合適點的法線紋理和噪聲圖,效果比較簡陋,這里主要是復盤一下實現(xiàn)過程。
VS部分:
噪聲擾動
模擬水波紋效果,要對UV進行一個偏移,同時給頂點加上適當?shù)钠谱屗娌荒敲雌皆黾右稽c真實感
這里用一個vector4來表示相關的UV縮放,流速,以及擾動強度等等
然后混合擾動1和擾動2在法線圖上取值,根據(jù)取得的結果偏移頂點
光照部分由bilingphong+fresnel+lambert組成,這里不多講。
主要說一下深度圖應用部分,為了模擬海水隨深度顏色變深,以及漂浮物周圍的泡沫,我們需要獲取到深度圖。一般來說要把tag設置成transparent來避免水體被寫入深度圖。獲取深度圖前需要保證URP設置中打開了Depth texture和Opque texture或者在相機中設置也可以,這里提一嘴unity2021.3.1.6f1c1不知道為什么深度圖的設置有點問題怎么都獲取不了,切換版本之后就正常了。
這里有個坑,齊次裁切必須要frag里面才可以,否則的話深度圖的獲取也會有問題。區(qū)別如下,具體原因也不知道為什么。


然后我們可以通過_CameraDepthTexutrue獲取深度圖,添加
可以省略_CameraDepthTexture和sampler_CameraDepthTexture的聲明。
這個獲取到的值就是不透明物體的深度,此時我們的水面深度可以用屏幕坐標的w分量獲取

一張生動的示意圖來表示,Depth-Scrpos就是此時視線所看的點的深度,根據(jù)這個深度我們插值返回淺水顏色和深水顏色即可。

物體的邊緣,也就是深度比較淺的地方就應該出現(xiàn)泡沫效果,那么我們把深度比(深度/最大深度)和泡沫噪聲圖的采樣作對比,噪聲圖大直接返回泡沫顏色,反之返回之前的到水體顏色。
差不多就這樣,有空搞一個shader graph還原。
賣家秀,代碼來源Samlee2023
