基于Unity3D的虚拟现实家装系统设计与实现

陈春晖

(福建农业职业技术学院,福建 福州 350000)

虚拟现实技术是现代科学技术发展中的重要产物,因为其独特的技术优势,比如仿真性、互动性等,已经广泛应用于多个行业和领域。通过将虚拟现实技术与家庭装修系统进行融合,能够对家庭装修方案进行仿真模拟,在该系统的应用过程中,用户能够通过选择装修材料、布置方案等直观地看到装修效果。对于装修企业以及设计人员而言,不再需要花费大量资金新建样板房,具有良好的经济效益,可以采用科学的系统设计方案,提高系统应用实效性。

通常情况下,用户对于家庭装修系统具有如下几项功能要求:(1)用户管理功能。需要为用户提供基础的用户注册、用户登录以及密码管理等功能。(2)家庭管理功能。需要为用户提供家庭房间增加、房间删除、房间查询以及房间修改等功能。(3)房间物品管理功能。需要为用户提供房间内的物品移动、物品旋转、物品张贴、物品悬挂、颜色更换、材质更换等多项功能。(4)保存与加载功能。需要为用户提供随时保存房间的设计方案与效果加载功能,还需要提供不同方案的对比功能。(5)其他功能。为用户提供留言、通信、评论等社交功能,在成本规划完成后将这部分功能移动到其他应用程序中[1]。

本次基于Unity3D的虚拟现实家装系统采用经典的模块化设计方案,主要包括UI模块、业务逻辑模块以及数据访问模块。在UI模块中,主要包括用户信息、房间信息、物体信息列表以及当前信息,通过动画控制器对物体状态进行模拟与设计;
旋转物体、张贴物体、悬挂物体、解绑物体、绑定物体、保存场景以及加载场景等通过射线控制模块进行调整;
系统基础为数据访问模块,数据加载类模块用于获取和保存Json公式数据,针对模型、图片以及图形等资源采用资源加载模块进行交互;
中间模块为业务逻辑模块,其中核心为GameController,通过该控制器能够实现对当前房间中的物体控制,比如移动、旋转等,MonoBehavior能够对整体房间场景进行加载与保存;
GameController中每个房间或物品都能够将控制类作为组件;
控制类组件能够记录房间中物体的位置、材质以及颜色等,通过对物体颜色的操作实现物体状态改变;
同时提供射线类控制模式,主要功能是选择当前房间中的物体;
动画控制器用户将当前的物品状态调整与UI动画相结合;
GameControlle中的OnGUI以及Update等内置程序能够用于人机界面交互[2]。

2.1 家庭装修中房间物品的选取

在用户利用计算机或智能手机访问基于Unity3D的虚拟现实家装系统时,采用鼠标、手柄等对物体进行交互,逻辑与在2D平面中的操作存在一定差异,鼠标、手柄在操作过程中得到的数据为屏幕中的二维坐标,场景中物体采用三维坐标,因此,需要对二维坐标进行处理。系统中应用Unity3D所提供的射线类Ray控制,具有模拟人眼视线的功能,Camera能够向场景中发射一条射线,为了能够明确射线遇到房间物品的具体情况,需要对房间中的物品增加Collide组件,保证能够实现物品与射线的碰撞效果,能够为用户提供模拟场景。针对射线碰撞到的物体可以更改其外观,还可以模拟出物品的选择[3]。

2.2 预制件问题

在虚拟现实场景中,为了能够展现出房间物品的具体情况,在本次系统设计中采用了多项细节处理方式,主要包括材质、贴图、脚本处理逻辑以及动画等内容。以虚拟现实场景中的人物为例,需要从3DMax中导出fbx格式人物模型,将其增加到虚拟现实场景中,在场景中导出材质与贴图,并设置动画控制器与动画,将对应的控制代码以组件形式增加到人物模型中,从而构成一个虚拟现实人物,但是该过程对于用户而言,只需要对场景中人物进行移动。为了能够提高系统开发便利性,在人物及其元素构成中将其预制成为一个整体,同时Unity3D提供了预制件的整体设计方案[4]。

2.3 坐标调整问题

