手把手教你架构3D引擎高级篇概述

前几年写过一本书《手把手教你架构3D游戏引擎》电子工业出版社,主要内容讲的是固定流水线编程,目的是让读者理解第一代引擎是如何实现的,从本篇博客开始,给读者介绍关于使用可编程流水线自己搭建3D游戏引擎,我将它设为高级篇,我会从查资料学习技术最基本的讲起,教给读者如何一个人搭建一款接近商业的自研引擎,希望读者能学习到搭建引擎的一些小技巧,帮助你理解可编程流水线引擎流程,以及提升你优化引擎的能力,3D游戏引擎其内在的本质是相同的,只是表现方式不同而已,所以学习自己搭建一款引擎对你技能的提升帮助非常大,至少你再接触其他引擎时,做二次开发信心还是大大的有滴,而且更有助于你理解Unity引擎的开发以及后期优化。

市场上对于3D游戏引擎的开发需求还是非常大的,虽然Unity和UE4非常成熟了,还是有很多大厂自研引擎,另外一些做虚拟仿真公司也在自研引擎,毕竟自研引擎的代码是我们自己写的,有什么问题可以快速的定位,而且可以针对项目的需求做一些定制开发,非常方便,底层代码也可以根据项目需求做一些优化。有自研引擎的公司都会有自己的引擎部门,它们的职能就是负责引擎的开发以及优化。对于自研引擎,说的明白一些就是我们可以针对自己的项目针对性的开发一款引擎,这款引擎功能并不需要多强大,能满足我们项目求即可。引擎的开发是一个团队的事情,一个人很难制作出一款成熟的商业引擎,工作量太大,开发周期也会漫长,涉及到的技术点也比较多,但是作为引擎开发人员对于引擎常用技术还是需要掌握的。假设公司让你组建引擎团队,开发一款商业引擎,我们应该从哪几方面入手:
首先要清楚我们的引擎是用于什么项目开发?
我们的引擎需要解决什么问题?
需要开发哪些编辑器?
如何利用现有技术帮我们解决问题等等
这些问题我们引擎开发人员必须要解决的,从本篇博客开始,我就教大家如何开发商业引擎?同时回答上面提到的问题。
下面我们先从引擎能解决的问题讲起,这个非常重要的,因为它关系到你的引擎是否足够强大,能否解决项目提出的各种需求。
每款引擎都有自己的特色,比如Unity引擎和UE4引擎,我们自研引擎也有自己的特色,后面的开发也就是围绕这些特色展开,给读者列举如下:
- 引擎平台支持

,我们的引擎支持windows和Linux,OS是64位的,在Windows平台的编辑器是Visual Studio2017,在Linux平台的编辑器是GCC5。
- 引擎基本功能

这个关乎我们代码的编写:
引擎架构是基于组件模式开发的;
支持代码以及资源热更新;
数据驱动的;
支持插件模式,
跨平台的
便于其他插件的使用,扩展引擎功能;
支持脚本Lua编程;
内置调试器;
支持数据打包;
下面再介绍渲染模式。
- 引擎渲染

引擎渲染也是引擎非常重要的模块:
我们的引擎支持D3D11和OpenGL图形API;
支持延时渲染;
支持PBR,
支持HDR,
多线程渲染,
数据定义管线,
支持Shader脚本热更新,
着色器语法类似GLSL。
FBX模型
支持9种纹理格式,
支持材质热更新
支持模型的LOD,
地形采用CDLOD,
可自动实例化模型,
基于高度的雾效
水的渲染,
毛发渲染
空气散射
延时贴花
天空盒等等。
再介绍后处理渲染,先介绍实时阴影渲染,我们的算法采用的是CSM,后处理算法有
景深渲染
Tone Mapping,
HDR,
GodRays,
Bloom,
SSAO,
抗锯齿FXAA等等。
声音我们采用的是OGG格式,另外还有粒子系统,网络,物理碰撞,骨骼动画,GUI,Navigation等等。
- 引擎编辑器

判断一款引擎是否成熟,我们需要开发相对应的编辑器工具链:
Shader 编辑器用于Shader脚本开发以及调试,
Packing打包编辑器用于资源的打包,
粒子编辑器,
Animation动画编辑器,
UI编辑器,
场景编辑器等等。
- 第三方库
我们的引擎不可能什么事情都需要自己从头写到尾,即使Unity和UE4也用了很多插件,我们的引擎也不例外,我们也需要用到第三方插件,比如:
Lua
BgFX等等,后面会给读者详细说明。
- 小结

以上是我们自研引擎的要实现的功能,虽然相比Unity和UE4,功能方面还不完美,相信随着我们把引擎框架搭建起来后,功能可任意扩展,从而把引擎功能持续完善起来。每一款引擎都是从不成熟到成熟,Unity和UE4也是这样的,上面列举的要实现的功能,对于个人开发者来说已经非常庞大了。明知山有虎,偏向虎山行,从下篇文章开始,我教大家怎样去实现每个技术点,怎样查阅资料,以及把现有的,成熟的技术模块嫁接到我们的引擎中。

你可能感兴趣的:(3D引擎)