MMD聯(lián)動Unity學(xué)習(xí)筆記 Vol.48 Unity Shader Graph 節(jié)點(diǎn)解析 Position

前言
????這期我們還是跟著官方的視頻學(xué)習(xí)Unity里關(guān)于Shader Graph的內(nèi)容,這期是這個系列的第三講:Unity Shader Graph 節(jié)點(diǎn)解析(四)Position



????Position節(jié)點(diǎn)提供了一個接口來訪問模型的頂點(diǎn)信息,用戶可以通過右下角的選項框獲取對應(yīng)的坐標(biāo)空間,這個節(jié)點(diǎn)會涉及到一個很重要的概念。就是剛才提到的座標(biāo)空間。

????我們在具體深入之前,先來研究三維空間中基礎(chǔ)的坐標(biāo)空間的概念。渲染游戲的過程可以理解是把一個個頂點(diǎn)轉(zhuǎn)換到不同坐標(biāo)空間中,最終呈現(xiàn)在屏幕上的過程。在Unity中,對各個坐標(biāo)空間下頂點(diǎn)的計算會很大程度上決定最后Shader呈現(xiàn)出來的效果,在不同空間下計算的Shader效果就會有很大的不同。我們對坐標(biāo)空間的變換實(shí)際上是在兩個坐標(biāo)空間中,對點(diǎn)和矢量進(jìn)行交換,其中就會使用到Unity內(nèi)置的變換矩陣進(jìn)行計算,如圖中的MV、MVP等,實(shí)際上,最后呈現(xiàn)到屏幕前還需要把三維坐標(biāo)投射到屏幕空間中,這個過程會在講解Screen Position節(jié)點(diǎn)時具體講到。

????通常,在場景的模型中有如下幾種坐標(biāo)空間。
模型空間,以模型自身為基準(zhǔn)的坐標(biāo)空間。
世界空間,以整個場景中的世界坐標(biāo)為基準(zhǔn)的坐標(biāo)空間。在世界空間中旋轉(zhuǎn)一個模型,它本身的模型空間的坐標(biāo)是不會改變的。但它當(dāng)前的世界坐標(biāo)發(fā)生了改變。
視角空間,也叫相機(jī)空間,以相機(jī)視角為基準(zhǔn)的坐標(biāo)空間。
而切線空間由于它的特殊性,具體我們在后面研究。

????在模型空間和世界空間下的實(shí)用案例十分廣泛,一些常用的Shader都會用到相應(yīng)的坐標(biāo)空間進(jìn)行計算。

????根據(jù)我們上一期所涉及到的UV動畫原理,我們也可以單獨(dú)拆分世界空間下的坐標(biāo)為X和Y,通過Combine后輸入到Tilling And Offset節(jié)點(diǎn)中,讓頂點(diǎn)動起來。

????至于視角空間,我們最熟悉的效果就是菲涅爾現(xiàn)象了,它就是通過計算視角空間下的坐標(biāo)來保證物體邊緣始終處于發(fā)光的狀態(tài)。當(dāng)然有時候你可能需要某個效果始終追隨你的相機(jī)視角,那么也需要用到視角空間進(jìn)行計算。其它Shader也可以通過這種方式進(jìn)行計算。

????????下面我們看到比較特殊的切線空間,切線空間與視覺空間和觀察空間一樣,都是一個坐標(biāo)空間,它是由頂點(diǎn)構(gòu)成的平面UV坐標(biāo)以及表面的法線所構(gòu)成,一般用Tangent,ByTangent,Normal三個向量進(jìn)行表示,即切線,副切線,和法線。

????由于我們的法線被存在切線空間中,所以最常用的切線空間計算,就是計算模型的法線了,不過這一步Shader Graph已經(jīng)給我們做好了,只需要調(diào)用對應(yīng)的節(jié)點(diǎn)即可。根據(jù)它的特性我們可以看到,跟切線相關(guān)的計算都會圍繞著光照進(jìn)行,而改變切線計算的方式,也可以改變模型接受光照的效果,如高光等等,復(fù)雜一點(diǎn)的效果,像是各相異性的高光,如頭發(fā),絲綢等材質(zhì)的高光都是會使用到Tangent空間參與計算的。