在用户采用鼠标、手柄等输入设备对物体进行操作的过程中,需要完成二维坐标向三维坐标的调整。在Unity3D中具有多种不同的坐标系,比如本地坐标、视图坐标等,世界坐标对应真实的东、西、南、北4个方向,本地坐标以物体自身作为基础,对应真实的物品前、后、左、右,屏幕坐标为二维坐标,在用户操作时能够自动化实现对二维坐标的转换,视图坐标为虚拟现实场景中摄像机输出的Viewport坐标。因为各个坐标系存在差异,在对应场景中物体的位移、旋转等操作能够实现自动化坐标换算。

2.4 结果保存

在虚拟家庭装修完成后,需要将模拟方案保存,若存储的为整体场景,因为整体虚拟现实场景中存在大量物品,每个物品还包含不同材质、颜色以及位置信息等,整体存储量较大,根据计算,常规的家庭装修虚拟现实结果模拟方案一般能达到500 M以上,采用以虚拟现实为基础的保存方式不利于存储与还原,为此,本次系统设计中应用Json实现关键数据的保存。Json是一项轻量级的数据格式,相比于XML,其灵活性较好,输出存储时间更长,从而能够减少数据存储与传送;
Json针对数组和对象采用不同的形式,数组采用“[]”,格式比如[“java”,”javascript”,”vb”],数值存储时采用索引格式进行读取;
对象存储采用{}格式,格式采用键值对的方式,比如{key:value,key:value,…},Unity3D支持Json功能。

3.1 物体选取功能实现方式

在虚拟现实场景中,选择物体需要采用射线与碰撞检测,在Unity3D中能够采用RaycastHit实现,使用Cameta向屏幕射出一条射线后,在遇到碰撞检测物体时,能够从RaycastHit的属性中获取碰撞物体的信息。示例代码为:

RaycastHithit;

Vector3 pos = Input.GetTouch(0).position

Ray ray Camera.Main.ScreenPointToRay (pos);

if(Physics.Raycast(ray,outhit)){

return hit.transform;

}

Else return null;

在上述代码中,若射线为左手触碰屏幕区域发出的射线,碰撞到物体后会返回物体中,反之返回null,从而实现对虚拟现实物体的选取。

3.2 预制组件实现方式

预制组件功能呈现出本次系统设计精益求精的思想,能够为用户提供更高质量的设计方案,通过采用更多的预制组件能够有效提高系统质量以及开发效率。家庭装修系统中包括家具、壁纸、地板以及电器等多项元素,难以将所有元素事先制作,因此,在系统应用过程中需要不断丰富,可以采用预制件的方式实现。在选择对应物品后,需要对物体进行移动处理,为了实现坐标中的效果,需要完成以下几项动作:(1)从3DMax中导出fbx格式图形。(2)在虚拟现实场景中增加Cylinder组件,并对其属性进行更改,使其成为符合要求的图形。(3)组合两个图形使其构成单个坐标轴。(4)将fbx格式图形添加搅拌Cone.cs,该脚本能够使得用户操作在图形中更改图形的颜色或材质。(5)对坐标轴进行复制与旋转,使其构成x,y,z3个方向,并对其他坐标轴材质进行调整,使得不同的坐标轴能够表现为不同的颜色状态。(6)提供ConeMan-ager,在选择某个物品时,创建坐标轴副本,该副本与选种目标结合,同时在移动坐标轴时还能够移动选定的物品。

在上述流程结束后,能够直接在Unity3D开发场景中将坐标轴拖动到Assert中,Assert中能够显示出制作完成的预制物品,预制物品还能够在其他场景中使用;
除三维坐标系之外,场景中的其他元素比如电器、家具等,都能够采用预制件制作的方式,按照用户的具体需求将其添加到场景中加载[5]。

3.3 坐标系调整实现方式

用户在虚拟现实场景中对家庭装修方案进行模拟时,需要对各种物品进行摆放,所以需要对物品的坐标系进行转化与调整。其转换流程为:(1)按照屏幕坐标机计算各点在世界坐标系中的位置。(2)将物品的本地坐标系前进方向量转化为世界坐标系中的单体向量。(3)将物品的世界坐标系位置与向量融合。以上流程实现代码为:

Vector3 screenSpace = mCamera.WorhlToSereenPoint(transforni.position);

