目录
游戏引擎分层:
游戏引擎自身【五层架构】:
为什么要分层呢?
工具层:
核心功能:
功能层:
功能层的功能:
这里笔记作者举例Unity的循环:
资源层:
资源转换成资产:
这里笔记作者举例Unity的资产导入:
Unity导入资源工作流
核心层:
核心功能:
这里笔记作者举例UE核心层的循环:
平台层:
核心功能:
Mini Engine -Pilot
学习资料:
LE7--渲染系统4:渲染管线,后处理:https://blog.csdn.net/m0_56399931/article/details/124790469
LE6--渲染系统3:游戏中的地形/天空/云渲染:LE6--渲染系统3:yo地形/天空/云渲染_This is MX的博客-CSDN博客
LE5--渲染系统2:光照、材质、Shadow:Games104笔记---LE5--渲染系统2:光照、材质、Shadow_This is MX的博客-CSDN博客
LE4--渲染系统1:渲染基础:Games104笔记---LE4--渲染系统1:渲染基础_This is MX的博客-CSDN博客_渲染系统
LE3--基础架构2:数据组织与管理:Games104笔记---LE3--基础架构2:数据组织与管理_This is MX的博客-CSDN博客
LE2--基础架构1:引擎架构分层整体Pipeline:Games104笔记---LE2--基础架构1:引擎架构分层整体Pipeline_This is MX的博客-CSDN博客
LE1--现代游戏引擎导论:Games104笔记---LE1--现代游戏引擎导论_This is MX的博客-CSDN博客
工具层--功能层--资源层--核心层--平台层
还有第三方库
这个其实很好想,主要还是解耦,降低复杂性,让下层独立于上层,便于管理。并且层次之间的调用一般只允许上层调用下层的接口,不允许下层调用上层的接口
是更好地让开发者开发游戏,提高生成效率。比如地形编辑器,UI编辑器,Shader编辑器。
这一层还有一个重要的功能就是DCC,让其他软件的资产无损导入我们的引擎,需要做资产导出器,资产导入器
核心功能是让世界动起来,入手点是tick点(ue:tick ,unity:update)
现代游戏引擎还需要考虑多线程,但是会有依赖关系,所以这种引擎架构其实并不好做,但是肯定是未来趋势
核心功能是管理资产的生命周期。
通过定义一个元资源文件格式(例如。ast)来统一文件访问。通
过导入预处理来更快地访问资产。
构建一个复合资产文件来引用所有资源。
guid是一个额外的引用保护。
1.Unity 为资源分配唯一 ID。 2.Unity 创建 .meta 文件。 3.Unity 对资源进行处理。
为资源分配唯一 ID
Unity将检测到已添加新文件,向新添加的文件分配唯一ID,ID方便Unity引用资源,而不破坏任何内容
除了分配给资源的唯一 ID 外,.meta 文件还包含您在 Project 窗口中选择资源时在 Inspector 窗口中看到的所有导入设置的值。对于纹理,这包括 Texture Type、Wrap Mode、 Filter Mode 和 Aniso Level 导入设置。
如果更改资源的导入设置,则这些新设置将保存到资源附带的 .meta 文件中。随后,Unity 将根据更新的设置来重新导入资源,并在项目的 Library 文件夹中更新相应导入的“游戏就绪”数据。
创建 .meta 文件
.meta 文件必须与其相关的资源文件位于相同位置,因为它包含该资源的 ID,如果资源丢失其 .meta 文件(例如,如果在 Unity 的 Project 窗口之外移动或重命名该资源,但未更新其 .meta 文件),则对该资源的任何引用都会中断,并且 Unity 会为资源生成新的 .meta 文件。丢失重新生成之后,丧失的引用必须手动将脚本重新分配给游戏对象
对资源进行处理
Unity 读取并处理您添加到 Assets 文件夹的任何文件,将文件内容转换为可直接用于游戏的内部数据。资源文件本身保持不变,内部数据存储在项目的 Library 文件夹中。
游戏引擎必须要数学库数学库,并且这个数学库需要有高效率,比如Carmack 计算 1/sqrt(x)。我们常常要考虑SIMD(单指令多数据指令)
游戏引擎有自己的内存管理。首先需要有一个自定义的数据结构和容器,减少产生内存碎片、减少cache miss、进行内存对齐。
并且要求代码质量很好。
在这四百行的代码(不包含调用的代码)中他做了些什么呢?【参考向往佬的博客】
平台层的核心是做平台无关性。
做一层Render Hardware Interface,来让上层的同学在写代码的时候不需要考虑Graphics API的差异
并且需要统一硬件架构。
games104
unity docs
ue 源码
向往佬的博客