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