资源层,平台层,工具层,功能层,核心层……..
资源层:将resource转化成assets,因为在其他DCC软件中(如:maya,3dmax),他们的文件格式(.max,.maya….)往往是兼容自身软件,其中包含着大量的无用信息,因此,引擎需要将其转换成更加高效的 类型(DDS)。
而在Resource Layer中,每个资源都会有一个独特的GUID(Globally Unique Identifier,全局唯一标识符),勇于查找该对象并使用。即使文件的路径发生了改变,也可以通过GUID识别到需要使用的文件
这一层也负责资产生命周期的管理,不同的资源有着不同的生命周期,而有限的内存要求我们及时释放不需要的资源,主要的方法有Garbage Collection(GC)和Deferred Loading
e.g.Tick()函数:分为TickLogic()和TickRender(),分别处理逻辑与渲染计算,要求每帧更新
多线程的发展趋势:在过去,CPU只有单核,物理,渲染等等的计算往往只会写在这一条线程上;随着硬件的发展,CPU的核心数量增加,也就使得多个线程可以并行计算(如:一个核心负责动画功能,一个核心则负责物理解算….);但未来的引擎一定是采用的“Job System”,也就是将单个功能拆解为多个小的job,分散至不同的核心中进行计算,充分利用所有的性能,但是因为牵扯到多个系统的计算先后顺序问题,因此比较复杂
因为游戏引擎极度重视效率,像是C++的STL就不能使用(会产生内存空洞),因此我们需要在这一层自定义数据结构,以确保运行的高效性。同时也要求核心层的代码质量高,且不能轻易修改
平台层:在不同的平台上(Windows,Mac….),文件路径,图形API,硬件架构等都可能有很大差异,因此引擎还需要对这些不同的平台进行不同的处理
工具层:需要允许别人能够创建游戏内容,开发方式灵活,有时候代码量可能会比整个引擎还大
外部的DCC工具(3DMAX,MAYA,Houdini等)也属于这一层
为什么要进行分层?#
一般来说,只允许上层调用下层的功能,而禁止下层调用上层的功能
原文:引擎架构分层
