• 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),兼容

  • 相关阅读:
    【UE】事件分发器 正确使用方法 (如何创建 Bnd Evt Delegate Signature)
    MultiButton按键驱动模块的使用
    数据结构、算法
    redis变慢原因记录
    Linux文件I/O与标准I/O缓冲机制及性能分析
    1.7-34:回文子串
    GitLab项目中添加用户,并设置其角色权限等
    web表单(详解)
    利用opencv 做一个简单的人脸识别
    瀚高数据库DML自动转发功能介绍(数据库层面)
  • 原文地址:https://blog.csdn.net/qq_33064771/article/details/128173997