THREE.JS / DYNAMIC GEOMETRY MODIFIERS
Split sharp edges, keep the topology visible.
This focused contract keeps the official modifier path visible: parse an OBJ fixture, merge coincident vertices, apply EdgeSplitModifier.modify() at a cutoff angle, and compare smooth/flat shading, normal retention, and texture-map ownership.
This route claims the installed OBJLoader, BufferGeometryUtils.mergeVertices(), EdgeSplitModifier.modify(), cutoff-angle and try-keep-normals controls, smooth/flat material policy, a deterministic local OBJ fixture, a labeled CanvasTexture map substitute, sampling, reset, and teardown. The official Cerberus OBJ/JPG assets, GUI/Stats presentation, exact page/pixel composition, arbitrary OBJ dialects, device/compiler/backend matrix, generalized performance, and whole-example fidelity remain separate.