floatx = Input.mousePosition.X;

floatY =Input.mousePosition.Y;

Veeror3 vector = new Vector3 (X,Y,screenSpace.z);

Vector3 startPos = inCanlel,a.ScreenToW orldPoint (veetoF);

while(Input.GetMouseBulton(0))

{

Vector3curScreenSpace=new Vector3(Input.mousePositio.X,Input.mousePosition.Y,screenSpace.z);

//求出偏移量

var offset = mCamera.ScreenToWorldPoint (curScreenSpace)- startPos;

//将两点之间向量投影到物体的上方

offset= Vector3.Project(ofset,GetMoveDirection());

//对目标位置增加一个偏移量得到新位置

Transform.position+=offset;

//重置开始点,为下一帧做准备

startPos = transform.Position;

//等待下一帧

Yield return new WaitForFixedUpdate();

}

3.4 结果存储实现方式

在对家庭装修的虚拟现实结果进行存储的过程中,采用Json数据格式,因为家庭装修系统需要与远程服务连接与交互,实现对多种模型的下载,所以,需要在系统中记录模型ID,不用将所有数据存储,同时不需要保存模型细节。在模型之间对坐标系进行转化,需要记录物品的三维坐标;
物品需要旋转处理,所以需要记录物品在各个轴的旋转角度。最重要的是,物品需要和其他物品保持一定关系,比如图片贴在墙面上、书籍放在书桌上等,这种位置关系也需要存储[6]。以书籍放在书桌上的Json数据格式片段为例,即:{“ID”:”SO132”,”Name”:”Book1,”X”:” 200”,”Y”:”300”,”Z”:”165”,”RotateX”:”0”.” RotateY”:”0”,”RotateZ”:”0”,”Action”:” Put”,”Target:”Desk1”}

在上述片段的最后一部分中,Action和Target表示与对象之间具体关系,在虚拟场景中存储可以通过以下代码流程实现:

for(objectobjin场景 中的所有物体)

{

if(obj已经生成过 json)continue;

if(obj有关联对象)

生成关联对象的json

生成当前对象的json;

}

若需要按照生成的Json对场景进行还原,按照物品的ID从网络缓存中进行记载,如果网络缓存不存在,则可以从服务器中进行加载,从而减少数据加载量,有效提升系统运行速度。

本文所设计的基于Unity3D的虚拟现实家装系统,在实践应用中具有良好的效果,用户能够通过系统功能对家庭装修方案进行实时调整,更加直观地明确家庭装修效果,且能够灵活地对各项家具、电器等物品进行调整,还能够对装修材料进行材质、颜色等内容的挑选,家庭装修模拟方案存储结果数据较小,能够提高各项资源加载速度,对于用户以及装修公司具有重要作用。因此,可以将本文所设计的系统应用在家庭装修工作中,并结合实际情况对系统功能进一步完善,确保虚拟现实系统能够发挥出更好的效果。

综上所述,本文设计开发了一套基于Unity3D的虚拟现实家装系统,对其系统设计以及实现方式进行了全面阐述,希望能够对我国家庭装修行业起到一定的借鉴和帮助作用,利用虚拟现实技术进一步促进家庭装修行业发展,为用户以及装修企业提供更加便利的工作条件。

猜你喜欢 坐标系虚拟现实物品 称物品小学生学习指导(低年级)(2022年5期)2022-05-31独立坐标系椭球变换与坐标换算导航定位学报(2022年2期)2022-04-11极坐标系中的奇妙曲线语数外学习·高中版中旬(2021年11期)2021-02-14三角函数的坐标系模型考试周刊(2018年15期)2018-01-21求坐标系内三角形的面积中学生数理化·七年级数学人教版(2017年4期)2017-07-08图画捉迷藏小天使·二年级语数英综合(2017年3期)2017-04-01虚拟现实,让学习更“沉浸”中小学信息技术教育(2017年3期)2017-03-28找物品小天使·一年级语数英综合(2015年8期)2015-07-06创意,源自生活的可爱小物品读者·校园版(2015年13期)2015-07-01虚拟现实技术不能根本改变新闻声屏世界(2015年7期)2015-02-28

推荐访问:虚拟现实 家装 设计