徐佳
山西工商学院,山西太原 030001
随着时代的发展,人们对自己居住环境的个性化要求也越来越多[1]。由于智能家居设备较为昂贵,样板间在建造过程中成本过高、时间空间受限和材料不可循环利用等问题,虚拟样板间被广泛应用。
智能家居涉及的技术包括综合布线技术、计算机技术、网络通讯技术、医疗电子技术等[2]。目前,智能家居产品造价昂贵,开发成本较高,尚未达到普及状态[3]。
虚拟现实[4]技术简称VR(Virtual Reality),是一种利用计算机来模拟现实中的三维场景。该技术具有三大特点:沉浸性、交互感、构想性[5],开发出的虚拟环境,通过佩戴特殊设备,使得用户仿佛处于真实的环境中,可以满足人们对听觉、视觉等的感官要求。
由于人类对家居智能化、个性化、舒适化等的要求日益增多,二维设计作品已远远无法满足。针对上述问题,本文将智能家居与虚拟现实技术相结合,研究了基于Unity3D的智能家居虚拟仿真系统,不仅可以满足客户的个性化要求,同时也缩短了智能家居的开发周期与建造成本,还可以减少家居产品的损耗,为用户的家居个性化定制提供便利。
Unity3D是一款支持建筑可视化、三维动画、视频游戏等多平台综合游戏开发的软件[6]。本文利用Unity3D中的关键技术,并结合C#语言编写实现了智能家居虚拟仿真系统。该系统实现了整体家居室内外的场景模拟,具备漫游功能。同时实现了家居中灯光、电视机、窗帘、天然气、洗衣机的智能化功能控制模拟。本系统为了提升整个场景的视觉效果,运用了Unity3D中关键技术,比如全屏抗锯齿、高动态范围、层次细节技术等。
系统仿真技术就是利用虚拟现实技术将实体的模型通过计算机以三维的形式呈现出来,从而达到数据的可视化。通常仿真系统能否给用户提供高质量的沉浸感觉,是由模拟实时性和系统运行实时性和模型的逼真度这两方面来决定的。
本系统从用户的视角出发,以普通住宅小区为例,通过调研,对周边环境进行真实模拟,运用虚拟现实技术来表达智能化,通过基于Unity3D渲染引擎模拟现实中的智能家居功能演示,充分展示了智能在家居中为用户带来的便利。同时该仿真系统普适性较强,可以根据用户DIY进行调整。
整个仿真系统建立过程中,所要用到的技术有三类:数据采集技术、建模技术、渲染技术。首先,对前期收集到的数据在AutoCAD中进行二维化处理;其次,利用Sketchup建模软件进行整个场景模型的建立,模型优化,纹理贴图;再次,选用内置NVIDLAPhysX物理引擎的Unity3D软件进行仿真平台的搭建,实现家居场景的虚拟仿真、虚拟漫游;最后,利用Unity3D中内置的柔和阴影与烘焙高度完善的光影渲染系统,对整个场景进行渲染,使得整个画面生动逼真。如图1所示为整个仿真系统技术路线图。
整个仿真系统宏观上分为二个模块:漫游功能、智能家居功能实现。整体设计规划自顶向下逐步细化,遵循瀑布模型。如图2所示为仿真系统室内场景智能化功能分类图。
1、模型制作与优化
目前的建模技术有模拟建模、半模拟建模和测量建模[7]。本系统采用的是测量建模,用AutoCAD把设计好的二维平面图制作完成,导入Sketchup中依图而建,依据设计图中参考尺寸制作出单体三维模型,分别单个成组,然后再组织成三维场景。Sketchup软件小型、轻便,整个建模过程主要以“画线成面,推拉成型”为特点,而且在建模过程中可以为模型表面赋予纹理贴图,用户不需要频繁的切换坐标系,建立了真实的三维模型。该建模软件内置多种简便、实用的小工具,比如:平行工具、量角工具、推拉工具等,帮助用户高效的建立模型。整个场景运行是否流畅的关键因素之一是模型的三角面数量能否做到精简。在构建场景的过程中,个体模型之间会出现相邻模型共面或需要分割的情况,此时用到了Sketchup软件中强大的耦合与分割功能来解决。通过耦合功能,将模型组合过程中出现的重复的线与面进行自动的筛选并删除,从而合为一体。通过分割功能,添加分割边线将模型分为两部分。
本仿真系统以普通住宅小区为依托,整个房屋共分为上下两层,房屋一楼设置书房、客厅、厨房等。该类平面图的格式为.dwg,将其导入到Sketchup中,将每个模块独立成组进行建立,同时将相对尺寸进行标注。模型房屋二楼设置了主卧、儿童房等。此时建好的模型简称白模,为了使得建筑物更加逼真,要采用纹理映射技术。纹理映射数据是三维实体的表面所呈现的纹理信息[8]。通过建筑实物采集纹理数据,选择光线饱满度较高的天气拍摄,但要避免阳光直射;拍摄时要尽量水平垂直拍摄,纹理映射像素一般要求为2n。如果纹理照片不规则,需要给这些面添加UVW贴图坐标修改器,在这个修改器中修改贴图的重复值、贴图的投影方式,保证相邻两个面的贴图的窗缝、门缝、砖缝等对齐[9]。
2、场景构建及关键技术
将Sketchup中进行纹理贴图技术处理后的场景模型文件以.fbx格式将材质不同的模型双面导出,同时要注意将整个场景中的纹理贴图全部导出。将导入的模型导入Unity3D中,为了点亮整个场景,添加了平行光,通过调整红绿蓝三个旋转轴让光束照射的方向与屏幕呈60°较好。
在Unity3D引擎中,对各个模型添加了LOD(层次细节技术)。整个系统在加载模型过程中会自动根据用户视距来调用显示不同精细程度的简化模型,实时的动态改变场景的复杂度,以达到提高场景渲染效率。在场景中,当模型中的线段和边线经过光栅化处理后会呈现出锯齿状,这种情况被称为走样,严重影响图像的画质,因此加入全屏抗锯齿技术。该技术大致可划分为六类,本场景中使用的是4倍的快速近似抗锯齿。该技术解决的关键问题是消除图形的边缘锯齿。将造成锯齿状的像素点与非锯齿状的像素点进行线性的运算,取平均值,从而减少锯齿,达到平滑的效果。如图3所示为未添加全屏抗锯齿前与添加全屏抗锯齿后的效果对比图,由此可得,添加了快速近似抗锯齿后家居模型边线边缘变得平滑,提升了场景的视觉效果。
为了充分体现该系统的交互性,在Unity3D软件中使用了路径漫游功能。常见的漫游方式有3种,分别为第一人称漫游、飞行漫游、第三人称漫游。本系统使用第一人称漫游,又称行走漫游。此漫游方式属于自主交互性漫游,用户通过对鼠标、键盘或者其他设备来控制整个系统的行走路线。如果用户对系统布局不是很熟悉的话,使用该漫游方式会容易迷路。故根据贝塞尔曲线定理,在场景范围内构建寻路网格,对场景中三维平面上的关键路径点参数进行相关设置,从而让用户十分方便的沿着设定好的路线漫游。
本系统所采用的渲染技术为正向渲染,该渲染方式共涉及两部分:
(1)系统利用遮挡剔除技术对场景中当前摄像机范围外的一些不可见的三角面进行删除,这些物体就不需要占用CPU、GPU,从而减少每帧的渲染量;
(2)根据开发者在场景中所布置的光源以及光源的强度来决定采取单通道或多通道方式对物体进行渲染。采用该方式渲染,不仅减少系统的内存占用率,同时提高了漫游效率。使用该渲染技术,不仅降低了计算机内存的占用率,同时也提升了场景的运行效率。
智能家居仿真系统的相关功能是基于Unity3D的关键技术与C#语言功能相结合实现的。主要功能有家居中灯光、窗帘、电视机、洗衣机、天然气功能的智能控制模拟。在整个家居中,灯光的控制是整个系统的核心部分,该灯光选用spotlight,启用了Unity3D中光照组件的.SteActive属性,修改了灯控代码,使得用户能自主的通过点击系统界面上的按钮来实时控制整个环境中灯的亮灭。
灯光控制主要程序:
if(open1){
bedroomlights.SetActive(false);//灯光关闭
}else{
bedroomlights.SetActive(true);//灯光开启
}
open1=!open1;
在Unity3D中为窗帘模型添加了Animation动画组件,包含两部分:打开动画、收缩动画。调用窗帘模型Transform的属性使得窗帘沿着设定的Z坐标轴进行缩放。同时设置从0到8为打开模式,从8到18为关闭模式。图4是窗帘的Animation界面控制示意图。
电视机控制模拟是通过Unity3D中的StartCoroutine ( )函数实现,其原型为public function stratCoroutine (methodName:string, value:object=null): Coroutine;首先在电视模型上添加一个面,将准备好的演示文件添加进入。由于演示文件导入Unity3D中后,会分为两部分,一部分是视频文件,一部分是音频文件。所以需要添加小喇叭模型,绑定对应的音频文件。通过使用C# 语言编写功能程序,控制电视机的音视频实时播放与实时关闭。图5为电视机播放时的画面。
洗衣机工作控制功能是通过改变洗衣机模型的i.active属性值来实现。i.active属性为bool类型,值为true时代表工作,false时代表未工作。厨房中天然气的开关控制非常重要,本系统通过火焰的有无来体现天然气的开关。火焰本身属于Unity3D中的粒子系统,通过代码编写实现该功能。如图6所示为开启天然气示意图。
在Unity3D平台上研发了智能家居虚拟仿真系统,模拟实现了家居的部分智能化功能,解决了传统实物建造周期长、成本昂贵等问题。Unity3D拥有强大的跨平台功能,本系统可以非常方便的在Windows、Mac、Android等系统发布。小巧轻便,可适性强,同时可以根据用户DIY个性定制,操作简单,交互性强,加强了用户在视觉、听觉上的感官认识,有助于智能家居技术的宣传工作。