張鈺糧 王踐
摘要:針對(duì)在產(chǎn)品建模中創(chuàng)建海量三維細(xì)節(jié)會(huì)占用大量?jī)?nèi)存,導(dǎo)致系統(tǒng)運(yùn)行緩慢、內(nèi)存卡死或被迫花費(fèi)大量經(jīng)濟(jì)成本來(lái)升級(jí)硬件等問題,Vray引擎中的物體類型與置換修改器能夠基本解決上述問題。通過實(shí)例分析了怎樣設(shè)置Vrayfur物體類型來(lái)模擬產(chǎn)品表面成千上萬(wàn)的毛料,同時(shí)分析了Vrayproxy物體類型對(duì)含有大量三角細(xì)分面的寶石模型的代理,最后闡釋VRayDisplacementMod置換修改器對(duì)產(chǎn)品表面劇烈凹凸形態(tài)的創(chuàng)建。結(jié)果表明利用Vray引擎可以大量減少對(duì)內(nèi)存資源的消耗,保證海量逼真的產(chǎn)品細(xì)節(jié)在被輕松表現(xiàn)出來(lái)。
關(guān)鍵詞:毛絨;網(wǎng)格代理;凹凸;Vrayfur;Vrayproxy;VrayDisplacementMod
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)10-0177-03
日常生活中大部分產(chǎn)品的表面都是光滑的,但也有表面具有大量凸起或凹陷物的產(chǎn)品,例如毛絨玩偶表面細(xì)長(zhǎng)的絨毛,澆水種植玩具頭部的草發(fā),牙刷頭上的刷毛及鑲嵌有許多寶石的首飾等。當(dāng)設(shè)計(jì)這些產(chǎn)品且并需要展示虛擬實(shí)物效果時(shí)如果使用普通的材質(zhì)貼圖只能得到較弱的凸起或凹陷效果,比如凹凸貼圖的正負(fù)取值超過某一閾值后凹凸量變化就很不明顯了,實(shí)物圖的失真或虛假有時(shí)候會(huì)影響到對(duì)整個(gè)項(xiàng)目的評(píng)判和推進(jìn)。另一方面如果采用在視口中建立大量模型來(lái)獲取真實(shí)效果的方法卻容易癱瘓內(nèi)存并造成死機(jī),試想把一只毛絨狗表面所有的絨毛一根根的拉出來(lái)將會(huì)占用多少內(nèi)存?筆者在實(shí)踐中發(fā)現(xiàn)利用Vray引擎中物體類型與置換修改器可以輕松解決這一難題,因?yàn)榇罅?D細(xì)節(jié)的表現(xiàn)是通過渲染引擎最后計(jì)算得出,而不需要將這些細(xì)節(jié)在視口中真正建模,所以不會(huì)占用內(nèi)存且渲染效果比使用普通的凹凸貼圖更加真實(shí)、豐富和強(qiáng)烈。下面本文將結(jié)合實(shí)例來(lái)詳解Vray引擎中物體類型Vrayfur、Vrayproxy和VRayDisplacementMod置換修改器對(duì)這些產(chǎn)品表面特殊材質(zhì)效果的創(chuàng)建。
1利用 Vrayfur表現(xiàn)毛絨玩偶的毛料質(zhì)感
Vrayfur主要用來(lái)制作出毛發(fā)或類似毛發(fā)的材質(zhì)效果,在不選擇任何物體的時(shí)候,Vrayfur顯示為不可用。Vrayfur在制作過程中僅顯示為毛發(fā)物體圖標(biāo),只有當(dāng)渲染時(shí)才能夠看到實(shí)際的毛發(fā)效果。
現(xiàn)在來(lái)創(chuàng)建一個(gè)單色的猩猩毛絨玩偶,在產(chǎn)品設(shè)計(jì)軟件中3DStudio、Rhino、Cinema4D都可以外掛Vray,而工程類軟件如Proe、Solidworks都不能直接外掛Vray,需要將模型先轉(zhuǎn)存為STP、STL或IGES格式再導(dǎo)入Rhino或3DStudio中才能使用Vray,本文以3D Studio為基礎(chǔ)操作平臺(tái)來(lái)運(yùn)行Vray。首先選中玩偶模型,接著在創(chuàng)建基本幾何體命令面板中選擇Vray物體類型并點(diǎn)擊Vrayfur按鈕,這時(shí)毛發(fā)物體圖標(biāo)顯示在玩偶模型上,注意創(chuàng)建的毛發(fā)物體與之前建立的玩偶模型雖然是兩個(gè)相關(guān)聯(lián)的物體,但是在進(jìn)行材質(zhì)設(shè)定及相應(yīng)參數(shù)的修改時(shí)需要分別對(duì)其調(diào)整。
下面是對(duì)Vrayfur中幾個(gè)重要參數(shù)分析,首先在Vrayfur下面“Parameters”卷展欄中“Length”用來(lái)控制毛發(fā)的長(zhǎng)短,取值越高毛發(fā)就越長(zhǎng),“Thickness”用來(lái)定義單根毛發(fā)的粗細(xì),取值越高毛發(fā)越粗。“Gravity”用來(lái)控制引力對(duì)毛發(fā)的影響程度,取值為0時(shí)表示毛發(fā)不受引力影響,默認(rèn)參數(shù)為負(fù)值模擬重力場(chǎng),數(shù)值越小重力越強(qiáng),正值模擬向上的引力場(chǎng),數(shù)值越大毛發(fā)朝上越厲害[1]?!癇end”用來(lái)控制毛發(fā)的彎曲程度,相應(yīng)的取值可以表現(xiàn)出毛絨玩偶成品是采用順直毛來(lái)縫制還是采用滾束毛來(lái)縫制。另外在“Variation”選項(xiàng)組中有“Direction var”、“Length var”、“Thickness var”、“Gravity var”四個(gè)參量分別用來(lái)控制毛發(fā)在方向、長(zhǎng)度、粗細(xì)及受到引力影響在形態(tài)上表現(xiàn)出來(lái)的隨機(jī)效果,取值越高則毛發(fā)隨機(jī)效果越明顯,取值為0時(shí)毛發(fā)不具有隨機(jī)效果,通過改變這四個(gè)參數(shù)值可以讓毛發(fā)的方向變得雜亂無(wú)章、長(zhǎng)度變得參差不齊、粗細(xì)變得大小不一,更接近于毛絨玩偶在普通環(huán)境中的真實(shí)狀態(tài)。還有“distribution”選項(xiàng)組中提供了“Per face”和“Per aera”兩種毛發(fā)分布方式,前者是依據(jù)模型每個(gè)三角面上能夠產(chǎn)生多少毛發(fā)來(lái)計(jì)算總量,因?yàn)槿敲嬗写笥行。杂眠@種方式得到的毛發(fā)分布不是非常均勻;后者則是依據(jù)模型單位面積上能夠產(chǎn)生多少毛發(fā)來(lái)計(jì)算總量,相對(duì)“Per face”, “Per aera”可以得到比較均勻的毛發(fā)分布。參數(shù)設(shè)置完畢還要對(duì)毛絨的材質(zhì)進(jìn)行設(shè)定,注意為玩偶模型與Vrayfur物體指定相同的材質(zhì),避免在毛絨稀疏的部位出現(xiàn)色差。本例為猩猩毛絨玩偶的身體與四肢及覆蓋在上面的Vrayfur物體都賦予了相同的棕色織物材質(zhì),關(guān)鍵是選擇無(wú)光的明暗器,因?yàn)椴剂系母吖夂头垂舛己芪⑷?,面部及手、腳掌處賦予肉色的橡膠材質(zhì),猩猩毛絨玩偶面料的參數(shù)設(shè)置及渲染后的效果如圖1所示。
圖1 Vrayfur物體模擬單色毛絨玩偶效果
再來(lái)分析下面的情況,如果毛絨布偶的表面是由雙色或多色毛絨混合而成,那么應(yīng)該怎樣去表現(xiàn)?同樣為Vrayfur物體賦予一個(gè)VrayMtl材質(zhì),然后進(jìn)入Diffuse通道中選擇“Gradient Ramp”貼圖并把“Gradient Ramp Parameter”色帶調(diào)成兩種顏色,另外在 “Gradient type”與“interpolation”選項(xiàng)欄中將漸變類型與插值類形分別設(shè)定為“l(fā)iner”與“solid”,前者是線形漸變,后者是實(shí)色混合[2]。渲染后得到雙色毛絨效果,仔細(xì)觀察會(huì)發(fā)現(xiàn)利用這種方法得到的毛絨在水平方向上顏色交替變換,但是在垂直方向上單根毛絨的顏色是一致的,如圖2左下所示。如果要讓單根毛絨的顏色在垂直方向上發(fā)生變化,就像草的根部顏色和頂端顏色不同一樣,使每根毛絨的上下端顏色也不一樣,這時(shí)不僅要在漫射通道中選擇“Gradient Ramp”貼圖,還要將“Coordinate”面板組中的“UV”方向改為“WU”方向,并在Vrayfur參數(shù)面板中的“Generate W-coordinate”選項(xiàng)前打勾[3],再次渲染可以發(fā)現(xiàn)毛絨顏色的變化由左右方向變成了上下方向,如圖2右下所示。
圖2 Vrayfur物體模擬雙色毛絨效果
如果毛絨玩偶的表面有特定的花紋或圖案應(yīng)該怎樣表現(xiàn)?其實(shí)方法很簡(jiǎn)單,同樣為Vrayfur物體賦予一個(gè)VrayMtl材質(zhì),然后進(jìn)入Diffuse通道中選擇“Bitmap”貼圖找到制作好的花紋或圖案,圖片的精度會(huì)對(duì)渲染結(jié)果產(chǎn)生影響,普通渲染采用JPG或PNG格式,精細(xì)渲染最好采用TIFF或BITMAP格式。渲染后會(huì)發(fā)現(xiàn)毛絨玩偶的表面出現(xiàn)了與貼圖相應(yīng)的花紋,如圖3所示,為了讓圖案能夠被正確的對(duì)應(yīng)到Vrayfur物體上,在渲染前應(yīng)當(dāng)為Vrayfur物體添加UVWmap修改器并選擇恰當(dāng)?shù)馁N圖坐標(biāo)。
圖3 Vrayfur物體模擬帶花紋的毛絨玩偶效果
2利用 Vrayproxy代理首飾上鑲嵌的鉆石
Vrayproxy物體的使用原理類似點(diǎn)云模型理論,雖然這種幾何造型技術(shù)的發(fā)展來(lái)還不夠成熟,但是它能夠使存儲(chǔ)文件數(shù)據(jù)緊湊,模型結(jié)構(gòu)簡(jiǎn)單,同時(shí)擁有以基元模型來(lái)表達(dá)復(fù)雜表面細(xì)節(jié)的能力[4]?;谝陨蟽?yōu)點(diǎn)Vrayproxy被用于創(chuàng)建代理連接,即被代理的物體并沒有真正存在于軟件視口內(nèi),視口中的Vrayproxy物體為在低分辨率下的粗分解模型,在高分辨率下構(gòu)建被代理物體各部分的細(xì)分解模型必須通過Vray引擎的多次預(yù)處理來(lái)完成。簡(jiǎn)單來(lái)說就是場(chǎng)景內(nèi)的代理物體只是一個(gè)“準(zhǔn)備呈現(xiàn)”的形式而非最終效果,場(chǎng)景外的復(fù)雜物體被場(chǎng)景內(nèi)具有不同細(xì)分程度的簡(jiǎn)化數(shù)據(jù)模型替代。因?yàn)閂rayproxy物體無(wú)需經(jīng)過繁瑣的三角化處理,所以不會(huì)消耗大量的內(nèi)存,即使場(chǎng)景內(nèi)有大量重復(fù)的被代理物體,且每個(gè)物體的細(xì)分三角面數(shù)量都超過上億,軟件也能夠運(yùn)行流暢,不會(huì)出現(xiàn)滯屏、卡屏等情況[5]。
下面運(yùn)用Vrayproxy物體來(lái)創(chuàng)建一款鑲嵌有許多水鉆的戒指,首先將一顆水鉆單獨(dú)保存出來(lái)并為代理物體創(chuàng)建其支持的文件格式,方法是把整個(gè)水鉆選中后點(diǎn)擊右鍵并在彈出的菜單中選擇“Vray mesh export”,然后在彈出面板中的folder選框?yàn)樗@指定轉(zhuǎn)換為網(wǎng)格物體后的保存路徑,勾選“Export as a single file”表示會(huì)將視口中所有的物體看作一個(gè)網(wǎng)格模型輸出。另外在“ faces in preview ”中可以為代理物體設(shè)定在場(chǎng)景中將要顯示的面數(shù),最后點(diǎn)擊OK完成對(duì)一顆水鉆創(chuàng)建代理支持格式的轉(zhuǎn)換。
將沒有導(dǎo)入鉆石網(wǎng)格代理物體的戒指圈模型打開,接著在Vray物體類型面板中點(diǎn)擊Vrayproxy按鈕,在彈出的面板中點(diǎn)擊Browse按鈕找到剛才創(chuàng)建的“水鉆*.vrmesh”代理文件,這時(shí)在Display選項(xiàng)組中為代理物體選擇在視口中的顯示狀態(tài),一種是“bounding box”邊界盒模式,另外一種是“Preview from file”預(yù)覽文件模式。前者是用立方體來(lái)表示水鉆代理物體,水鉆的最大外邊界決定了立方體的大小,后者是用“preview mesh”中指定的網(wǎng)格面數(shù)來(lái)表示水鉆代理物體,通過簡(jiǎn)化的網(wǎng)格面可以粗略辨別出水鉆的形態(tài)。將一顆水鉆代理物體導(dǎo)入后,接著通過旋轉(zhuǎn)陣列及調(diào)整角度復(fù)制出許多鑲嵌在戒指表面的水鉆代理物體,以每顆水鉆52166個(gè)三角面計(jì)算,24*4顆共5007936個(gè)三角面,由于使用了Vrayproxy物體的緣故,這些三角面并沒有對(duì)內(nèi)存造成壓力,實(shí)時(shí)視口刷新速度依然很快,如圖4所示。
圖4 Vrayfurproxy物體代理鉆石模型
3 利用VRayDisplacementMod表現(xiàn)產(chǎn)品的凹凸工藝
添加VRayDisplacementMod置換修改器可以為產(chǎn)品模型制作劇烈凹凸的表面效果,VRayDisplacementMod是以表面貼圖來(lái)適應(yīng)曲面的法線方向并在渲染的過程中的沿法線方向建立突起物,不需要將突起物在場(chǎng)景中創(chuàng)建出來(lái)或形成代理,所以比Vrayproxy還要節(jié)省內(nèi)存。VRayDisplacementMod的工作方式是根據(jù)紋理貼圖的灰度來(lái)映射極細(xì)三角面的置換,通過位移映射之間的差異形成輪廓的起伏變化,這種運(yùn)算方式完全脫離了材質(zhì)修改器的束縛[6],所以既不需要在Vray:displacement默認(rèn)置換卷展欄中勾選Override Maxs,也不需要在渲染面板的Common組中勾選Displacement,相較于材質(zhì)球中的置換貼圖只能根據(jù)貼圖灰度和貼圖通道的百分比來(lái)計(jì)算置換強(qiáng)度,VRayDisplacementMod置換修改器除了可以利用貼圖灰度來(lái)計(jì)算置換強(qiáng)度以外,還提供了更多可供調(diào)節(jié)的參數(shù)。
圖5 VrayDisplacementMod中的外凸與內(nèi)凹效果
選中模型后在修改器列表中選擇VRayDisplacementMod,彈出的面板中包含了2D mapping 、3D mapping、Subdivision三種貼圖置換方式,一般制作山脈、海浪等自然景觀會(huì)采用2D mapping,而模擬物體表面材質(zhì)會(huì)采用后面兩種方式。接下來(lái)在“Texmap”紋理貼圖中選定一張二維圖像作為灰度圖,這張圖片用來(lái)決定模型表面突起或凹陷的形狀[7]。Amout選項(xiàng)用來(lái)控制置換強(qiáng)度,正值會(huì)使物體表面沿法線朝外形成外凸效果,負(fù)值會(huì)使表面向內(nèi)形成坑洼效果,如圖5所示。Shift選項(xiàng)用來(lái)控制置換物體的膨脹和收縮效果,對(duì)于單一曲面物體(如球體、圓環(huán)等)來(lái)說無(wú)論將該參數(shù)調(diào)得多大都不會(huì)出現(xiàn)縫隙,因?yàn)樗鼈兯械娜敲娑嘉挥谕还饣M中,所以表面法線根據(jù)曲面的走勢(shì)具有連續(xù)性;對(duì)于封閉的多重曲面物體(如立方體、圓柱體等)來(lái)說如果將該參數(shù)調(diào)大有可能會(huì)使邊緣裂開,比如圓柱體的頂面和側(cè)面分別屬于兩個(gè)不同的光滑組,在它們的交界處就會(huì)出現(xiàn)法線方向不連續(xù)而產(chǎn)生裂口的問題,可以勾選keep continuity防止邊緣開裂,如圖6所示。為了確保貼圖坐標(biāo)的準(zhǔn)確性,還要將Texture channel中的ID號(hào)與UVWmap修改器中Mapchannel里的ID號(hào)設(shè)為一致。
4 總結(jié)
從以上分析可以看出,在制作具有特殊表面效果的產(chǎn)品模型時(shí)有效利用Vray渲染器對(duì)降低圖像程序的復(fù)雜程度、減少內(nèi)存需求、維持軟件運(yùn)行速度都有積極的作用。在制圖操作中一是根據(jù)產(chǎn)品的表現(xiàn)要求來(lái)選擇VRay物體類型和VRay置換修改器,二是盡量使VRay物體類型和VRay置換修改器中的參數(shù)設(shè)置最優(yōu)化,讓效果和耗時(shí)保持平衡,這就需要產(chǎn)品設(shè)計(jì)師積累大量的實(shí)踐經(jīng)驗(yàn)來(lái)獲取理想的參數(shù)搭配。
參考文獻(xiàn):
[1] 閻威.Vray焦散之王培訓(xùn)講座[M].北京:海洋出版社,2013.
[2] Hani Mohammadi,Vray Fur[EB/OL].[2011-01-28].http://cienel.net/3d_studio_max-tutorials/vray-fur.
[3] MintViz.Setting up and rendering a long pile rug using VRayFur and 3ds Max[EB/OL].[ 2013-09-02].http://www.workshop.mintviz.com/tutorials/setting-up-and-rendering-a-long-pile-rug-using-vrayfur-and-3ds-max/.
[4] 鄒萬(wàn)紅.大規(guī)模點(diǎn)云模型幾何造型技術(shù)研究[D].杭州:浙江大學(xué),2007.
[5] 張迺剛. 3ds Max/VRay印象超寫實(shí)建筑效果圖表現(xiàn)技法[M]. 北京:人民郵電出版社,2009.
[6] Ekatzebstein.VRay Proxy Scattering with Grasshopper[EB/OL].[2014-06-20].http://lmnarchitects.com/tech-studio/featured/vray-proxy-scattering-with-grasshopper/.
[7] José María Andrés Martín.using a displacement map in vray. [2014-04.-6].http://www.alzhem.com/index_support.htm.
[8] Chaos Group.Displacement Examples[EB/OL].[2014-12-06].https://www.vray.com/vray_for_3ds_max/manual/vray_for_3ds_max_displacement_examples.shtml.