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

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



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

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

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

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

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

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

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

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