66
導航菜單
1
全站搜索
搜索
文章正文
游戲中的3D數學知識之法線的應用
作者:管理員    發布于:2019-04-28 17:10:50    文字:【】【】【

很多時候做游戲都想實現一些炫酷的效果,包括水、風、火、土、雷等。了解游戲開發的人都知道,這些東西往往都是由程序自己實現的,美術更多提供的是輔助。而平時自己想要實現的時候總覺得這些會涉及一些極為麻煩的數學知識,這里我就想將法線作為一個切入角度,把對應的知識點都列出來,因為涉及比較多的內容,具體細節還希望大家多多去查找資料。一旦掌握這些知識點,相信以后這些效果都會信手拈來(當然如果要做次時代效果還需要進一步研究,如果只是手機上的話,基本是夠用的)。

理解法線是什么

我們知道,游戲中的模型面數越高,細節越豐富,那么就可以出越好看的效果。但出于性能的限制,我們往往無法無限制的增加細節。于是人們就想了一個辦法,就是將一個面數很高的模型的法線信息存入到一張圖片里面,然后低面數的模型通過對這個貼圖的采樣去制造自己有很多細節的效果。在這種場景下,法線的作用可以理解為反映出模型表面的凹凸信息。


模型法線怎么算

首先我們需要知道如何表示一個法線。正常情況下我們都是用一個三維向量表示法線的方向。這個向量垂直于當前頂點所在的這個面,如果有多個面共用這個頂點,那么就可以通過取所有面的平均值來計算出這個法線。在得知如何計算法線之后,我們就可以開始考慮如何存儲法線。

模型法線的坐標系

對于靜止的物體,我們可以輕易的把它在當前狀態下的全部法線信息保存下來,但是如果物體發生了移動或者旋轉,我們就會發現物體相對于世界坐標發生了改變,這是不可接受的。因為游戲中的物體肯定會經常移動變換,如果要針對每一個狀態都存儲對應的法線信息,顯然是不可取的。于是人們想到了可以用模型坐標系或者切線空間坐標系來表示法線的坐標。目前絕大多數都是采用切線空間坐標系來表示法線坐標的。

切線空間坐標系


參考這個球,藍色的線垂直于球面,就是法線坐標系的Z軸,而紅色的線和貼圖的方向一致,我們可以認為是X軸,然后Y軸可以根據這兩個算出來,圖中沒有畫,但我們可以知道它是垂直于這兩個軸的。那么這個坐標的含義是什么呢?在切線空間坐標中(0, 0, 1)代表當前頂點法線沒有任何偏移,而一旦x,y不為0,那么就代表著法線分別向x,y進行一定的偏移。這樣做的好處十分明顯,對于不停移動變換的物體,法線信息存儲一份就可以了,因為相對當前頂點而言,這個頂點的法線和法線貼圖之間的偏移總是保持不變。

法線的存儲方式

知道了法線的坐標系,那么我們就可以通過模型去算出法線,同時轉化成切線空間下的三維向量。那么要怎么保存到一張貼圖中呢?首先我們可以把法線坐標限制在長度為1內,那么可以通過范圍[-1,1]來表示法線在360度內的偏移。但我們知道貼圖正常情況下是無法存儲負值的,于是我們進行這樣的變換,f(x) = (x + 1) / 2。 這樣子我們就發現范圍被限制到了[0,1]中,就可以存儲在圖片里面了。那么使用的時候,我們需要反向操作,而在Unity中也是這么做的。

南昌市閃撲數字軟件有限公司  



公司地址:江西省南昌市新建區紅谷灘綠地國博VR產業基地1號樓15樓                  聯系電話:86399577                            聯系郵箱:2301715279@qq.com

在線
客服

在線客服服務時間:9:00-24:00

選擇下列客服馬上在線溝通:

客服
熱線

4006-880844
7*24小時客服服務熱線

關注
微信

關注官方微信
青青视频 青青青免费视频在线