标题:基于UNITY Web3D虚拟校园的设计和实现

添加日期:2015/11/15 11:09:04 阅读次数:260


三维虚拟校园目前已成为高校信息化建设的重点,成为展示高校信息化技术能力和形象的一个重要方式;三维虚拟校园是将计算机三维技术、环境建模技术、贴图渲染技术、仿真技术和不断发展的互联网技术相结合,形成一种崭新的信息交流方式。与传统二维数字校园相比,能更真实地展现客观世界;和网络技术相结合后,使得浏览者能够更加便捷的、真实的体验校园人文气息和优美的场景,可以不受时间、空间的约束来满足用户参观、了解学校的需求,对于介绍和宣传学校的历史、文化等有着重要的意义;通过动态交互产生身临其境的感觉,可以用于改善教学科研手段,能够为广大师生提供一个功能强大的沟通、互动、分享的虚拟平台,提高教学科研的效率和水平,对提高校园管理水平等也具有重要的实际意义。

系统设计

开发平台选择

Unity是由Unity Technologies开发的工具,能够让开发者轻松创建诸多三维视频游戏、实时三维动画、建筑可视化等类型互动内容的多平台综合型游戏开发工具,是一个全面专业方便的游戏引擎。UNITY3D适合大型场景的制作,支持所有主要文件格式且对硬件要求不高,低端硬件亦可流畅运行广阔茂盛的植被场景;对DirectX和OpenGL拥有高度优化的图形渲染管道,使得画面效果优异,扩展空间高,并且提供了真实的高度完善的光影渲染以及柔和阴影与烘焙的系统。

图形底层与逻辑架构

3D底层使用微软DirectX9.0c接口(简称DX9),兼容所有支持DX9.0c的硬件与操作系统。可以获得更好的图像显示质量与硬件兼容性,使项目具备硬件平台伸缩性,以及更佳的画面效果。

逻辑层面使用.net开发基于微软运行环境。主体使用C#开发,为保持在普通浏览器上的兼容性与透明性,涉及浏览器部分的功能使用JavaScript脚本,从根本上解决多浏览器兼容问题。

软件结构方案

为了最大限度发挥软件设计功能,节省硬件资源,该系统使用B/S+C/S结构方案。在充分使用B/S架构的基础上,通过分布式后台下载方式在客户端机器建立有效缓存,实现半C/S结构,有效减小服务器的负载。

系统实现

对象建模

3D虚拟校园中建筑和场景模型的好坏,直接影响运行的效果和用户使用的逼真度。简陋的模型会破坏视觉效果,高精度大数据量的模型会影响系统运行速度,因此能否制作出简洁适当的模型,决定作品画面质量的好坏。大连理工大学校园面积大、建筑物多、树木景观多,而对系统画面效果要求极高,根据以上因素,在建筑建模时采用特殊技术并制定严格的标准,尽量减低模型的数据量;花大量精力对贴图进行处理,减少贴图的数量。同时利用法线贴图和相关特效实现逼真的效果;树木模型精选五种树,通过对树木形态改变完成对整个校园树木的模拟,精细程度树叶可见;人物雕塑模型一直是虚拟现实系统模型的难点,对该类模型的解决方式采取先捏塑简单泥模,将其扫描进电脑,之后进行处理建模,这样得到的模型兼顾了仿真度高、数据量小的要求。

场景效果实现

一直以来,虚拟现实作品的场景效果和系统的运行速度一直是一对矛盾体,尤其网上应用,大家一直在“痛苦”地取舍。结果多是为保证系统的流畅运行,牺牲画面质量,没有完全达到仿真效果。为达到功能和画质的兼得,在制作过程中进行了一些探索:

1.运用多核支持技术

渲染引擎是面向多核处理进行设计的,有很多针对多核心系统的优化,应用了先进的无锁并行性技术,使引擎有更好的缩放性,并在不阻塞主渲染线程的情况下提供动态加载更新场景的能力,使基于互联网的高精度、大场景即时下载漫游和编辑功能成为现实。

2.延迟着色

延迟着色是一种针对3D场景进行后期照明的技术。利用这种技术打破了以往渲染系统支持多重动态光源时,效率和各种性能急剧下降的限制,从而使得在一个3D场景能够支持上百上千动态光源的效果。它的实现方法主要是将3D场景的几何光照信息渲染到render targe上,把它们从三维世界空间转变成屏幕的颜色空间,作为光照计算时的输入,然后对每一个光源,使用这些信息输入逐一进行计算生成一帧,然后把这样的一帧合成到结果的帧缓存上,当遍历完所有的光源后,计算就完毕了,帧缓存上的图像就是最后的渲染结果。

