欧美bestiality变态人禽交,日韩综合夜夜香内射,暗交小拗女一区二区三区,国产永久精品大片WWWAPP

影晨文化:什么是法線貼圖及它們是如何工作的

最近一直在研究法線映射的問題,所以通過Carlos Lemos的一系列關(guān)于法線的文章來加強(qiáng)一下大家的理解。

 

多年來,我一直在努力理解法線映射以及在使用法線映射過程中通常出現(xiàn)的問題。我發(fā)現(xiàn)大多數(shù)的解釋通常都過于技術(shù)性、不完整或難以理解,不符合我的口味,所以我決定嘗試一下,解釋一下我收集到的信息。

 

 

1
法線(Normals)

 

 

 

 

 

最初的3D模型看起來像這樣:

 

 

這很好,但它有一個(gè)明顯的局限性:它看起來太多邊面了。

 

 

第一個(gè)明顯的解決方案是添加更多多邊形,使曲面更加均勻和平滑,直到多邊形看起來像一個(gè)單一的平滑曲面。事實(shí)證明,這需要大量的多邊形,才能使球體等曲面看起來平滑。

 

 

需要另一種解決方案,于是法線的概念就誕生了。

 

 

讓我們從一個(gè)多邊形的中心畫一條線,完全垂直于它的表面。我們將這一條線稱為一個(gè)令人困惑的名字:法線。該法線的目的是控制曲面指向的位置,以便當(dāng)光線從該曲面反彈時(shí),它將使用該法線計(jì)算產(chǎn)生的反彈。當(dāng)光線擊中多邊形時(shí),我們比較光線與多邊形法線的角度。光線將使用與法線方向相同的角度反彈回來:

 

 

換句話說,光線反彈相對(duì)于多邊形法線來說是對(duì)稱的。這就是大多數(shù)反彈在現(xiàn)實(shí)世界中的工作方式。默認(rèn)情況下,所有多邊形都會(huì)反射完全垂直于其曲面的光線(就像在現(xiàn)實(shí)生活中那樣),因?yàn)槟J(rèn)情況下,多邊形法線是;垂直于多邊形表面。如果法線中有間隙,我們會(huì)將它們視為單獨(dú)的曲面,因?yàn)楣饩€會(huì)在一個(gè)方向或另一個(gè)方向上反彈。

 

 

現(xiàn)在,如果我們有兩個(gè)連接的面,我們可以告訴計(jì)算機(jī)平滑一個(gè)多邊形法線到另一個(gè)多邊形法線之間的過渡,使法線逐漸與最近的多邊形法線對(duì)齊。這樣,當(dāng)光線直接擊中一個(gè)多邊形的中心時(shí),光線將沿著法線方向直線反彈。但是在面之間,法線方向是平滑的,彎曲了光的反彈方式。

 

 

我們將把過渡視為一個(gè)單一的表面,因?yàn)楣饩€將以平滑的方式從一個(gè)多邊形反彈到另一個(gè)多邊形,并且不會(huì)有間隙。實(shí)際上,光線從這些多邊形平滑反彈,效果就會(huì)像它有大量多邊形時(shí)一樣。

 

 

這就是我們?cè)谠O(shè)置光滑組(3ds Max、Blender)或?qū)⑦呍O(shè)置為軟硬邊(Modo、Maya)時(shí)所控制的:我們告訴程序哪些面之間的過渡需要平滑,哪些面之間的過渡需要硬轉(zhuǎn)折。

 

 

下面是同一個(gè)球體的比較,它具有堅(jiān)硬和平滑的過渡,都具有288個(gè)多邊形:

 

 

我們可以設(shè)置一個(gè)類似于長(zhǎng)方體的東西,使其所有頂點(diǎn)都具有平均法線。3D軟件將嘗試平滑其表面,使其看起來像一個(gè)單一的平滑表面。這對(duì)于3D程序來說非常有意義,但它看起來非常奇怪,因?yàn)槲覀冇幸恍〇|西應(yīng)該有幾個(gè)單獨(dú)的表面(比如盒子的每個(gè)面),但程序試圖將其顯示為一個(gè)單一的光滑表面。、

 

 

