促使我學習SHADER的重要原因是希望深入理解3D渲染的機制,在此基礎上可以靈活達到某種效果與效能的平衡,開發出具有良好體驗的VR應用。
因為VR應用體驗的好壞,直接由遊戲的幀率決定,而遊戲的幀率則受到渲染一幀畫面所花時間的影響,因此如何提升渲染時間,而又可以得到期望的效果,必須要對SHADER或者說渲染機制有深入的理解。
一、在U3D中,shader是什麼?shader即“著色器”,我們之所以能夠看到螢幕上豐富多彩的3D畫面,正是得益於它。U3D中與shader相關的概念以及它們同shader間的關係如下圖所示:
當你閉上眼睛,或是關掉房間中的燈時,你前面的物體都看不見了,但是,這個物體仍然是在那裡的,它不會因為你看不見它而消失,從這個角度來說,物體即具有它的自有屬性,正如上圖中的meshfilter部份,這個物體有自身的“骨架”,同時,這個物體也有自身的表面材質,因此,可以說,物體的自有屬性即是“骨架”+“表面材質”。
正是由於不同的物體都有各自的“骨架”和“表面材質”,這樣在我們開啟燈光時,我們才會看到不同的物體。
在我們觀察周圍的世界時,我們會看到很多現像:
1、同一個場景下,當光線越強時,物體也越明亮,當光線顏色發生變化時,我們看到的物體表面顏色也發生了變化;
2、同一個場景下,同一盞燈下面,有些物體表面是光滑的,有明顯的高光,而有些物體表面是粗糙的,看起來很柔和;
等等多種不同的視覺現像。。。
那麼這些我們最終看到的畫面,則是在光線照射到物體表面後反射光線進我們的眼睛造成的。具體來說就是物體上每一個點的反射光進入我們的眼睛,經由我們的大腦的綜合處理,就形成了一個物體的形像。
其實綜上所述,可以認為:從微觀上看,計算出物體上的每一個點的反射光線的顏色和強弱就是shader要做的事情