李曙光
(安徽電子信息職業(yè)技術學院 安徽蚌埠 233030)
UV三維模型的二維紋理坐標,帶有多邊形和細分曲面網(wǎng)格的頂點組件信息[1]。UV用于定義二維紋理坐標系稱為“UV紋理空間”,UV紋理空間使用U方向和V方向來定義二維空間中的軸向,UV點是與多邊形頂點相關聯(lián)的點,可以提供為物體應用紋理時所需要的位置信息,UV作為標記定位點,把紋理貼圖上的像素點與模型網(wǎng)格上的頂點相對應,有助于將紋理貼圖精準的映射到三維模型的曲面。在為多邊形曲面創(chuàng)建貼圖的時候,首先需要在模型上創(chuàng)建UV。多邊形和NURBS模型的UV不同,多邊形的UV是可以編輯的,而NURBS的UV不可以編輯。
Maya默認情況下會為許多基本形體的模型創(chuàng)建UV,在創(chuàng)建參數(shù)面板上有一個CreateUVs選項,默認是勾選的,但在大多數(shù)情況下還是需要重新編輯UV,因為默認UV在模型被修改編輯后,排列方式通常不會與最終模型相匹配。此外編輯曲面網(wǎng)格時,UV坐標的位置也不會自動更新,大多數(shù)情況下在完成建模之后,在把紋理指定給模型之前,需要重新映射并編輯UV。理解UV的概念,映射到曲面的方法以及拆分展平技術,是三維動畫、次時代游戲模型制作中必不可少的關鍵流程。比如你要做一個角色頭部的貼圖,首先要給頭部模型設置球形映射,然后編輯UV,展好UV后把UV圖導入到二維繪圖軟件里面進行貼圖繪制,這樣才能讓貼圖準確地映射在模型上。
HeadusUVLayout是一個獨立的拆分展平UV的應用程序,也可以通過接口文件來作為Maya和3DMax等三維軟件的插件,用于創(chuàng)建和編輯三維模型網(wǎng)格和細分曲面的UV,廣泛應用于游戲和視覺特效領域,UVLayout可以在3D視圖、UV視圖和編輯視圖中互相傳遞UV的獨特的工作流程,可以快捷的完成UV的各項拆分任務,大量的命令可以使用快捷鍵實現(xiàn),使紋理藝術家們輕松高效的得到高品質(zhì)、低失真的UV[2],三維模型拆分UV如圖1所示。
圖1角色模型的UV拆分
UV拆分必須根據(jù)模型本身的結(jié)構(gòu)進行合理的劃分和安排,UV的拆分也可以有很多的方法和效果,同時多邊形的UV編輯也因制作人設定紋理不同而各異,但一些基本原則必須遵循。
(一)保持UV不失真。拆分UV的過程就是將三維模型的所有面片展開成一個平面的過程,模型各個面的比例可能會被改變,UV若有拉伸,貼圖也會有拉伸,從而產(chǎn)生失真的貼圖效果,這時就要對有拉伸的UV塊進行調(diào)整,盡量減少UV塊失真,通常的做法是把拉伸的UV塊再拆分為幾小塊以減少拉伸,對于復雜的曲面模型的UV塊完全沒有拉伸也是不可能的,在UVLayout提供了優(yōu)化的展平UV算法,展平后進入3D模式,可以使用不同的棋盤格紋理查看UV有無拉伸,在UV編輯視圖中,正常的沒有拉伸的UV是淡綠色的。而UV呈彩色顯示,說明有拉伸需要重新展平。
(二)避免UV塊不必要的重疊。當UV塊重疊時模型的貼圖就會重疊,重疊的模型部分紋理就會相同,重疊的UV在Maya中還會造成Bump凹凸紋理的不正確顯示。當然遇到紋理圖案重復的物體時,則可以故意利用UV重疊來節(jié)約紋理空間,在UVLayout中使用多UV塊的定向堆疊來實現(xiàn)模型共用同一紋理貼圖,例如瓷磚、天花板,四方連續(xù)圖案的布等。
(三)合理的控制UV的接縫。對于結(jié)構(gòu)復雜,曲率比較大的模型,如果UV不進行拆解,就會產(chǎn)生拉伸和重疊的問題,這時就要拆分成幾個獨立的UV塊,但如果UV塊較多時,又會造成過多的接縫,且造成后期繪制貼圖時,不能直觀的識別貼圖的位置,所以合理的控制UV塊數(shù)量可以避免較多的紋理接縫。UV可以理解為將模型沿選定邊切開,然后展開成一個平面,這樣就涉及到接縫的技巧,模型上被切開邊的兩側(cè)紋理一般不能很好的過渡,會產(chǎn)生一條明顯的接縫,在折分UV時接縫是不可避免的,在制作中一般UV的接縫擺放位置應遵循攝影機注意不到及不易覺察的部位,如頭后側(cè)部、臂與腿的內(nèi)側(cè)等。
(四)合理布局UV塊。拆分UV的目的是為后期繪制模型貼圖,動畫游戲角色的貼圖較為復雜,在拆分UV時可能需要折解為較多的UV塊,如果UV塊雜亂擺放,在后期的平面二維繪圖軟件中繪制貼圖時,有可能不能直觀的對應到模型上的某個局部,而UV塊擺放符合模型物體結(jié)構(gòu)的視覺習慣,可為后期繪制貼圖提供便利。拆分的UV應當盡量充滿0~1的紋理空間,因為輸出的UV圖就是0~1的紋理空間,如果2048×2048的貼圖,只將UV占到0~1的紋理空間的一半,那就相當于只使用了一張1024×1024的貼圖,造成不必要的浪費。
為曲面網(wǎng)格創(chuàng)建顯式UV的過程稱為“UV映射”。UV映射是指創(chuàng)建、編輯和整理UV的過程[3]。UV映射過程會在圖像與將紋理映射到3D曲面網(wǎng)格時如何將其顯示為紋理之間產(chǎn)生關聯(lián)。UV映射是用于掌握多邊形曲面上的精確和真實紋理所需的一項重要技能。
Maya中有很多映射的方法:如平面映射、圓柱體映射、球形映射、自動映射,如圖2所示,這些映射方法都是使用一種預定的規(guī)則將UV紋理坐標投射到模型表面,自動創(chuàng)建紋理圖像與表面的關聯(lián)。通常對自動產(chǎn)生的UV還必須使用UV編輯器進一步編輯才能達到所需要的效果。因為每次對模型的修改(如擠壓,縮放,增加、刪除等等)都會造成UV錯位,所以最好的工作流程是在建模完成之后,再開始創(chuàng)建UVs,要根據(jù)模型的大致形狀,選擇合適的UV映射方法,例如將角色模型的頭部當作球體映射,把角色模型的四肢當作圓柱體映射等。
圖2 三維模型的幾種UV映射方法
(一)平面映射。平面映射通過平面將UV投影到模型網(wǎng)格。平面映射適用于平面的對象,或者至少可從一個攝影機的角度完全可見的對象。平面映射通常會出現(xiàn)重疊的UV,在在映射軸向上的UV可能會產(chǎn)生拉伸錯誤,可以設置平面映射的坐標軸,通過控制手柄可以可直觀的控制映射的移動、旋轉(zhuǎn)、縮放,平面映射主要應用于類似于平面的物體,如地毯,紙張,裝飾畫等。
(二)圓柱映射。圓柱映射形成一個圖柱的形狀包裹住模型,圖柱映射的控制手柄可以作包裹角度、位移、旋轉(zhuǎn)和縮放等操作。圓柱映射主要應用于完全封閉且類似于柱狀的物體,如柱子,角色的四肢,樹干等。
(三)球狀映射。球形映射形成一個圓球的形狀包裹住模型,球形映射使用基于球形圖形的投影為對象創(chuàng)建UV,該球形圖形圍繞著模型網(wǎng)格,在網(wǎng)格上下產(chǎn)生兩個交匯點。該投影最適合完全封閉且是球狀的物體,可以通過控制手柄上的點調(diào)節(jié)UV,以便達到更好的效果,球狀映射主要應用于類似于球形的物體,如蘋果,足球等。
(四)自動映射。自動映射通過同時從多個平面投影以實現(xiàn)最佳UV合理的布局來創(chuàng)建多邊形模型網(wǎng)格UV,如圖3所示。該UV映射方法對于復雜的模型是非常有用的,在復雜的模型中基本平面、圓柱形或球形投影不會產(chǎn)生無拉伸的UV,尤其是對于向外投影或本身中空的組件,自動映射會在UV紋理編輯器中編輯、布局UV和紋理貼圖的區(qū)域中,將模型貼圖到多個獨立的UV塊上。自動映射可以設定與模型相匹配的面數(shù),可以產(chǎn)生3-12個面,同時映射多個面來尋找每個面 UV的最佳布局位置。它會在紋理空間內(nèi)創(chuàng)建多個UV塊,且UV塊的大小比例相近。如果想要更加完整的UV,可以在紋理編輯器對其進行手動縫合。
圖3 三維模型的自動映射
HeadusUVLayout是一個基于物理算法,將3D物體展開,用戶利用縫合切割功能,創(chuàng)建低Poly或SUBD表面的工具,支持導入其他幾何模型進行編輯[4]。
圖4 使用UVLayout拆分UV的流程
(一)在3D模式中拆分UV。導入一個.obj的模型,按模型的結(jié)構(gòu)進行拆解和縫合,移動鼠標指針移動已拆分的UV塊,并使用Enter鍵從模型上把這部分模型分離出來。使用空格+中鍵組合,單擊并拖動從主模型網(wǎng)格上移開來,使用Enter分離的各種局部部件,把已拆分的網(wǎng)格模型傳遞至UV模式,一旦所有分離的網(wǎng)格模型都被傳遞到UV模式,原始未切割的網(wǎng)格將被顯示在3D視圖窗口,如圖4所示。
(二)在UV模式中展平放置UV塊。切換到UV模式,移動鼠標指針移到UV殼上,并按住F鍵將其展平,也可以使用Shift+F組合鍵,使用圓框展平復雜的形狀。一旦所有的UV塊大致被展平,使用優(yōu)化/Run for按鈕完全展平所有殼。如果UV有拉伸,則有一個或多個藍色或紅色顯示的面,需要用Ctrl+中鍵組合來縮放和移動UV塊,有時要用P鍵來鎖定局部UV,然后再次展UV塊,使用空格+中鍵移動的各種UV塊,使它們不重疊,使用Pack功能把UV塊合理的放置在0~1的紋理空間且不浪費空間,空間的使用率可以直觀的顯示出來。
(三)在3D模式中檢查UV。進入3D模式,使用T鍵在不同的棋盤格紋理之間查看UV有無拉伸,導出具有UV形狀的二維位圖文件供繪制貼圖,保存模型到.obj文件。然后把模型導入其他應用程序作進一步加工,如果在另一個應用程序中進一步編輯UV,可能需要把網(wǎng)格導回UVLayout進行再次展平,再次編輯導入模型,切換到UV模式下,按住F鍵展平UV殼,或使用優(yōu)化/Run for重新展平所有UV塊。
(一)模型具有相同網(wǎng)格的UV拆分。
1.對稱網(wǎng)格的UV拆分。在UVLayout拆分角色模型時,由于網(wǎng)格大多是對稱的拓撲結(jié)構(gòu),可以使用對換查找功能可減少重復工作,提高工作的效率,對稱的查找方式有兩種,一種是基于同一個模型內(nèi)部具有對稱結(jié)構(gòu)的網(wǎng)格,另一種是模型是分離的,但具有相同的網(wǎng)格拓撲結(jié)構(gòu)。基于同一個模型內(nèi)部具有對稱結(jié)構(gòu)的網(wǎng)格對稱查找,點擊Symmetry/Find,在模型的對稱軸上點擊左鍵,按空格鍵確認,這時模型會左右灰白顯示,表明對稱功能已啟用。這時對模型一邊進行拆分操作,另一邊則同步自動拆分。而模型是分離的,但具有相同的網(wǎng)格拓撲結(jié)構(gòu)的對稱查找,點擊Symmetry/Find,左鍵拾取原網(wǎng)格,紅色顯示,中鍵拾取對稱網(wǎng)格的相同拓撲位置,藍色顯示,按空格鍵確認啟用對稱功能。在展平原網(wǎng)格后,鼠標在原網(wǎng)格內(nèi)點擊S鍵,對稱網(wǎng)格自動與原網(wǎng)格水平對稱顯示,拆分效果如圖5所示。
圖5 對稱網(wǎng)格的UV拆分
2.相同網(wǎng)格的UV復制。在一些場景中有大量相同拓撲結(jié)構(gòu)的局部,可以使用相同網(wǎng)格的UV復制功能可減少重復工作,提高工作的效率,首先把原網(wǎng)格進行拆分展平,然后回到3D視圖,點擊CopyUVs,左鍵拾取原網(wǎng)格,紅色顯示,繼續(xù)左鍵拾取目標網(wǎng)格的相同拓撲位置,藍色顯示,按空格鍵確認啟用UV復制功能,這時在UV視圖下,默認情況Stack堆疊功能啟用,原UV塊和目標UV塊堆疊在一起,也可以使用水平排列或垂直排列UV塊。
(二)UV塊的局部操作。在展平操作前,可以定義一個UV塊中局部不變形,使用LocalScale功能,按住4鍵,在UV網(wǎng)格上移動鼠標,則局部變成藍色顯示,網(wǎng)格被膨脹;按住5鍵,在UV網(wǎng)格上移動鼠標,則局部變成紅色顯示,網(wǎng)格被收縮,同時按下4和5鍵,在UV網(wǎng)格上移動鼠標,網(wǎng)格返回原始比例;而在Pin模式下,按住4鍵,在UV網(wǎng)格上移動鼠標,則局部被Pin標記同時網(wǎng)格膨脹;按住5鍵,在UV網(wǎng)格上移動鼠標,則局部被Pin標記的同時網(wǎng)格收縮;按住6鍵,在UV網(wǎng)格上移動鼠標,則局部被平滑處理。
圖6 UVLayout中的標記點和標記線
(三)UV塊的對齊。為了繪制貼圖的方便,有時需要UV塊邊界是直線,需要對UV塊強制對齊操作,在UV塊的頂點,按A鍵定義方向捕捉標記,按Ctrl+鼠標中鍵可以移動這個頂點,在另一個把頂點移動到它的水平或垂直線上來,按S鍵標記,把方向捕捉標記也打上S鍵標記,然后在兩點中間的邊線的任意頂點上按S鍵,則邊線自動拉直對齊。
強制拉直UV塊內(nèi)部的一條線段,按住A鍵,移動鼠標拾取線段,線段呈粗黑色顯示,然后展平得到一條內(nèi)部強制的軸向約束對齊線段;按住K鍵,移動鼠標拾取線段,線段呈虛線顯示,然后展平得到一條內(nèi)部強制的非軸向約束的對齊線段。
(四)UVs的Pack布局。對于一個布局合理的UV塊,可以更好的利用紋理空間,后期可以更好的繪制紋理貼圖,在UVLayout中Pack菜單提供了自動打包的功能。在UV視圖下,選中要打包的UV塊,點擊NewBox,會出現(xiàn)一個綠色的矩形框。點擊“[”或“]”鍵,UV塊可局部的自動排布,點擊PackAll,對UV塊進行全局的排布,同時可以顯示紋理空間的使用率。
(五)UVs的捕捉和堆疊。對UV塊精確定位或整齊排布時,需要使用UVs的捕捉功能,可以在Snap/Stack菜單下設置捕捉網(wǎng)格的大小,也可以設置捕捉網(wǎng)格U方向左、中或右的對齊方式或V方向底、中或上的對齊方式,可以設置點、殼和邊界的捕捉。
對于相同拓撲結(jié)構(gòu)的多UV塊的排列對齊,可以使用堆疊功能,首先選擇一個目標物體,按S鍵拾取,黃色顯示,點擊Gather U,具有相同拓撲結(jié)構(gòu)的UV塊與目標物體自動水平對齊,點擊GatherV,則垂直對齊。
對于相同拓撲結(jié)構(gòu)的多UV塊的定向堆疊,首先選擇一個目標物體,按S鍵拾取,黃色顯示,在目標物體具有方向識別的頂點上,按S鍵定義一個紫色的定向堆疊標記,點擊Match Point,自動識別與目標物體相同拓撲結(jié)構(gòu)的網(wǎng)格,點擊Stack,所有網(wǎng)格與目標網(wǎng)格按標記頂點的位置堆疊,以節(jié)省紋理的空間。
(六)UVs的變換。在UVLayout中,可以使用UVs的變換面板,來對UV塊進行精確的移動、縮放和旋轉(zhuǎn)操作。在對角色拆分UV,常需要對重要的部位進行放大,如角色的頭部,對不重要的部位進行縮小,如角色的身體部分,以讓重要的部位在紋理貼圖中獲得更豐富的細節(jié)。對縮放的UV塊需要進行l(wèi)ocals標記,以鎖定UV塊比例,對不同比例UV塊進行縫合時,縫合的邊界會出現(xiàn)拉伸,需要使用Smooth功能對拉伸處進行平滑。
(七)UVLayout和Maya的交互工作。在Maya中,首先要檢查objexpotplugin插件已打開,才能使用UVLayout的傳遞接口,在Maya根目錄的位置安裝UVLayout插件接口文件,在maya的工具欄上會出現(xiàn)UVLayout的工具架,點擊Info按鈕,彈出UVLayout啟動面板,點擊RunUVLayout,彈出UVLayout的軟件界面,點擊SendMesh把Maya中的模型實時的傳遞到UVLayout中,在UVLayout拆分好UV后,點擊Send把分好UV的模型再傳遞回Maya。
當三維模型使用貼圖時,合理的拆分UV至關重要,使用Headus UVLayout軟件,必須遵循UV拆分的基本原則,根據(jù)模型大致的形狀,選擇適合的映射方式,把貼圖映射到模型表面,再把UV按照模型的結(jié)構(gòu)的視覺習慣來進行編輯,盡量避免UV的重疊和拉伸,把UV塊的拆分邊界盡量放置到模型注意不到及不易覺察的部位,且不要把UV折分得過多,減少邊縫的數(shù)量,在對角色UV拆分時,可以把頭部等重要的部位的UV塊放大,把不是太重要的部分的UV塊縮小,以使重要的部位可以獲得更精細的貼圖細節(jié),同時也要讓UV塊盡量占滿0~1的紋理空間,以提高紋理空間的使用效率,這樣在繪制貼圖時才能獲得較好的視覺效果。
[1]鐵鐘.Maya2009 完全學習手冊[M].北京:清華大學出版社,2010.
[2]火星時代.Maya 白金手冊2 建模[M].北京:人民郵電出版社,2011.
[3]完美動力.Maya 材質(zhì)[M].北京:海洋出版社,2012.
[4]劉濤.Maya&ZBrush 影視角色造型完美表現(xiàn)[M].北京:電子工業(yè)出版社,2010.