• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于Unity3D技术的VR全景漫游系统的研究与开发

——以青州古城漫游系统的制作为例

张成霞
  
安防科技
2024年5期
潍坊工程职业学院 山东省 青州市 262500

虚拟现实技术,简称VR,是通过计算机模拟以假乱真的虚拟环境,从而给人以身临其境感受的技术。近年来,虚拟现实技术日渐成熟,虚拟漫游迅速渗透到人们学习和生活的各方各面,并发挥着越来越重要的作用。古城VR全景虚拟漫游系统就是利用虚拟现实技术模拟再现青州古城真实场景,并能实现与场景交互的系统。其关键技术包括利用三维建模软件3D MAX创建古城的房屋、城墙、城门等主要建筑物的3D模型,利用Photoshop等软件剪裁图像制作贴图,接下来利用Unity3D引擎和C#脚本,使用户可以在虚拟景区中如同置身真实世界一样可以自由行走和观察,帮助用户了解景区的历史文化。

一、VR全景漫游系统系统总体设计思路

(一)系统设计目标

基于Unity3D技术的VR全景漫游系统的研究与开发,是要想保证用户带上VR头盔后,能产生身临其境旅游一样的效果。所以,需要保证在虚拟场景中按比例真实还原古城原始景点,所有重要的场景要尽量真实表现出来;提供比较人性化的便于用户操作的导航界面,能提供多种漫游模式,包括摇杆控制、自动寻路等;关键尝尽最好能配备景点语音讲解、操作提示和背景音乐播放,并可以由用户自行设置关闭或打开。

(二)系统搭建思路

古城VR全景虚拟漫游系统搭建时,主要关注以下两点:

场景搭建时,要求虚拟实体的外观与真实的校园环境尽可能保持一致,仿真度高。场景要素主要涉及地形、建筑模型(比例、贴图材质)、植被、景观、公共设施、天空盒子、光照强度等。主要实用3D MAX、Photoshop等软件实现。

场景漫游时,系统能保证浏览者的自主漫游,触及或临近特定建筑后能触发特定行为(碰撞检测),比如属性的修改、语音或文字提示等等,场景的切换既可以由碰撞行为触发也可以通过系统主界面中预留的按钮引导,场景切换后即可进入建筑物内部进行浏览。它的主要目标是实现景区漫游功能。系统加载后首先看到的是系统界面,然后才能调用漫游功能。漫游的主体是摄像机(用来模拟人的视角),客体是处于Unity3D游戏引擎场景之下的unity3D虚拟校园模型。漫游功能按模式分成自主漫游和自动漫游两种。在自主漫游模式下可实现场景的切换。

二、全景漫游系统场景的搭建

模型数据的采集和加工处理是整个系统构建过程中重要的一环。数据采集质量的高低会直接影响到系统生成后的用户体验。因此对数据的采集和处理至关重要。主要通过网络搜索、实景拍摄等方式,获取青州古城建筑的照片素材,同时,所要收集的数据包括建筑物的高度和坡度、面积尺寸、比例等、地面场景和公共基础设施、多媒体音视频等,都要尽可能的精确。

所收集的数据信息是为青州古城各场景的建模。青州古城景观建筑需要按照固定的比例以三维对象的形式呈现在用户面前。为了完成这种映射关系,必须借助于结合青州古城建筑风格用三维制作软件3Dmax和Maya软件制作古城场景建筑白模模型。由于青州古城中,建筑多为城墙、楼宇、街道等,建模以多边形建模为主,以二维图形为辅。综合运用各种多边形修改工具,结合推、拉,旋转、位移、挤出等操作多边形基本体。对楼层的设计要根据实体比例,对平面轮廓进行推拉等操作。关于楼顶的构筑,宜采用多边形工具进行编辑,挤出并进一步操作制作;大门等方法类似,直至建筑实体构建完毕。这种建模方法获得模型速度快,易于修改,便于后期维护和升级。建模完成后,要经过检查,把模型中多余的点、线和面进行删除,最大程度精简面数,减少冗余数据。

最后,用3Dmax中的UVW编辑器和UV拆分插件Unfold3D拆分各种场景模型的UV,在3Dmax和Maya软件中根据古城参考素材上材质贴图,所有场景模型上完材质贴图之后导出为FBX格式文件,利用Unity软件,把所有场景的FBX格式文件导入进去,根据古城照片参考进行场景布局摆放。

