如何访问数据
离线资源导入:引擎导入资源需要做 数据转换。因为从各种资源编辑软件中导出的资源,包含了很多对我们的引擎而言无用的数据,我们需要去其糟粕取其精华,将资源(Resource)转化成资产(Assets),即 资源引擎化。 比如一张贴图可能是jpg或者png格式,这些贴图文件是压缩算法的产物,并且他的数据排列格式在GPU中绘制效率很低。因此不管什么样的贴图文件,我们需要先转化为dts格式,这种格式按照16byte把贴图顺序排布,可以直接放进显存中使用
资产的使用:比如要表达一个机器人角色,所用到的材质、网格、贴图、动画、音效、Shader等资产其实是互相关联的。因此我们需要定义一个 额外的资产:Composite Asset 来管理这些复杂的相互的Reference。如下图,它是一段代码,存放了这个角色所引用/依赖的所有资产的名字、GUID、路径等信息

GUID(Globally Unique Identifier),全局唯一标识符
运行时资产管理
生命周期 和引用关系。功能层是非常庞大的,有时候经常与游戏内容混淆咋一起,某些功能难以区分需要放在游戏业务层还是引擎完成。比如引擎的相机是渲染画面的,某些FPS还有要求相机有摇晃的感觉,那么摇晃感应该属于功能层由开发者们完成,而非引擎提供
如何让游戏世界充满生机?一个非常重要的概念 Tick

Tick就是我们的游戏世界中最小的时间单位。
一个Tick之内,游戏引擎会把所有的事情都做一遍(包括但不限于功能层),比如:读取用户输入,动一下相机、更新角色控制器的状态、动画系统计算、物理计算、渲染出画面、网络数据传输、再处理输入输出、内存垃圾回收(GC)…
一个tick其实就是一帧的时间DeltaTime,输出一帧画面 需要把所有该做的事情都做一遍 所以这个Tick在30帧的游戏里 就是 1 30 \Large\frac{1}{30} 301秒,以此类推
Tick分为两个部分

最初的引擎是单线程的,未来的引擎一定是多核架构

核心层涵盖引擎诸多基础模块,这里提到两个
高效率数学库
高效率。不要求精确解,追求近似解,可以极大的提高算法的效率(渲染中许多公式的求解就是近似解)内存管理:引擎会申请一大块内存,自行管理。原则是:批量处理
cache miss 的几率(CPU需要处理数据时,如果数据已经在cache中,则 cache hit,不在则cache miss)。因此选择CPU的时候cache越大越好核心层提供了整个引擎所要使用的绝大部分的函数,是影响引擎效率的非常重要的环节,需要极高的代码质量
不同的平台规则是不一样的,比如文件系统的路径,win和mac的目录中分别使用的反斜杠和斜杠,编写代码,掩盖这些不同平台的差异,就是这一层所需要做的工作。
DirectX11、DirectX12,Android常用opengl、Vulkan
硬件架构的不同:平台可能硬件结构不同,比如:PS3上面的CPU叫做PPU,GPU叫做SPU。很多运算可以放在一些特殊硬件上,完全不同于GPU和CPU的架构,因此就需要为这些硬件编写不同的代码,才能很好的运行
工具层 = 自带编辑器 + 第三方数字生产工具
方便编辑者发挥能力第三方编辑器和自带编辑器生产的数字资源都会经过引擎的导入/导出器(Asset Conditioning Pipline)变成引擎需要的Assets。