游戏安全实验室 首页 技术入门 查看内容

 阅读目录

游戏引擎基本概念及常见游戏引擎介绍

发布于:2016-3-20 15:55   |    169389次阅读 作者: 管理员    |   原作者: TP   |   来自: 原创

一、前言

在翻阅各种游戏介绍或者实现资料的时候,经常会遇到引擎一词。引擎听上去非常高大上,那到底什么是游戏引擎,实际开发中常接触到的游戏引擎有哪些。本篇幅将会侧重这两个方面进行介绍。


二、什么是游戏引擎

了解游戏引擎,必须要先知道引擎是什么。套用现在最流行的解释,从词原意上理解,引擎是赛车上的一个部件,并且是一个核心部件。引擎是赛车的心脏,决定着赛车的性能和稳定性。赛车相关的指标都是建立在引擎的基础上的。

游戏引擎也是如此,它是每款游戏中都具有的控制游戏所有功能的代码。小到几百K的小游戏,大到几个G的大游戏,都存在一段起控制作用的核心代码。这段代码涉及到游戏的各个方面:物理效果、动画、图像渲染、声音、人工智能等。因此,一款游戏的实现,本质就是调用这段代码将游戏中的所有元素捆绑在一起,按照游戏设定使它们同时、有序地工作。

游戏行业初期,几乎每款游戏都要从头开始编写代码,尤其是上面提到的核心代码耗费了大量人力。渐渐地,游戏研发行业逐渐专门化,这部分代码被人专门提取出来开发成一个通用框架代码,成熟的游戏引擎也就应运而生。

 

游戏的运行实现可以切分成4个层,底层的硬件层、接着的三方功能组件层、还有就是游戏引擎层、最上面才是游戏逻辑层。

最底层各种硬件可以是手机、PC、Xbox等,各种硬件会提供驱动支持基本的操作系统功能。而运行在Android、iOS、Windows等操作系统上的游戏,均是需要游戏引擎的支持,如Cocos2D、Unity3D等。这些游戏引擎,其子系统,子功能会基于三方组件实现,如渲染会调用DirectX/OpenGL这些底层的图形库。

 

2.1 游戏引擎子系统

随着游戏行业的发展,游戏引擎需要承担的功能越来越复杂。图片渲染、物理系统、声音、脚本、动画、人工智能、网络、内存管理、本地化支持、场景管理等功能都是游戏引擎基本标配功能。这里详细介绍下几个重要部件:渲染系统、音频系统、物理系统、人工智能。


2.1.1 渲染系统

