在前面的专题里,我们已经探讨了如何基于现场平面图绘制出现场立体图的方法,最后得到的是犯罪现场的三维立体模型。在这个基础上可以进一步思考的就是,我们在此立体模型的基础上还可以进一步丰富其展示手段,比如能不能将它用3D打印的方式打印出立体现场,或者能不能将它作为一个场景,用虚拟现实的手段在里面互动漫游?要实现这样的展示方式,单单靠一种软件是不够的,每实现一个环节就必须使用一个不同的软件。
在近年来的教学和实验操作中,笔者主要使用了Sketch up、Sweethome 3d、Cinema 4d、3dmax、meshmixer、VRP builder 等不同的建模软件,使用中遇到的最大问题便是各个软件对模型定义的格式有所差别,那么模型在它们之间互相导入导出的时候可能会损失一些信息,如果要实现跨软件间的完美互导,就必须研究一下基本的三维模型文件格式,以及软件互导所遵循的基本操作方法。
我们还是从最基本的场景创建工具Sweethome 3d入手,它能够导入的格式有OBJ、DAE、KMZ和3DS,能导出的格式只有OBJ。 我们用SH3D建一个简单的长方形房间,里面就放一张书桌和椅子。建好后,发现模型有材质而墙壁没有材质。于是双击墙体,赋予其材质。双击地面,也赋予其材质。然后导出为“caiz”文件。产生的文件就有caiz、caiz及墙体和地面材质的贴图文件。
用SH3D创建场景
一、SH3D相关格式:
(一)3DS格式:
3DS是3dsmax建模软件的衍生文件格式,做完MAX的场景文件后可导出成3ds格式,可与其他建模软件兼容,也可用于渲染。用3dmax建好的模型可以导出为该模式为SH3D所用。但是它属于三角面静态模型,后期导入软件的不可编辑性、难以二次编辑现在逐渐的远离了我们的视线。
(二)DAE格式:
DAE是一款3D模型文件,主要用于多个图形程序之间交换数字数据,谷歌地球的模型辨识此种文件类型,常见的3Dmax和Maya等设计软件安装DAE输出插件就可生成后缀为dae的文件了,dae文件通过一些知名的3D设计软件就可以轻松打开了。
(三)KMZ格式:
KMZ文件是谷歌公司研发的一种地标信息压缩文件。谷歌地图上的一些地标文件就是用的这种格式。也就是说,通过这种方式,可以把谷歌地图上的一些地标模型导入到SH3D中作为模型库的一部分。
(四)OBJ格式:
OBJ文件是一种文本文件,可以直接用写字板打开进行查看和编辑修改。它支持对直线(Line)、多边形(Polygon)、表面(Surface)和自由形态曲线(Free-form Curve)的定义。其中直线和多边形通过它们的点来描述,曲线和表面则根据它们的控制点和依附于曲线类型的额外信息来定义,这些信息支持规则和不规则的曲线,包括那些基于贝塞尔曲线(Bezier)、B样条(B-spline)、基数(Cardinal/Catmull-Rom)和泰勒方程(Taylor equations)的曲线。但Maya导出的OBJ文件并不包括以上关于曲线的信息。OBJ对于建模来说最方便的就是它不仅记录了模型的三维外形特征,还记录了模型各个表面的法线坐标和贴图坐标,这样在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入SH3D后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。
模型在导出为OBJ格式时会生成两个或两个以上的文件,其中OBJ格式是模型主文件,记录了其三维特征和法线贴图坐标,mtl为材质文件,赋予模型各表面丰富的材质,有时还会导出场景中所需的其他贴图文件,导入三维软件中时可能会重新制定贴图路径,但贴图位置是记录在了OBJ文件中。本例中,在SH3D中建好场景以后,导出OBJ文件,就会导出上述一系列文件。通过将该OBJ文件导入另外不同的三维软件,发现使用C4D软件可以自动加载模型贴图,而3dmax有时还可能加载失败。所以对于SH3D所生成的场景文件,我们先导入c4d来处理一下。
二、导入C4D及其处理的相关格式:
作为主流的三维建模软件之一,C4D软件支持的格式非常多。前述SH3D支持的格式C4D基本上都支持。不过对于SH3D导出的OBJ,再导入C4D中时,发现墙体变为透明。这就需要在C4D中对墙体重新赋予材质,并且保存为一个可以被3Dmax顺利读取的格式。
SH3D导入C4D时出现的不正常现象
(一)SH3D墙体材质与C4D的互导:
用C4D打开“caiz”发现墙体和地面变得透明,其他模型部分贴图正常。查看C4D下方的材质编辑器,发现墙和地面的材质对象中没有材质球存在。
墙体、地面材质球缺失
于是在材质编辑器中新建材质球(双击编辑器区域可自动生成),然后右键选择编辑,在材质编辑器中材质命令下选择需要导入的图片,对每个材质都新建一个材质球。
外墙材质球
内墙材质球
地面材质球
将材质球拖入贴图区域就完成了对该区域的贴图。如下图所示:
贴图完成后,导出为"caiz;格式。
(二)FBX格式:
FBX格式是Autodesk公司出品的一款用于跨平台的免费三维创作与交换格式的软件,它包含了许多信息,包括模型、材质、动画、骨骼、摄像机、光源等等,是一种适合于不同软件间互导的中间格式。
在3dmax2018中打开"caiz;,就发现所有模型和材质信息都已经被3dmax读取。
三、导入3dmax,导出DAE文件,再通过低版本3Dmax导出VRP文件:
我们的最终目的是要得到一个,可以为虚拟现实仿真软件vrp builder所用的场景文件。但是VRP只与3dmax结合得最好,并且开发了插件,可以用3dmax直接导出VRP格式文件为VRP Builder使用。但是最新的VRP Builder 2007共享版只能在win7 32位中使用,并且支持的3dmax最高版本只有2012版32位。直接用3dmax 2012版本没办法打开c4d r19生成的FBX文件。于是就用3dmax 2018先打开 caiz,在导出为 caiz, 然后再用3dmax 2012 打开,得到贴图正确的模型。如下图所示:
导入3dmax 2012
接下来在3dmax 2012中,要将模型贴图转换为vrp编辑器支持的类型。先用VRP预览模式,查看模型,发现家具贴图显示正常,墙和地面显示不正常,说明墙和地面的材质可能VRP不支持。
VRP贴图不兼容
点击快捷键M,弹出材质编辑器,点击“Standard”按钮,弹出材质浏览器。在其中的场景材质中,可以发现,墙和地面的材质分了层级,这是VRP不支持的。所以需要把其中的纹理单独提取出来,转换为Standard(标准)模式,才能正确导出。在子层级下,选择standard的材质文件,双击选“副本”,便新建了一个材质球。选择需要重新贴图的面,拖动材质球于其上,便对其赋予了材质。
3dmax 材质编辑器
材质浏览器,查看材质的层级关系
把各子材质作为副本,转换为标准材质
通过这样的方法将场景中的贴图置换完毕,再次预览可以得到如下结果:
得到正确贴图的场景
通过VRP插件导出“caiz”场景文件,就可以在vrp虚拟现实软件中进行后续操作,这为后面开发虚拟现实现场漫游程序奠定了基础。
四、讨论:
本案例之所以涉及多个软件和处理流程,是因为最开始的场景制作软件SH3D的导出格式不够丰富,如果是C4D、sketchup制作场景,则通过导入3Dmax后就可以导入VRP。如果直接用3dmax创建,则直接可导入VRP。
另外就是采用的vr软件为中视典vrp2017版共享版,只支持32位win7操作系统,所以本案例实际在两台主机上运行。本例中SH3D6.1版、C4D r19版、3Dmax2018运行于64位win10操作系统的图形工作站中,3Dmax2012和vrp2017共享版运行于32位win7操作系统的台式电脑中。所以新老版本软件中的文件互导也会有个转换问题。
五、结论:
通过一个小实操案例,让我们体会到了不同的模型编辑软件,对模型三维外形和贴图材质均有不同的要求,而我们只有在实践中认识到这样的规则,才能将模型和场景在各种软件转换中应用自如。通过跨软件的导入导出,我们就能很方便地将一个虚拟展示项目流程化,让不同的工作能够高效延续下去,而不需要重复以前的劳动,从而提高了效率。