Skip to main content

Crate geometry_dag

Crate geometry_dag 

Source
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 的拒绝条件逐条对应。