unity urp管線 手把手教你實(shí)現(xiàn)可交互沙漠【刻俄柏表示已經(jīng)學(xué)會(huì)了】(3)
????本篇文章主要會(huì)去實(shí)現(xiàn)曲面細(xì)分與頂點(diǎn)便宜部分。
在litshader中聲明HullShader 和DomainShader。

并給一個(gè)參數(shù)用來表示細(xì)分?jǐn)?shù)
然后在litinput中聲明一下
然后回到LitForawardPasss實(shí)現(xiàn)我們的主要功能,首先我們要確定如何細(xì)分三角面,GPU使用了四個(gè)細(xì)分因子,三角面的每個(gè)邊緣都是一個(gè)因數(shù)。
然后我們需要定義hull輸出的結(jié)構(gòu)體,這部分參考litshader的頂點(diǎn)結(jié)構(gòu)體即可
接下來是Hull函數(shù)
對(duì)于頂點(diǎn)便宜部分我們需要在DomainShader中進(jìn)行。
我們回到LitInput.hlsl文件。我們需要一張RenderTexture去記錄我們角色的腳印,先聲明一張貼圖(這里不要在Properties去聲明屬性,否則我們拿不到腳本傳入的RT)

角色在移動(dòng)時(shí)我們會(huì)用粒子系統(tǒng)發(fā)射一個(gè)粒子

我們會(huì)用紅色代表凹陷,綠色代表突起
然后我們還需要另外一個(gè)相機(jī)去渲染足跡的RT,我們?cè)俾暶鲀蓚€(gè)變量,一個(gè)記錄當(dāng)前渲染足跡的相機(jī)的位置,一個(gè)為相機(jī)的尺寸
那么現(xiàn)在我們就回到LitForwardPass.hlsl中去
先聲明Domain的結(jié)構(gòu)體
然后是Domain函數(shù)
然后我們往上看
找到

這個(gè)函數(shù)

它的輸入結(jié)構(gòu)體為我們Domain輸出的結(jié)構(gòu)體
然后完善一下我們的片元著色器
這里用到了高度轉(zhuǎn)法線的方法,為了簡(jiǎn)單我們直接抄ShaderGraph的就好