卡通渲染Shader By Amplify Shader Editor part.3
五、光顏色、光強度、光衰弱 上一篇我們使用了 Lambert光照模型,得到了Toon Shader基礎的影子,同時也提到了這個Shader是有瑕疵存在的。 由於 Lambert光照模型只用來計算的方向性,但在一個遊戲場景裡面,光絕對不可能只有方向這個要素。最基本的來說,一般光線同時還具有顏色、強度及衰弱這3個要素。 光顏色跟光強度就不用提了,而光衰弱除了紀錄了點光和投射光的強弱訊息外,還影響了其他物件投射在該物體上影子的有無。 所以為了解決這個問題,我們得再從ASE導入光顏色及光衰弱這2個節點。 在ASE裡,光顏色和光衰弱都包含了光強度的資訊。 把這2個節點插入之前的漫反射的區塊內,為了讓畫面單純一點,先把Outline跟 Specular拿掉了。 那麼馬上就可以來看看效果如何。 看樣子該有的效果都出現了,那麼就可以把 Specular加回去了,但再加回去之前我希望 Specular也可以受到投射影子的影響。因此同樣要把光衰弱節點放進去 Specular的區塊內。 在 Specular裡面我沒有把插入光顏色的節點,是因為我認為高光不需要受到環境光的影響,當然如果認為有其必要性,只要在最後乘上光顏色的節點就好了。 到這裡為止,其實已經非常符合一般Toon Shader的使用需求了,只要加上邊光等等的效果其實就有模有樣了。如果我們還想再更進一步呢?例如場景裡還有除了定向光( Directional Light )以外的其他光源呢? 我們先來看一下,目前的節點碰上了點光源( Point Light) 會發生什麼事。 為什麼會這樣子?主要原因有2個: 1. 在上面的節點中我們將光衰弱接在 Lambert之後,smoothstep之前,step節點會把我們設定的數值為基準將數據只區分成0與1來輸出,所以就算光衰弱節點帶出了其他的訊息,經過step後也沒有意義了。 那為什麼上面要這麼接呢?因為上面的案例中,我們只用到了定向光 ( Directional Light ) ,定向光不會衰減,永遠只有固定的強度,我們用了光衰弱只為了偵測該物體有沒有受到其他投射物的影子所影響,有影響就是0沒影響就是1,無論有沒有...