+-
第1章 Unity3d 游戏引擎架构

§1.1 概述

游戏引擎是什么?

引擎是“软件框架”(software framework)。游戏引擎就是专门为游戏开发而设计的软件框架,提供游戏开发所需要的基础功能。

软件框架(Software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。 框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。 简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说使用别人搭好的舞台来做编剧和表演。

穿上这件胸衣,被老公称赞胸型变美【羞】还超透气舒适
Sponsored by 法国美胸衣

简单来说,利用游戏引擎制作游戏省去了“重复造轮子”的工作,能够极大方便游戏开发者。而且,由于游戏引擎通常拥有较大的使用者群体,所以相互交流很方便,相关的教学资源和素材资源也很丰富。

但是,使用游戏引擎势必会受到游戏引擎的一些限制,引擎不提供的功能就实现不了。好在现有的商业游戏引擎都具有一定的开放性,比如Unity3D就允许用户制作功能插件,极大扩展了游戏引擎的应用范围。

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面集成的专业游戏引擎。其编辑器可运行在Windows、Linux(目前仅支持Ubuntu和Centos发行版)、Mac OS X下,可发布游戏至Windows、Mac、iPhone、WebGL、Android等平台。也可以利用Unity Web Player插件发布网页游戏,支持Mac和Windows的网页浏览。

【最棒的内裤立体囊袋内裤】给蛋蛋住帝宝!穿过回不去的舒服
Sponsored by 男士内裤


...


§1.2 引擎架构原理剖析

Unity3D游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理等。

架构如图1.1所示:


... 图1.1 Unity3D引擎架构


§1.3 引擎学习

现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等。很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇到Shader编程以及优化就感到头疼,长此以往对自己技术提升非常不利的。要改变现有的状态,就必须要系统的学习相关3D引擎技术,这样才能在使用引擎开发产品时得心应手。技术框架图如下所示:

【习惯筹备】醒你4招,教你做“时间管理达人”
Sponsored by 习惯筹备


... 图1.2 Unity3D引擎学习架构图


在上述框架图中共分为七部分,每一部分所包含的技术点并不局限于图中所列,在此逐一进行详解:

第一部分内容:学习3D引擎架构知识的前提,就是要掌握引擎的编写语言和引擎使用的图形库API接口,以及图形

学渲染也就是GPU编程使用的Shader语言,基础知识是必须要掌握的。学习时可以参考这些API提供的Demo,把

执行流程搞清楚,自己调试一下就可以了。

第二部分内容: 3D基础知识,比如一个3D模型要在二维屏幕上显示出来,这中间要经历一些矩阵变换才能将其在

二维屏幕上显示出来,这种变换过程通常称为固定流水线,就是告诉开发者其显示是按照固定流程执行的,计算都

“用十年都不坏”德国红铜不粘平底锅,锅身5秒速热!百年品牌↘清仓处理!免费试用7天!
Sponsored by Amanora MALL

是在CPU中完成的;对应的就是可编程流水线,也就是在GPU中完成,其实就是将矩阵变换放到GPU中计算了。

第三部分内容:3D游戏引擎的技术点,在掌握了第二部分内容后,再开始学习第三部分内容,该部分内容针对的

是DX的SDK或者OpenGL的SDK,二者都提供了Demo供读者学习,我们要把这些基础的3D引擎技术掌握,最好

的方式是自己用手把代码敲一遍,调试一下。

第四部分内容:需要一定的数学知识,引擎的开发或者游戏的开发离不开算法的支持,当然大家也不用对其产生畏

惧心理,学习任何事情都不是一蹴而就的,循序渐进的,先从基本的数据结构入手,逐步深入,图中列出的几种算

法是引擎中常用的算法,四叉树或者八叉树可以用作地形的绘制,插值算法可以用于实现刀光拖尾等等,A*算法

比较经典是寻路使用的,另外还有后处理算法实时阴影的网上都有很多现成的案例。

第五部分内容:这部分内容是核心的架构设计,图中所显示的是组成引擎的各个模块:

城大SCOPE 三年制英国大学荣誉学士学位课程
Sponsored by CityU SCOPE
场景管理模块,该模块非常重要,地形的加载通常是通过分块的方式处理的,比如:魔兽地图,显示的是9块,在缓冲中的是16块,随时提供加载。 场景中少不了特效的渲染,这个也体现了引擎的技术层次,大家可以看看虚幻水的渲染,达到了一个顶级水准。 模型插件也是必须的,Unity和现在开源的虚幻使用的都是AutoDesk提供的FBX模型,AutoDesk提供了FBX的API可以直接使用,当然自己也可以开发适用于自己引擎的模型插件,自定义格式。 AI模块这里主要是指行为树算法,用于导航寻路。 各种各样的灯光模块也是必须的,对应的就是相机模块,比较常用的是透视摄像机和正交摄像机,特效和UI也是引擎的组成部分, 最重要的是物理引擎模块,碰撞检测处理,常用的碰撞算法:Mesh碰撞,球体碰撞,胶囊体碰撞,立方体碰撞,这些碰撞算法的核心是OBB或者AABB算法。

第六部分内容:3D引擎中的GPU编程,这个是令大部分程序员头疼的问题,不同的引擎使用的渲染算法是不一样

【失眠变好瞓zZ】查询: 62276040
Sponsored by DotDot Asia Ltd.

的,它们主要区别还是在细节贴图方面的区别,以UE4为例,他渲染一个物体使用的材质相比Unity多一些,通过

它们渲染的物体就可以看出来。快速的学习GPU编程,网上都有对应的Shader代码,可以直接在此基础上修改。

还有可以直接使用Shader编辑器用于Shader的编写,调Shader效果我们可以参考Max或者Maya模型工具中的渲

染效果,Max或者Maya中都有渲染Shader,它们功能很强大,引擎是无法与其攀比的,只能与其无限靠近。而且

Max和Maya可以为我们提供使用了哪些Shader。该部分内容主要是针对模型的材质渲染。

第七部分内容:主要是针对引擎的后处理渲染,常用的有PSSM,HDR,Blur,Deferred等等,这些效果是在游戏

的每帧图像显示之前再进行一遍后处理渲染,然后显示出来,这就是后处理渲染效果。

上图只列举了七部分内容,还有一个技术点,开发者要掌握——设计模式,与引擎开发相关的设计模式,比如:

[FUJIOH富士皇 ] 环保吸油烟机系你最佳选择
Sponsored by FUJIOH富士皇
单例模式 工厂模式 观察者模式 MVC模式 ……

只要能熟练掌握这些就足够了。

作为游戏开发者来说,学习引擎对自己技术提升帮助还是非常大的,不要只局限于逻辑的编写,要想成为主程、技术经理、技术总监必须要学习引擎技术。

§1.4 引擎选择

开发产品首先要做的事情是选择引擎,市面上很多引擎供开发者使用,当前比较流行的游戏引擎可以分成几个类型:

“全科型”游戏引擎。这类引擎功能完善,可以用来制作各种类型、各种规模的游戏,从一两个人玩一玩的独立游戏,到千万级投资的AAA大作都能搞定。譬如Unity3D、UE(虚幻引擎)、Source(起源引擎)等等都属于”全科型“。 “专科型”游戏引擎。这类引擎通常针对某一类游戏的制作功能非常完善且强大,对对于其他类型的游戏制作就不太支持了。但“专科型”引擎在其擅长的领域还是很强大的。譬如Cocos(专门制作2D游戏)、RPG Maker(专门制作日式RPG游戏)都属于此列。 “业余型”游戏引擎。这类引擎通常针对非游戏行业专业人员玩票使用,通常具备可视化编程功能以方便使用者。但这类引擎通常功能比较有限,有的甚至还比不上一些游戏提供的关卡设计器。这类引擎的优势是简单易学,用来做点小玩意或者用来入门也是不错的。

引擎的选择可参考以下几点:

该引擎是否有对应的上线产品出来,可以去下载玩玩,体验一下; 该引擎相关的工具是否完备,比如场景编辑器,特效编辑器…… 该引擎上手是否比较快,这个也是重点考量的; 该引擎相关的文档是否完整或者详细,另外对应的论坛或者社区是否能够快速响应; 不同的机型适配性是否满足项目需求; 功能扩展性,这个涉及到代码的开源了,有第三方库并且支持第三方库开发; 对引擎支持的场景面数以及骨骼动画,特效做一个压力测试; ……