卡通渲染Shader By Amplify Shader Editor part.2
接續上篇.....
三、高光(Specular)
當完成漫反射陰影後,接下來就繼續高光的部分,那麼物體究竟是如何產生高光呢?
在光線射向物體時,由於物體通常不是完全光滑的表面,因此反射出來的光線會四處散射,這部份便是上篇提到的蘭伯特(Lambert)光照模型,但也是有部分光線會呈鏡向反射,當這個鏡向反射進入我們的眼睛後,就會形成高光。
所以在這邊Phong光照模型就登場了。
Phong光照模型屬於理論模型,他在Lambert光照模型的基礎上只考慮了物體對方向光的鏡面反射作用。
不過這邊就不談複雜的算式理論了,雖然前面講了一大串,但實際上Phong光照模型幾乎沒什麼再使用了,因為它耗費的運算資源相對較大。
於是效果更好,占用資源更少的Blinn-Phong光照模型便出現了。
在這邊直接把算式列出來:
Normalize(View Dir+World Space Light Dir) dot World Normal
視線方向+光線方向經過標準化(Normalize)後再點乘(dot)物體法線向量(World Normal)
標準化的理由是預防參數產生負值
所以我們有一個高光了,但是它似乎太大了,所以我們需要縮小它,這邊使用的Remap節點來完成這個任務。
縮是縮小了,但高光應該要是銳利的光源才對啊,所以這邊又要請出上篇的好幫手:step節點了。
這樣我們就有一個基礎的高光了。
之後就是依照自己的需求客製化,例如加入數值控制高光範圍,加上顏色節點來指定顏色,不希望它這麼銳利化把step換成smoothstep之類的。
Tip.
在Amplify Shader Editor其實內建了許多現成的節點可供使用,尤其是比較常用跟有名的算式幾乎都內建了,例如這節提到的Blinn-Phong光照模型便是其中之一。所以我們可以輕易地用單個節點完成複雜的運算。
例如就像這樣
四、描邊(Outline)
描邊在實作上有很多方法,舉一個最常見的做法便是將原始模型複製一個出來,稍微放大一點後再將它反轉,最後填上一個單色。
這邊要列出實際的算式跟做法的話,實在有點複雜。主要是因為在Shader裡外描邊效果通常屬於多pass寫法,而在Amplify Shader Editor裡要寫多pass的shader有其困難度。
不過幸好,外描邊是屬於相當常見的功能了,所以Amplify Shader Editor理所當然提供了現成的節點可供使用。
現在我們有了陰影、高光和外描邊,那麼就要把它合在一起了。
將陰影跟高光使用加法(add)組合起來,一個簡單的Toon Shader就完成了。
到這邊只是Toon Shader最基礎的效果而已,實際上就連上述的基礎效果其實也有許多瑕疵存在,下一篇開始將進一步完整陰影跟高光的功能性,並簡述像是邊光(rim)和頭髮高光的做法。
留言
張貼留言