主題

【Shader學習筆記】波紋(x

趴趴鼠Loading | 2021-02-21 04:44:43

波紋效果:

完全看著這篇學的,程式碼解釋也都在裡面,這篇單純是我做的其他延伸的筆記而已。



照著上面文章打的程式碼:

19行: ZWrite Off  關閉深度寫入
引用自這篇文章:《透明度混合(Alpha Blending)使用當前片元的透明度作為混合因子,與已經存儲在顏色緩衝中的顏色進行混合,得到新的顏色,不過透明度混合必須要關閉深度寫入(Zwrite)》。
讀完概念對我來說還是很抽象,不過找到這篇附上許多實驗,比較好懂。 (還有這篇講做Xray效果的,還沒看完。)

綜合以上文章,大概可以整理出:
  • 要進行透明度混合需關閉ZWrite,但不會關閉ZTest。
  • Shader 預設是 ZTest LEqual 和  ZWrite On。
    • 越靠近攝影機的深度值越小, ZTest LEqual代表小"讓深度值小於等於的通過",也就是讓在前面的物體通過,若ZWrite On的話,前面物體的顏色就會取代本身的顏色 (緩衝區)。
  • 系統中有顏色緩衝區與深度緩衝區。

*額外補充這篇,因為網頁好像死圖了所以沒仔細看完,但有趣的是其中一行:
ZTest[unity_GUIZTestMode]

快速翻個解釋(來源):《ZTest [unity_GUIZTestMode] is used in some built-in UI shaders and is set depending on the Canvas type just before a Canvas is rendered.》

((之後慢慢看~ ((逃



20行: Blend SrcAlpha OneMinusSrcAlpha

翻到這篇很好懂。
簡單整理是:
Blend後面除了Off,需填入兩個參數:Blend [來源係數] [目標係數]
這裡的SrcAlpha 代表來源Alpha值,OneMinusSrcAlpha代表目標輸出 1-SrcAlpha 。

有興趣的可以都去嘗試一下,例如: Blend SrcAlpha OneMinusDstColor      (使用來源Alpha,並做負片效果)


第57行:  float2 uvCoord=_MainTex_ST.xy*0.5;
_MainTex_ST.xy代表Tiling,*0.5代表中間點。
不乘0.5會變成扇形,滿有趣的XD




第61行:  clip(uvCoord-uvDis);
對於Clip的定義,這篇寫到:《如果給定參數的任何一個分量是負數,就會捨棄當前像素的輸出顏色。》
有點像是迴圈的"Continue"用法。
所以在程式碼裡面:fixed uvDis=distance(i.uv,uvCoord); 取得與中間點的半徑距離,再Clip就能把半徑外的部分裁掉。

不Clip的:



其他:
我上面那張桐人是Sprite而非plane,若想套用Sprite本身的Color屬性的話,在結構內加入COLOR。

結果:

另外有趣的是:
左下圓形(Plane物件)與桐人(Sprite)都是用同個材質球,但Sprite的sprite會自動取代材質球的MainTex設定,所以兩個呈現不同的Texture。 不太確定是為甚麼,但滿有趣的。



雜紀:
覺得自己太廢了趕緊來學個什麼也好。

雜紀2:
YA!   下周末要出遊~去ㄩ泡(溫泉)XD

137 巴幣: 114

創作回應

悠閒紅茶(冷卻中)
這是,星爆的味道!?
2021-02-21 06:11:06
趴趴鼠Loading
大便圖下載太多XD
2021-02-22 23:13:58
追蹤 創作集

作者相關創作

更多創作