Cocos引擎侧Mesh挂载:TS到RenderScene

下图是cocos引擎加载资源的整体流程图。

flowchart TD
    subgraph S0["① 资源加载 cocos/asset/asset-manager"]
        A["asset-manager.ts<br/>发起 loadAny 加载请求"]
        B["load.ts 加载管线<br/>下载 .json 与 .mesh 二进制"]
        C["deserialize.ts / utilities.ts<br/>反序列化 JSON,并把二进制灌进资产"]
        A --> B --> C
    end

    subgraph S1["② 模型数据解析 cocos/3d"]
        D["mesh.ts<br/>Mesh 资产持有 struct + data"]
        E["mesh.ts<br/>解压/解码/反量化 还原顶点与索引"]
        F["mesh-codec.ts<br/>meshopt WASM 解码器"]
        G["mesh.ts<br/>上传 GPU,生成 RenderingSubMesh[]"]
        D --> E --> G
        E -.-> F
    end

    subgraph S2["③ 组件装配 cocos/3d/framework"]
        H["mesh-renderer.ts<br/>MeshRenderer 读取 renderingSubMeshes"]
        I["mesh-renderer.ts<br/>创建 render-scene Model"]
        J["mesh-renderer.ts<br/>把子网格+材质灌进 Model,挂到场景"]
        H --> I --> J
    end

    subgraph S3["④ RenderScene 构建 cocos/render-scene"]
        K["model.ts / submodel.ts<br/>建立 SubModel 与 InputAssembler"]
        L["render-scene.ts<br/>addModel 把模型加入渲染场景"]
        K --> L
    end

    subgraph S4["⑤ 渲染管线 cocos/rendering"]
        M["Pipeline遍历 RenderScene._models 提交绘制"]
    end

    C --> D
    G --> H
    J --> K
    L --> M

cocos引擎侧是接收了一部分的数据,但是没有处理原始数据,比如gltf的最初数据解析是放到Editor里面的。

引擎侧负责的是解析Mesh数据,cocos的原生平台和Web平台解析Mesh的位置不同:

平台 Mesh 解析(decode/inflate/dequantize)
原生(安卓/iOS/PC,走 JSB) C++(Mesh.cpp / CreateMesh.cpp)
Web(浏览器,无 JSB) TS(cocos/3d/assets/mesh.ts)

部分疑难术语:

量化(quantize):把高精度数据降成低精度来省空间。

反量化(dequantize):把量化后的低精度数据还原回 float32。