softimage教程之頂點著色一
頂點著色在游戲開發(fā)方面很有用,因為它允許你將基本的紋理信息和光照信息直接烘焙進場景物體。這樣就可以刪掉一些燈來減少計算量和整體場景的大小。
這種方法不倚賴于圖片或者最終聚集,在某些方面優(yōu)勝于傳統(tǒng)的方法,但也存在一些局限性,就是設置繁瑣。
在這里,我們使用一個簡單的場景。這個場景只有一個大盒子(Box),盒子內(nèi)是一輛沒輪子的小車(小車多邊形的密度比較大,墻腳多邊形的密度相 對小,大家可以注意兩者的效果)。盒子的內(nèi)壁已被指定了頂點顏色(名為lanlan_wall),但沒有燈光和材質(zhì)。我們將在盒子內(nèi)頂部放置一個大的 Light_Box。
首先,要為場景準確設置傳統(tǒng)的光。每一個光源必須有一個反向的方形衰減,因此必須將它們的陰影本影設置為黑色,這就意味著場景物體的表面所反射的光要比它們接收的少。如果使用Phong,要確信Specular不會太亮,Ambient被設置為黑色。
然后,我們就使用Render Map(烘焙成CAV)把渲染樹的信息烘焙成一個頂點顏色屬性(CAVs)。
CAV表示原始光的第1次 光反彈(bounce),并用于后來的渲染。此外,它還將用于在下一步驟中加速計算下一次光反彈。當這個光反彈不再重復影響原始光(直接光照),就使用另 一個CAV表示原始光的第2次光反彈(bounce),然后添加到第1次反彈(以及添加到原始光)來增加場景的真實性。
創(chuàng)建燈光和材質(zhì)
1.因為場景沒有燈光和材質(zhì),所以要先創(chuàng)建這些要素。
在Explorer中刪除默認的燈光。然后從Render工具欄中選取Get > Light > Light Box命令,創(chuàng)建一個Light Box,將它放置到盒子的內(nèi)頂部上,設置它的大小為頂部的1/4左右。并且在打開的屬性編輯器中設置相關的屬性。如右圖所示。
softimage教程之頂點著色
2.為物體指定一個phong材質(zhì)。按7鍵打開Box物體的Render Tree,獲取一個Map Lookups > Vertex RGBA節(jié)點,并將它連接到Phong材質(zhì)的diffuse節(jié)點。雙擊Vertex RGBA節(jié)點打開它的屬性編輯器,將Vertex Property設置為lanlan_wall(內(nèi)壁的顏色屬性),如右圖所示。
softimage教程之頂點著色
3. 雙擊Phong節(jié)點,打開Phong屬性編輯器,將Diffuse Ambient的RGB設置為黑色;將Specular Color的RGB都設置為0.05;將Specular Decay設置為23。如右圖所示。
創(chuàng)建lightmap
如果沒有使用大的區(qū)域光(Area Light),第4和5步驟可以省略。但在這個場景中,我們使用了一個大的區(qū)域光,因為它能加速第一個光反彈(bounce)的計算。這樣就可以從區(qū)域光烘焙直接光照(dirct illumination)為一個新的CAV。
softimage教程之頂點著色
4.為Box物體創(chuàng)建一個RenderMap屬性(選擇Box物體,然后選取Render > Get > Property > Render Map命令)。如左圖所示。
5.在打開的RenderMap屬性編輯器中,將Basic頁面中的Sampling設置為vertices only(RenderVertex);在Resulting CAV區(qū)域中單擊New按鈕,創(chuàng)建一個新的Color At Vertices(簡稱CAV),然后單擊Edit按鈕重命名為lanlan_light;勾選Disable區(qū)域中的Refraction和 Reflection項以及Sampling區(qū)域中的Average colors around vertices項。
鎖定RenderMap屬性編輯器,使它處于活動狀態(tài),以便于下次使用。如右圖所示。
softimage教程之頂點著色
6.單擊Regenerate Map…按鈕重建Render Map(這樣就將渲染樹的信息烘焙成lanlan_light)。
在Material屬性編輯器中預覽,它看起來與步驟3的渲染圖像一樣。如左圖所示。
創(chuàng)建第1次光反彈(bounce)
softimage教程之頂點著色
7.在Render Map屬性編輯器,創(chuàng)建一個新的CAV,并且命名為lanlan_bounce1;取消勾選Disable區(qū)域中的Reflections項。如右圖所示。
8.在Render Tree視圖中,從Nodes菜單獲取Reflection_diffuse和Ray_type節(jié)點,將前者連接到后者的eye上,將Vertex RGBA節(jié)點連接到Ray type的reflection上,然后再將Ray type節(jié)點連接到Material的Surface上。
softimage教程之頂點著色
注意:
通常,光澤反射會分配到被反射的eye light的采樣點上,渲染它們而不用于GI計算。當使用Render Map,被反射的eye light就會指向表面法線的同一個方向,這是GI采樣點的來源地。
Render Map會將光澤反射物體作為反射物體,因此通過Ray_type節(jié)點將一個標準的表面shader附加到reflections,將光澤反射shader附加到eye上。
9.在RenderMap屬性編輯器中,單擊Regenerate Map…按鈕重建lanlan_bounce1。如右圖所示。
注意:
RM/reflection diffuse shader有個bug,就是當多邊形面與坐標平面正對齊的時候,會顯示為黑色。所以在這里我們要稍微旋轉一下Box物體(0.1,0.1,0.1),使多邊形不再平行于正交平面(XY,YZ,XZ)。
創(chuàng)建第2次bounce
創(chuàng)建好第1次 bounce后,接著為直接光創(chuàng)建第2次bounce。這是來自第1次bounce的光。直接光照(lanlan_light)不被列入計算范圍,因為它已經(jīng)被反彈過了。在最終渲染中就不用重復渲染它了。
10.在RenderMap屬性編輯器,創(chuàng)建一個新的CAV,并且命名為lanlan_bounce2。
softimage教程之頂點著色
softimage教程之頂點著色
本softimage教程之頂點著色一完,下一篇:softimage教程之頂點著色二
- Tags:Softimage教程
-
分享到:
全部評論:0條