张钰粮 王践
摘要:针对在产品建模中创建海量三维细节会占用大量内存,导致系统运行缓慢、内存卡死或被迫花费大量经济成本来升级硬件等问题,Vray引擎中的物体类型与置换修改器能够基本解决上述问题。通过实例分析了怎样设置Vrayfur物体类型来模拟产品表面成千上万的毛料,同时分析了Vrayproxy物体类型对含有大量三角细分面的宝石模型的代理,最后阐释VRayDisplacementMod置换修改器对产品表面剧烈凹凸形态的创建。结果表明利用Vray引擎可以大量减少对内存资源的消耗,保证海量逼真的产品细节在被轻松表现出来。
关键词:毛绒;网格代理;凹凸;Vrayfur;Vrayproxy;VrayDisplacementMod
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)10-0177-03
日常生活中大部分产品的表面都是光滑的,但也有表面具有大量凸起或凹陷物的产品,例如毛绒玩偶表面细长的绒毛,浇水种植玩具头部的草发,牙刷头上的刷毛及镶嵌有许多宝石的首饰等。当设计这些产品且并需要展示虚拟实物效果时如果使用普通的材质贴图只能得到较弱的凸起或凹陷效果,比如凹凸贴图的正负取值超过某一阈值后凹凸量变化就很不明显了,实物图的失真或虚假有时候会影响到对整个项目的评判和推进。另一方面如果采用在视口中建立大量模型来获取真实效果的方法却容易瘫痪内存并造成死机,试想把一只毛绒狗表面所有的绒毛一根根的拉出来将会占用多少内存?笔者在实践中发现利用Vray引擎中物体类型与置换修改器可以轻松解决这一难题,因为大量3D细节的表现是通过渲染引擎最后计算得出,而不需要将这些细节在视口中真正建模,所以不会占用内存且渲染效果比使用普通的凹凸贴图更加真实、丰富和强烈。下面本文将结合实例来详解Vray引擎中物体类型Vrayfur、Vrayproxy和VRayDisplacementMod置换修改器对这些产品表面特殊材质效果的创建。
1利用 Vrayfur表现毛绒玩偶的毛料质感
Vrayfur主要用来制作出毛发或类似毛发的材质效果,在不选择任何物体的时候,Vrayfur显示为不可用。Vrayfur在制作过程中仅显示为毛发物体图标,只有当渲染时才能够看到实际的毛发效果。
现在来创建一个单色的猩猩毛绒玩偶,在产品设计软件中3DStudio、Rhino、Cinema4D都可以外挂Vray,而工程类软件如Proe、Solidworks都不能直接外挂Vray,需要将模型先转存为STP、STL或IGES格式再导入Rhino或3DStudio中才能使用Vray,本文以3D Studio为基础操作平台来运行Vray。首先选中玩偶模型,接着在创建基本几何体命令面板中选择Vray物体类型并点击Vrayfur按钮,这时毛发物体图标显示在玩偶模型上,注意创建的毛发物体与之前建立的玩偶模型虽然是两个相关联的物体,但是在进行材质设定及相应参数的修改时需要分别对其调整。
下面是对Vrayfur中几个重要参数分析,首先在Vrayfur下面“Parameters”卷展栏中“Length”用来控制毛发的长短,取值越高毛发就越长,“Thickness”用来定义单根毛发的粗细,取值越高毛发越粗。“Gravity”用来控制引力对毛发的影响程度,取值为0时表示毛发不受引力影响,默认参数为负值模拟重力场,数值越小重力越强,正值模拟向上的引力场,数值越大毛发朝上越厉害[1]。“Bend”用来控制毛发的弯曲程度,相应的取值可以表现出毛绒玩偶成品是采用顺直毛来缝制还是采用滚束毛来缝制。另外在“Variation”选项组中有“Direction var”、“Length var”、“Thickness var”、“Gravity var”四个参量分别用来控制毛发在方向、长度、粗细及受到引力影响在形态上表现出来的随机效果,取值越高则毛发随机效果越明显,取值为0时毛发不具有随机效果,通过改变这四个参数值可以让毛发的方向变得杂乱无章、长度变得参差不齐、粗细变得大小不一,更接近于毛绒玩偶在普通环境中的真实状态。还有“distribution”选项组中提供了“Per face”和“Per aera”两种毛发分布方式,前者是依据模型每个三角面上能够产生多少毛发来计算总量,因为三角面有大有小,所以用这种方式得到的毛发分布不是非常均匀;后者则是依据模型单位面积上能够产生多少毛发来计算总量,相对“Per face”, “Per aera”可以得到比较均匀的毛发分布。参数设置完毕还要对毛绒的材质进行设定,注意为玩偶模型与Vrayfur物体指定相同的材质,避免在毛绒稀疏的部位出现色差。本例为猩猩毛绒玩偶的身体与四肢及覆盖在上面的Vrayfur物体都赋予了相同的棕色织物材质,关键是选择无光的明暗器,因为布料的高光和反光都很微弱,面部及手、脚掌处赋予肉色的橡胶材质,猩猩毛绒玩偶面料的参数设置及渲染后的效果如图1所示。
图1 Vrayfur物体模拟单色毛绒玩偶效果
再来分析下面的情况,如果毛绒布偶的表面是由双色或多色毛绒混合而成,那么应该怎样去表现?同样为Vrayfur物体赋予一个VrayMtl材质,然后进入Diffuse通道中选择“Gradient Ramp”贴图并把“Gradient Ramp Parameter”色带调成两种颜色,另外在 “Gradient type”与“interpolation”选项栏中将渐变类型与插值类形分别设定为“liner”与“solid”,前者是线形渐变,后者是实色混合[2]。渲染后得到双色毛绒效果,仔细观察会发现利用这种方法得到的毛绒在水平方向上颜色交替变换,但是在垂直方向上单根毛绒的颜色是一致的,如图2左下所示。如果要让单根毛绒的颜色在垂直方向上发生变化,就像草的根部颜色和顶端颜色不同一样,使每根毛绒的上下端颜色也不一样,这时不仅要在漫射通道中选择“Gradient Ramp”贴图,还要将“Coordinate”面板组中的“UV”方向改为“WU”方向,并在Vrayfur参数面板中的“Generate W-coordinate”选项前打勾[3],再次渲染可以发现毛绒颜色的变化由左右方向变成了上下方向,如图2右下所示。
图2 Vrayfur物体模拟双色毛绒效果
如果毛绒玩偶的表面有特定的花纹或图案应该怎样表现?其实方法很简单,同样为Vrayfur物体赋予一个VrayMtl材质,然后进入Diffuse通道中选择“Bitmap”贴图找到制作好的花纹或图案,图片的精度会对渲染结果产生影响,普通渲染采用JPG或PNG格式,精细渲染最好采用TIFF或BITMAP格式。渲染后会发现毛绒玩偶的表面出现了与贴图相应的花纹,如图3所示,为了让图案能够被正确的对应到Vrayfur物体上,在渲染前应当为Vrayfur物体添加UVWmap修改器并选择恰当的贴图坐标。
图3 Vrayfur物体模拟带花纹的毛绒玩偶效果
2利用 Vrayproxy代理首饰上镶嵌的钻石
Vrayproxy物体的使用原理类似点云模型理论,虽然这种几何造型技术的发展来还不够成熟,但是它能够使存储文件数据紧凑,模型结构简单,同时拥有以基元模型来表达复杂表面细节的能力[4]。基于以上优点Vrayproxy被用于创建代理连接,即被代理的物体并没有真正存在于软件视口内,视口中的Vrayproxy物体为在低分辨率下的粗分解模型,在高分辨率下构建被代理物体各部分的细分解模型必须通过Vray引擎的多次预处理来完成。简单来说就是场景内的代理物体只是一个“准备呈现”的形式而非最终效果,场景外的复杂物体被场景内具有不同细分程度的简化数据模型替代。因为Vrayproxy物体无需经过繁琐的三角化处理,所以不会消耗大量的内存,即使场景内有大量重复的被代理物体,且每个物体的细分三角面数量都超过上亿,软件也能够运行流畅,不会出现滞屏、卡屏等情况[5]。
下面运用Vrayproxy物体来创建一款镶嵌有许多水钻的戒指,首先将一颗水钻单独保存出来并为代理物体创建其支持的文件格式,方法是把整个水钻选中后点击右键并在弹出的菜单中选择“Vray mesh export”,然后在弹出面板中的folder选框为水钻指定转换为网格物体后的保存路径,勾选“Export as a single file”表示会将视口中所有的物体看作一个网格模型输出。另外在“ faces in preview ”中可以为代理物体设定在场景中将要显示的面数,最后点击OK完成对一颗水钻创建代理支持格式的转换。
将没有导入钻石网格代理物体的戒指圈模型打开,接着在Vray物体类型面板中点击Vrayproxy按钮,在弹出的面板中点击Browse按钮找到刚才创建的“水钻*.vrmesh”代理文件,这时在Display选项组中为代理物体选择在视口中的显示状态,一种是“bounding box”边界盒模式,另外一种是“Preview from file”预览文件模式。前者是用立方体来表示水钻代理物体,水钻的最大外边界决定了立方体的大小,后者是用“preview mesh”中指定的网格面数来表示水钻代理物体,通过简化的网格面可以粗略辨别出水钻的形态。将一颗水钻代理物体导入后,接着通过旋转阵列及调整角度复制出许多镶嵌在戒指表面的水钻代理物体,以每颗水钻52166个三角面计算,24*4颗共5007936个三角面,由于使用了Vrayproxy物体的缘故,这些三角面并没有对内存造成压力,实时视口刷新速度依然很快,如图4所示。
图4 Vrayfurproxy物体代理钻石模型
3 利用VRayDisplacementMod表现产品的凹凸工艺
添加VRayDisplacementMod置换修改器可以为产品模型制作剧烈凹凸的表面效果,VRayDisplacementMod是以表面贴图来适应曲面的法线方向并在渲染的过程中的沿法线方向建立突起物,不需要将突起物在场景中创建出来或形成代理,所以比Vrayproxy还要节省内存。VRayDisplacementMod的工作方式是根据纹理贴图的灰度来映射极细三角面的置换,通过位移映射之间的差异形成轮廓的起伏变化,这种运算方式完全脱离了材质修改器的束缚[6],所以既不需要在Vray:displacement默认置换卷展栏中勾选Override Maxs,也不需要在渲染面板的Common组中勾选Displacement,相较于材质球中的置换贴图只能根据贴图灰度和贴图通道的百分比来计算置换强度,VRayDisplacementMod置换修改器除了可以利用贴图灰度来计算置换强度以外,还提供了更多可供调节的参数。
图5 VrayDisplacementMod中的外凸与内凹效果
选中模型后在修改器列表中选择VRayDisplacementMod,弹出的面板中包含了2D mapping 、3D mapping、Subdivision三种贴图置换方式,一般制作山脉、海浪等自然景观会采用2D mapping,而模拟物体表面材质会采用后面两种方式。接下来在“Texmap”纹理贴图中选定一张二维图像作为灰度图,这张图片用来决定模型表面突起或凹陷的形状[7]。Amout选项用来控制置换强度,正值会使物体表面沿法线朝外形成外凸效果,负值会使表面向内形成坑洼效果,如图5所示。Shift选项用来控制置换物体的膨胀和收缩效果,对于单一曲面物体(如球体、圆环等)来说无论将该参数调得多大都不会出现缝隙,因为它们所有的三角面都位于同一光滑组中,所以表面法线根据曲面的走势具有连续性;对于封闭的多重曲面物体(如立方体、圆柱体等)来说如果将该参数调大有可能会使边缘裂开,比如圆柱体的顶面和侧面分别属于两个不同的光滑组,在它们的交界处就会出现法线方向不连续而产生裂口的问题,可以勾选keep continuity防止边缘开裂,如图6所示。为了确保贴图坐标的准确性,还要将Texture channel中的ID号与UVWmap修改器中Mapchannel里的ID号设为一致。
4 总结
从以上分析可以看出,在制作具有特殊表面效果的产品模型时有效利用Vray渲染器对降低图像程序的复杂程度、减少内存需求、维持软件运行速度都有积极的作用。在制图操作中一是根据产品的表现要求来选择VRay物体类型和VRay置换修改器,二是尽量使VRay物体类型和VRay置换修改器中的参数设置最优化,让效果和耗时保持平衡,这就需要产品设计师积累大量的实践经验来获取理想的参数搭配。
参考文献:
[1] 阎威.Vray焦散之王培训讲座[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] 邹万红.大规模点云模型几何造型技术研究[D].杭州:浙江大学,2007.
[5] 张迺刚. 3ds Max/VRay印象超写实建筑效果图表现技法[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.