李曙光
(安徽電子信息職業技術學院軟件學院,安徽蚌埠 233030)
在純三維動畫電影、真人視覺特效電影、動畫片、游戲宣傳動畫、影視廣告、虛擬現實等項目中高質量的三維角色的制作運用了大量的毛發特效技術,如《怪物公司》《長發公主》《納尼亞傳奇》《冰河世紀》等影片都有高質量寫實毛發的應用[1]。在三維動畫生產流程中,毛發對寫實角色形象的塑造至關重要,但由于毛發數量巨大、單根毛發又比較細小、結構復雜,使得毛發動畫模擬及渲染非常耗費時間,制作難度較高。目前主流的毛發制作工具有:maya自帶的nHair、Shave、FX Hair、Zbrush fibermesh、Yeti等。其中,maya自帶的nHair就是PaintEffect,每一束頭發都是獨立的,nHair控制工具較少,適合制作長發以及動力學解算。Shave適合制作動物皮毛,動力學解算應用較為簡單。FX Hair適合做長發和動力學解算。Zbrush fibermesh則適合做毛發的造型。
Yeti是與maya協作的一款強大的基于節點的制作毛發、羽毛以及草皮纖維等的插件,是目前各大影視特效工具制作毛發類特效的首選。Yeti已被開發為一個端到端的解決工具,可以方便地集成到大多數三維制作流程中,輕松有效地傳輸和渲染生成的數據,其獨特的groom引導線的功能以及圖表節點的實時控制技術為三維藝術家提供了創造的自由以及更高品質、更自然逼真的呈現。Yeti支持目前主流的四個高級渲染器,包括Pixars Renderman、3Delight、Chaos Groups Vray和Solid Angles Arnold。
在三維軟件中制作毛發,一般首先在模型表面制作引導線,引導線的數量可以非常少,對引導線進行梳理編輯,使其符合毛發的自然生長形態,然后再把引導線的形態屬性關聯到可渲染的毛發本身的節點,通過引導線控制可渲染的毛發的分布位置、密度、長度、曲率等屬性,然后經過數據轉換,傳遞到渲染引擎,在引擎中對可渲染的毛發進行相關材質的設置以及數量倍增化的全局處理,最終滿足符合三維藝術家對三維角色毛發設定的需求。三維毛發的生產流程如圖1所示。
毛發建模首先讓毛發依附在角色的模型表面,由模型定義毛發根部的位置并提供法線方向作為毛發初始的生長方向[2]。復雜毛發往往生長在角色模型的一個局部,傳統的制作方法是把生成毛發的模型單獨提取出來,但這種制作方式由于模型的低細分,生成的發際線不夠平滑自然。而在Yeti中可以利用紋理貼圖,精確地控制毛發的生長范圍,甚至可以利用貼圖控制毛發的生長形態。把三維模型UV展分好,然后使用3D Paint工具在模型上直接繪制,在繪制前首先指定一張紋理貼圖,在maya軟件中白色代表1,黑色代表0,在繪制時使用Floodpaint整體給模型一個黑色,再用白色畫筆繪制毛發的生長區域,調整邊緣的虛實變化。不同明暗及虛實相交最終將控制不同疏密、長短的毛發。繪制好的貼圖仍然可以在photoshop等繪圖軟件中作進一步的細化處理。

圖1 三維毛發的生產流程

