290 likes | 577 Views
基于Unity3D的室内漫游仿真系统研究. 目 录. 1. 研究背景和意义. 2. 相关理论和技术. 3. 系统需求分析. 4. 系统架构设计. 5. 系统实现. 6. 总结和致谢. 研究背景和意义. 虚拟现实技术 综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间 。.
E N D
目 录 1 研究背景和意义 2 相关理论和技术 3 系统需求分析 4 系统架构设计 5 系统实现 6 总结和致谢
研究背景和意义 • 虚拟现实技术综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 • 虚拟现实技术已经在多个领域 中得到应用,如家庭娱乐系统、军事仿真系统、室内漫游仿真系统、医疗系统等,创造了巨大的社会价值和经济价值。
研究背景和意义 • 室内漫游仿真系统作为虚拟现实技术的一个分支,正在得到迅速的重视和发展。室内漫游仿真系统的优势在于,相对于单一的图片展示,更能使用户获得身临其境的直观感受,能获得更细节、全方位的信息。它的沉浸感、交互感是其他传统媒体平台和动画所无法比拟的。室内漫游仿真系统包括一个逼真的视、听、触觉的一体化的虚拟环境,用户借助必要的装备在该环境中漫游,从任意角度观察环境中的物体,从而产生身临其境的感觉,同时也可以对环境中的家具进行规划和操作。
相关理论和技术 室内漫游仿真系统 三维建模 编程控制 • 三维建模,是通过三维建模软件,将心中想象的或设计图纸中的家具和建筑模型构建出来,然后再通过绘图软件来绘制贴图,将贴图映射到模型的表面,最后完成一个一个物品的过程。 • 三维建模方法:几何建模/建模软件建模、设备扫描建模、根据图像或视频建模 • 编程控制,是通过编写代码,精确控制每一个家具的运动和位置,控制人物在室内的行走,摄影机的移动,达到漫游的目的。
相关理论和技术 系统开发流程图如下图所示
三维建模 • 本系统采用3dsMax 2009建模软件 为建模工具,它具有易上手、教程多、 插件众多、能建立工业级复杂模型 的优势。 • 场景三维建模是室内漫游仿真系统主要构成部分,也是整个项目最为繁重的部分 • 建模原则: • 首先要尽量做简模。虚拟现实中的运行画面每一帧都是靠显卡和CPU 实时计算出来的,如果面数太多,会导致运行速度急剧降低,甚至无法运行;模型面数的过多,还会导致文件容量增大,在网络上发布也会导致下载时间增加。 • 第二,模型的数量不要太多。如果场景中的模型数量太多会给后面的工序带来很多麻烦,如会增加烘焙物体的数量和时间,降低运行速度等
编程控制 • 本系统采用Unity3D引擎为实现平台,它具有超高的性能和简便的场景编辑器,拥有AAA级别的功能和组件,满足各种平台的需求。
编程控制 • Unity3D采用组件式开发,它包括寻路、动画、资源管理、音频、物理、图像效果、首选项设置、网格、网络、渲染、GUI用户界面、变换、摄像机、光照、角色控制、粒子特效等数十个组件。 • 它拥有层级可视化编辑器,动态的游戏预览和属性编辑,支持自动资源导入,支持Bump Mapping、Reflection mapping、Parallax mapping、Shadow mapping、light mapping等技术,内建地形编辑器,支持树木与植被贴片,支持多人网络联机。 • Unity3D支持三种语言,即C#、JavaScript、Boo,前者是面向对象语言,对于大型项目宜采用;后两者是脚本语言,对于中小型项目更具有灵活性。编写程序必须调用Unity3D SDK中的API,包括实时运行类和编辑器类 • 项目工作主要集中在Assets文件夹,包括models、scripts、materials、textures、sounds、shaders、standard assets7个文件夹。scripts下放编写的脚本文件。在保存场景的时候,系统会自动编译脚本为.net dll文件。
系统需求分析 开始着手项目,首先应该对系统做需求分析,确定系统要做什么。 需求分析之所以重要,就因为它具有决策性,方向性,策略性的作用。我姑且把它称作需求驱动开发。 • 用户需求: • 别墅建筑有四层,第一层是杂物储存室,第二层是起居室、读书 室、活动室等,第三层是会客室,第四层是天台。 • 用户能利用键盘和鼠标来控制摄像机的移动。 • 用户能与场景中的道具有交互体验。 • 系统具备和现实世界一样的物理特性。 • 系统需求: • 采用面向对象的软件开发工具,使系统具有可扩展性、可维护性和稳定性。 • 操作界面友好,系统运行流畅,内存占用适中。
系统架构设计 系统分为三维建模和编程控制,那么自然在设计的时候就分为模型和程序两个模块。这样在项目的不同阶段,可以针对某一个模块进行实施,让开发人员得到一定程度的解放。 程序模块 模型模块
模型模块设计 模型模块的设计图如下所示,整个模块分为三个层次,在建模要求上和模型复杂度上都有不同的要求,需要区别对待。
程序模块设计 程序模块的设计图如下所示,整个模块也分为三个层次,按功能的优先级划分依次是漫游、交互操作、系统设置。
系统实施-三维建模 首先是建筑模型的三维建模。 1.楼体建模。规划设计整个楼体的形状和各附属物(门、窗、楼梯)等的相对位置及它们的尺寸比例。四层楼的建筑,可以分成四个部分,每一层楼为一个部分,单独在一个max文件中建立,每层楼的楼体建立过程大体相似,墙壁、门窗、地板都可以用同一套资源。
系统实施-三维建模 2. 室内家具建模。包括书桌、沙发、床等的建模,要求比较精细,综合运用了旋转、弯曲、面片编辑、多边形编辑等修改器。下图为椅子、台灯的模型成品。
系统实施-三维建模 3.其他设施。主要包括地形和植物。地形本质上是一张平面,只是在U3D中又加了一些东西而成了一个独特的Terrian对象。在这层地形上,可以拉出山脉、高原,栽种一些植物,铺就一层植被和绿茵草。
系统实施-三维建模 4.灯光。 在Unity3D中,依次点击GameObject->Directional Light创建太阳光,选择Spot Light创建室内灯光。
系统实施-三维建模 最后整合场景,将资源按规格命名,依次导入Unity3D并作简单优化。
系统实施-程序编写 1.摄像机漫游。首先创建一个替代主角的物体,随便什么模型都可以,这里选用一个胶囊体A,并为之创建一个Capsule Collider包围盒。Unity3D已经内置了一个Character Controller,里面已经包含了包围盒,并附带一些其他运动控制信息,所以这里为胶囊体A附加一个组件Character Controller。 此时A只是具有了包围盒和一些物理信息,但是它自己不能动,因为没有任何让模型A运动的逻辑处理代码。所以再创建一个JavaScript脚本名为Character Motor(寓意为模型的运动马达)。
系统实施-程序编写 此时虽然有了处理模型运动的代码,但是模型仍然不能动,为什么? 因为没有处理用户输入的逻辑代码,当用户按住W、S、A、D的时候,系统并没有去获取这些输入信息,所以还要创建一个JavaScript脚本文件名为FPSInput Controller。
系统实施-程序编写 完成这一步,模型A能运动了,但是我们的视觉没有跟着模型A一起运动,因为摄像机(相当于这虚拟世界中我们人的眼睛)并没有移动。这里需要把摄像机Main Camera1和模型A绑定起来,让Main Camera1跟着A一起运动。因此这里需要创建一个JavaScript脚本文件名为third person camera. 将Main Camera1指定给Camera Transform组件,完成这一步,我们的摄像机就能跟随模型A一起运动,并不断变换视角,终于有了一丝漫游的味道。
系统实施-程序编写 很快我发现,我的眼睛(摄像机)只能直勾勾地盯着前方,不能转动脑袋,仿佛僵硬的机器人。这是因为我在绑定摄像机之后,它的角度和位置是固定的,我要想转动摄像机,就需要实时地改变摄像机的角度。通过鼠标的X、Y坐标来获取用户的输入,这与我们以往的游戏体验是一致的。 为了能够处理X、Y坐标的输入信息,并改变摄像机的角度,我需要创建一个JavaScript脚本文件Mouse Look,将它附加到Main Camera1上。 做完这一步,摄像机漫游的功能就做完了。
系统实施-程序编写 2.碰撞检测。Unity3D内置五种包围盒,即Box,Sphere,Capsule,Mesh,Wheel包围盒。所以直接在需要碰撞检测的模型,比如墙壁、楼体、门等加上碰撞检测器。
系统实施-程序编写 3.门的交互控制。为了实现门的打开,本质上来说就是要控制门要绕着Z轴旋转九十度。因此我创建了一个JavaScript脚本文件名为Door Control,并将之附加到门的门把上,这样与现实似乎一致。在这个文件里我检测鼠标点击事件,当点击门把时,门旋转九十度,结果就达到了开门的目的。
系统实施-程序编写 4.音乐的控制。为了实现背景音乐的关闭,我专门做了一个音响模型SoundBox,然后创建了一个脚本文件名为Sound Control,并将Sound Control脚本组件附加到Sound Box上。最后别忘了随便在某处添加一个Audio Listener。
总结 项目成果: • 基于Unity3D的室内漫游仿真系统一套。 • 学习并实践了Unity3D开发知识,积累了初步的研究能力。 存在的主要问题: • 由于项目的复杂、技术的水平限制,我的项目并没有达到我心中完美的模样,有些功能还没有开发出来。 • 别墅模型的精度还不是很高,贴图也绘制得不是特别像,尤其是贴图绘制好之后,要放大模型就会发现贴图变模糊了。 • 对Unity3D的学习还不足够,只实现了大概的功能,并没有完善到细节,程序的架构设计还存在不合理的地方。
致谢 学士学位论文到此就结束了,我向辛勤指导我的导师王安志表示衷心的感谢!王老师严谨的治学态度、宽阔的视野、渊博的知识和毁人不倦的师德对我影响深远。 四年的学习生涯,短暂而又漫长,我在这里学到了梦寐以求的知识和做人的道理,还有做事的态度,领悟了如何独立思考,领悟了很多人生的哲学。这四年我没有虚度,些许的遗憾才是不完美的完美。 我的父母用辛勤的汗水供我上大学,让我有了更高的平台看世界,也是因为爱着他们,我努力学习拿成绩回报他们。 感谢计科系的各位老师、各位领导对我的认可和帮助。 感谢我的母校四川文理学院,这四年的生活将会是我一生难忘的记忆。