unity之自制玻璃啤酒瓶shader


客戶的要求如下

步驟:

1.進行玻璃瓶效果分析

效果如下:高光,類次表面散射(里層通透而外層較為暗淡),外層白色勾勒輪廓。

 

高光:unity內部提供光滑度參數,越光滑則高光效果越明顯,啤酒瓶材質是屬於光滑,高光明顯,可用下面的公式:

o.Smoothness = _Glossiness;

 數值可控制在0.9附近。

 

外層白色輪廓描邊:

描邊效果很常見,只要獲取物體的外邊緣再加上自發光系數就可以做個很好的描邊效果了

half rim = 1.0 - saturate(dot (normalize(IN.viewDir),IN.worldNormal));
//邊緣顏色強度 越大反而越不可見,線條越細
//變淺,每個UV上的RGB*對應的norml與視覺的夾角
o.Emission = _RimColor.rgb * pow (rim, _RimPower);

與視角的范圍平行,dot兩向量則為1,rim值越小越接近0,垂直,dot兩向量為0,rim值越大越接近1。

然后用pow階乘,放大效果。這個學過極限的話及很容易明白,x-0,則階乘指數越大則數越小,越趨向於0,反之則越接近於1

 

次表面散射:光射入非金屬材質后再內部發生散射,最后射出物體並進入視野中產生的現象,是指光從表面進入物體經過內部散射,然后又通過物體表面的其他頂點出射的光線傳遞過程。

而在這里我使用了視覺假象來完成就是在中間的為亮面,邊緣的為暗面,直接用兩種顏色進行過渡了,核心公式為:

fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
half rim = 1.0 - saturate(dot (normalize(IN.viewDir),IN.worldNormal));

o.Albedo = lerp(_SubColor.rgb, c.rgb, rim);

 

 

 

先算出邊緣的數值rim,然后利用rim來進行次表面顏色和主顏色的過度,這樣就可以很好的制造出次表面的現象,當然這是一種取巧的做法,貌似還有更好的做法等着我去研究。

 

 路還很遠,這次感覺還有很多做的不好的地方,如果有不對的地方歡迎指出,我還是圖形學的新手。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM