GAMES104 B1+B2 引擎的结构与开发分层

前言:

不能对一无所知的事物抱有恐惧或幻想,而是要不断了解,去神秘化!

本节课的收获还是比较大的,主要让我从对“如何做一个引擎的未知”深感恐惧,到对做引擎的东西有了一个较为相对具体些的认知,到认为做出个引擎是有路可循的。


(一)引擎的介绍:

1.误区:曾经认为引擎开发就是图形学。然而,完成一个引擎开发,在图形学知识仅有的5%外其余的广泛都是95%的计算机知识。对于学习来讲,在搭建一个引擎时,要学会设计架构,广泛接触知识,但图形学知识仍是唯一的主线。但是对于工作来讲,是要有一专的!所以还是要在图形学里面挖掘一个深耕领域。

2.虚拟与实时渲染。引擎在有限的时间和空间内架构了一个虚拟世界,可大也可小,可以各具特色功能不一。这是枯燥的知识后面十分吸引我的地方,我们将会更多的观测世界的法则。

实时渲染。这一方面介绍了许多前沿技术,如多线程, 实时光照,多人在线同步(同步帧技术)很多涉及的是网络知识。

3.引擎几大系统:

一个引擎可以从update函数入手。意味着在不同的时间段,程序要再迅速的跑一遍。首先感叹一句,程序员将改变世界。

MVVM:这个要好好的理解一下的。View--->ViewModel<===>Model.。在MVVM框架中,不允许数据和视图直接通信,只能通过ViewModel来通信,而ViewModel观测数据变化,对视图内容进行更新,ViewModel监听视图变化,并能够去通知功能数据发生变化。所以体现了引擎的封装性。

渲染系统:怎么把画面的渲染速度达到需要的帧率。

动画系统:把模型玩起来,动画的过渡如何做。

物理系统:与世界的交互,但是我们要尽可能逼真的描述出逼真的法则。物理这是个巨大的挑战!

GamePlay系统:这个部分是整个游戏的核心架构。由事件系统和脚本系统去表现这个世界的规则,组合成一个工具。

特效系统,相机系统,寻路系统等,这些是非必须的,但是也是体现着设计师,游戏开发者的对于效果的“高定制性”,这怕得是个技美来设计的系统了。

可以看到这几大系统对于开发者要求的能力还是有不同侧重点的。渲染系统是更适合学习现状和职业选择的。


(二)引擎的分层:

在大系统开发的工程中,我们往往倡导“多组合,低耦合”。所以引擎分层来开发可以降低开发复杂度。

引擎的开发主要可以分为五层:

1)Tool Layer工具层   2)Function Layer:功能层   3)Resource Layer:  资源层   4)Core Layer:核心层   5)Platform  Layer:硬件软件平台层

整体来看是开发一个引擎的复杂度是很高的,对于不同的层我们都要学习相关的知识,不亚于一个操作系统的开发,所以在学习上来讲,要把握好主干道,然后一专多长!

首先来说,Resource Layer: 资源层,主要管理资产的生命周期,对于完成一个效果我们对于资源的需求其实看起来是最为直观的。几个关键点:(1)资源的高效格式(importing),从resource变成Assets;对于若干MAX,PSD文件若直接放到引擎中,往往要给引擎带来更多的负担,所以要先把他们转化成高效的格式再来为引擎所用,每个资产都有唯一识别号。(2)实时资产管理器。对于战争类游戏,因为玩家要进行实时的操作,故资源也要实时的加载。所以要设置更优的系统的GC要管理资源。

解决了资源层的问题,就要来解决Function Layer:功能层。论一个功能是属于游戏效果,还是属于引擎效果,这方面是存在争议的,所以“梳理逻辑”在功能层中体现的还是很重要的。比如第三人称射击类游戏中:相机的摇晃感。

游戏的进程可以看成是程序的时间进程(unity里成为update)。随着片刻(tick)时间的不断推进,逻辑会改变,场景会改变。Logic+Render构成了一个游戏进程。所以在写逻辑的时候将两者分开写可以更好梳理逻辑。游戏进程更优的组织方式是多线程,所以尽量在设计引擎底层代码的时候从多线程的角度出发,棘手的地方在于各个线程之间可能存在复杂的依赖关系,就不能简单地忽略逻辑把一个线程任务分发给多线程完成!

接下来,说Core Layer:核心层 。核心层可以看成一个庞大的数学库,其要服务于引擎的效率而且对代码质量要求很高。(1)线性代数。一般涉及矩阵和向量的应用。不断的优化引擎需要很多算法知识,比如Carmark计算1/sqrt(x),需要考虑SIMD(单指令多数据指令)(2)数据结构和容器。主要应用于内存管理。C++17,C++21的STL库扩充了更高效率的数据结构是实现方式。所以在把C++98的STL库透彻理解后我觉得可以去体会一下。另外内存管理,硬件也是要解决的一部分方案。紧贴CPU的缓存有时是核心卡点。一般的引擎开发者主要面向功能层和工具层,所以这一部分也是引擎开发者的一道分水岭。

再来谈谈Platform  Layer:硬件软件平台层,入口点是掩饰平台差异性。平台目前只了解Windows,但未来也可以去学linux.

最后说下Tool Layer工具层,主要用来提高生成效率,比如图形编辑器,Ui编辑器,shader编辑器。另一个功能是DDC,让其他软件的资产无损导入引擎,需要做资产的导出器,和资产导入器。

作为引擎开发的上层建筑,工具层和功能层,往往是常常被修改的。所以灵活性要大些。但对于核心层和平台层比较稳定,一般不做修改。比如可以用Qt开发界面,C#开发控件。


一些刚下的软件补充

CMake:

编译复杂项目的应用---CMake是一个跨平台的Makefile生成工具。读入所有的源文件(.c;.h;.oc)之后,自动生成makefile。不同的平台和语言都有自己的Make,但是CMake是还是比较出众的。

Git:

Git是一个版本控制系统,是任何软件开发项目中的主要内容。主要用于代码备份和代码版本控制。


结语:

从认识开始,慢慢深入,要学的知识是无尽的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘敬_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值