MMD聯(lián)動Unity學習筆記 Vol.53 Unity Shader Graph 節(jié)點解析

前言 ???? ???? ???? ???? ????
????這期我們還是跟著官方的視頻學習Unity里關(guān)于Shader Graph的內(nèi)容,這期是這個系列的第
九期,矩陣(Matrix)相關(guān)所有節(jié)點。




????我們經(jīng)常聽到的矩陣,是一個數(shù)學概念,簡單來講就是一個由M乘N的標量數(shù)組,在Unity中,矩陣通常被用于平移,縮放,旋轉(zhuǎn)等等。

????顧名思義,這幾個節(jié)點的作用,分別是自定義一個2乘2,3乘3,4乘4的矩陣。

????除此之外,在前面幾期我們了解了Input Geometry中的實體空間,模型空間,切線空間,視角空間之間的變換,也是由矩陣計算得到的結(jié)果。

????在Transformation Matrix中,Unity本身就給我們提供了很多變換的矩陣供我們進行矩陣計算,不同于直接寫Shader時需要用代碼調(diào)用對應(yīng)的矩陣,Shader Graph在大多數(shù)情況下,只需要我們切換節(jié)點下方的模式即可。也從公式直接變回了簡單易懂的描述。

????除了Transformation中的內(nèi)置矩陣,Unity還有一 些關(guān)于轉(zhuǎn)換的內(nèi)置變量。

????當然,在內(nèi)置的變換矩陣無法滿足我們的需求時,就需要我們自定義一個轉(zhuǎn)換矩陣了,圖中的Tangent To World節(jié)點就是使用世界空間的Tangent By Tangent Normal來構(gòu)建的一個TBN變換矩陣,把Tangent空間的向量,轉(zhuǎn)換到世界空間中。

????在計算Tri-Planar節(jié)點時,除了計算物體在模型空間和世界空間下的坐標,也需要對模型在模型空間和世界空間下的Normal和Tangent進行矯正計算,保證每一個軸向上的貼圖,在旋轉(zhuǎn)后,還能保持正確的光照效果。否則,在旋轉(zhuǎn)各個方向的面時,法線也會一起旋轉(zhuǎn),所以在這里。我們使用Matrix Construction Node來構(gòu)建對應(yīng)坐標軸的旋轉(zhuǎn)矩陣。

????在構(gòu)建好XYZ軸向的旋轉(zhuǎn)矩陣后,再與三個方向的法線信息相乘,再旋轉(zhuǎn)面的時候,就能得到正確的法線了 。

????以Unity Built-in的變量為例,Unity Matrix Transpose MV是Unity MV的轉(zhuǎn)置矩陣,因為求一個矩陣的逆矩陣需要巨大的運算量,但是求一個矩陣的轉(zhuǎn)置矩陣就很簡單。所以當一個矩陣為正交矩陣的時候,通過轉(zhuǎn)置矩陣或者逆矩陣,是一個很有用的方法。

????而Unity Matrix,Inverse Transpose MV,專門用于將法線從模型空間變化到觀察空間,為Untiy Matrix的逆轉(zhuǎn)置矩陣,有同學可能會問,為什么不同Unity Matrix MV來處理法線,因為如果模型有不統(tǒng)一縮放的時候,用Unity Matrix MV會造成方向失真。

????而Matrix Determinant節(jié)點,行列式是數(shù)學中的一個函數(shù),將一個N乘N的矩陣a,映射到一個標量中,一般用來求解矩陣,Shader中使用的情況比較少。感興趣的同學可以自行深入了解。