這就是為什么我們?cè)?D軟件中通常有一個(gè)平滑角度的設(shè)置:如果我們有兩個(gè)連接的多邊形的角度大于此平滑角度,它們的過渡將是軟的,而連接的多邊形的角度小于平滑角度將是硬的。這樣,曲面之間的極端角度將顯示為不同的面,就像在現(xiàn)實(shí)世界中一樣。

 

 

因此,我們?cè)谀P椭惺褂梅ň€來控制面之間的過渡,但我們可以更進(jìn)一步。

 

 

因?yàn)槲覀冋诟淖児鈴奈矬w反彈的方式,所以我們也可以讓一個(gè)非常簡(jiǎn)單的物體像一個(gè)復(fù)雜的物體那樣反彈光。這是一張法線貼圖。我們使用貼圖來彎曲從3D對(duì)象反射的光的方向,使其看起來比實(shí)際情況更復(fù)雜。

 

 

一個(gè)現(xiàn)實(shí)生活中的例子是那些當(dāng)年買薯片贈(zèng)送的全息圖(至少在西班牙是這樣)。它們是完全平坦的,但反射光的方式與3D對(duì)象類似,使其看起來比實(shí)際情況更復(fù)雜。在3D世界中,這些效果更好,但仍有一些局限性(因?yàn)榍嫒匀皇瞧降模?/span>

 

 

2
頂點(diǎn)法線(Vertex Normals)

 

 

 

 

 

雖然我們確實(shí)使用多邊形的法線來處理其他一些事情,但實(shí)際上我們并沒有使用多邊形法線來控制模型曲面的平滑。而我們是通過使用頂點(diǎn)法線來控制法線的平滑。這基本上是相同的想法,但有點(diǎn)復(fù)雜。

 

 

每個(gè)頂點(diǎn)都可以關(guān)聯(lián)一個(gè)或多個(gè)法線。如果它有一條法線,我們稱之為平均頂點(diǎn)法線(averaged vertex normal),如果它有多條法線,我們稱之為分割頂點(diǎn)法線(split vertex normal)。

 

 

讓我們用一條邊來連接兩個(gè)多邊形。如果兩個(gè)面之間的過渡是平滑的(我們?cè)贛aya/Modo中將其設(shè)置為“軟邊”,或者在Max/Blender中兩者都具有相同的光滑組),則每個(gè)頂點(diǎn)都有一條法線,這是多邊形法線的平均值(這就是為什么它被稱為“平均頂點(diǎn)法線”)。重要提示:目前來講,每個(gè)3D程序都使用自己的方法計(jì)算平均頂點(diǎn)法線,這意味著在一個(gè)程序上計(jì)算的法線貼圖在另一個(gè)3D程序中可能看起來完全不同。我將在這份分享的第二部分對(duì)此進(jìn)行詳細(xì)解釋。

 

 

如果過渡是硬的(硬邊或光滑組不同),每個(gè)頂點(diǎn)都有幾個(gè)法線:每個(gè)連接的頂點(diǎn)一個(gè)法線,并與其法線對(duì)齊。這會(huì)在法線中留下一個(gè)間隙,看起來像兩個(gè)不同的曲面。這就是我們所說的分裂頂點(diǎn)法線。

 

 

正如你可能猜到的,如果我們想控制法線貼圖,控制頂點(diǎn)法線是至關(guān)重要的。幸運(yùn)的是,我們真的不需要直接修改法線,甚至不需要看到它們,但知道這是如何工作的將有助于我們理解為什么我們會(huì)這樣做,并更多地解釋我們可能看到的問題。

 

 

3
烘焙法線貼圖

 

 

 

在烘焙法線貼圖時(shí),我們基本上是告訴烘焙程序修改低多邊形法線遵循的方向,以便匹配高多邊形模型的方向;所以導(dǎo)致lowpoly模型可以像highpoly模型一樣反射光線。所有這些信息都存儲(chǔ)在稱為法線貼圖的紋理上。讓我們來看一個(gè)例子。

 

 

假設(shè)我們有這樣一個(gè)lowpoly。一個(gè)具有4個(gè)頂點(diǎn)和一個(gè)UV集的平面,我們的烘焙程序?qū)⑹褂迷撈矫鎰?chuàng)建法線貼圖。

 

 

它必須從這個(gè)highpoly接收法線信息,它的法線更復(fù)雜。

 

 