三、全景漫游系统交互开发中的关键技术

1.自动寻路技术

自动寻路技术是全景漫游系统中的一项智能功能。添加该项技术后,移动路线会变得非常的简单,操着者可以以最快捷的移动路线跳转至指定的位置,避开了找不到路的烦恼,是3D游戏中动态物体实现自动避障寻路的一种技术。核心代码如下:

private void Awake()

{

GameObject pathGameObject = GameObject.Find("pathPoints");

pathList = new Transform[pathGameObject.transform.childCount + 1];

for (int i = 0; i < pathGameObject.transform.childCount; i++)

{

pathList[i] = (pathGameObject.transform.GetChild(i).transform);

}

}

void Start()

{

//查找离自己最近的下一个点(二分法)

int p_left = 0;

int p_right = pathList.Length - 1;

while (p_left < p_right)

{

int mid = (p_left + p_right) / 2;

//对比mid和右区开始

if ((pathList[mid].position - transform.position).sqrMagnitude < (pathList[mid + 1].position - transform.position).sqrMagnitude)

{

//在左区

p_right = mid;

}

else

{

//在右区

p_left = mid;

}

}

void Update()

{

if (Vector3.Distance(transform.position, target.position) < 0.2f)

{

pointIndex++;

if (pointIndex >= pathList.Length-1)

{

//終點

ExitAutomaticRouting();

return;

}

this.transform.LookAt(pathList[pointIndex]);

target = pathList[pointIndex];

//判断节点,打断,交互.

//..

}

else

{

Vector3 dir = target.position - transform.position;

transform.Translate(dir.normalized * moveSpeed * Time.deltaTime, Space.World);

}

2.场景之间的切换

当游客需要从一个浏览场景切换到另一个浏览场景进行浏览的时候,利用场景切换功能可以轻松实现场景之间的跳转。核心代码如下:

public class NewBehaviourScript : MonoBehaviour {

void Start () {

GameObject[]InitGameObjects =GameObject.FindObjectsOfType<GameObject>();

foreach(GameObject go in InitGameObjects)

{

if(go.transform.parent==null)

{

GameObject.DontDestroyOnLoad(go.transform.root);

}

}

SceneLoadManager.LoadScence("new scence", delegate (float progress)

{

Debug.LogFormat("{0}", progress);

}, delegate ()

{

Debug.Log("加载成功");

});

}

3.碰撞检测关键技术

在虚拟场景进行游览的时候,为了产生跟真实场景一样的体验效果,需要仿照真实场景设置阻挡等效果,利用碰撞检测技术可以实现此项功能。核心代码如下:

if(Input.GetMouseButtonDown(0))

{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

if(Physics.Raycast(ray,out hit))

{

movetoposition=newVector3(hit.point.x,controller.transform.position.y, hit.point.z);

controller.transform.LookAt(movetoposition);

}

}

if (Vector3.Distance(movetoposition, controller.transform.position) > 0.1f)

{

Vector3 back = controller.transform.position;

CollisionFlags flags = controller.Move(controller.transform.rotation * Vector3.forward * Time.deltaTime * 2f);

}

}

四、结论

基于Unity 3D的虚拟现实全景漫游系统为学者探究景区漫游系统的设计与开发提供参考,同时也游客用户了解青州古城景区提供大量的参考信息,同时更加真实地展现景区的独特魅力,将会对景区的宣传工作起到积极影响。

参考文献

[1]陈浩,索南尖措.基于Unity3D的虚拟西藏景区漫游系统及其关键技术研究[J].科技传播,2019,11(24):114-115.

[2]姜涛.基于Unity 3D的虚拟校园漫游系统设计[J].中国新通信,2021,23(02):117-118.

作者简介:张成霞(1978.07-),女,汉族,山东省青州市人,教授,硕士,研究方向:虚拟现实技术应用。

基金项目:潍坊市2021年科技发展计划项目:基于Unity3D技术的VR全景漫游系统的研究与开发—以青州古城漫游系统的制作为例,项目编号:2021GX087

*本文暂不支持打印功能

monitor