• GAMES104-引擎架构分层


    为啥要分层?
    1.太复杂了
    2.为了上层开发者不必了解底层
    3.底层复用,减少不必要的代码修改


    工具层
    最浅显的显示界面
    功能层
    动画、物理
    资源层
    3DMax、mp3、png
    核心层(核心代码)
    代码库支持
    平台层
    安卓、ios、各种设备
    还有特殊层:第三方库层(物理、声音等)


    例子:如果自己做个播动画的引擎怎么做呢?

    1.处理资源
    可能有的不同类型的资源:XML+PSD+MAX+MAYA
    需要化为 Asset(资产) 转为引擎定制的资源格式
    还需要生成一个 GUID(唯一识别号) 文件,处理资源的依赖(数据之间的关联)
    (不能以全路径做关联,否则资源变化很麻烦)
    Handle系统
    核心点:管理每个资源的生命周期
    2.功能层
    Tick
    while(true)
    ===>TickLogic()
    ===>TickRender()
    表现绘制和逻辑区分开
    功能层比较复杂,区分是否和游戏逻辑有关系
    多线程
    最初:单线程
    基础多线程:Logic和Render两个线程,额外线程做加载
    当前商业引擎:物理、动画等逻辑做并行运算
    未来的:抽象Job概念,自动分配多核
    注意逻辑有先后依赖关系,多线程需要保证不会乱
    3.核心层
    数学库,线性代数,矩阵向量
    数学库特别敏感性能,不需要绝对准确,保证效率就行
    SIMD、一条指令把四个运算全都算完,方便向量运算
    数据结构,C++标准容器扩容会倍数,会有内存碎片
    需要进行内存管理
    优化CPU访问:数据尽可能紧凑、按顺序访问、读写尽可能一起
    4.平台层
    虚函数封装API,不影响上层写逻辑的人
    比较难,看水平
    平台渲染显卡不同、平台硬件架构不同
    5.工具层
    关卡编辑器、逻辑编辑器、材质编辑器、动画编辑器、UI编辑器
    生产力的关键,使用体验作为关键
    DCC(Digital Content Creation),兼容

  • 相关阅读:
    【动态规划】64. 最小路径和
    【Linux常用命令】
    Redis与分布式-主从复制
    java健身房管理系统源码(springboot)
    【软件基础】Linq优化双重for循环、批量写入Excel以提升程序运行速度、常见代码优化方法
    语音噪声---学习笔记
    Excel 数据透视表小技巧之 06 使用 Excel 数据透视表作为另一个数据透视表的数据源
    内部项目管理方案
    chatGPT结构及商业级相似模型应用调研
    Java & 计算机编码
  • 原文地址:https://blog.csdn.net/qq_33064771/article/details/128173997