請(qǐng)記住,我們只是傳遞法線信息,所以UV、材質(zhì)、拓?fù)?、變換等完全不相關(guān)。經(jīng)驗(yàn)法則:如果你的highpoly看起來很好,這意味著它的法線很好,應(yīng)該用于烘焙足夠好。

 

 

我們的烘焙程序?qū)⒉捎胠owpoly,并按照l(shuí)owpoly的法線方向投射光線(這就是我們需要控制lowpoly法線的原因)。這些光線的長(zhǎng)度有限,以避免從很遠(yuǎn)的面(通常稱為烘焙距離或cage包裹器距離)獲取法線信息。當(dāng)這些光線與高多邊形碰撞時(shí),烘焙程序會(huì)計(jì)算如何彎曲這些光線,使其遵循與高多邊形相同的法線方向,并將該信息存儲(chǔ)到法線貼圖中。

 

 

下面是這個(gè)例子的烘焙結(jié)果:

 

 

我們的引擎使用一種紋理來修改lowpoly法線,因此光線會(huì)在這個(gè)lowpoly模型上反彈,就像它是highpoly版本一樣。請(qǐng)記住,這是一種紋理,不會(huì)影響lowpoly的輪廓剪影(如果光線未擊中模型,則無法修改光線從模型反彈的方式)。

 

 

4
法線可以存儲(chǔ)為貼圖

 

 

雖然可以通過查看法線貼圖來讀取了解我們的lightpoly,但法線貼圖顯然不是規(guī)則紋理。這是因?yàn)樗鼈儾粩y帶顏色信息,而是法線信息。這也意味著法線貼圖不應(yīng)被視為常規(guī)紋理,我們能看出來它們具有特殊的壓縮和gamma校正設(shè)置。

 

 

可以將法線貼圖視為一組3個(gè)灰度紋理,存儲(chǔ)在單個(gè)圖像上:

 

 

第一幅圖像告訴引擎,當(dāng)從右側(cè)照亮?xí)r,該模型應(yīng)該如何反彈燈光,并將其存儲(chǔ)在法線貼圖紋理的紅色通道中。

 

 

第二幅圖像告訴引擎,當(dāng)從下方照亮?xí)r,模型應(yīng)該如何反彈燈光,并將其存儲(chǔ)在法線貼圖紋理的綠色通道中。有些程序使用上面而不是下面,所以我們可以使用“left-handed”和“right-handed”法線貼圖,這可能會(huì)導(dǎo)致一些問題,我們將在后面看到。

 

 

第三個(gè)圖像告訴引擎,當(dāng)從前面照亮?xí)r,模型應(yīng)該如何反彈燈光,并存儲(chǔ)在法線貼圖紋理的藍(lán)色通道中。由于大多數(shù)東西從正面發(fā)光時(shí)看起來都是白色的,所以法線貼圖通??雌饋硎撬{(lán)色的。

 

 

當(dāng)我們將所有三幅圖像合并到一幅圖像上時(shí),我們得到了一幅法線貼圖。請(qǐng)記住,這個(gè)解釋并非100%準(zhǔn)確,但它有望幫助您理解法線貼圖中的信息,并更好地理解它的作用。

 

 

5
總結(jié)

 

 

法線是用來定義光線如何從曲面反彈的向量。它們可以用于控制面之間的過渡(通過平均連接頂點(diǎn)的法線以進(jìn)行平滑過渡,或分割頂點(diǎn)以進(jìn)行硬轉(zhuǎn)折過渡),但它們也可以重新定向,以使低多邊形模型像更復(fù)雜的模型那樣反彈燈光。該信息存儲(chǔ)在圖像的3個(gè)單獨(dú)通道中,3D程序讀取該信息,以了解模型表面應(yīng)朝哪個(gè)方向看。

 

 

現(xiàn)在我們已經(jīng)大致了解了法線是什么,以及法線貼圖是如何工作的,下一篇章將講述如何把這些細(xì)節(jié)從高多邊形烘焙到低多邊形去。

以上就是影晨文化對(duì)什么是法線貼圖及它們是如何工作的簡(jiǎn)單介紹,記得持續(xù)關(guān)注我們哦,如有不足之處,希望大家可以一起交流學(xué)習(xí),一起變得更強(qiáng)!如果有廣州三維動(dòng)畫制作的需求,可以隨時(shí)找到影晨文化哦!


標(biāo)簽為:
?