渲染系统是引擎所有子系统中最复杂最强大的一块。需要先了解下,渲染(Render)是干什么。这里引用wiki(超链接至:https://en.wikipedia.org/wiki/Rendering_(computer_graphics))的定义:

Render是指用软件从模型生成图像的过程。模型是指用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,包括非常多信息,比如几何、视点、纹理、照明和阴影等信息。图像是数字图像或者位图图像。

可以抽象理解成,根据配置和用户输入绘制出我们看到的游戏画面的过程。比如进入游戏场景,绘制出建筑、角色等;控制运动视角切换的时候,游戏画面的变化过程,都主要依赖渲染系统。这里提到的配置,主要就是模型文件,常见的是游戏美工们利用3ds Max、maya等建模工具制作生成。

游戏引擎中,渲染系统消耗绝大部分计算量。其计算量和模型的复杂度、要求渲染出来的图像的精细程度、尺寸大小等直接相关。直观感受是场景越精细复杂的游戏,对设备要求越高,否则难以支撑其实时渲染性能消耗导致卡顿效果。

这里提到一个实时渲染概念。为什么CG电影等能弄得那么高清流畅,《怪兽大学》中毛怪身上毛发数量能达到550万根还如此流畅,而移动设备上一些场景稍微多点锯齿模糊怪兽则出现卡顿。这是因为CG电影等都是预渲染,如《怪物大学》事先可以花费30个小时去绘制一帧动画,之后把渲染后的动画连续放给观众即可。但是游戏涉及到的基本是实时渲染技术,30FPS的要求不可能允许游戏引擎去慢慢渲染,玩家要求马上有效果,故而在渲染效果上有较大舍弃。当然,实际研发中很多游戏也会采用预渲染技术去获取静态物体贴图等,不在游戏进行中渲染,这个则是场景烘培技术。

游戏引擎的渲染系统,一般是基于成熟的图像API实现,比如DirectX或者OpenGL,这些API封装了GPU和显卡的部分功能。渲染系统的实现涉及到了浓淡处理、纹理映射、距离模糊、阴影、反射、透明等较多复杂技术算法,这里就不再深入讨论。不过,这里可以稍微提及下FPS游戏中经常遇到的透视挂,和渲染引擎相关性较大。该类型外挂核心都是关闭引擎的z-buffer,导致在墙壁等阻碍物后面的人物也能被渲染出来,从而实现透视外挂效果。。


2.1.2 音频系统

虽然在游戏开发中,音频的地位不如图像那么重要,但是音效对于创建具有身如其境代入感的游戏场景是非常重要的。从关卡中的环境音效、到载具或武器的交互式音效、 再到游戏中角色间对话,游戏中的音频都决定着用户体验。游戏引擎中的音频系统,主要负责的就是音频的处理。

在游戏世界里,每个能够发出声音的物体都代表了1个音源。游戏每个场景一般都会包含大量的音源,这些音源到达玩家耳朵中应该是怎样的声音就是由音频系统负责。这里涉及到的音频处理技术有:混响,反射,闭塞,阻碍物,远方传来的声音(音源与听众的距离)等。

整个系统可以简单理解为实现音源出现和传输到角色。传输过程涉及音源与环境的交互(封闭、障碍、排斥)及音源的特性(声波传输距离等)。随着声音的传播,声波与环境具有干涉的作用。为了把音效完全融合到游戏里面,必须要考虑出声环境及其与音源的交互作用两方面因素。直观的理解,隔着一面墙的怪物产生的音源和就在身边的怪物产生的音源传播到玩家耳朵会有不同表现。

类似渲染引擎有成熟的图像API,音频系统也是有类似API:Windows Multimedia, Direct Sound, OpenAL, Aureal A3D。


2.1.3 物理系统

相比渲染、音频系统,物理系统会更容易理解。物理引擎主要是模拟牛顿力学模型。既是计算在质量、速度、摩擦力、空气阻力等因素影响下的物理状态。直观点理解,游戏中出现的碰撞、跳跃、飞行等,都需要依赖物理引擎。

游戏中比较常用的场景是碰撞检测(断两个或多个对象是否产生交集),比如子弹是否命中目标?赛车前端是否发生碰撞?这里也是游戏的一个安全风险点,既是穿透外挂。由于引擎接口是公开的,外挂很容易知道哪些接口负责处理碰撞,从而能快速定位到对应代码,然后修改碰撞检测逻辑实现无敌(无法攻击命中)、穿墙(能穿透障碍物)等功能。

这里再提及下相关的碰撞检测原理,最理想的是像素级别的碰撞检测,既是连模型的一个像素点碰撞都能检测到。但实际上,地图格子检测方法在2D中较为常见,其核心就是把像素检测转为格子检测,而格子又是像素的N倍大。另外,用矩形或者圆形包围体,将物体包围起来,降维到矩形或者圆形碰撞检测,也是一种常用的检测思路。进一步有四叉树等提高碰撞检测效率的算法。深入了解这方面内容,可以研究下《Real-Time Collision Detection》这本书籍。

游戏引擎通常是提供一个平台抽象层,让游戏跨平台运行。所以大多设计都是基于组件的架构。如本篇幅一开始的图所示,类似于渲染、音频,物理系统也是一个单独组件。有PhysX、Box2D等三方物理引擎支撑。


2.1.4 人工智能

说起人工智能,可能马上想到的是最直观的博弈游戏,如五子棋、围棋等。实际上,游戏中涉及到的人工智能,及需要人工智能提高的地方数不胜数。比如人物自动寻路的寻路算法、NPC行为的有限状态机。目前游戏的不少AI都是定性人工智能的行为,表现具有确定性和可预测性。虽然编程简单,只需编写大量明确行为代码即可,但影响游戏的可玩性。这个子系统,是根据wiki对游戏引擎的定义添加的。也是笔者认为未来游戏引擎中比较重要的一块系统。


三、常用游戏引擎

目前国内移动游戏,除去部分自研引擎,比较主流的游戏引擎有两个:Cocos2D(超链接至:http://cocos2d.org/)和Unity3D(超链接至:https://unity3d.com/cn)。这里简单介绍下这两个引擎。


3.1 Cocos2D

顾名思义,Cocos2D是个2D游戏引擎。基于MIT协议的一款开源框架,后期衍生出了Cocos2d-x、Cocos2d-XNA、Cocos2d-ObjC等版本。其衍生版本,主要是针对不同平台的不同语言做出的改进优化,支持C++/Javascript/Lua/Object-C/Python/C#等多种语言,具体如下图所示。

Cocos2D是开源项目,可以根据自身游戏针对性修改引擎代码,适合定制化需求较高的开发团队。同时,Cocos2D支持的语言较多,比较方便各类程序员上手,尤其是基于C++的开发者。另外,Cocos2D是免费的。


3.2 Unity3D

Unity3D是一款可视化游戏开发工具,其封装了很多引擎功能特性,提供了各种强大的可视化编辑功能。Unity官网有段用来说明“什么是Unity”的视频,包含下图。该图展示了Unity3D游戏开发工具的界面,可以发现开发者能在U3D开发工具中实时直观看到游戏效果。同时Unity3D引擎是一种Component-Based结构,可视化界面中可直接加入各种组件(人物、AI等),捆绑指定的脚本,即可实现游戏逻辑。

Unity3D目前支持C#/boo/javascript,但绝大部分开发团队都是用C#开发。典型代表有王者荣耀、全民突击、CF手游等手游。

由于其是款高效的IDE+游戏引擎,相比Cocos2D更好封装了底层代码,开发者的上手门槛要低很多,故游戏开发初学者更适合通过U3D上手尝试游戏开发。同时,由于Unity3D有优秀的跨平台支持,只需要简单选项就能编译出不同版本(输入输出还是需要脚本中用宏来控制区分不同平台),更适合对游戏跨平台推广期望较高的开发团队。


四、小结

本篇幅主要普及了下游戏引擎知识,同时介绍了下主流的Cocos2D和Unity3D引擎,方便游戏开发者入门了解。有深入了解需求的话,推荐学习下《Game Engine Architecture》。针对两款主流引擎的话,也有官网及对应社区可深入了解学习。



*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩2 赞1

收藏

上一篇:游戏系统及开发相关概述(下)

下一篇:游戏安全漏洞介绍

最新评论
B Color Image Link Quote Code Smilies

发表评论