3D游戏引擎的原理和架构
随着 IT 产业的蓬勃发展,越来越多的幵源 3D 引擎、商业 3D 引擎都涌现出来了,其中最具代表性的有用于移动端开发的 Unity3D、用于 PC 端开发的虚幻4(Unreal Engine 4,UE4)以及幵源图形学引擎 OGRE。
Unity 引擎在市面上比较流行,相信大多数 IT 开发者都使用过,先以 Unity3D 引擎为例介绍引擎的原理,Unity3D 引擎提供了一个功能非常强大的编辑器供用户开发使用。
支撑编辑器运行的是许多己经封装好的 DLL 文件,读者可通过其安装目录查看许多 DLL 动态库文件,这些封装的 DLL 动态库就是 Unity3D 引擎底层封装提供的。
游戏开发者在使用其开发游戏写具体逻辑时,也需要利用 C# 脚本调用动态库 DLL 封装的函数接口,从而能够执行引擎底层的代码,实现想要的效果。接口的使用可通过查看 Unity 帮助文档获取,它的底层代码的实现对用户来说是不可见的,但这不妨碍使用者开发项目,因为使用者只要知道函数的功能就可以了。
3D 引擎本身也是一种 3D 软件,主要负责处理游戏虚拟世界的渲染,3D 引擎架构设计其实非常复杂,用到的知识点非常多,比如设计模式、多线程编程、算法、GPU 编程等,但是不管多么复杂,其最基本架构思想还是模块化开发,就比如打篮球一样,不论采用哪种战术跑位,最基本的还是挡拆战术。
继续模块思想的讨论,以模块化思想设计的 3D 引擎便于扩展,可以有效地减少模块之间的耦合性。
开发3D游戏引擎时,切记面面倶到;换句话说,3D 游戏引擎的主要功能是渲染。在这方面做得比较好的是开源的 Ogre 图形学引擎及商业引擎 UE4,它们核心功能只是负责 3D 渲染,做 3D 引擎该做的事情。
对于 Unity3D 引擎,它在 3D 引擎渲染的基础上还增加了网络库等功能,对于引擎来说显得过于臃肿;当然这里不是说 Unity3D 引擎不好,只是其功能太多,对开发者来说并不一定是好事情。
这种做法对引擎自身来说也不一定是好事情,因为这样引擎的功能失去了重点,所以一提到 Unity3D 引擎,大家的第一印象是其跨平台功能,与引擎核心功能渲染不搭边,而对于 UE4 引擎,大家的第一印象是渲染,UE4 在渲染这方面做得非常专一,结果就是 UE4 引擎渲染功能比 Unity3D 引擎更强大。
当然 Unity3D 引擎的优点也是非常多的,比如引擎的架构设计使用了组件的理念,使用脚本写逻辑,可以跨多个平台等,而且对于初学者上手非常快,这也是它能快速普及的一个主要原因。
如果要开发一款引擎具体如何做?引擎由哪些主要模块组成?
游戏引擎涵盖的模块非常多,它是一个处理游戏所有逻辑的系统。引擎渲染功能是否强大,决定了游戏渲染品质的高低,以及游戏渲染运行的流畅度。
下面简单介绍一下通用的 3D 游戏引擎架构,如图1所示。
图1:通用的游戏引擎架构
游戏逻辑是最顶端的,也就是所说的游戏产品,一般的游戏开发者都是开发这层的逻辑。
3D 引擎包括了很多功能模块,图1-1所列举的只是比较核心的引擎模块,引擎最终会编译成动态库 DLL 或者静态库 LIB,方便游戏逻辑幵发者调用其函数接口。
当然引擎模块内容对用户是不可见的,就像一个黑匣子一样,它里面封装了游戏开发用到的所有模块, 比如图1-1所示的声音模块、渲染模块、内存管理、输入系统、物理系统等。
游戏引擎的渲染模块会选择使用微软的 DirectX 库或者开源跨平台的 OPENGL、OPENGLES 图形库, 图1-1所示的是传统的引擎架构图。
市面上很多公司研发的跨平台 3D 引擎,都是基于 OPENGLES 图形库开发的,比如网龙、网易、腾讯、蜗牛、完美等知名 IT 公司都有自己研发的引擎,引擎的研发也代表着一个公司的研发实力。
对于程序员来说,掌握了 3D引 擎开发技术,就等于掌握了游戏的核心技能,在国内研发 3D 引擎的人毕竟是少数,所以 3D 游戏引擎研发市场缺口很大。所以作为程序员来说,应该努力去掌握 3D 引擎研发技能,这样在 IT 激烈的竞争中才能立于不败之地。
当然对于个人开发者来说,开发一款功能很强大的引擎是不现实的,其涉及的模块太多,一个人无法在短期之内完成。
Unity 引擎在市面上比较流行,相信大多数 IT 开发者都使用过,先以 Unity3D 引擎为例介绍引擎的原理,Unity3D 引擎提供了一个功能非常强大的编辑器供用户开发使用。
支撑编辑器运行的是许多己经封装好的 DLL 文件,读者可通过其安装目录查看许多 DLL 动态库文件,这些封装的 DLL 动态库就是 Unity3D 引擎底层封装提供的。
游戏开发者在使用其开发游戏写具体逻辑时,也需要利用 C# 脚本调用动态库 DLL 封装的函数接口,从而能够执行引擎底层的代码,实现想要的效果。接口的使用可通过查看 Unity 帮助文档获取,它的底层代码的实现对用户来说是不可见的,但这不妨碍使用者开发项目,因为使用者只要知道函数的功能就可以了。
3D 引擎本身也是一种 3D 软件,主要负责处理游戏虚拟世界的渲染,3D 引擎架构设计其实非常复杂,用到的知识点非常多,比如设计模式、多线程编程、算法、GPU 编程等,但是不管多么复杂,其最基本架构思想还是模块化开发,就比如打篮球一样,不论采用哪种战术跑位,最基本的还是挡拆战术。
继续模块思想的讨论,以模块化思想设计的 3D 引擎便于扩展,可以有效地减少模块之间的耦合性。
开发3D游戏引擎时,切记面面倶到;换句话说,3D 游戏引擎的主要功能是渲染。在这方面做得比较好的是开源的 Ogre 图形学引擎及商业引擎 UE4,它们核心功能只是负责 3D 渲染,做 3D 引擎该做的事情。
对于 Unity3D 引擎,它在 3D 引擎渲染的基础上还增加了网络库等功能,对于引擎来说显得过于臃肿;当然这里不是说 Unity3D 引擎不好,只是其功能太多,对开发者来说并不一定是好事情。
这种做法对引擎自身来说也不一定是好事情,因为这样引擎的功能失去了重点,所以一提到 Unity3D 引擎,大家的第一印象是其跨平台功能,与引擎核心功能渲染不搭边,而对于 UE4 引擎,大家的第一印象是渲染,UE4 在渲染这方面做得非常专一,结果就是 UE4 引擎渲染功能比 Unity3D 引擎更强大。
当然 Unity3D 引擎的优点也是非常多的,比如引擎的架构设计使用了组件的理念,使用脚本写逻辑,可以跨多个平台等,而且对于初学者上手非常快,这也是它能快速普及的一个主要原因。
如果要开发一款引擎具体如何做?引擎由哪些主要模块组成?
游戏引擎涵盖的模块非常多,它是一个处理游戏所有逻辑的系统。引擎渲染功能是否强大,决定了游戏渲染品质的高低,以及游戏渲染运行的流畅度。
下面简单介绍一下通用的 3D 游戏引擎架构,如图1所示。
图1:通用的游戏引擎架构
游戏逻辑是最顶端的,也就是所说的游戏产品,一般的游戏开发者都是开发这层的逻辑。
3D 引擎包括了很多功能模块,图1-1所列举的只是比较核心的引擎模块,引擎最终会编译成动态库 DLL 或者静态库 LIB,方便游戏逻辑幵发者调用其函数接口。
当然引擎模块内容对用户是不可见的,就像一个黑匣子一样,它里面封装了游戏开发用到的所有模块, 比如图1-1所示的声音模块、渲染模块、内存管理、输入系统、物理系统等。
游戏引擎的渲染模块会选择使用微软的 DirectX 库或者开源跨平台的 OPENGL、OPENGLES 图形库, 图1-1所示的是传统的引擎架构图。
市面上很多公司研发的跨平台 3D 引擎,都是基于 OPENGLES 图形库开发的,比如网龙、网易、腾讯、蜗牛、完美等知名 IT 公司都有自己研发的引擎,引擎的研发也代表着一个公司的研发实力。
对于程序员来说,掌握了 3D引 擎开发技术,就等于掌握了游戏的核心技能,在国内研发 3D 引擎的人毕竟是少数,所以 3D 游戏引擎研发市场缺口很大。所以作为程序员来说,应该努力去掌握 3D 引擎研发技能,这样在 IT 激烈的竞争中才能立于不败之地。
当然对于个人开发者来说,开发一款功能很强大的引擎是不现实的,其涉及的模块太多,一个人无法在短期之内完成。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算