3D游戏引擎初探(二)

🗨️字数统计=1.4k字 ⏳阅读时长≈4分钟

3D游戏引擎架构

最底层

渲染模块的图形库接口。目前游戏引擎最常用的渲染模块是微软的DirectX库或者开源跨平台的OPENGL和OPENGLES图形库。项目中使用的是Windows的GDI接口,只针对Windows操作系统。

中间层

封装好的3D游戏引擎,可以理解为功能的控制模块。可细分为:声音模块、渲染模块、图形系统、UI系统、特效系统、管理系统、物理系统、数据系统、输入系统、内存管理。

最上层

游戏开发人员所用到的游戏逻辑,一般情况下是调用引擎封装好的接口编写游戏所需要的逻辑。

各层关系

最底层的图形库接口关系到了整个游戏将可以在哪个平台下运行,GDI是专用于Windows平台的图形库,故而只适合在Windows中运行游戏。若想在其它平台中运行,则需要对底层的渲染模块的图形库接口做兼容。

中间层的3D游戏引擎和上层的游戏逻辑其实是相辅相成的,游戏引实质是从游戏逻辑中提取出来的共用的功能。比如unity3D、虚幻4引擎、第一家入职公司自主开发的小胖引擎等等,都是把游戏最基础的图形图像光照处理等游戏逻辑提取了出来,方便开发人员编写游戏时调用,不必在开发新游戏的前期大费周章的再次编写这些底层逻辑。从而把游戏开发的重点转移到了游戏逻辑上,大大提高的开发新游戏的效率,降低了开发新游戏所需要的周期。

由此来看,自主开发的引擎或者说开源的引擎有一个优点,在游戏逻辑开发的过程中如果发现有什么需要新加或者优化的逻辑,可以直接写在引擎中,提供给游戏逻辑层一个调用的接口即可。从根本上尽量避免代码重复,代码遵循统一的风格。所以可以说:游戏引擎为游戏逻辑的开发提供了方便,游戏逻辑的开发优化了游戏引擎的完整性。

所需条件

开发一款游戏需要什么条件呢?一共有四条。

语言

掌握一门主流的开发语言,本项目使用的是C++语言。

这里不得不说一下C++语言的优势了

1、 C++实现了面向对象程序设计。在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C++来编写的。

2、 C++语言非常灵活,功能非常强大。如果说C语言的优点是指针,那么C++的优点就是性能和类层次结构的设计。

3、 C++非常严谨、精确和数理化,标准定义很细致。

4、 C++语言的语法思路层次分明、相呼应;语法结构是显式的、明确的。

当然,这只是C++的一部分优势,在运用过程中,我们会逐渐发现C++语言之美。

线性代数

在开发引擎的过程中,数学同样很重要。线性代数在游戏的开发过程中可以灵活的解决3D固定流水线中的大部分操作,物体的移动。旋转、缩放、光照等都运用到了数学原理。

GPU编程语言

3D游戏引擎的核心功能就是对游戏的场景渲染和物体的材质渲染,对材质中有Alpha通道的要做特殊处理(Alpha通道是材质有透明的部分)。移动端为了减少透明材质的消耗,会通过GPU编程在shader中处理,比如unity项目中一般会把有Alpha通道的图片切割为无Alpha通道和有Alpha通道的图片,通过shader编程将其再合在一起,还有场景渲染使用的后处理效果,模型的选中效果等,都是与GPU编程息息相关的,至少需要了解和使用GPU编程语言中的一种,目前有GLSL、HLSL、CG等。

图形学算法

逼真的效果需要适合的图形学算法,比如水的波纹的模拟中用到的波动方程,刚体碰撞效果等,都会用到图形学算法。

先后顺序

会从最基础最底层的知识开始学习了解:

数学知识

游戏世界所运用到的线性代数的相关知识,领略数学之美。

材质和光照

我们就是游戏中创造万物的造物主,首先创造什么?当然是光啦!

固定流水线

晶体管中的二进制数据是如何渲染到屏幕上供我们所观看呢?固定流水线会为你解密这一切。

游戏引擎架构

将功能模块进行细分,分步实现,为下一步的整合做好前期准备。

3D游戏引擎的底层架构和封装

用计算机语言实现每个功能模块,享受制作引擎工具的乐趣,这就是你手中的模板,用它就能创造一个又一个不同的游戏世界。

游戏逻辑

引擎已经搭建完毕了,那么下一步就是进一步搭建可以与玩家互动的游戏世界啦。

分享到