游戏引擎开发

 

在游戏程式的领域中,经常会听到GameEngine(游戏引擎)这个东西。是否是听起来是个很炫很酷的名词?实际上游戏引擎一词它经常被过度泛称与误用。经常听到的游戏引擎架构,是由低阶(Low-Level)至高阶(High-Level)可细分为以下三个层级(Layer):

  1.绘图API(例如:DirectX与OpenGL)

  2.绘图引擎(例如:OGRE、Renderware与Gamebryo)与其他引擎

  3.游戏引擎(例如:Unreal与Torque)

游戏引擎为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、MacOSX、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。

1.游戏引擎特点 

游戏开发一站式解决方案,低成本、高效率Cocos提供了全套的引擎和开发工具,涵盖从前期设计、资源制作、开发调试、打包上线全套的解决方案。cocos重点优化了工作流,规范了整个游戏开发流程,降低沟通成本,提高开发效率。

(1)高性能,一次制作,多终端平台共享Cocos不断的优化游戏性能,以保证高帧速率下可以获得更华丽的效果;即使是山寨千元机,运行华丽特效丝毫不卡顿,让您的游戏可以得到尽情的发挥。
(2)跨平台特性确保一次制作,全平台支持。无需为后期移植耗尽人力和时间,极大的降低了时间成本,确保游戏不会错过珍贵的黄金上线档期。
(3)Windows与Mac同步发布更新,团队协作更容易目前大部分开发团队根据不同需求会在不同的操作系统下工作,而一套可以运行在多个平台的游戏引擎显得至关重要。cocos同时支持Windows和Mac操作系统,功能完全同步。提升团队协作便捷性,不再为了配合而频繁的切换系统或者使用双系统。同时会降低开发团队的硬件成本(Mac机要比PC贵3倍)。

2.需求分析
游戏引擎是一个很复杂的系统, 在这个设计中主要涉及到了以下几项功能:
(1) 光影处理: 光影处理是用来处理游戏场景中光源对游戏中的人、地、物所影响变化的效果。
(2) 物理系统: 用于模拟现实生活中的物体物理运动的一个系统。
(3) 碰撞检测: 碰撞检测在游戏引擎中如此重要, 原因是现实生活中随处都有碰撞的发生。
(4) 画影成像: 这是游戏引擎一项必不可少的功能, 否则在游戏中将看不到游戏的图像。
(5) 输入与输出: 提供给玩家与游戏交互的功能, 这也是游戏与电影的区别。

游戏引擎另一个重要的部分就是提供一些工具和脚本的支持。所以不少游戏开发者是在写脚本而不是C#,C++这些语言,这样的效率会高很多。

  那么开发游戏需要用到什么技术呢?

  C/C++:这绝对是做游戏的屠龙宝刀。

  OpenGL/DirectX:图形的API这也是必须要学会一个。

  图形学:这个觉对视做游戏的葵花宝典。

  线性代数:也是图形学的一个基础。

       引擎开发从底层往上层的开发从宏观架构上大致是这样的,先说图形部分:


底层封装,比如将DX11, Vulkan之类的底层API封装成更方便的API,比如Mesh, Material, BindProperty这些类和方法,这样在编写更上层的时候就可以省许多劲。你不会想要每个Drawcall都写一大堆buffer传递的。渲染管线,通过调用已经封装好的API,比如DrawMesh(Mesh, Material)等等,像拼积木一样一层一层的往上叠,比如先传摄像机参数,再渲染不透明物体,再算延迟光照和反射,再渲染透明物体和后处理等等。这一部分往往是工作量最高的部分之一。

着色器,同样是工作量最高的部分之一,成熟的工业级引擎常有众多备用的着色器,基于物理,特效等等。资源管理,贴图,模型和其他二进制数据的储存和加载(同步与异步)。事实上这一部分乍一看工作量不大,但实际上坑非常多,在这一方面Unreal Engine做的非常好,而且完全开源,可以去读一下源码。

多线程。老生常谈的问题,比如现在比较受欢迎的多线程方法Job Schedule + Command Buffer Queue的形式,这个在Intel的PPT中提到过。事实上现在比较先进的引擎都在使用这类方法,比如顽皮狗的Fiber,Unity3D的Job System等等。这一部分的工作量同样是乍一看不多,然而往往需要伴随着巨量的benchmark和不同机型不同平台的适配。

编辑器。这是游戏引擎的脸,引擎不能不要编辑器就像人不能不要脸,一个强大可扩展的编辑器甚至直接决定了引擎的“好用”程度和开发效率与成本。这一部分不用“乍一看”了,实际上就是工作量最高的一部分之一。

最后,游戏引擎是一个综合工程,不仅仅只是图像的堆砌,还有声音,网络,UI,物理等等模块。而且很多底层都要有坚实的高等数学和线性代数基础。

你可能感兴趣的:(游戏引擎开发)