2010/10/13

Normal Map 法線貼圖 (三)

這篇是Normal Map系列文章的最後一篇. Normal Map產生的重點不外乎做bevel, smooth group的設定. 如果是對稱的模型, Normal map只做一半會遇到更麻煩的問題. 最後到了遊戲裡面除了normal map以外, light map的UV又是另外一個問題點.


----以下為翻譯
原文連結請點這裡

標題:針對light-maps來拆UV
翻譯: Hammer Chen

沿著材質的X軸做鏡像

這會影響light-map材質與vertex light-maps

Light-maps會用三種不同方像儲存光線,然後根據實際的每個像素法線來做混合。 這三個方向是固定在切線空間。因此,在世界空間會跟材質座標一樣被鏡射,而這個方向只在材質的X軸會對稱。為了確保鏡射邊縫的兩邊都採用相同方向的世界空間,UV貼圖與模型的對稱邊縫會盡可能地垂直。

在鏡像邊縫的兩旁使用相同的世界座標方向是很重要的,因為這樣light-map才能精確地計算出來。如果兩側用了不同的方向,光照貼圖在兩側的邊縫計算就會不正確,最後會導至明顯的縫隙。

切線空間會建立在第一組UV set,因此,這是材質的座標,所以要沿著X軸對稱。

把light-map UVs切開來做對稱。

模型的light-map UVs必須在鏡射的縫隙之間要留幾個texel,這樣做是必要的,因為這兩半沒辦法混合在一起。如果這兩半沒有間距開來,那麼套用到light-maps上面的smoothing filter,或是材質的bilinear texture filtering會讓縫隙產生!

請看這個牆的模型,藉由把法線貼圖沿著x軸對稱可以節省材質空間。



第二個UVW座標是用在lightmap上面,如上圖。

為了避免在遊戲中對稱的那面產生邊縫,要先選去鏡像的那一面。

然後把那個部分切開來。

有邊縫

這樣在遊戲裡面就不會看到邊縫了!

要在哪邊留邊(padding)呢?
有了Lightmass,在lightmap UV周圍留邊已經沒有必要了。Lightmass會自動產生一個單位的貼圖像素留邊,避免產生出血的錯誤,因此在uv layout周圍留邊已沒有必要而且會浪費記憶體。

在UV charts之間的邊還是必要的。要留多少是根據最後套用在哪個模型上面,該模型的解析度,大約必須要間隔4個貼圖像素,才能避免錯誤,因此如果lightmap解析度為32 兩個UV charts的間距必須為整個UV空間的12.5%。然而,如果你的間距過大,就會浪費更多記憶體。

注意事項
這裡會提到避免當使用靜態光照產生的縫隙問題,但是這個方法無法解決lightmap高光的部分,要避免lightmap高光產生的縫隙的唯一方法是採用動態計算光線 (Movable, Toggleable 或Dominant這三種類型的光源),請查看DominantLights單元這裡有更詳細說明)。

當你想要移除這個縫隙的時候,請記住材質解析度是1024-2048間,而lightmap可能會有大約128x128像素,所以要rebuild lightmap。把解析度設定到你想要的。

在低解析度的lightmap還是會產生很小的縫隙。

Lightmap的UV座標可能會產生視覺上的錯誤,但是,適當的lightmap UV可以有效地減小縫隙的錯誤。建議你產生3/4的鏡射,而不要恰好一半。因此,如果是對角色的臉的話,就剛好一邊臉有整個鼻子,另一半沒有。

基本上,除非你使用Vertex light maps才能完全地避免縫隙的產生!

---翻譯完畢----

---以下為另外一篇----
原文連結請點這裡

標題: 移除對稱的normal map產生的縫
翻譯: Hammer Chen

作者:warby

這邊教學是要寫給同事看的,但貼在這邊跟各位分享.

問題:
先假設各位已經有低模與高模,並且成功地產生法線貼圖了!
如果你跟材質一樣用相同的對稱UV,那你會產生如下很醜的縫:


要怎樣修正?
我會一步一步說明要怎樣修。
這個方法也可以套用在角色身上,車子或是其他有機的模型。

1)在Photoshop裡面開啟法線貼圖


看起來很正常
2)到貼圖通道裡面,因為我的邊縫是垂直的所以我選取紅色通道。

3)選取有邊縫的區域
4)使用魔術棒,把大面積的亮部與暗部扣掉。這些是重要的模型細節區域。
5)如果你的模型很細,或是會有特寫,那必須要更小心的選取。

6)選取灰色:128,128,128
7)套用一個由灰色到透明的漸層色,套用到以下區域,請注意在邊縫的地方剛好是128,128,128的灰色。

8)做好了以後,似乎沒有太大改變
9)但是貼回到3D軟體,邊縫神奇地消失了!
最後的比較效果

要注意的是,另外一個模型是去改綠色通道,而且漸層是用垂直漸層。

Bevel的區域會比較麻煩,你可能紅色與綠色通道都要處理,而且要花很久的時間休,我不建議這樣做除非那個部位真的很重要。

這篇教學也沒有講到怎樣去修在鏡射的模型產生上下翻轉的光源。
----翻譯完畢----

呼, 本系列文章翻譯完畢. 大概翻了50頁吧! 再把連結貼一次好了

如果沒時間一一把所有內容看完的話, 這裡列出幾點結論:
  • UV拆的好很重要 這會決定normal map的品質
  • 低模要拆UV; 高模不必拆UV, 高模提供的是normal的細節而已
  • 對稱的模型操作流程很重要: a. 先對一半的模型拆好UV b.使用symmetry產生對稱的模型 c. 把鏡射那一半的UV移到0-1的空間之外 d. 這時候利用高模產生normal e. 貼normal map到低模可得到完美效果. 詳情請看Normal Map 法線貼圖 (一)裡面的鏡像(Mirroring)單元
  • 切勿在烘培法線貼圖以前就把模型對稱的那一半刪除
  • 遊戲引擎內, 第二層的normal map (稱為detail map)可以把對稱縫隱藏起來
  • 中性藍代表的是垂直於面的法線向量, 利用中性藍來塗抹normal map上UV邊縫 可有效解決邊縫產生的問題.
  • 對於硬邊, 每個vertex會有兩個vertex normal. 因此軟邊(整個相同的smooth group)比較不會有邊縫的問題.
  • 有做bevel產生的normal map在模型的邊的地方會比較漂亮
  • 不要單純地做extrude, 要用bevel
  • mental ray Round Corners Bump可在算圖時產生bevel效果
  • cage的形狀會影響到normal map產生的品質 例如波浪效果
  • 兩張normal map疊在一起. 要用Crazy bump來做疊合會比較好, 因為他是真正用3D空間來對normal map進行混合疊加.
  • 法線是有長度的, 所以當兩張normal map疊在一起, 他的長度可能會大於1, 因此必須進行重新標準化法線(Re-normalizing)的動作
  • 就算算出來的法線貼圖是正確的, 在3dsmax的硬體顯示功能無法正確地顯示法線貼圖的效果.
  • 高模沒有必要只做一塊模型, 可以分成好幾個零件
謝謝觀賞

2 comments:

FHKKTA said...

好詳細的文章 感謝分享

Andy E said...

解釋得真好!讚啊!