游戏引擎是一个软件开发环境,是为人们开发电子游戏而设计的。开发人员使用游戏引擎为控制台、移动设备和个人计算机构建游戏。游戏引擎通常提供的核心功能包括用于二维或三维图形的渲染引擎(“渲染器”)、物理引擎或碰撞检测(和碰撞响应)、声音、脚本、动画、人工智能、网络、流、内存管理、线程、本地化支持、场景图,可能还包括对电影的视频支持。实现者通常通过重用/改编同一个游戏引擎来产生不同的游戏,从而节省游戏开发过程的成本,或者帮助将游戏移植到多个平台。——维基百科
A game engine is a software-development environment designed for people to build video games. Developers use game engines to construct games for consoles, mobile devices, and personal computers. The core functionality typically provided by a game engine includes a rendering engine (“renderer”) for 2D or 3D graphics, a physics engine or collision detection (and collision response), sound, scripting, animation, artificial intelligence, networking, streaming, memory management, threading, localization support, scene graph, and may include video support for cinematics. Implementers often economize on the process of game development by reusing/adapting, in large part, the same game engine to produce different games[1] or to aid in porting games to multiple platforms.
———— From Wikipedia
物理引擎使用对象属性(动量、扭矩或者弹性)来模拟刚体行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许有复杂的机械装置,像球形关节、轮子、气缸或者铰链。有些也支持非刚性体的物理属性,比如流体。
PhysX
PhysX物理引擎是一套由AGEIA公司开发的物理运算引擎,物理运算引擎的作用,简而言之,就是令虚拟世界中的物体运动符合真实世界的物理定律,以使游戏更加富有真实感。
PhysX可以由CPU计算,但其程序本身在设计上还可以调用独立的浮点处理器(例如GPU和PPU)来计算,也正因为如此,它可以轻松完成像流体力学模拟那样的大计算量的物理模拟计算。
AGEIA曾为《虚幻竞技场3》开发几张加入PhysX引擎的MOD地图,物理效果非常出色。同时AGEIA也自己开发一个免费的名为《好战者》的物理游戏。此后的一些PhysX游戏,也大都基于虚幻3引擎。例如《镜之边缘》、《蝙蝠侠:阿卡姆疯人院》等等。
2008年NVIDIA宣布正式收购Ageia及该公司的PhysX物理软硬件组件。当NVIDIA发布Forceware 177.79驱动后,意味着GeForce 8/9和GT200系列的GPU都支持PhysX引擎。这是因为NVIDIA将PhysX引擎集成到CUDA架构的物理运算中。这样,显卡就能自动进行物理加速运算。当然,PhysX在游戏上的运用仅仅是物理引擎众多运用的一方面,在整个CUDA通用运算领域上,都会有物理引擎的身影,比如计算天体间在相互引力的作用下,各自的运动轨迹等。
PhysX在在游戏中有粒子、流体、软体、关节和布料五大应用。
所谓的粒子运动,主要是指大规模的物理运动,比如此前提到过的用手雷将油桶引爆后所形成的碎石头、冲击波造成的尘土飞扬等效果,这些效果如果都让传统的CPU来进行运算的话,无疑是相当困难的。
流体运动更多的则是展现水从水管内喷出,水冲击到物体后,物体的表现,比如木箱被冲翻。而那些被冲翻的木箱翻倒的方向每次都各不相同,又比如在一个NⅥDIA Logo形状的玻璃容器中,用鼠标来控制玻璃容器的位置,让容器里的液体流动,这种流动的效果和现实中的效果已经相当接近了。
在NⅥDIA展示的演示画面中,还有一个则是“食人花”的场景。讲述的是一朵巨大的食人花(也可以说是花形状的怪兽)被人抓住以后,玩家用激光去攻击食人花,然后这朵“花”就会作出反应。这种软软的身躯扭动起来非常像现实生活中看到的鼻涕虫之类的虫在蠕动一样,感觉相当恶心。
至于在关节和布料方面的应用,在文章的开始处已经提到了,美女们在T型台上用夸张的肢势行走,虽然动作夸张,却丝毫没有虚假的成分在里面,这在传统的3D游戏里是很难做到的。而身上的裙子也跟着关节的移动而跟着摆动。
总而言之,可以看出,所谓物理效果,都是在游戏中模仿现实中真实物理世界的运动方式,在游戏中,大家甚至能感受到箱子、石头、布料以及那些恶心的无脊椎动物的触感是怎样的。游戏之所以能实现如此多的动态效果,都要归功于物理运算。
输入系统将支持键盘、鼠标、手柄和游戏垫以及VR设备。因为DirectInput考虑了全部非键盘和鼠标这样的输入设备,所以对诸如游戏控制器、手柄、游戏垫、VR等这样的设备都采用同样的代码进行基本的处理。游戏引擎包含一个输入系统。这个输入系统唯一的目的是创建输入设备,并在必要的时候初始化和关闭API。每种设备都派生于基类。这同样使用于输入系统类。每个设备都包含确定按钮是否处于某种特定状态(向上、向下或被按下等状态)的通用函数。
渲染系统包含了一次渲染大批几何图形的程序代码。例如,为了显示一个角色模型,就要使用缓存在同一时间内将全部数据发送给渲染系统,也就是说,不是每次只发送一个三角形数据。可以使用纹理图像使几何图形发生渐变,从而增添场景的细节层次。角色模型数据、级别数据等之间没有什么差异,对它们采用的是相同的处理方式。要动画显示的模型和其他物体在发送给渲染系统之前都要做动画处理。当谈及级别几何图形时,本书将使用多种不同的技术,这会使数据的渲染率更高。渲染系统只关心发送给自己的数据并将其显示出来,而不管要绘制的是几何图形或是在屏幕上渲染显示文本。渲染系统并不负责哪些内容要渲染,而哪些不需要渲染。
渲染系统负责初始化渲染API、创建和绘制文本、绘制纹理几何图形、实现硬件光照并在完成工作之后整理系统工作。由于纹理的创建和销毁取决于正在使用的渲染API,因此渲染系统将不得不处理这些事情。直接在渲染系统中处理纹理将会使系统显得尽可能独立。将渲染API移植到OpenGL或另一个渲染API,都不会影响到渲染系统之外的代码。这是编写API无关的代码的关键之处。
固体物体本质上是固态的,它通常不会做出不可能的事情,例如穿透对方。程序员需花许多精力,才能确保不会互相穿透。这是任何游戏引擎的核心元件之一,碰撞检测系统(collision detection system)。
碰撞检测在3D游戏中至关重要,好的碰撞检测要求人物在场景中可以平滑移动,遇到一定高度内的台阶可以自动上去,而过高的台阶则把人挡住,遇到斜率较小的斜坡可以上去,斜率过大则把人挡住,在各种前进方向被挡住的情况下都要尽可能地让人物沿合理的方向滑动而不是被迫停下。在满足这些要求的同时还要做到足够精确和稳定,防止人物在特殊情况下穿墙而掉出场景。
早期3D游戏的碰撞检测多数基于格子或者BSP树,基于格子的系统实现简单但精度不够,不属于严格意义的3D碰撞检测。基于BSP树的碰撞检测一度十分流行,算法基本已经成熟定型,但它的固有缺点却使它不太适合现在的游戏。BSP树需要很长的预处理时间不适合加载时计算,BSP划分经常会产生原多边形数三到四倍的多边形,考虑到不用保存法线、颜色、uv等信息也要增加将近一倍的资源容量,在一个大的游戏中将模型资源的容量从200M增加到400M相信是大部分人都不愿接受的。目前对于任意复杂三角形集合(mesh)的碰撞检测多数基于BVTree(bounding volume tree),具体可以是aabb tree,obb tree或者K-dop tree,这也是当今各种物理引擎和碰撞检测引擎流行的做法。
目前成功商业3D游戏普遍采用的碰撞检测是采用BSP树及包装盒方式。简单讲就是采用一个描述用的正方体或者球型体包裹住3D物体对象整体(或者是主要部分),之后根据“描述用”包装盒的距离、位置等信息来计算是否发生碰撞。
集群AI:
集群行为
AI寻路
1.基于单元的导航图
将地图划分为多边形单元组成的规则网格。易于动态更新,但时间空间消耗都大
2.创建可见点导航图
先手工放置一些路径点,然后若路径点之间可视,就能以边连接。可以设置一些特殊点,适合简单的寻路
3.创建导航网格NavMesh
将可行走区域划分为凸多边形。可以是多种多边形的组合,让网格划分更加合理
采用“视线确定”方法,向前跳到视线最远途经点,对路径进行后处理,得到更平滑的路径
效率高,空间小
AI感知
1.轮询(主动查询信息)
轮询类似编程中的switch-case,是AI周期性地查询所需要的信息,轮询非常常见,容易维护,但有效信息率低,花费性能较多
轮询中心(没有必要每个AI都进行一遍查询,而是集中处理需要查询的信息)
2.事件驱动(被动得知信息)
事件是一种高效的消息传递机制,由事件分发者主动通知每个感兴趣的AI,这样就使AI准时获得有效信息
可以做一个中心检测系统(事件管理器),记录每个AI感兴趣的事件,并通知他们,还方便了调试
3.Trigger触发器
触发器其实和事件比较接近,相比之下,触发器是事件的本源,比如监听声音的声音触发器,检测观察物的视觉触发器,等待时间的时间触发器等等
Trigger 常用一个半径计算检测的范围,
Sensor 感知器则定义了枚举类型和变量,保存了事件管理器
视觉感知:圆锥形探测
听觉感知:衰减范围。而感知器也有对应的感知阈值
触觉感知:碰撞器
记忆感知:记忆List+Time留存时间
状态机
有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。
—— 转自博客园
BehaviorTree行为树
行为树是由行为节点组成的树状结构
对于FSM,每个节点表示一个状态,而对于BT,每个节点表示一个行为。
行为树层次清晰,易于模块化,封装性好,可重用,是一种效果理想的AI编辑器
在BT中,节点是有层次(Hierarchical)的,子节点由其父节点来控制。
每个节点的执行都有一个结果(成功Success,失败Failure或运行Running),该节点的执行结果都由其父节点来管理,从而决定接下来做什么,父节点的类型决定了不同的控制类型。
图为UE4行为树
AI是一个很深的领域还有很多很多可以去研究的方向。
图片选自——gamedesigning.org
Epic Games的虚幻引擎是最受欢迎和广泛使用的游戏引擎之一。
原始版本发布于1998年,而17年后的每年,它仍继续用于一些最大的游戏中。
在2015年GDC 2015举行期间,Epic Game宣布开放UE4源码,所有开发者均可免费获得UE4所有的工具、功能、完整项目、更新以及bug修复。只有在每季度盈利超过3000美元后才需要支付5%的版权费用。
使用虚幻引擎制作的著名作品包括 《战争机器》系列,《质量效应》系列,《生化奇兵》系列和 《蝙蝠侠:阿卡姆》 系列。
虚幻引擎的优势在于它具有足够的修改能力,可以将游戏变成非常独特的体验。
其中之一是Unity,这是一种多平台游戏引擎,可让您轻松创建交互式3D内容。
许多独立开发人员使用Unity的原因在于其出色的功能,高质量的内容以及几乎可以用于任何类型的游戏的能力。
最近Unity的著名作品包括逃离塔克夫,炉石传说,永恒之柱和Kerbal Space Program。
关于Unity 5的最好的事情之一是个人版,每个人都可以免费下载。
它包括具有所有功能的引擎,并且可以(大部分)用于在每个平台上制作游戏。
专业版具有许多出色的工具,需要您每月支付费用。
与大多数其他游戏引擎不同,GameMaker:Studio已被广泛使用,因为它不需要使用编程知识。
相反,用户可以“点击”来创建游戏,而不是使用本地语言编写游戏。
GameMaker制作的一些最佳游戏包括Spelunky,迈阿密热线电话,Super Crate Box和即将推出的Hyper Light Drifter。
GameMaker之所以受欢迎,是因为您无需先学习编程语言就可以制作游戏,并且那些有编码经验的人可以使用它来使自己的游戏更好。
GameMaker和其他点击引擎的问题在于,与其他引擎相比,开发人员的局限性更大。
虽然有免费版本,但要充分利用GameMaker,则需要购买Professional或Master Collection版本。
Godot引擎是非常适合制作2D和3D游戏。该引擎“提供了大量的通用工具,因此您可以专注于制作游戏而无需重新发明轮子。”
它是免费使用的,并且通过MIT许可证是开源的。没有版税,没有订阅费,没有隐藏的字符串-您通过Godot引擎开发的任何东西都是您的。
Godot的社区经常修复错误并开发新功能,这始终是一个好兆头。活跃的社区意味着甚至可以回答与您最特定的Godot相关问题。
“ AppGameKit是一个易于学习的游戏开发引擎,非常适合初学者,业余爱好者和独立开发者。”
AppGameKit专注于快速编码和构建应用程序,并能够跨平台共享它们。这种快速的迭代和跨平台共享是针对移动游戏开发而设计的,但是可以处理大多数平台:
CryEngine平台是免费使用。
您可以获得完整的引擎源代码和所有引擎功能,而不必支付任何许可费,特许权使用费或其他隐藏费用。
CryEngine是视觉上令人惊叹的引擎。图形精美,人物栩栩如生。
您可以使用CryEngine来开发几种不同的平台:
没错,如果您想进入虚拟现实游戏创作世界,CryEngine可以满足您的要求。
除了引擎本身,CryEngine还提供了大量免费的学习资源。教程,论坛和文档为您提供了入门所需的工具。由于引擎的强大功能,因此存在一些学习曲线。
Amazon Lumberyard是Amazon 构建的引擎(顾名思义)。根据该网站,Lumberyard是“ 免费的、强大、完全可定制的游戏引擎“没有使用费或席位费,与Twitch和AWS的无缝集成,还有更多的即将出现。”
AWS代表Amazon Web Services,这是由Amazon构建和维护的安全云平台。通过Lumberyard进行集成意味着可以轻松地通过在线游戏构建游戏。唯一的问题是通过亚马逊的AWS服务要花钱。不过,您可以选择自己的计划(或根本不包括在线游戏)。
如果您喜欢多人游戏,Lumberyard拥有适合您的工具来实现这一目标。
Lumberyard有一个“入门指南”视频系列,它将使您快速入门并逐步使用引擎构建第一个游戏原型。
几乎每个人都可以使用它来创建游戏。
该软件旨在让您从头到尾构建完整的游戏(即使您对游戏编程一无所知)。
“ RPG Maker系列使您可以通过易于使用的界面自定义游戏的各个方面,使其既适合初学者,又具有足够的专家力量。”
有许多RPG Maker产品。RPG Maker MV的价格为79.99美元。有一个针对Windows用户的免费试用选项。
经验丰富的用户可以利用其Javascript知识来“根据自己的喜好将游戏改变,从Battles到Menu UI。不具备Javascript知识的用户将仅限于该引擎提供的功能,但仍然有很多东西可以制作游戏。
“ Libgdx是一个Java游戏开发框架,提供了可在所有受支持平台上使用的统一API。”
API是应用程序编程接口的缩写—拥有一个API使得libGDX 成为跨平台开发的绝佳选择。所针对的平台无关紧要:Windows,iOS,Linux,Mac OS等都使用相同的API。
LibGDX允许您在桌面上本地运行和调试游戏。这样可以轻松生成游戏的快速迭代并快速测试更改(因为您无需启动iOS / Android等即可测试这些更改)。
该libGDX论坛是活的,以及与覆盖发展与libGDX主题和教程入门。还有一个“ 源代码指南 ”,其中包含可利用的演示和示例。
“ Urho3D是一个免费的轻量级,跨平台的2D和3D游戏引擎,以C ++实现并在MIT许可下发布。”
Urho3D Wiki(Urho3D百科) 包含了你需要开发的资料与原理,包括一切如何指南上设置:
Urho3D 当前的版本为1.7,它是完全免费下载的。
它提供了完整的功能列表,包括首次实现这些功能的版本。
Urho3D还解决了它的局限性,包括您需要具备“ C ++的性能关键代码以及根据您的需要来改进现有子系统(如网络,物理和动画)的技能”的功能,简要的局限性列表可在其全部内容中找到。
Messiah引擎是网易公司于2013年着手开始研发,在吸取了“寒霜引擎”、和顽皮狗工作室专用的“顽皮狗”引擎等优质产品的经验,最终于2016年中旬正式投入到游戏研发中。
水银引擎的代表作《天涯明月刀》。
天涯明月刀电影级游戏画面感刷新了国产武侠3D网游图形、技术和画面表现能力的上限。无论是极具写实的场景效果还是人物一招一式,都成为玩家对这部电影网游期待的理由。到场视觉计算技术开发商NVIDIA(英伟达)中国区技术总监林楠表示,“从技术特效、场景设计到性能优化上,天涯明月刀堪称优秀,是近年来国内少见的游戏大成之作。
笔者认为虽然游戏性才是游戏的灵魂所在,但是游戏的画面在很大程度上决定了玩家对游戏的第一印象,这也是吸引玩家的最重要的元素之一。
《天涯明月刀》在一开始就选择了NVIDIA作为合作伙伴。通过合作,《天涯明月刀》能够在游戏图形技术的设计、应用和后期的调试、测试上获得世界顶尖图形业界厂商的全面支持。
《天涯明月刀》在图形引擎上的优势在于无论是天气系统、光照系统还是任务系统,游戏都能做到变化、动态和自然。不要小看这种动态设计对游戏的影响,相比传统的固定天气场景、固定光照以及固定人物表情等,这是首次在国内网游中做出如此重要的飞跃性进步,也是完全开创性的进步。
《天涯明月刀》强大的天气系统,就是基于RTG系统本身强大的全程序算法而来。从理论上来说,游戏中的每个场景都可以有丰富的日夜变化和天气变幻,在不同时空情境下表现出各自的特色。比如游戏情结中的艳阳高照、大雨倾盆、风沙肆虐这些表现力强的天气也被安排在适宜的剧情桥段中用于展现、渲染剧情,于此同时,游戏中对天空的雾气到潮湿的材质,从茂盛的森林到干枯的大漠,每一个细节都精心的雕琢,带来了相当优秀的图形表现。
《天涯明月刀》在游戏光照效果方面也颇有建树。传统的网游基本上都采用了单光源场景,这样的好处是设计很容易,但效果上显得呆板、虚假。《天涯明月刀》创新地将多光源系统引入了游戏中,让游戏在不同的光源表现在场景中显得更为鲜明、更为逼真。
《天涯明月刀》中各种不同的地形、建筑、道具、服装以及角色的材质上,因为进行了与光线互动的大量计算,其物理光照、材质反射方面正确的粗糙度反馈在游戏非常引人注目。
《天涯明月刀》采用了很多先进的技术来呈现游戏画面,但由于极为优秀的优化,硬件配置要求并不高,强大的引擎优化性能,使得游戏对于不同级别的显卡都能有良好的对应支持。在NVIDIA测试中,甚至是入门级显卡也可以流畅运行游戏,而当显卡级别不断提升时,游戏图形表现也会不断增强。——摘自兔玩网
总而言之,开发一款游戏引擎是件工程量巨大且非常耗时耗力的事。所涉及到的知识层度和广度也是非常大的,比如《线性代数》的向量和矩阵运算,尤其是点积,叉积,空间变换,《计算机图形学》尤其是渲染管线和着色器以及物理学知识、GPU渲染知识和几何算法等等等等。
在经过无数的技术堆叠之后编成的引擎,还要通过尽可能多的开发游戏的测试、bug的修复、部件的完善、新功能的推出等等的千锤百炼才能成为一个合格的游戏引擎。