卡通渲染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理所當然提供了現成的節點可供使用。


有現成的,就不要搞什麼燒腦袋的複雜做法了XD

小結

現在我們有了陰影、高光和外描邊,那麼就要把它合在一起了。

將陰影跟高光使用加法(add)組合起來,一個簡單的Toon Shader就完成了。

到這邊只是Toon Shader最基礎的效果而已,實際上就連上述的基礎效果其實也有許多瑕疵存在,下一篇開始將進一步完整陰影跟高光的功能性,並簡述像是邊光(rim)和頭髮高光的做法。


留言

這個網誌中的熱門文章

卡通渲染Shader By Amplify Shader Editor part.3

卡通渲染Shader By Amplify Shader Editor part.1