Unity3d引擎着色框架是基于DX10架构的,64bit颜色抗锯齿G-Buffer,提供更精确的颜色计算,并支持大量的实时光源,能提供逼真的建筑内外光照效果。

3.真实的自然天光

一个真实的天空效果对渲染气氛是十分重要的,渲染引擎基于地球任一点任意时间的大气光学厚度对于不同波长光波的Rayleign和Mie散射的数学建模,可以提供真实的天光和光照效果,如图1所示。

4.动态软阴影

获得动态树阴影效果,Unity3D引擎采用先进的多级PSSM ShadowMap投影方式和VSM的过滤算法,可以产生动态的精细的柔和阴影效果,并可以支持半透明的物体投影。

Shadow Mapping(阴影映射)是一种图像空间的技术,它是在以光源位置作为视点的情况下渲染整个场景的深度信息,然后再使用这些深度信息去决定场景的哪一部分是处于阴影之中。它有锯齿并且依赖缓冲技术。由于可以在保持帧率的情况下达到真实感光照和阴影效果,编辑器允许在场景中放置任意数目的静态光源,它会为每个面预计算光流量和静态阴影。

5.体积光

体积光是指大气中漂浮的尘埃在光照情况引起的散射效果,比如像在暗屋子中从窗缝投进的光柱效果,它给人一种莫名的厚重感和时间感,也是构成真实画面效果的不可或缺的一部分,如图2所示。

6.景深

无论是人眼还是照相机这种光学系统,都有在聚焦平面处清晰,在远离聚焦平面越来越模糊的现象。所以景深是重要的一种镜头表达方式,系统使用屏幕空间的基于逐像素的多次高斯卷积滤波,可以模拟出人眼的这种效果,增加用户身临其境的感觉。同时主画面以外的部分被虚化后,面数大大降低,可减少系统对资源的占用,有助于实现高画质的流畅运行。如图3所示,近景场景清晰而远景场景模糊。

7.实时环境遮挡

假设在一个太阳光没有直接照射到的一个桌面放上一个茶壶,那么虽然这里没有直接光照但是在茶壶底部仍然能形成一圈暗影,这便是间接光照的影子,就是说茶壶减少了其他物体如墙面对于桌面的关系反射,这种间接阴影是构成真实的全局光照的重要的一部分,没有这种效果桌上的茶壶就会有漂浮感。采用改进的基于DX9.0c的实时环境遮挡技术HDSSAO,可以带来逼真的间接阴影效果。

8.次表面反射

不大幅增加模型数据量而实现模型的高度真实感,除前面提到的法线贴图技术比较典型,也比较受关注的是玻璃反光,甚至往往是观察的重点。运用基于双向次表面散射反射分布函数BSSRDF,对玻璃和其他不同的材质建模表现出和逼真的表面效果。

9.移动控制

第一人称浏览时,可以控制的动作。就是通过“wasd”或者上下左右键来控制移动。首先新建一个JavaScript文件,这里命名为InputDetect吧,输入下面的代码:

#pragma strict

var Player : GameObject;

function Start () {}

function Update () {

Player = GameObject.Find("PlayerCube");

if(Input.GetKey(KeyCode.W)){

Debug.Log("Hit w");

Player.transform.Translate(Vector3.forward * 2);

}else if(Input.GetKey(KeyCode.S)){

Debug.Log("Hit s");

Player.transform.Translate(Vector3.back * 2);

}else if(Input.GetKey(KeyCode.A)){

Debug.Log("Hit a");

Player.transform.Translate(Vector3.left * 2);

}else if(Input.GetKey(KeyCode.D)){

Debug.Log("Hit d");

Player.transform.Translate(Vector3.right * 2);

}

}

这时,运行这个系统,就可以通过“WASD”来控制移动了。

系统的发布

最终系统是网上应用的,考虑到用户硬件的配置差异,提供从高到低四个版本,最低可支持集成显卡,并在主页面上制作对应按钮,清晰标注每个版本对应的配置需求,方便选择浏览,并在演示页面设置操作图示。

为了能够更真实地展现虚拟现实场景,充分地利用Unity3D系统的插件,通过延迟着色、真实的自然天光、动态软阴影技术、实时环境遮挡技术、HDR动态亮度适应、景深技术等展现一个真实的、柔和的场景,为访问者提供了良好用户体验度。通过脚本编程,实现移动控制,增加用户体验度。

大连理工大学三维虚拟校园系统每个版本文件25M左右,运行时占内存400M;页面打开迅速、运行流畅;界面友好,操作便捷。画面精美自然,给人以身临其境的感觉。

(作者单位为大连理工大学网络与信息化中心)