就是跟著這影片打的:
以下是自己對(duì)語(yǔ)法的學(xué)習(xí)筆記:
展示: (我還是不懂為甚麼是倒過(guò)來(lái)的

)
先發(fā)比較短的C# 腳本。
傳參數(shù)給Shader變數(shù)可用(例如) Shader.SetGlobalFloat( shader內(nèi)宣告的變數(shù)名稱(chēng), 值);

>> 或 << 是 位元移動(dòng)運(yùn)算子。 因?yàn)槭?進(jìn)位, x << 1 等於 x * 2, x << 2 等於 x * 4。
這篇文章比較詳細(xì)。
在這裡是讓攝影機(jī)像素/ 2^_downResFacter,達(dá)到模糊感(
南部畫(huà)質(zhì)特效)。
接下來(lái)都是Shader的事情:
一開(kāi)始以為變數(shù)也要宣告在Properties,後來(lái)才發(fā)現(xiàn)若是用外部腳本傳進(jìn)來(lái)的參數(shù),是不能設(shè)成外顯的。
雖然影片中有說(shuō)COLOR的值是從SpriteRender傳入的,但我手癢把COLOR改成隨便的語(yǔ)意,例TEXCOORD都還是通,亂玩一通發(fā)現(xiàn)就POSITION不能改成其他的 (改了位置就跑掉了)。 我還要想想這是為甚麼....
拍謝註解一堆
這篇#2有對(duì)世界座標(biāo)轉(zhuǎn)換順序方法與順序做比較好的解釋?zhuān)揖妥€(gè)大概:
第一步:
o.vertex = UnityObjectToClipPos(v.vertex);
把點(diǎn)從模型空間轉(zhuǎn)到剪裁空間。剪裁空間可以想成是一種投影或screen space。
第二步:
float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
unity_ObjectToWorld是Unity內(nèi)建的轉(zhuǎn)換矩陣。
在shader中,float3會(huì)被當(dāng)成是"方向"而非"位置",需要float4的w值才是個(gè)完整的"位置"資訊。
w的概念是齊次座標(biāo)(Homogeneous Coordinate),這個(gè)影片講得還不錯(cuò)。
簡(jiǎn)單來(lái)講是用w當(dāng)成縮放值,在orthographic模式下會(huì)=1,但在透視模式下需做第59行的處理,我個(gè)人對(duì)它的理解是"深度",物體離開(kāi)、接近鏡頭時(shí)縮放用(?。
至於NDC(標(biāo)準(zhǔn)化設(shè)備坐標(biāo)),我找到
這篇的解釋?zhuān)?D的場(chǎng)景最終都要呈現(xiàn)在2D的螢?zāi)划?huà)面上,螢?zāi)坏淖鶚?biāo)就是要展示在的NDC。
第73行,tex2D(),根據(jù)
這篇#4,是回傳該uv位置上的貼圖顏色,且一定是float 4。(會(huì)自動(dòng)補(bǔ)0)。
tex2D(_MainTex,i.uv) * i.color; 意思是貼圖顏色 * sprite render的color,做到color tint
第75行,將normal map改成世界座標(biāo)
float2 offset = mul( unity_ObjectToWorld, tex2D(_OffsetTex,i.uv).xy * 2 - 1);
意思是將normalMap位移的值轉(zhuǎn)成世界座標(biāo)位移的量。 (*2-1)是將範(fàn)圍[0~1]的uv轉(zhuǎn)成範(fàn)圍[-1~1]
第77行
float4 ambient= tex2D(_AmbientTex, (i.screenuv + offset + _GlobalRefractionMag * 5 )* 2);
放進(jìn)背景貼圖,更有融入感。 後面的乘數(shù)是影片作者加的,單純讓效果好一點(diǎn)。
第78行
float4 worldRef1= tex2D(_GlobalRefractionTex, i.screenuv + offset.xy *_GlobalRefractionMag);
將相機(jī)傳入的texture放到加了位移的uv座標(biāo)上。
_GlobalRefractionMag只是個(gè)很小的乘數(shù),讓offset不要太強(qiáng)。
最後就是rgb加一加,透明度乘一乘輸出。
其中第82、83行我好奇測(cè)試screenuv和uv差在哪, screenuv會(huì)隨著自己在螢?zāi)簧弦苿?dòng)時(shí)改變,uv則是固定的。
若兩個(gè)camera重疊,則玩家物件會(huì)剛好跟倒影重疊,影片開(kāi)頭將倒影攝影機(jī)往旁邊移動(dòng)一點(diǎn)是為了讓成像的screenuv的原點(diǎn)與mainCamera錯(cuò)開(kāi)。