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。