創作內容

4 GP

Unity shader Light model - Lambert 光照模型

作者:Adisa│2019-08-12 03:01:57│巴幣:8│人氣:860
Lambert 是一種光照模型,在圖學裡常被用來處理漫反射(diffuse),許多shader的光照模型都是來自Lambert 的變化,比如此篇中的Toon shader 就是使用Lambert 來做變化的。

Lambert的數學公式就是直接把光源跟模型的表面法向量(Normal)進行內積(dot)就可以得到結果了,以unity shader的寫法就是
half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten)
{
              half NdotL = dot (s.Normal, lightDir); //s.Normal為模型的法向量,lightDir為光源
.....
}詳細寫法可以參考unity官網此篇diffuse系列的部分
若是用Amplify shader editor的做法就是把world space Light dir 與world Normal這兩個node進行內積。

▲此圖為實作一個Lambert的做法
上面的Saturate是把dot出來的值給映射到0與1之間,這跟許多shader裡面寫max (0, dot (s.Normal, lightDir));是一樣的效果,因為dot出來的值會有負的,通常的情況下不希望有負值,這個在環境光只有直射光(Directional Light)時會看不出有無Saturate到底有何影響,但若是在其他光源下比如spot 或是 point light就會看出差別了。
▲左邊是沒有Saturate,右邊是有Saturate,當只有Directional Light時看不出兩者的差異
▲當前面放著一個point light時可以明顯看出(此時沒有Directional Light),沒有Saturate的物件是一片黑

Lambert的基本變化版還有 half Lambert 以及half Lambert squared,以下為使用Amplify shader editor所實作的作法
▲half Lambert ,把dot出來的值跟一個數值進行scale與offset,以上面的例子就是(x+0.5)*0.5,x為dot出來的值
▲half Lambert squared,把上面的half Lambert 的運算出來的結果再進行平方運算。
▲從左至右依序是Lambert,half Lambert squared,half Lambert。
可以看出half Lambert squared的亮度介在Lambert與half Lambert之間。


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4492413
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity|unity|獨立遊戲|shader|Amplify Shader Editor|Light|Lambert

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

4喜歡★Adisa 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Unity Animat... 後一篇:[輕小說] 赤瞳的伊莉雅...

追蹤私訊切換新版閱覽

作品資料夾

Wannablesu晚上好
看更多我要大聲說昨天22:04


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】