论毛坯房尺寸度量仿真系统开发
2013-04-29朱锦辉
朱锦辉
摘 要:该文从室内装饰教学需求出发,以毛坯房尺寸仿真系统开发为题,介绍了FLASH、Unity3D等开发方案执行思路并对方案的优缺点进行了分析。其中详细介绍了Unity3D方案的研发过程。
关键词:室内装饰 仿真 FLASH Unity3D
中图分类号:TU7 文献标识码:A 文章编号:1674-098X(2013)03(c)-00-02
近年来,房地产行业持续升温,与其密切相关的室内装饰行业也受到了带动,人才需求不断增加。在这样的背景下,很多学校都根据市场需求开设了室内装饰专业,以培养更多专业人才输送给市场。在教学执行过程中,最让教师头痛的是如何提高学生对施工现场的感性认识。
由于安全、管理、交通等问题,让学生亲临施工工地学习存在很大的执行难度。与室内装饰设计情况类似,建筑施工专业同样遇到工地现场教学的困难,而较为普遍的解决方法就是采用数字仿真进行教学。通过数字仿真,学生可以对工地现场有更深入的了解,而且可以亲自动手进行仿真操作,学习积极性得到了提高。
然而,市场上大部分仿真系统都是针对建筑施工专业的,专门针对室内装饰的仿真系统基本还是一片空白,有见及此,笔者作为专业教师就这方面进行了深入探讨及实践,希望开发出适合室内装饰专业教学的仿真系统。
从室内装饰执行流程上看,施工现场主要涉及尺寸度量、定位、施工、验收等几大环节,作为数字仿真系统的探索性开发,笔者选择了毛坯房尺寸度量作为主题,这主要是因为尺寸度量有一定的互动性,动作重复性较高,研发工作量适中。
把毛坯房尺寸度量作为开发主题后,下一步就是围绕主题拟定开发要求。作为仿真系统的开发,首先必须关注其仿真度,如果不能让学生产生身临其境的感受,就失去了开发的意义。第二,要具备良好的交互性。
由于毛坯房尺寸度量是一个全屋游走的过程,因此仿真课程必须支持实时漫游,且必须支持人机交互。第三,仿真系统能够支持度量空间的持续更新,让学生可以不断接触不同空间的尺寸度量过程。第四,具备扩展功能,如果不能支持持续的修改,系统很快就失去使用价值,最终被淘汰。第五,从仿真系统的推广来看,要安裝方便,尽量做到直接复制使用,如果能支持在线使用更好。第六,要有良好的教学设计,操作简单明了。
明确了开发要求后,下一步就是根据要求挑选研发工具。挑选过程中,笔者对不同软件进行了深入了解及对比,还选择部分软件制作了案例,具体情况如下。
1 圆方室内装饰设计系统
圆方是专门针对室内装饰设计而开发的以CAD为基础的系统,其优点是空间构建方便并内置了大量家具模型,可以轻松制作漫游动画,效果真实。可惜圆方在漫游过程中不能进行尺寸度量,且漫游只限于动画,不支持实时漫游,因此并不适合作为尺寸度量仿真系统的开发工具。
2 草图大师
草图大师(SketchUp)具备优越的平面图向立体空间转换的性能,且能轻松导入各种家具模型,空间构建便捷。草图大师支持立体空间下的尺寸度量,遗憾的是,其只支持固定路径漫游,且只能在预先设定的点进行停留并以固定角度观察,虽然可作为一种解决方案考虑,但并没有从根本上解决漫游及尺寸度量的问题,且软件所制作场景仿真度不高,故仍需寻求进一步的解决方案。
3 FLASH
FLASH是网络上盛行的矢量动画制作软件,由于支持程序脚本嵌入,固其拓展性较强,可根据使用者的需要提供不同的解决方案。
尽管作为二维矢量动画开发工具而存在,但实际上FLASH可以通过加入脚本使其获得三维展示能力,俗称Papervision3 d(效果像使用纸板进行围合)。
遗憾的是,网上可找到的资源一般仅限简单的360全景浏览,即站在空间内部环视,不能移动也不能进行其他交互操作,虽然存在二次开发的可能,但需要具备FLASH专业编程能力,故此解决方案暂不具备执行性。
笔者根据FLASH的特点,拟定了其他的解决方案。简单来说,就是在3 dSMAX等三维软件中建立模型,把毛坯房各个区间的环视过程渲染成图片序列并导入FLASH,再通过图片序列播放模拟360全景浏览效果,由于每个视觉实际上只是一幅静态图片,所以可以在图片中放置一些预制度量点,这些预制点嵌入了尺寸度量的脚本,并包含了点的三维坐标,度量时,只要依次点击不同的度量点,就可以获得所需要的尺寸。
相对于Papervision3 d,此解决方案中的脚本编写难度要低得多,且度量预制点间的脚本是一致的,无需逐一编写。这样一来,研发人员实际上只需在图片中相应位置放置预制点并输入对应的三维坐标,即可获得尺寸度量功能(图1)。
虽然这样解决了尺寸度量及仿真效果的问题,但其缺点也是显而易见的。
首先,由于图片序列只涉及单个空间的环视过程,不涉及空间的过渡,所以毛坯房区间之间只能进行跳转,不能实现真正的漫游。其次,制作一套空间需要渲染大量图片,以一个两房一厅的毛坯房为例,加上厨卫合共5个区间,为了实现平滑过渡,对于某一区间的环视效果,一般每10度渲染一幅图片,即一个空间需要渲染36幅图,一套毛坯房需要渲染180幅图,如果这些图片都要求达到高仿真度的话,那么单是进行图片渲染就需要耗费大量时间了。另外,整个仿真系统需要放置大量预制度量点,其工作量也相当大。更糟糕的是,一旦需要更换度量空间,以上工作都要重新执行,这样系统的持续开发及实用性就大大降低了。
尽管工作量大,但使用图片序列导入FLASH进行毛坯房尺寸度量仿真系统开发的确能在一定程度上解决漫游、实时尺寸度量、高仿真等问题,且便于通过网络进行推广,故仍可作为保留方案进行考虑。
4 Unity3D
Unity3D是一款网络三维游戏开发工具,近年来在国内慢慢普及,一些公司更以其为核心承担了各类教学仿真虚拟软件的开发,笔者在接触该软件后逐渐深入了解,发现该软件十分适合进行室内装饰仿真系统的开发,这主要是由于软件本身就是针对三维游戏制作而存在的,具有良好的三维表现能力、交互能力、支持物理引擎。更令人惊喜的是,由Unity3D输出的成品体积细小,只要通过安装一个简单插件就能流畅地在网络上运行,对教学推广十分有利。
虽然在专业领域已经获得广泛应用,但作为游戏开发工具,Unity3D作为业余软件并不普及,市面上已出版的相关教材也很少。尽管如此,对于具备室内装饰专业背景、普遍掌握3 dSMAX等三维软件操作的专业教师来说,Unity3D的操作入门还是比较简单的,如果同时具备一定的计算机语言编写基础,便可以进行简单的仿真系统开发。使用Unity3D进行游戏开发的流程主要包括:建模—外观设置—功能添加—调试及发布。由于仿真的场景设定为毛坯房,所以对外观没有太多要求,外观设置环节可以省略,其余流程的主要研发过程如下。
(1)建模
Unity3D自带了一些简单几何体的创建能力,也附带了一些游戏模型,但总的来说其不是专门的建模工具,一般的开发思路是从三维软件中建模,然后导入到Unity3D。笔者使用3 dSMAX对毛坯房的模型进行创建,然后借助安装FBX格式输出插件,就可以输出成Unity3D专用格式,然后导入到场景中。值得一提的是,通过插件输出的模型是不附带材质信息的,必须在Unity3D对模型再次赋予材质,所以建模时不必考虑材质问题。
(2)功能添加
首先是漫游功能。令人欣喜的是,Unity3D已自带了名为“First Person Controller”的控件,该控件包括一个角色控制器和一个摄像机,同时整合了行走、摄像机旋转等功能,只需要简单地将其放置于场景中,就可以轻松实现漫游功能,无需再自行研发。
除了少量自带控件外,Unity3D的多数功能都需要通过脚本来实现,在Unity3D中,脚本是以模块的形式添加至操作对象上的,可视为物体中的一个独立组件,而一个物体可以包含多个彼此独立的脚本模块,也就是说,操作对象的各种功能可以通过彼此独立的各个脚本模块实现,这样一来,如果需要添加哪种功能,只需添加相应脚本模块就可以了。接下来的问题是脚本模块的来源问题,从头编写脚本当然是其中一个可行的办法,但这要求开发人员对JavaScript(Unity3D主流程序语言)十分熟悉,门槛较高。另外一个解决办法就是通过修改现成的脚本模块实现所需功能,这只需要开发人员掌握基本的程序知识即可。
现成的脚本模块可以从诸如Unity3D大中华社区等专题论坛进行搜索及下载,笔者在开发初期就下载了大量简单实用的脚本模块,并通过修改和重新整合这些模块顺利地完成后续的开发工作。在收集到若干基本功能脚本模块后,就可以开始进行功能开发了。这里先要确立开发思路,笔者在研发初期沿用了FLASH预制点的思路,把功能脚本嵌入到预制度量点内,通过鼠标点击预制度量点并测量其空间间距以获得所需度量的尺寸。
在对收集回来的脚本模块进行重組并修改后,笔者实现了该功能,但同时也察觉到该解决方案还有可以改进的空间。首先,尽管进行尺寸度量时都是围绕空间角点及构造端点,但如果能对墙体的任意两点进行度量的话感觉会更真实。
另外,虽然比起在FLASH中对每幅图片都安插预制度量点来说,Unity3D每个空间只需布置一次的预制度量点,但一旦更换空间模型,仍需对预制点进行重新布置,使用起来并不方便。笔者在实现预制点方案的过程中,发现使用Physics.Raycast函数可以轻松对视线范围内物体表面的任何点进行定位,这样只需要通过鼠标对毛坯房空间中任意两点进行定位,通过测定两点间的距离就可以轻松实现尺寸度量功能,而不需要使用预制点。
在这样的指导思想下,笔者顺利地编写出名为“PICK.js”的功能脚本。在制作过程中,先导入毛坯房空间模型,再把“PICK.js”脚本作为模块控件加入模型中,便能计算出墙体不同点之间的距离。
虽然只需简单地点击鼠标便能获取点与点之间的距离,但是为了尽量地贴近真实,还要加入使用尺子度量的过程,这主要还是要借助Physics.Raycast函数实现,具体思路如下:先在场景中创建一带状尺子模型,当鼠标点击墙体第一点时尺子的起点移动到其上,尺子的末端则跟随鼠标旋转(借助transform.rotation函数实现),并根据尺子起点与鼠标的距离对尺子进行缩放(借助transform.localScale函数实现),以获得尺子随鼠标伸长缩短的效果。当鼠标点击墙体第二点后,尺子末端位置确定,这样尺子就很好地固定在墙体的两点之间,实现尺子度量的效果。
笔者根据这个思路编写出名为“RULER.js”的功能脚本,并将此功能附加到尺子模型中。需要注意的是,在整个尺寸度量过程中,鼠标的操作空间是二维的Screen空间,而墙体上的点存在于三维的World空间,因此两者之间要采用WorldToScreenPoint以及ScreenToWorldPoint函数进行切换。
采用以上思路及流程可以开发出功能基本满足需要的毛坯房尺寸度量仿真系统,但要进一步提高系统的性能,完备各项功能,则需要研发人员对功能脚本进一步深入学习。例如,为了达到比较真实的仿真效果,尺子上应该标有刻度。这就要求在尺子模型上附加带有刻度的贴图,并且在尺子缩放的过程中,还需要同时应用TextureScale函数以控制贴图的重复次数,获得真实效果。
(3)调试与发布
对功能基本满意后就可以进入调试阶段,调试是对一些参数的细微调整,诸如摄像机的旋转速度、漫游的行走速度等。一般来说,为了达到理想的效果,同一参数要反复变更试验,才能从中对比出最合适的数值,然而诸如FLASH等大部分软件在修改参数后,必须重新输出成品才能观察所产生的变化,这就使整个调试过程变得十分漫长并且繁琐。值得庆幸的是,Unity3D的设定十分人性化,在进行内部演示期间,各组件的参数会动态地显示于属性区,对参数进行调整后,内部演示窗口会作出即时的响应,这样整个调试过程就变得便捷并且愉快。
对调试结果满意后,就可以输出成品。Unity3D提供“Web Player”以及“Windows Standalone”等多种输出模式可供选择,其中“Web Player”输出模式可支持成品在线使用,为了成品的普及推广,建议使用该输出模式。综上所述,采用FLASH以及Unity3D都可以进行毛坯房尺寸度量仿真系统的开发。其中采用Unity3D可以达到更理想的仿真效果以及更佳的操作性、扩展性。但该软件还不普及,专业教师需要投入一定的时间及精力进行熟悉。在实际开发过程中,专业教师可以根据自身的需要及能力,选择合适的软件进行开发。毛坯房尺寸度量仿真系统的成功开发,为使用虚拟仿真手段进行室内装饰教学开创了先河,为后续装修施工、验收等环节的教学提供了重要的参考,可以很好地解决学校在办学过程中遇到的场地少、消耗大、管理难等诸多问题,其价值应给予肯定。
参考文献
[1] 徐敏.可漫游的虚拟场景的建模与实现方法[J].科技信息,2010(29).
[2] 蒋子龙.三维虚拟场景人机交互与漫游技术研究[D].沈阳工业大学,2010.
[3] 徐军.吴世强.基于SKETCHUP的虚拟景观的建立[J].大坝与安全,2009(S1).
[4] 蒋卫平.虚拟现实在房地产项目中的设计与应用[D].山东大学,2011.
[5] 姚波.基于Papervision3 d引擎下的室内虚拟漫游研究与探索[J].广西轻工业,2011(4).
[6] 严林.虚拟现实在室内设计中的应用[D].武汉科技大学,2011.
[7] 黄显兵.基于全景技术的景观在线漫游的设计与实现[D].上海交通大学,2012.
[8] 干建松.基于Unity3D的室内漫游的关键技术研究[J].盐城工学院学报(自然科学版),2011(4).