Hello,大家好,今天給大家帶來一係列中第一篇有關於法線的解讀,我是麥狗。
最近一直在研究法線映射的問題,所以通過Carlos Lemos的一係列關於法線的文章來加強一下大家的理解。
多年來,我一直在努力理解法線映射以及在使用法線映射過程中通常出現的問題。我發現大多數的解釋通常都過於技術性、不完整或難以理解,不符合我的口味,所以我決定嚐試一下,解釋一下我收集到的信息。
1、法線(Normals)
最初的3D模型看起來像這樣:
這很好,但它有一個明顯的局限性:它看起來太多邊麵了。
第一個明顯的解決方案是添加更多多邊形,使曲麵更加均勻和平滑,直到多邊形看起來像一個單一的平滑曲麵。事實證明,這需要大量的多邊形,才能使球體等曲麵看起來平滑。
需要另一種解決方案,於是法線的概念就誕生了。
讓我們從一個多邊形的中心畫一條線,完全垂直於它的表麵。我們將這一條線稱為一個令人困惑的名字:法線。該法線的目的是控製曲麵指向的位置,以便當光線從該曲麵反彈時,它將使用該法線計算產生的反彈。當光線擊中多邊形時,我們比較光線與多邊形法線的角度。光線將使用與法線方向相同的角度反彈回來:
換句話說,光線反彈相對於多邊形法線來說是對稱的。這就是大多數反彈在現實世界中的工作方式。默認情況下,所有多邊形都會反射完全垂直於其曲麵的光線(就像在現實生活中那樣),因為默認情況下,多邊形法線是;垂直於多邊形表麵。如果法線中有間隙,我們會將它們視為單獨的曲麵,因為光線會在一個方向或另一個方向上反彈。
現在,如果我們有兩個連接的麵,我們可以告訴計算機平滑一個多邊形法線到另一個多邊形法線之間的過渡,使法線逐漸與最近的多邊形法線對齊。這樣,當光線直接擊中一個多邊形的中心時,光線將沿著法線方向直線反彈。但是在麵之間,法線方向是平滑的,彎曲了光的反彈方式。
我們將把過渡視為一個單一的表麵,因為光線將以平滑的方式從一個多邊形反彈到另一個多邊形,並且不會有間隙。實際上,光線從這些多邊形平滑反彈,效果就會像它有大量多邊形時一樣。
這就是我們在設置光滑組(3ds Max、Blender)或將邊設置為軟硬邊(Modo、Maya)時所控製的:我們告訴程序哪些麵之間的過渡需要平滑,哪些麵之間的過渡需要硬轉折。
下麵是同一個球體的比較,它具有堅硬和平滑的過渡,都具有288個多邊形:
我們可以設置一個類似於長方體的東西,使其所有頂點都具有平均法線。3D軟件將嚐試平滑其表麵,使其看起來像一個單一的平滑表麵。這對於3D程序來說非常有意義,但它看起來非常奇怪,因為我們有一些東西應該有幾個單獨的表麵(比如盒子的每個麵),但程序試圖將其顯示為一個單一的光滑表麵。、
這就是為什麼我們在3D軟件中通常有一個平滑角度的設置:如果我們有兩個連接的多邊形的角度大於此平滑角度,它們的過渡將是軟的,而連接的多邊形的角度小於平滑角度將是硬的。這樣,曲麵之間的極端角度將顯示為不同的麵,就像在現實世界中一樣。
因此,我們在模型中使用法線來控製麵之間的過渡,但我們可以更進一步。
因為我們正在改變光從物體反彈的方式,所以我們也可以讓一個非常簡單的物體像一個複雜的物體那樣反彈光。這是一張法線貼圖。我們使用貼圖來彎曲從3D對象反射的光的方向,使其看起來比實際情況更複雜。
一個現實生活中的例子是那些當年買薯片贈送的全息圖(至少在西班牙是這樣)。它們是完全平坦的,但反射光的方式與3D對象類似,使其看起來比實際情況更複雜。在3D世界中,這些效果更好,但仍有一些局限性(因為曲麵仍然是平的)。
2、頂點法線(Vertex Normals)
雖然我們確實使用多邊形的法線來處理其他一些事情,但實際上我們並沒有使用多邊形法線來控製模型曲麵的平滑。而我們是通過使用頂點法線來控製法線的平滑。這基本上是相同的想法,但有點複雜。
每個頂點都可以關聯一個或多個法線。如果它有一條法線,我們稱之為平均頂點法線(averaged vertex normal),如果它有多條法線,我們稱之為分割頂點法線(split vertex normal)。
讓我們用一條邊來連接兩個多邊形。如果兩個麵之間的過渡是平滑的(我們在Maya/Modo中將其設置為“軟邊”,或者在Max/Blender中兩者都具有相同的光滑組),則每個頂點都有一條法線,這是多邊形法線的平均值(這就是為什麼它被稱為“平均頂點法線”)。重要提示:目前來講,每個3D程序都使用自己的方法計算平均頂點法線,這意味著在一個程序上計算的法線貼圖在另一個3D程序中可能看起來完全不同。我將在這份分享的第二部分對此進行詳細解釋。
如果過渡是硬的(硬邊或光滑組不同),每個頂點都有幾個法線:每個連接的頂點一個法線,並與其法線對齊。這會在法線中留下一個間隙,看起來像兩個不同的曲麵。這就是我們所說的分裂頂點法線。
正如你可能猜到的,如果我們想控製法線貼圖,控製頂點法線是至關重要的。幸運的是,我們真的不需要直接修改法線,甚至不需要看到它們,但知道這是如何工作的將有助於我們理解為什麼我們會這樣做,並更多地解釋我們可能看到的問題。
3、烘焙法線貼圖
在烘焙法線貼圖時,我們基本上是告訴烘焙程序修改低多邊形法線遵循的方向,以便匹配高多邊形模型的方向;所以導致lowpoly模型可以像highpoly模型一樣反射光線。所有這些信息都存儲在稱為法線貼圖的紋理上。讓我們來看一個例子。
假設我們有這樣一個lowpoly。一個具有4個頂點和一個UV集的平麵,我們的烘焙程序將使用該平麵創建法線貼圖。
它必須從這個highpoly接收法線信息,它的法線更複雜。
請記住,我們隻是傳遞法線信息,所以UV、材質、拓撲、變換等完全不相關。經驗法則:如果你的highpoly看起來很好,這意味著它的法線很好,應該用於烘焙足夠好。
我們的烘焙程序將采用lowpoly,並按照lowpoly的法線方向投射光線(這就是我們需要控製lowpoly法線的原因)。這些光線的長度有限,以避免從很遠的麵(通常稱為烘焙距離或cage包裹器距離)獲取法線信息。當這些光線與高多邊形碰撞時,烘焙程序會計算如何彎曲這些光線,使其遵循與高多邊形相同的法線方向,並將該信息存儲到法線貼圖中。
下麵是這個例子的烘焙結果:
我們的引擎使用一種紋理來修改lowpoly法線,因此光線會在這個lowpoly模型上反彈,就像它是highpoly版本一樣。請記住,這是一種紋理,不會影響lowpoly的輪廓剪影(如果光線未擊中模型,則無法修改光線從模型反彈的方式)。
4、法線可以存儲為貼圖
雖然可以通過查看法線貼圖來讀取了解我們的lightpoly,但法線貼圖顯然不是規則紋理。這是因為它們不攜帶顏色信息,而是法線信息。這也意味著法線貼圖不應被視為常規紋理,我們能看出來它們具有特殊的壓縮和gamma校正設置。
可以將法線貼圖視為一組3個灰度紋理,存儲在單個圖像上:
第一幅圖像告訴引擎,當從右側照亮時,該模型應該如何反彈燈光,並將其存儲在法線貼圖紋理的紅色通道中。
第二幅圖像告訴引擎,當從下方照亮時,模型應該如何反彈燈光,並將其存儲在法線貼圖紋理的綠色通道中。有些程序使用上麵而不是下麵,所以我們可以使用“left-handed”和“right-handed”法線貼圖,這可能會導致一些問題,我們將在後麵看到。
第三個圖像告訴引擎,當從前麵照亮時,模型應該如何反彈燈光,並存儲在法線貼圖紋理的藍色通道中。由於大多數東西從正麵發光時看起來都是白色的,所以法線貼圖通常看起來是藍色的。
當我們將所有三幅圖像合並到一幅圖像上時,我們得到了一幅法線貼圖。請記住,這個解釋並非100%準確,但它有望幫助您理解法線貼圖中的信息,並更好地理解它的作用。
5、總結
法線是用來定義光線如何從曲麵反彈的向量。它們可以用於控製麵之間的過渡(通過平均連接頂點的法線以進行平滑過渡,或分割頂點以進行硬轉折過渡),但它們也可以重新定向,以使低多邊形模型像更複雜的模型那樣反彈燈光。該信息存儲在圖像的3個單獨通道中,3D程序讀取該信息,以了解模型表麵應朝哪個方向看。
現在我們已經大致了解了法線是什麼,以及法線貼圖是如何工作的,下一篇章將講述如何把這些細節從高多邊形烘焙到低多邊形去。
上一篇 AAA實時毛發-卷發案例製作教程
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答火星時代教育提供深度、係統的建築表現設計師培訓課程,探索21世紀建築藝術的多種可能性與創新。
UE4場景地編是遊戲開發的重要環節,火星時代教育提供係統全麵的UE4場景地編培訓,助你占領遊戲開發前沿。
涵蓋了關於AI插畫培訓班的選擇與比較,以及火星時代教育的專業課程介紹。關鍵詞:AI插畫培訓,火星時代教育。
本文詳細介紹遊戲原畫美術設計師的培訓信息,探討华体会hth体育app在线登录 師的重要性和成功之路,並強調火星時代教育在原畫設計師培訓方麵的專業能力。
深入探究遊戲原畫場景的描繪技巧,提高你的創作能力。從火星時代教育進行學習。
遊戲原畫CG設計培訓為你打開專業华体会hth体育app在线登录 的大門,讓你的創造力在火星時代教育的引導下釋放出來。
1. 打開微信掃一掃,掃描左側二維碼
2. 添加老師微信,馬上領取免費課程資源
同學您好!