Expand description
geometry_dag — Deep Engine Nanite M2 离线编译工具链。
管线:索引化网格 → 贪心簇划分 → 层级聚类简化 DAG(父子单射)→ .dgc 流式格式。
与 TS 权威实现(packages/deep-engine/src/geometry/ 的 buildMeshlets /
buildMeshletDag)逐位对拍,黄金样本回归见 tests/golden_parity.rs
(fixture 由 scripts/gen_fixture.mjs 从 TS 侧导出)。
§快速上手
use geometry_dag::{parse_obj, build_meshlet_dag, DagOptions, write_dgc, DgcWriteOptions};
let text = std::fs::read_to_string("mesh.obj").expect("read obj");
let geometry = parse_obj(&text).expect("parse obj");
let dag = build_meshlet_dag(&geometry, &DagOptions::default()).expect("build dag");
let bytes = write_dgc(&dag, &DgcWriteOptions::default()).expect("serialize");
std::fs::write("mesh.dgc", bytes).expect("write dgc");Re-exports§
pub use dag::build_meshlet_dag;pub use dag::DagLevel;pub use dag::DagOptions;pub use dag::MeshletDag;pub use dgc::crc32c;pub use dgc::read_dgc;pub use dgc::write_dgc;pub use dgc::DgcWriteOptions;pub use dgc::FLAG_ZLIB;pub use dgc::NO_PARENT;pub use error::DagError;pub use error::DagResult;pub use local_triangle::pack_local_triangle;pub use local_triangle::unpack_local_triangle;pub use meshlet_builder::build_meshlets;pub use meshlet_builder::MeshletBuildResult;pub use obj::parse_obj;pub use obj::write_obj;pub use simplify::cluster_simplify;pub use simplify::ClusterSimplifyResult;pub use types::IndexedGeometry;pub use types::MESHLET_BOUNDS_STRIDE;pub use types::MESHLET_DESCRIPTOR_STRIDE;pub use types::MESHLET_SCHEMA_VERSION;pub use validation::validate_input;
Modules§
- bounds
- 簇包围球 / AABB / 法向锥计算。
- dag
- 簇级几何 DAG:逐层聚类简化 + 重建簇 + 父子投票(fine→coarse 单射)。
- dgc
.dgc(Deep Geometry Clusters)流式二进制格式:分块 + 父子索引 + 边界锁定。- error
- 错误类型:全链路 fail-closed,解析外部输入的每一条失败路径都携带定位信息。
- local_
triangle - 局部三角形打包:三个 8-bit 局部索引压入一个 u32(与 TS
localTriangle.ts逐位一致)。 - meshlet_
builder - 贪心簇(meshlet)划分:按输入三角形序装箱,顶点/三角形双上限,flush 前移判定。
- obj
- Wavefront OBJ 解析(编译管线输入)。
- simplify
- 确定性网格聚类简化:坐标量化到 cell,每 cell 均值代表点,退化/重复三角形剔除。
- types
- 核心常量与数据结构。
- validation
- 输入验证:全部 fail-closed,与 TS
inputValidation.ts的拒绝条件逐条对应。