收藏 分销(赏)

基于Unity三D的汽车驾驶游戏的设计和实现毕业论文.doc

上传人:快乐****生活 文档编号:2455570 上传时间:2024-05-30 格式:DOC 页数:41 大小:5.19MB 下载积分:12 金币
下载 相关 举报
基于Unity三D的汽车驾驶游戏的设计和实现毕业论文.doc_第1页
第1页 / 共41页
基于Unity三D的汽车驾驶游戏的设计和实现毕业论文.doc_第2页
第2页 / 共41页


点击查看更多>>
资源描述
目 录 摘 要 I ABSTRACT II 一、 绪论 1 (一) 研究背景和研究意义 1 (二) 国内外研究现状 1 (三) 论文组织构造 2 二、 3D游戏技术知识系统 2 (一) 3D图形库 2 (二) 物理引擎 5 (三) Unity3D 8 三、 车辆驾驶游戏设计 11 (一) 游戏创意 11 (二) 游戏框架构造设计 13 (三) 游戏层次构造设计 14 四、 车辆驾驶游戏实现 15 (一) 场景渲染实现 15 (二) 场景物理仿真实现 21 (三) 汽车动力学模仿 22 (四) 顾客图形界面实现 24 (五) 网络联机模块实现 27 五、 游戏展示与性能分析 28 (一) 游戏展示 28 (二) 性能分析 30 六、 项目总结 32 (一) 总结 32 (二) 下一步工作展望 33 参照文献 34 摘 要 随着计算机技术发展,电子游戏形式越来越丰富,顾客对于电子游戏娱乐性需求也越来越高,追求更加真实感官体验成为电子游戏一条发展趋势。作为虚拟现实领域一项综合应用,3D游戏已经在电脑、手机、机顶盒等多平台得到了普及,相对于老式2D游戏,3D游戏让顾客感觉更融入,更加享有,但所依赖计算机技术也更加复杂,计算机图形学、物理仿真等都成为3D游戏开发所需要重点研究方向。国内在电子游戏领域发展与领先国家还具备一定差距,为了振兴本国电子游戏行业,对这一项综合应用所涉及技术进行整体梳理是完全有必要。 论文按照从设计到实现,从理论到应用。一方面简介了3D游戏普通技术框架,之后环绕一款基于Unity3D小型汽车驾驶游戏,使用Unity3D支持各种平台,可以便引入各方面插件。在游戏设计和实现阶段,先简朴简介了游戏创意,接着设计了整个游戏整体构造,并将游戏系统重要分为图形渲染、物理仿真、网络同步等模块,图形渲染使用Unity3D中OpenGL插件,使得游戏可以运营到手机平台,为了更精准、更迅速解决汽车物理仿真,使用了PhysX来对车身及场景进行物理设计,着重涉及到碰撞检测、车身刚体及轮胎悬挂系统概念及算法,并且增长界面设计及网络模块使得顾客增长互动性。论文最后对游戏做了一定分析,在执行效率及可玩性做出了改进展望。 整个游戏系统各模块之间接口灵活且耦合性低,且运营效率高,虽然属于小型游戏,但涉及技术点较为全面,可觉得同类问题提供参照。 核心字:Unity3D,游戏,图形引擎,物理引擎,PhysX,汽车驾驶 Abstract With the development of the electronic science,forms of electronic games are becoming richer and richer,meanwhile that users need to more real sense judgment has been an important progress trend.As an application of the virtual reality,3D games is available on all the major computer,mobile platforms,set-top boxes and so on.3D games make users easier immerse in enjoying it compared with 2D games,but require more complex technique,so that Computer Graphic and Collider detection have been key research fields.The industry level of 3D games falls behind in China at present,it is a meaning work to go through the technology of the comprehensive application. The thesis is order from theory to application.Firstly this paper introduces the base framework of 3D games,and then develop a vehicle game by Unity3D,which supports multiple platforms and easier to develop by the plugin.In the specific game,introduce the idea of this game and discuss the overall design of the integral structure.This game is broken down into modules such as graphic rending,physical simulation and network.Graphic rendering uses OpenGL plugin in Unity3D,which makes game run in mobilephone. Physical simulation depends on PhysX which can obtain more accurate results to design the rigid body of the car,the suspension of the wheels and the scene.In order to add interactivity we add network and UI module.In the end,this paper analysis this game to put forward the next improvement. This vehicle game is mini,but owns some advantages such as flexible module interfaces,low coupling and fast executing.Most importantly this paper refers to most aspects of a 3D game and provide a reference for developers who has a similar requirement. Keywords: Unity3D, game,graphic engine, physical engine, PhysX, automobilism 一、 绪论 (一) 研究背景和研究意义 这几年,中华人民共和国经济以8%左右速度持续平稳增长,而在刚刚过去中华人民共和国游戏市场实际销售收入602.8亿元,同比增长率为35.1%,初次突破600亿规模[1]。游戏产业己经成为经济市场中增长速度最快热点,是众所关注焦点。游戏是文化创意产业里一某些,创意经济是知识经济核心内容,更是其经济重要体现形式,没有创意就没有新经济。游戏设计是文化艺术创意和商品生产结合,游戏产业发展在中华人民共和国经济发展中具备十分重要意义[2]: 1.有助于保护民族文化老式和价值观,抵制文化入侵; 2.推动创意产业迅速发展,提高国内经济产业发展水平; 3.提供健康高兴大众娱乐方式,提高消费者休闲体验感受。 游戏发展从体现办法上经历了2D游戏和3D游戏两个阶段。游戏设计,特别是3D游戏开发综合运用了计算机图形学、物理仿真和网络通讯等技术,并且移动平台技术在这几年得到迅猛发展,轻量级、微创新、时间碎片化始终是移动游戏发展趋势,如《愤怒小鸟》、《顽皮鳄鱼爱洗澡》、《神庙逃亡》顾客数都已通过亿。论文通过一种简朴“碰碰车”创意予以实现,涵盖了3D游戏涉及到某些基本技术,能进一步理解这些领域底层技术并纯熟掌握成熟引擎使用,对于将来开发具备自主知识产权游戏提供了参照。 (二) 国内外研究现状 国外3D游戏起步在90年代初,美国卡马克《重返德军总部3D》是第一部3D第一人称射击游戏,由其开发Doom引擎也成为最早3D游戏引擎。国内首款自主研发3D游戏始于,到当前为止,国内在3D游戏已有了诸多研究,但由于3D游戏开发复杂性及经济效益考虑,国内只有屈指可数互联网公司拥有自主研发3D游戏引擎,中小型公司还是使用国外较为成熟游戏引擎和工具,如虚幻,Unity3D,寒霜。虽然近年来国内涌现某些先进3D网游诸如《剑侠情缘3》、《九阴真经》,但始终无法像产出世界级3D游戏大作,大某些游戏公司还是以代理国外先进产品为主,导致资金外流及本土文化缺失。 随着移动硬件设备日益强大,移动平台上游戏也浮现了惊人增长,3D互动娱乐在手机领域应用也逐渐增长。而移动领域存在诸多操作系统,惯用有Android、Windows Mobile、iOS 等,而在各个平台上移植和实现对于开发商来说是不经济,而当前国外先进成熟引擎已经成功解决此类需求,最为突出要数Unity3D引擎,Unity3D中使用虚拟机技术使游戏编译成果独立于平台执行。国内对于跨平台引擎技术研究还处在起步阶段,但纯熟掌握和理解这些引擎使用依然具备一定意义。 (三) 论文组织构造 论文按照从设计到实现,从理论到应用,重要环绕一款基于Unity3D小型汽车驾驶游戏,对某些3D游戏设计技术进行有关研究,并予以设计实现。本文共分为六章,各章节安排如下: 第一某些:绪论,阐述了论文研究背景和意义、国内外研究现状以及本文重要研究内容; 第二某些:简介了3D游戏开发普通技术框架,及有关第三方引擎,重要有图形渲染库、物理引擎及Unity3D概述; 第三某些:汽车驾驶游戏创意以及游戏系统整体设计,并依照Unity3D框架规范设计了一种MVC层次构造; 第四某些:讨论游戏中各模块技术研究和实现过程,重要核心模块是场景渲染和物理仿真; 第五某些:展示当前游戏并对效率、玩法等方面做一定分析; 第六某些:结论,对该设计进行总结并指出其中局限性,提出下一步展望。 二、 3D游戏技术知识系统 (一) 3D图形库 1. 3D图形库简介 3D图形库被定义为显卡与应用程序直接接口。编程人员只要调用3D图形库中API(Application Programming Interface)函数,从而与硬件驱动程序沟通,启动3D芯片内强大3D图形解决功能,制作具备3D图形效果软件。 3D图形库执行具备非常迅速特点,并且具备高度可移植性,其中API函数定义为独立于任何程序设计语言一组规范,在特定语言中实现描述由国际原则化组织来制定。严格按照计算机图形学原理设计而成,符合光学和视觉原理,编程人员只要用这些API函数定义点、线、面三维特性,如位置坐标、顶点颜色、法向向量、纹理坐标等就可以创立极其逼真3D图像。许多三维演示系统都用3D图形库作为三维图形生成和控制编程接口。当前重要应用3D函数库有DirectX和OpenGL。 DirectX:微软公司专为PC游戏开发API,与Windows操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API各种硬件底层操作,大大提高了游戏运营速度,并且当前基本上是免费使用。由于要考虑与各方面兼容性,DirectX用起来比较麻烦、在执行效率上也未见得最优。 OpenGL:(开放式图形接口)由Silicon Graphics公司开发,可以在Windows 95、Windows NT、Macos、Beos、OS/2、以及Unix上应用API。由于OpenGL起步较早,始终用于高档图形工作站,其3D图形功能很强,超过DirectX,能最大限度地发挥3D芯片巨大潜力。在Windows中已经全面支持DirectX和OpenGL。在OpenGL1.2版中还增长了对3DNow!原则支持。 2. 3D图形库渲染管线 绝大多数3D图形库实现均有相似操作顺序,一系列有关解决阶段叫做3D图形渲染管线,如图2-1显示了这些顺序,它是3D图形库解决数据办法[3]。 图2-1 3D图形库渲染管线 下面详细简介其中几种比较重要阶段: 基于顶点操作与基本装配:这个过程涉及本地空间-世界空间-视图空间-背面拣选,重要是依照编程人员设立摄像机位置、视锥属性和顶点索引对顶点数据进行一系列数学运算,使3D图形形状及位置得以对的显示。 像素操作:该过程重要依照编程人员传入显卡纹理及顶点纹理坐标以及光照信息进行颜色计算、混合,并对线、面采用线性插值、二次线性插值等算法最后进行出像素颜色。这个过程计算普通由显卡固定管线计算公式完毕,如想得到更真实、更多样效果,可采用可编程管线技术实现。 3. 3D程序基本工作流程 前面提到了调用3D图形库中API函数来设计3D应用程序,当前更为详细简介这样应用程序普通工作流程,如图2-2所示: 图2-2 3D图形库渲染管线 在程序主入口main函数中,一方面调用ApplicationInitial函数进3D图形库某些初始化工作:如告知显卡存储顶点、颜色、灯光、纹理等信息,接下来进入主循环不断调用ApplicationUpdate函数,ApplicationUpdate调用每一种渲染物体ObjectUpdate函数,更新其在显存中信息,并告知显存进行一次渲染管线流动,这样新一帧3D图形就被渲染出来并产生动画。最后在应用程序结束时调用ApplicationDestory来进行清理工作。固然,复杂3D应用框架还会运用多线程技术来解决逻辑运算和事件回调等内容。 (二) 物理引擎 1. 物理引擎简介 在游戏这项综合应用中中,除了华丽画面渲染外,作为体现虚拟世界系统内在物理规律计算是必不可少。当被模仿刚体运动比较简朴,咱们可以在一定限度上通过编程或编写脚本来实现,如简朴加速和减速牛顿物理运动。但当模仿比较复杂物体碰撞、滚动、滑动或者弹跳时候,通过编写底层算法会导致工程延误,这显然不符合软件工程思想。成熟物理引擎可以容许更复杂物理模仿,像球形关节、轮子、气缸或者铰链,有些也支持非刚性体物理属性,例如流体和布料。 物理引擎接受输入是由外界调用模块传递过来场景信息以及场景中物体位置信息。依照调用模块不同,也许输出三种计算成果:场景与物体以及物体之间与否发生碰撞、碰撞发生详细位置以及发生碰撞后物体详细位置,并将计算成果传送给调用模块。如图2-3所示: 图2-3 物理引擎功能示意图 2. 物理引擎基本架构[4] 物理引擎普通分为两个重要某些,即碰撞检测和物理学世界。如图 2-4 所示: 图2-4 物理引擎基本架构 碰撞检测模块是物理引擎核心模块,建立在物理学世界基本上[5]。其由初步碰撞检测、精准碰撞检测和精准求交三个基本模块构成,各模块执行顺序如图2-5所示: 图2-5 碰撞检测模块流程图 在初始化阶段,碰撞检测模块给虚拟世界每个物体建立包围盒,比较惯用包围盒算法有AABB(Axis-aligned bounding box)、包围球、胶囊体等。逐渐求精阶段将整个虚拟世界进行空间划分,重要用到数据构造有八叉树、k-d树和BSP树等,通过自顶向下层次构造不断判断物体与否也许发生碰撞。最后再精准求交模块中使用凸体算法和射线检测算法得到精准碰撞信息[6]。 物理学世界模块,是现实世界抽象模型。物理学世界包括两个某些,一种是刚体物理学世界,一种是柔体物理学世界。在力作用下,体积和形状都不发生变化物体称作刚体。刚体按照其运动特性可以分为平动、定轴转动、平面运动、定点运动和普通运动等形式。在普通状况下,运动刚体上各点轨迹、速度和加速度是各不相似,但彼此之间存在着一定关系。体积和形状在力作用下可以发生变化物体称作柔体,如流体、布料等。因而,物理学世界模块构造如图 2-6 所示。 图 2-6 物理学世界模块构造图 3. Havok和PhysX比较 物理引擎中需要大量计算,并且不同物理引擎针对特定显卡有3D加速功能,因而,开发3D游戏前选取一款适当物理引擎是及其重要,否则会极大影响游戏性能。当前 在游戏市场占重要地位有IntelHavok和NvidiaPhysX。 Havok,全称为Havok Game Dynamics SDK,译作Havok游戏动力开发包,重要分为Physics、FX、Animation、Behavior、Cloth、Destruction、AI几大组件。Havok成立于1998年,总部位于爱尔兰首都都柏林。引擎基于C/C++语言而成,在游戏开发者大会上发布了Havok 1.0,最新版本为5.5,9月,Intel宣布收购Havok。在全平台上,共有353种游戏使用Havok引擎,超过了PhysX309种,使用Havok知名游戏有:《极品飞车:亡命天涯》、《星际争霸2》、《暗黑破坏神3》、《上古卷轴4》等,图为Havok展示Demo: 图2-7 Havok引擎展示(左为Havok Physics,右为Havok Cloth) PhysX物理运算引擎由五名年轻技术人员开发,她们成立了AGEIA公司。由于PhysX物理引擎在设计上就并不适合用CPU去计算,因而AGEIA公司还为PhysX引擎设计了专门运算硬件,PhysX物理加速卡,其中运算核心被称为PPU(Physics processing Unit)。图2-8为AGEIA当时设想将来PC构成某些。 图2-8 AGEIA当时设想将来PC构成某些 ,Nvdia收购了AGEIA,物理加速卡停止开发,而是将PhysX物理加速功能移植到Nvdia GPU中,顾客不必额外购买PhysX物理加速卡就能享有到PhysX物理加速功能。在PC平台上,共有269种游戏采用PhysX引擎,而Havok为163种。 表4-1 Havok和PhysX在各方面比较 物理引擎: Havok PhysX 物理加速 多线程加速 只支持Nvdia GPU加速 执行效率 快 不启动GPU加速下略逊一筹 跨平台性 全平台 全平台 与否开源 是 否 游戏引擎集成 寒霜 Unity3D 重要游戏平台 Wii、Xbox 360、PS3 PC (三) Unity3D 1. Unity3D简介 Unity3D是由Unity Technologies开发一款全面整合专业游戏引擎,其具备功能使得开发人员可专注于游戏设计而忽视底层技术实现,达到迅速开发目。Unity类似于Director,Blender game engine,Virtools 或 Torque Game Builder等运用交互图型化开发环境为首要方式软件其编辑器运营在Windows 和Mac OS X下。其重要特色有[7]: 图形动力:内部封装了DirectX和OpenGL图形渲染库,并附带某些惯用渲染组件及着色器脚本。 物理仿真:Unity3d不但整合了Nvidia PhysX物理引擎,并在其基本上封装了游戏中常会用到物理组件,如碰撞体、连接体等。 跨平台性:可发布游戏至Windows、Mac、iOS、Android、Xbox、Wii或PS3平台,也可以运用Unity web player或者Flash插件发布网页游戏,支持Mac和Windows网页浏览。 资源商城:开发人员可在资源商城中购买其她人开发资源(代码、模型等),进行高效复用。 资源服务器:Unity资源服务器是一种附加版本控制产品,但比起SVN更适合游戏团队中不同职位人员共同使用(程序、策划、美术)。 性能分析器:引擎中自带一种Profiler分析器,开发人员可在编辑器或者设备连线进行性能分析CPU和GPU不同阶段效率。 2. Unity3D基本概念 一种完整lJnity3d程序是由若干个场景(Scene)组合起来,每个场景中又包具有许多游戏对象(GameObject),每个对象可以具备若干组件(Component),其中继承自MonoBehavior脚本组件进行初始化、更新等操作,而咱们在场景所看到内容是由摄像头(Camera)来呈现并控制。 场景(Scene):场景是Unity3D程序基本构成单位,任何一种Unity3D程序都是由若干场景组合而成,程序通过脚本在这些场景之间跳转。场景通过场景图形式组织,场景图事实上是一种树形构造,其中每个节点就是一种游戏对象。对象与对象之间存在父子关系,即当父级对象移动、旋转、缩放时,子级对象也跟着一起变换[8],如图2-9所示: 图2-9 旋转一种父节点同步它子节点也跟着旋转 游戏对象(GameObject):在场景中按照场景图形式组织,场景图事实上是一种树形构造,如图。树形层次构造中节点,加入特定组件后就成了有实际功能对象,如可渲染网格、摄像机、光源等,游戏对象可以打包成.prefab格式文献以便复用。 组件(Component):组件可以是网格(Mesh)、光源(Light)、摄像机(Camera)、粒子系统(Particle)、物理碰撞体(Collider)、布料(Cloth)、连接体(Joint)、声音(Audio)、动画(Animation)以及最重要脚本(Script)。Unity3D设计是以面向对象理论为基本,Unity3D支持C#、JavaScript和Boo三种脚本语言,如果对象继承自MonoBehavior脚本对象,生命周期将交给Unity3D来管理,如图2-10所示: 图2-10 MonoBehavior生命周期 三、 车辆驾驶游戏设计 (一) 游戏创意 随着移动硬件设备日益强大,并且移动平台技术在这几年得到迅猛发展,移动平台上游戏也浮现了惊人增长,轻量级、微创新、时间碎片化始终是移动游戏发展趋势。《愤怒小鸟》、《顽皮鳄鱼爱洗澡》等几款创意游戏都得到了巨大成功,这些游戏共同特点有: 1.操作简朴,游戏目简朴。无论是高档游戏玩家还是不常玩游戏顾客群,很容易懂得如何操作并理解游戏目。如《愤怒小鸟》只需一只手指调节弹弓角度和力度最后将猪击飞,《顽皮鳄鱼爱洗澡》只要用手指刮开泥土将水引导进鳄鱼浴缸; 2.真实物理规律。游戏中充分考虑到现实生活中物理规律,如《愤怒小鸟》中飞行速度、重力考虑,《顽皮鳄鱼爱洗澡》中水流流体走向; 3.多样化设计。别出心裁设计不但使玩家产生兴趣继续挑战,也会更加开动玩家脑筋。如《愤怒小鸟》中小鸟不同技能、会荡秋千猪、冰雪场景和会引燃炸药,《顽皮鳄鱼爱洗澡》中清水、污水、泥石流产生不同效果,以及电扇、喷枪设计等; 图3-1 左为《愤怒小鸟》游戏截图,右为《顽皮鳄鱼爱洗澡》游戏截图 笔者按照这些思路产生了将游乐场中“碰碰车”这一游乐项目搬上有游戏想法,游戏同样遵从以上三个特点,下面是简朴游戏策划: 游戏名称:《疯狂碰碰车》 游戏类型:3D休闲益智类游戏 游戏平台:PC、Android、iOS 游戏模式:多人联机模式,单人AI练习模式 游戏玩法:玩家通过操作车辆,在竞技场中与其她玩家操作车辆进行娱乐,玩家应当尽量操作车辆前部去撞其她车辆背部,这样可以抢夺对方游戏积分,同样,应当通过躲避尽量避免自己背部遭到袭击。达到游戏时间后进行积分结算,拟定本场游戏排名。 游戏操作:前、后、左、右,在移动设备上可映射为重力感应和滑动操作。 游戏可玩性:1.多样车辆,不同车辆具备不同外形、速度以及技能等属性,如加速快豪华跑车、碰撞效果惊人火车头等,玩家通过赛过获得游戏币来购买梦寐以求车辆;2.多样地形,可以绘制不同地区风情竞技场,并且不同竞技场应当有不同物理属性增长车辆驾驶趣味,如冰川、泥泞森林,以及适合车辆躲避树、草、坡度等布置;3.真实物理仿真,如前两个特性所列,不同设计会带来丰富物理仿真效果。 (二) 游戏框架构造设计 如前文所述,一种游戏包括各种场景,玩家依照当前游戏进度和选项进入不同场景。而游戏模块为游戏提供了某些必要用到功能,这些功能,都是完全独立与所有场景存在,它们并不懂得究竟有多少关卡,关卡内容是什么,它们重要工作,就是与游戏控制单元进行信息互换,从而支持游戏进行。 游戏框架设计必要符合游戏玩法需求和所使用工具,不同于大型MMO(Massive Multiplayer On-Line) Game,《疯狂碰碰车》没有复杂游戏系统,更加侧重于游戏可玩性设计,并且由于使用Unity3D引擎,省去了许多底层模块设计,其中核心模块为:图形渲染、物理仿真、网络联机。图3-2为游戏系统框架构造图: 图3-2 游戏框架构造 (三) 游戏层次构造设计 前文提到Unity3D中每个场景按照树形层次构造组织游戏对象,并且每个游戏对象可以拥有若干组件。因此整个游戏系统实现必要遵守这种规范,在这种规范下为了符合软件设计高内聚、低耦合原则,使用MVC模型设计了一套游戏层次构造,这样好处是使游戏构造清晰简朴,三层之间互相隔离、互不影响,日后功能扩展以便。如图3-3所示: 图3-3 游戏层次构造图 游戏系统分为三个层来设计,分别是: 视图层:重要为加入到场景层次构造游戏对象,这些对象经常是渲染对象或摄像机。 控制层:在主摄像机或者空对象中加入管理脚本组件,这些脚本重要是针对相应功能模块进行控制及与其她功能模块进行通信,如界面管理类、网络联机管理类。 模型层:重要是在渲染对象中加入逻辑脚本组件,这些脚本对游戏对象进行逻辑解决。 四、 车辆驾驶游戏实现 (一) 场景渲染实现 考虑到游戏需求,整个场景重要涉及几类渲染对象,如天空盒、水面、地形、外部导入3D模型、投影、粒子系统等,如图4-1所示: 图4-1 游戏场景中渲染对象 下面重要简介某些重要渲染模块详细实现: 1. 天空盒 所谓天空盒,就是用一种作为远景贴图立方体。在立方体先后左右上五个面贴上纹理(需要时底面也可以帖)。在简朴天空盒实现中,只需要填写好六个面24个顶点,并设立立方体随着视点移动而移动,这样就会给玩家带来天空是在极远处错觉。但在较为复杂应用中,还需要使用天空盒纹理来生成Cube Map,并用之来做水面倒影、云影等特效贴图。 图4-2 天空盒由六个面映射而成 在Unity3D中对天空盒有较好支持,开发人员只需要几种简朴环节: 1.创立一种材质; 2.并设立Shader为Unity3D自带RenderFX->Skybox; 3.为天空各个面选取贴图; 4.在Render Setting中设立天空材质为前面创立材质。 图4-3为实现效果图: 图4-3 实现天空效果 2. 水面 水面本质即按照流体规律动态更新顶点位置网格,Unity3D中自带有水对象,但为了使得水面具备更真实体现力,还要为水面加入反射、折射等效果,这些效果重要是通过渲染到纹理(Render-to-Texture,RTT)来实现。渲染到纹理,简朴来说就是把当前场景一某些或者所有渲染成一种可以使用纹理上面,然后再此外一次渲染中把它当作普通纹理使用。 光穿过水面,但被水面变化传播方向又返回水面之上叫做反射。如图4-4所示,向量I被称为入射光线(incident ray),从眼睛射到物体表面,当I到达表面时候,它会依照表面法向量N被从R方向反射出去,第二条光线是被反射光线(reflected ray),因此可以依照向量I和N用公式4-1计算被反射向量R: 图4-4光线反射图 公式4-1 折射与反射不同是,光线虽然变化角度但依然进入水面,斯涅耳定律描述了两种媒介之间分界面光发生了什么,如图4-5所示,折射向量被表达为T,代表“transmitted”。斯涅耳定律在数学上可以用公式4-2表达。 图4-5 斯涅耳折射定律 公式4-2 详细代码实现中,咱们以折射为例,咱们一方面将要被折射物体加入到一种层——m_RefractLatyer中,然后设立一种摄像机用于渲染这个层上所有物体,得到纹理_RefractionTex并传给shader,然后在水面进行纹理混共计算。如下为实现折射效果核心代码和水面效果截图: 代码清单4-6 折射RTT核心代码 图4-7 带有折射、反射水面效果 3. 地形[9] 在Unity3D中通过高度图来实现地形,高度图事实上是一张矩形灰度图,在灰度模式中,颜色通过0~255来表达,0代表黑色,255代表白色,像素越亮代表地势越高,255像素代表本次顶点最高,反之亦然,因此像素灰度值和顶点高度可以用公式4-3表达,其中L为像素灰度值,、分别为Unity3D中定义地形高度和地形最低点,求得网格顶点高度y。 公式4-3 程序在需要渲染地形时通过读取这张图片,并按照灰度生成顶点高度不一矩形网格。这样大大减少了游戏模型体积。 Unity3D中地形模块不但可以导入高度图,还可以用笔刷为绘制地形纹理、树、草和岩石,所见即所得,大大减少了开发人员工作量。图4-8为小岛效果图: 图4-8 小岛地形效果图 4. 光照和投影 在普通3D应用程序中,光照和投影是各自独立计算过程,光照既可以使用固定管线、也可以再Shader自定光照模型实现。投影则是一种双过程技术[10]: 1.一方面,场景以光源位置为视点被渲染。每个渲染图像像素深度值被记录在一种“深度纹理”中,被称为阴影贴图。 2.然后,场景从眼睛位置渲染,但是用原则投影纹理把阴影贴图从灯位置通过投影矩阵运算混合到场景中。在每个像素,深度采样值(从被投影深度纹理中)与片段到灯距离进行比较。如果后者小,这意味着这个片段不是阴影,不需要和投影纹理进行混合。 图4-9举例阐明了阴影深度比较。在图左边,正要被着色点P在阴影中,由于这个点深度值(ZB)比记录阴影贴图深度值(ZA)大。相反,在图右边显示了点P深度值与在阴影贴图中记录值相似状况。这意味着在在P和灯源之间没有任何物体,因而P不再阴影中。 图4-9 投影深度比较 对于静态物体投影渲染第一过程计算,可以在游戏开发过程中进行。Unity内置光照贴图烘培工具是Illuminate Labs Beast,其重要原理是对场景中所有静态物体光照和投影进行计算,并运用特殊.exr光照贴图格式用以记录光照和投影两种信息,在游戏运营时用光照贴图对模型原有材质进行混合渲染,即可得到对的光照和投影效果。这样大大减少了游戏运营过程中计算量,提高游戏效率。如图4-10所示,进行某些参数设立(事实上是设立光照模型和投影过程二阴影纹理),选取“Bake Scene”即可为场景生成光照贴图。 图4-10 光照贴图烘焙窗口 (二) 场景物理仿真实现 如前文提到,Unity3D内置对Nvidia PhysX支持,其实际工作就是封装了某些游戏中惯用组件以及脚本中调用类,只要将这些碰撞体组件赋予游戏对象,就被加入PhysX虚拟世界进行运算。下面重要简介惯用组件: 刚体(Rigid):在PhysX基本概念中,两个碰撞体发生碰撞必要规定其中至少有一种刚体。因此对运动物体要赋予刚体属性,刚体可设立质量、重力计算、碰撞检测频率等属性。 网格碰撞体(Mesh Collider):依照游戏玩法,玩家通过车身前部撞击其她车后部进行游戏,在车身前部和后部各加入一种网格碰撞体,网格碰撞体可通过网格数据定义凸体形状,比起基本碰撞体更加精准。 地形碰撞体(Terrain Collider):通过地形模块生成地形可以选取加入地形碰撞体,就这样就可以不需要定义网格数据来定义网格碰撞体,其本质就是依照高度图生成网格碰撞体。 轮胎碰撞体(Wheel Collider):汽车经常在陡峭地形上行走,如果将轮胎定义为普通碰撞体则容易导致碰撞而导致车身飞起,轮胎碰撞体具备阻尼弹性和摩擦力属性,不同类型车辆可以使用不同轮胎碰撞体参数,模仿出各种效果。 弹簧连接体(Spring Joint):物体之间如果通过连接有力作用,可通过设立连接体来实现。弹簧连接体可以模仿物体之间阻尼作用。 如图4-11所示,场景中需要进行物理计算重要有三种:地形、某些3D模型(如栅栏)和汽车,其中地形和3D模型为静态物体,只要为其增长静态碰撞体组件即可。而汽车构造较为复杂,一方面在游戏中前车身和后车身为不同积分部位,因而要定义为两个网格碰撞体,并且为了得到真实物理效果,需要将轮胎定义为车轮碰撞体并通过弹簧连接体与车身相连,如图4-12所示。 图4-11 物理仿真模块实现 图4-12汽车物理仿真构造 (三) 汽车动力学模仿 进行了汽车物理组件装配之后,还要实现汽车动力学模型。由于汽车在驾驶过程中影响其运动状况因素错综复杂,操纵机构对汽车行驶存在着多输入、多藕合、非线性控制作用,而实时渲染游戏规定动力学仿真计算迅速,要在精准度与计算速度之间折中,需要简化动力学模型[11]。 为了简化模型,作如下假设:所有车辆都是刚体,不考虑多节车厢状况。汽车在行驶过程中,因速度变化受到引擎驱动力和阻力(动摩擦力、空气阻力),如果汽车在转弯还会收到轮胎侧摩擦力,汽车行驶过程中基本受力图如4-13所示: 图4-13 车辆行驶受力图 假设汽车当前正在转弯且速度为v,且由于转弯轮胎和车身z轴并不重叠,速度v在轮胎x轴方向分量为v.x,k为阻力系数,依照公式4-4可得出汽车受得阻力f和轮胎侧摩擦力f侧: 公式4-4 汽车当前引擎提供驱动力决定于汽车当前档位,档位由当前速度大小决定,不同车辆有不同档位设计,为了控制汽车能达到最大速度,使用二次线性增量法,vtop表达汽车能达到最大速度,n表达该车当前档位, vn表达达到该档位最低速度,Fn表达n档位收到驱动力,k为公式4-4中阻力系数,这样,速度、档位、驱动力之间关系可用公式4-5表达: 公式4-5 依照以上得出汽车动力学模型,需要在Unity3D中通过脚本组件实现,一方面为汽车对象增长一种继承自MonoBehaviorCar.js脚本,在其中重写两个更新函数Update()和FixedUpdate(),Update()函数在每帧绘制之前调用一次,FixedUpdate()通过一种计时器定期调用,时间间隔可在工程中设立。然后在这两个更新函数进行动力学计算。如下为两个更新函数代码及各个函数作用,其中计算公式中使用了大量常量因子,不同汽车可配备不同参数以产生逼真效果: 代码清单4-14 Car.js更新函数 GetInput():得到当前玩家输入,如迈进、后退、左转、右转; Check_If_Car_Is_Flipped():判断汽车与否被撞翻,如果是话,使汽车被翻正; UpdateWheelGraphics():依照汽车瞬时速度旋转轮胎; UpdateGear():依照汽车瞬时速度变换档位; UpdateFriction ():如果汽车在转弯状态,轮胎会受到侧摩擦力,侧摩擦力和瞬时速度x轴分量平方成正比,如公式4-4; UpdateDrag ():计算当前受到阻力,阻力和速度平方成正比,如公式4-4; CalculateEnginePower ():依照当前档位计算引擎提供动力,如公式4-5; ApplyThrottle ():依照引擎动力使汽车刚体获得向前力模仿油门效果; ApplySteering ():依照引擎动力和玩家转向输入使汽车刚体获得侧向力模仿转弯效果。 (四) 顾客图形界面实现 Unity3D另一种便利就是强大插件功能,开发人员可以定制自己功能菜单栏选项、组件并注册到编辑器中使用。这种设计方式产生了诸多第三方插件,使用这些插件可以使开发人员更
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服