• Yimin Chen

利用Grasshopper建立Normal Map或Displacement Map


若有接觸過3D遊戲場景製作的人應該會遇過一種狀況就是當一個場景的的3D面數太多的時候,便會造成遊戲卡頓(lag)的情況發生,因為實際場景在進行彩現(Render)的時候便是去計算光線在這些面裡不斷反射會算出什麼結果,一般我們會用畫面更新頻率(fps)來表示畫面的流暢度,當一個場景的fps=30,其意味著此場景一秒可更新30次,而當fps<25左右,人眼就會開始覺得畫面開始有「一頓一頓」的情況發生。


玩遊戲卡頓會嚴重影響玩家的遊戲體驗度,因此為場景「減面」是一件非常重要的事情。通常當一個場景的曲面物件太多的時候我們便需要進行減面處理,最常見的作法便是透過貼圖(map)的方式來模擬實際效果。


以下面的組圖為例,下圖左為原始模型,是一個簡單的矩形面,下圖中是一個法向量貼圖(Normal map),當我們把圖左的平面貼上中間的法向量貼圖後,人眼看到的就會看到如圖右的感覺,平面開始有凹凸的感覺,但實際上平面還是平面,而這個凹凸的感覺是透過電腦模擬出來的感覺,並非實際利用光線不斷反射模擬算出來的結果,因此可以減少運算量。



法向量貼圖的原理實際上十分簡單,我們透過RGB(紅綠藍)三個顏色分別去代表一個面的法向量的X、Y與Z三個分量,習慣上RGB顏色的表示法是以0~255來表示,我們只要將-1~1的區間換成0~255來顯示即可,舉例來說,上圖左的平面的法向量為(0, 0, 1),將他換算成顏色來表示的話會得到R = 127,G = 127,B = 255,也就是下圖的藍紫色。


法向量轉換為顏色
法向量轉換為顏色

相同的原理,我們要介紹的另一個貼圖便是位移貼圖,位移貼圖是把實際點與所在平面的位移值換算成黑到白的顏色,讓電腦自動去幫你產生模型變形的效果,與法向量不同的地方在於,法向量貼圖只是讓肉眼感覺有凹凸的效果,但實際上並沒有真的變形,而位移貼圖則是真實改變模型的凹凸。


只要知道原理之後,要製作這樣的圖片就不會太困難,具體的步驟如下:

  1. 建立半圓形球體

  2. 利用Mesh Brep將Surface轉換為Mesh物件

  3. 利用Deconstruct Mesh擷取每個Mesh的頂點(Vertices)的法向量

  4. 利用Deconstruct Vector將法向量拆解為X,Y,Z三個分量

  5. 利用Remap Numbers節點將X, Y, Z三個分量的值轉換為0~1.0

  6. 利用Colour RGB(f)節點產生顏色

  7. 利用Construct Mesh產生Mesh並賦予顏色

  8. 在Rhino中利用ViewCaptureToFile的指令產生圖片



最後附上完整GH


完整GH實作
完整GH實作

68 次查看0 則留言