浅析Unity 3d技术在虚拟现实中的应用
摘要
关键词
Unity 3d技术;虚拟现实;真实场景
正文
引言:虚拟现实技术是现代科学技术发展中的重要产物,因为其独特的技术优势,比如仿真性、互动性等,已经广泛应用于多个行业和领域。通过将其与家装系统、校园交互系统、博物馆漫游系统结合后,可直接实现真实场景的虚拟建设,具备良好经济效益。
一、Unity 3d技术在校园交互系统中的应用
(一)天空盒、地形设计
Unity里天空盒的创建应先创建材质,准备6张资源图,然后先在Window窗口找到Lighting,选好就可以调用,6个面分别对应6个方向,若将6张天空盒或者纹理图片导入Unity时,将它们的Wrap Mode设置为Clamp模式,这样图像的边缘才会充分缝合[1]。
学校内的广场和地形选择在Unity3D里建造,因为Unity 3D可较方便地绘制地形的高度、特定高度和平滑地形,并且在Brushes画笔工具栏中,画笔的形状及大小可以自由选择,可以画坑洼与凸起的高地,给地形加贴图也较为方便,添加树、草地、土壤等的素材时,则选择Trees按钮把素材贴图拖进第一栏里即可为场景方便快捷地增添许多小素材[1]。
(二)交互创新设计模块
以上海某学院三维虚拟交互系统设计与开发为主线,根据虚拟系统实时性与交互性的特点要求,从系统建设的功能需求、体系模块设计、系统框架设计等几个方面展开研究。
界面布局设计上应尽量简洁,一目了然,方便用户初次使用就能从界面上清楚理解各项功能以及操作方法。系统具备交互漫游的功能,用户可以从各个方向和角度观察虚拟的场景,或者按照预先规划好的路径进行漫游,通过触发手柄改变视点,实现以本人视角漫游校园。实现基本漫游功能的基础上,用户还可以通过交互设备实现情景交互体验。交互操作包括实体的几何变换、模型拾取、射线和碰撞检测等。
学校智慧教学中心的智慧课室模块,通过手柄射线实现碰撞检测,可以使HTC Vive手柄与场景中三维模型或者UI发生碰撞检测,交互展现学校智慧课室特色信息与资源、学生信息动态、多媒体视频教学播放等功能。
图书馆模块,通过UI交互和数据库技术结合,开发出图书信息检索模拟平台,实现了学校图书馆总储量、排行榜的信息和虚拟阅读、图书信息检索的
模拟[2]。
实验实训室模块,通过数字媒体技术等专业的实训室,介绍摄影摄像的多种设备和虚拟现实技术的设备工具以及使用说明,用手柄实现对设备的拾取与组装等交互效果等。
在Unity 3D里,用编译软件添加事件的发生,主要运用C#语言来实现,后期熟练代码语言可以运用JavaScript来实现更多较高级的交互操作。后期再以HTC Vive为沉浸式交互体验平台,实现虚拟校园系统中相机视角的实时自主转换功能。
(三)与HTC Vive设备结合
HTC Vive里的射线检测技术很重要,因为在三维世界里,射线是基于空间中一个点沿着某一方向发射的一条直线,当其遇到目标对象时则停止发射,一般用于检测碰撞,结合HTC Vive手柄与场景中三维模型或者UI可完成碰撞检测,其实现流程为手柄发出检测射线,系统判断射线是否与目标发生碰撞,若不是,则循环重新检测,若是发射事件响应,则结束。使用Unity+HTC Vive做VR时,如何创建用户体验感较强的菜单,接收手柄射线的菜单以及拿起虚拟实验设备进行观察,操控手柄点击实现虚拟演示等操作。其中应该注意代码脚本的设置,避免出现用户体验不好的效果,像按钮的抖动导致点击不准确、组件的渲染顺序不当导致场景物品被遮挡等问题。
二、Unity 3d技术在家装系统中的应用
(一)物品选取
用户利用计算机、智能手机访问基于Unity3D的虚拟现实家装系统时,可采用鼠标、手柄等对物体进行交互,其中逻辑与在2D平面中的操作存在一定差异,鼠标、手柄在操作时得到的数据为屏幕中二维坐标,场景中物体采用三维坐标,因此,需要对二维坐标进行处理。系统中应用Unity3D所提供的射线类Ray控制,具有模拟人眼视线的功能,Camera能够向场景中发射一条射线,为能够明确射线遇到房间物品后的具体情况,需对房间中的物品增加Collide组件,保证能够实现物品与射线的碰撞效果,能够为用户提供模拟场景。针对射线碰撞到的物体可以更改其外观,还可以模拟出物品的选择。
(二)预制配件
虚拟现实场景中,为展现出房间物品的具体情况,本次系统设计中采用了多个细节处理方式,主要包括材质、贴图、脚本处理逻辑以及动画等内容。以虚拟现实场景中的人物为例,需要从3DMax中导出fbx格式人物模型,将其增加到虚拟现实场景中,在场景中导出材质与贴图,并设置动画控制器与动画,将对应的控制代码以组件形式增加到人物模型中,从而构成一个虚拟现实人物,但是该过程对于用户而言,只需要对场景中人物进行移动。为提高系统开发便利性,在人物及其元素构成中将其预制成为一个整体,同时Unity3D提供了预制件的整体设计方案[2]。
(三)系统实现
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,从而实现虚拟现实物体的选取。
2.预制组件
预制组件功能呈现出本次系统设计精益求精的思想,能够为用户提供更高质量的设计方案,通过采用更多的预制组件能够有效提高系统质量以及开发效率。家庭装修系统中包括家具、壁纸、地板以及电器等多项元素,难以将所有元素事先制作,因此,在系统应用过程中需要不断丰富,可以采用预制件的方式实现。在选择对应物品后,需要对物体进行移动处理,为了实现坐标中的效果,需要完成以下几项动作:一,从3DMax中导出fbx格式图形。二,在虚拟现实场景中增加Cylinder组件,并对其属性进行更改,使其成为符合要求的图形。三,组合两个图形使其构成单个坐标轴。四,将fbx格式图形添加搅拌Cone.cs,该脚本能够使得用户操作在图形中更改图形的颜色或材质。五,对坐标轴进行复制与旋转,使其构成x,y,z3个方向,并对其他坐标轴材质进行调整,使得不同的坐标轴能够表现为不同的颜色状态。六,提供ConeManager,在选择某个物品时,创建坐标轴副本,该副本与选种目标结合,同时在移动坐标轴时还能够移动选定的物品。
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();
}
总结:Unity 3d技术作为虚拟现实工作开展的关键基础之一,依据其合理使用,可有效实现分布科学规划、信息宣传展示工作。与此同时,细致分析实际应用后,了解到如今创建沉浸平台,身临其境的规划、漫游已成为目前人们关键需要,从而使得Unity 3d技术得到快速发展。
参考文献:
[1]韦南京,杜宏博,谭韬,等.“课、赛、研”三融通教学实践——以Unity编程及开发课程为例[J].高教学刊,2023,9(z2):48-51.
[2]罗雨,马悦,郭聚智,等.基于Unity3D立管横焊机器人虚拟现实技术研究[J].机床与液压,2023,51(12):171-175.
[3]查万雅禾,范秋雯,包雨菲,等.一种基于Unity3D和3ds Max技术的虚拟校园场景漫游交互设计[J].中国科技信息,2023(13):99-102.
...