maya中的每個Yeti節點的實例對應一個圖形,所以創建圖形首先確保已經創建了一個Yeti節點。Yeti Node節點就是可以渲染的毛發曲線,在輸入模型網格上創建將要變形的Yeti圖形,在Yeti工具架上創建Yeti節點,或使用pgYetiNewNode mel命令創建,否則將無法分配輸入對象,這里可以進行手動添加。如果想要將輸入對象添加或刪除到Yeti節點,則需要打開屬性編輯器和添加對象中的圖形/輸入對象選項面板,該對象將顯示場景中可添加的對象列表。
選擇Yeti節點后,可以在任何窗口中打開Yeti圖表編輯器面板,一組毛發至少需要Import、Scatter和Grow三個節點,每個節點有自己對應的參數,圖表通過箭頭將結點輸入和輸出鏈接在一起,該箭頭定義了數據流如何通過圖表節點,當數據從一個節點移動到另一個節點時,任何節點的輸出口都可以連接多個節點輸入口,可視化參數將對Yeti節點起作用,進而影響毛發的基礎形態。
盡管圖表起到了足夠的控制作用,以便在大多數情況下獲得較好的整體毛皮效果,對于寫實角色來說,需要更多的手段來控制毛發的隨機效果。如maya的nHair一樣,首先需要制作初始曲線,由初始曲線決定毛發的長短和造型[3]。Yeti通過Grooms提供所需的隨機控制,由于Grooms是一組可控制的節點,所以在每個節點上可以存儲任意數量毛發的自定義屬性。圖表可以實現任何數量的輸入,Groom通過屬性節點來控制長度、密度、方向或其他節點參數。
Groom引導線在圖表中的應用總流程如圖2所示。創建一個Groom就可以在圖表中應用這個結果。首先把Groom關聯上Yeti Node節點,選擇Groom節點,打開the Graph/Input Grooms面板中添加Groom,彈出的選擇窗口列出場景中所有可能的Groom,選擇所需的Groom和關聯上Yeti Node節點的Groom,然后返回圖形編輯器(選擇了Yeti節點,并在Yeti工具架上點擊GE,然后導入Groom,使用導入節點,并在屬性欄中將其設置為Groom模式,在名稱字段中指定Groom的全部或部分名稱。Groom的主要用途是調整毛發方向,在圖表列表中選擇Comb節點。創建后要確保Grow的輸出節點連接到Comb節點的第一個輸入口,并將您的Groom Import節點的輸出連接到Comb節點的第二個輸入口。當設置為root時Groom形態會影響到Yeti Node毛發。
如果調整Groom節點中的線條長度,還可以將Groom屬性連接到Grow節點的第二個輸入口,這樣可以讓Grow節點將線條的長度屬性作為乘數倍增。最后如果在Groom節點上繪制了密度屬性,也可以以類似的方式將Groom連接到Scatter節點,以控制如何生成初始點的密度。Groom被導入并在圖表中應用,Groom的更改就將在圖形和視窗中動態地進行實時更新。雖然圖表的密度和復雜度可能會降低交互性,但對于查看圖的最終結果非常方便。

圖2 Groom引導線在圖表中的應用流程
Guide curves是可以利用第三方軟件生成并作為數據導入的任何nurbs曲線。雖然引導曲線的位置是任意的,但是最好將它們創建在盡可能靠近模型表面的位置并且保持與Yeti Node方向一致。要在Yeti Node中使用Guide curves,首先必須將Guide curves轉換為maya集,通過mel語言可以直接把曲線轉換為集。Yeti節點上的“輸入指令集”調板可以將新集分配給Yeti Node節點。在圖表中創建一個新的導入節點,并在屬性面板中將模式更改為Guide,并為該節點設置新集。
Guide curves節點通常用于變形毛皮曲線的輸入設置,可以通過新的屬性Yeti在輸入的曲線弧度上創建,進而引導曲線圍繞和引導曲線聚集。還可以通過Yeti節點顯示調色板中的指南切換,在maya視窗中預覽影響范圍的衰減。Guide curves只需將引導線的輸出或與Groom合并,連接到Scatter和Grow節點就可以設置生成的毛發的密度和長度。
默認情況下Guide curves將根據其全局位置進行采樣,它們可以被動地進行配置和動態的使用,通過Yeti可以在任何指定集上創建“鎖定到表面”屬性來實現,即使曲線毛皮變形也可以保持與表面的初始關系。Guide curves切換的屬性將與變形表面一起移動,曲線集被添加到Yeti節點中,集中的每個曲線形狀將被賦予并用于控制毛發的形態屬性。
Yeti中的羽毛可以使用實例節點和自定義羽毛節點創建,該節點設計可較為便捷實現在所選渲染引擎內產生許多羽毛。Yeti可以實現自定義羽毛節點,可以通過Yeti工具架上的CRF按鈕或Yeti菜單中的Create Feather創建節點。創建場景起點處的默認羽毛形狀,即最終渲染后羽毛的簡單視窗預覽效果。在組件模式中,選擇羽毛的頂點來調整羽毛的形狀,這個控制框架可以被認為是簡單的默認多邊形拓撲結構??刂朴鹈嵌群陀鹈毫训膮悼梢栽谟鹈膶傩跃庉嬈髦性O置,這些參數作為幾何形狀的特有屬性被傳遞到Yeti圖中,由程序生成可渲染的羽毛,它們與羽毛的被唯一標識的ID一起作用,產生每根羽毛形態的多樣變化。Yeti在羽毛形狀中生成單個羽毛框架用于視窗預覽,在渲染時可以通過羽毛屬性編輯器中的“Barb”參數來控制單個羽毛形態的輸出,不同形態羽毛的輸出控制如圖3所示。

圖3 不同形態羽毛的輸出控制

Yeti目前支持四個主流的高級渲染器:Pixars Renderman、3Delight、Chaos Groups Vray和Solid Angles Arnold。這些渲染器都自帶毛發材質,結合Yeti Node節點渲染屬性,可以控制毛發最終渲染的數量,較好地定義倍增、密度、根尖顏色等屬性。
在三維角色制作中,寫實類生物角色毛發一直是制作的一個技術難點,近年來主流的制作方法是采用幾何建模的方法來構建毛發,將每根毛發顯示成一串三角片或圓錐體,并進行反混淆以及復雜的光照計算,從而生成令人滿意的繪制效果[5]。在制作過程中首先制作數量較少的引導線,通過引導線的形態屬性控制較多數量的可渲染毛發,Yeti的Groom筆刷工具豐富,獨特的圖形節點結構直觀且方便于后期編輯,圖形節點描述毛發在制作過程中的所有參數,尤其是參數的隨機化處理和組合,可直觀地模擬真實世界的毛發形態。配合Autodesk maya動力學引擎、渲染模塊生成皮毛、羽毛和樹葉等效果,創造可信真實的三維角色,且制作效率極高。