2007-04-21

Normal map[規格制定]

normal map是使用RGB來儲存normal XYZ向量值,所以必須定義normal儲存的座標系。座標系就包括了world/object/tangent space,其中還分成左/右手系統。不同的座標系統在處理lighting計算時候會需要不同的處理方式, 因此程式人員需要制定normal map所在的座標系,才能夠正確的處理normal map效果。


目前最常使用到是tangent spacenormal map.它的優缺點如下:

優處:
  • 可以共用normal map貼圖(不同物件間的共用或是mirror物件共用)。
  • 目前一些normal map壓縮技術也只能使用tangent spacenormal map (這部分在normal map壓縮會詳細說明)

缺點:

  • 需要 vertex normal/tangent的資料, 在計算lighting時候, 需要多處理一些座標轉換.處理。

World space/object space的優缺點和tangent space正好相反,所以某些狀況下或許使用world/object spacenormal map 會比較好。

不過我目前只打算使用 tangent spacenormal map. object space下的normal map有興趣的可看http://www.3dkingdoms.com/tutorial.htm

選定了tangent space, 接下來是要使用左手還是右手系統呢?
下圖是目前常見的兩種 tangent space 座標系統的圖示, X都面向右邊, Z軸都往螢幕外方向, Y軸向上或是向下.

下圖是兩個系統下normal map的比較.


可以發現左手系統XYZ(0, 1, 0) 或是RGB(128, 255, 128)是指向下方,右手系統是指向上方。在網路上搜尋了一下,似乎沒有人以左手右手系統來區分這樣的差別,只有提到Y向上或是Y向下。所以以下內容就是以Y向上系統(Y-up)或是Y向下系統稱呼(Y-down)

目前我是決定使用Y-upnormal map的座標系統。當然這只是一個規格制定時的選擇重點還是在於產生normal map工具的設定是否可以輸出符合規格的normal map。