blender-bmesh
115 files // 6,086 LOC
Upstream: source/blender/bmesh
Non-manifold-capable half-edge polygon mesh kernel (BMVert, BMEdge, BMLoop, BMFace) with circular disk, radial, and face-loop cycles, Newell normals, Euler operators, and bevel/bisect/bridge/extrude/subdivide operators.
bm.face_create(&[v0, v1, v2, v3], None)?; bm.edge_split(edge_h, 0.5)?;
blender-mem
21 files // 662 LOC
Upstream: source/blender/blenlib/BLI_mempool.h
Generational slot allocator (MemPool<T>) and 64-bit Handle<T> indexing that replaces raw C pointers across cyclic BMesh topologies, guaranteeing zero use-after-free bugs with O(1) free-list reuse.
let h: Handle<BMVert> = pool.alloc(vert); assert!(pool.get(h).is_some());
blender-dna
172 files // 42,090 LOC
Upstream: source/blender/makesdna/DNA_*
Complete Rust type definitions for Blender's serialized DNA data schemas (DNA_mesh_types, DNA_object_types, DNA_scene_types, MeshElemFlags, and CustomDataType).
pub struct MeshElemFlags: u8 { const SELECT = 1 << 0; const SMOOTH = 1 << 4; }
blender-geom
13 files // 1,917 LOC
Upstream: source/blender/blenlib/intern/math_geom.cc
Hand-ported computational geometry kernels: flat-array median-split Bvh (raycasting & closest-point), pointerless 3D KdTree, ear-clipping triangulate_polygon_v2, monotone-chain convex_hull_v2, and barycentric/ray intersections.
let bvh = Bvh::new(&tris); let hit = bvh.ray_cast(orig, dir);
blender-math
57 files // 1,570 LOC
Upstream: source/blender/blenlib/BLI_math_*
SIMD-accelerated vectors, matrices, and quaternions powered by glam, alongside Bounds2D, BoundingBox, Garland-Heckbert Quadric decimation metrics, XPBD physics constraints, and Deriche/Van Vliet blur kernels.
pub use glam::{Mat3, Mat4, Quat, Vec2, Vec3, Vec4};
blender-io
419 files // 15,511 LOC
Upstream: source/blender/io/*
High-throughput mesh importers, exporters, and scene filter pipelines for Wavefront OBJ, Stanford PLY, STL, and Universal Scene Description (USD).
let obj_text = blender_io::export_obj(&scene.bmesh);
blender-obj
1 file // 327 LOC
Upstream: source/blender/io/wavefront_obj
Standalone zero-dependency Wavefront .obj parser and serializer supporting arbitrary n-gons, negative relative indices, vertex normals/UVs, and ear-clipping fan triangulation.
let mesh = blender_obj::parse_obj(src)?; let tris = mesh.triangulate();
blender-stl
1 file // 304 LOC
Upstream: source/blender/io/stl
Auto-detecting binary and ASCII .stl reader and writer with bit-identical [u32; 3] vertex welding (to_indexed / from_indexed) that normalizes signed zero (-0.0 == 0.0).
let stl = blender_stl::read_stl(&bytes)?; let (verts, tris) = stl.to_indexed();
blender-bridge
1 file // 142 LOC
Upstream: source/blender/blenkernel/intern/mesh_convert.cc
Lossless bidirectional topology conversion (obj_to_bmesh and bmesh_to_obj) preserving arbitrary n-gon face loops and verifying Euler characteristic invariants.
let bm = obj_to_bmesh(&obj)?; let roundtrip = bmesh_to_obj(&bm);
blender-app
3 files // 388 LOC
Upstream: source/creator
The blender CLI binary providing procedural primitive generation, multi-pass edge subdivision, Wavefront OBJ export, a 3D terminal Bresenham wireframe viewport, and automated benchmarking.
blender --primitive cube --subdivide 2 --viewport --export-obj out.obj
blender-cluster
5 files // 905 LOC
Upstream: Transpilation & Verification Tooling
AST call-graph clusterer and automated C/C++ to Rust subsystem verification harness tracking the 773 ported modules in PORTING_PROGRESS.json.
pub mod ast; pub mod cluster; pub mod verifier;