企業(yè)級(jí)游戲開(kāi)發(fā)筆記3-法線貼圖
在開(kāi)始法線貼圖之前,先糾正上一節(jié)的錯(cuò)誤。在Built-In管線里面我們獲取環(huán)境光可以用UNITY_LIGHTMODEL_AMBIENT.xyz, 直接在URP中使用不會(huì)報(bào)錯(cuò)但是并沒(méi)有起作用。查資料之后發(fā)現(xiàn)可以用_GlossyEnvironmentColor代替,或者是使用SampleSH(NormalDir)可以起到同樣的作用,具體計(jì)算方式可以查看SampleSH的定義。

一段時(shí)間以內(nèi)對(duì)于法線貼圖的理解都存在偏差,這里重新梳理一下,左圖是存在模型空間下的法線紋理,很容易觀察到模型空間下的紋理顏色有很多種,這是因?yàn)槟P偷姆ň€方向各異,從(0,-1,0)到(0,1,0)經(jīng)過(guò)映射(映射到0-1的范圍內(nèi))就變成了不同顏色。而切線空間下的法線紋理基本都是藍(lán)色,原因是切線空間下存儲(chǔ)的不是絕對(duì)法線位置,而是相對(duì)偏差,因?yàn)榇鎯?chǔ)的法線在各自的切線空間中,如果這個(gè)點(diǎn)沒(méi)有法線變化那么他的默認(rèn)值就是(0.5,0.5,1)呈現(xiàn)淺藍(lán)色的狀態(tài)。可想而知,模型空間下的法線紋理只能夠用于創(chuàng)造紋理時(shí)的模型,否則的話會(huì)呈現(xiàn)出錯(cuò)誤的狀態(tài),而且切線空間下的法線紋理則可以復(fù)用,還可以進(jìn)行uv動(dòng)畫(huà)。
對(duì)于法線貼圖的實(shí)際運(yùn)用,可以采用兩種方式,第一種把存儲(chǔ)法線轉(zhuǎn)到世界坐標(biāo),需要我們自己計(jì)算切線空間到世界的轉(zhuǎn)換矩陣,即世界空間下的切線,副切線,法線構(gòu)成的矩陣。第二種可以把光照方向,視角方向轉(zhuǎn)到切線空間下,在切線空間下計(jì)算相應(yīng)的光照結(jié)果。
這里是把切線空間轉(zhuǎn)法線的做法
主要講一下新的GetVerTexPositionInput和GetVerTexNormalInput方法,前者可以快速得到頂點(diǎn)位置屏幕空間坐標(biāo)和世界空間坐標(biāo),后者可以得到法線,切線,副切線的世界空間坐標(biāo),還是比較方便。
