赞
踩
在一个tick时间内(帧?)分别先后执行tickLogic()和tickRender(),(逻辑帧和渲染帧,类似unity的Update()那一套)
功能层涉及的东西核心又多且杂,给引擎提供核心功能模块(major function modules)、Loop Update、并且是游戏和引擎的过渡。同时功能层的多线程运算已经成为主流,并且多核中的dependency非常重要。
核心层为所有逻辑提供基础,比如数学库[线性代数就够用]、数据结构和容器(链表树)、内存管理等。
游戏引擎非常注重效率,比如在数学库中,可以使用逼近算法(不完全准确),或者用SIMD(单指令多数据Single Instruction Multiple Data,以同步方式,在同一时间内执行同一条指令)提高计算效率,或者使用SSE指令进行矩阵计算;比如数据结构(比C++)更方便内存管理,以减少内存浪费(这点与操作系统类似)。
有时候写完代码发现不同平台文件加载路径的符号都不一样,这时候就需要用到平台层,来消除不同平台间差异的影响。平台层通过Render Hardware Interface(RHI)来解决这些差异问题,利用虚函数对不同平台的图形API进行重新封装。
甚至不同平台连CPU架构都不一样,比如索尼还有个SPU,不同平台的优化差异很大。
工具层主要为创作者提供生产力工具,比如蓝图、材质编辑器、Shader Lab等,引擎追求runtime效率,但工具不需要runtime只需要开发效率,因此可以使用C++、C#甚至h5来制作。
有时候工具层的代码量会比其它层都大的,维护成本也更高,因此一样相当核心。
游戏的复杂度高,技术面广,分层可以使不同模块部分解耦,各自独立提供服务,如同封装的思想(也如同社会结构),底层为上层提供基础服务,上层调用底层的工具,上层灵活,底层稳定。层次之间只允许上层调用下层,稳定清晰。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。