Files
workinf_Blender_Wasm/docs/web/modifier-support-matrix.md
2026-08-12 04:47:48 -04:00

9.6 KiB

Blender 5.2 Modifier Web Support Matrix

This matrix separates file recognition, dependency extraction and evaluated result parity. Loading a modifier type is not evidence that its Web result matches Blender desktop.

Status levels

Level Meaning
IDENTITY Type code/name, UUID, stack order and mode flags are preserved.
PARAMETERS Declared parameters are present in SceneIR. No evaluated mesh is implied.
TARGET_EDGE Cross-object target IDs are present in the native Depsgraph report.
NATIVE_FIXTURE Native WASM Depsgraph behavior is covered by a Blender fixture/golden.
COMMAND A revisioned Web command can execute and has undo/redo or isolated-preview coverage.
BLOCKED No parity claim. An enabled unsupported/invalid entry must return a structured block.

Current verified set

Modifier Identity Parameters Target edge Native fixture Command
Subdivision Surface yes levels/type no desktop/WASM topology and geometry parity through local OpenSubdiv 3.7.0 CPU evaluator no
Mirror yes axis/merge flags optional mirror object desktop/WASM geometry parity no
Boolean (Exact) yes operation/solver target object desktop/WASM surface parity through local GMP 6.3.0 no
Decimate yes mode/ratio/iterations/delimit no structured small-mesh error Collapse/Un-Subdivide/Dissolve command
Armature yes target/group/deform flags yes rigged shape-key golden enable/disable + undo/redo
Bevel yes width/segments/profile no desktop/WASM geometry parity no
Lattice yes target/group/strength/flags yes desktop/WASM geometry parity no
Curve yes target/group/axis/flags yes desktop/WASM topology and geometry parity no
Hook yes target/subtarget/group/falloff/force yes desktop/WASM geometry parity no
Mesh Deform yes target/group/grid/flags yes bound-cache desktop/WASM geometry parity no
Shrinkwrap yes targets/group/distance/type/mode/limit primary/aux targets desktop/WASM geometry parity no
Surface Deform yes target/group/falloff/strength/flags yes bound-cache desktop/WASM geometry parity no
Array/Solidify yes fixture parameters object edges where used desktop/WASM geometry parity no
Triangulate/Weld yes fixture parameters no desktop/WASM topology and geometry parity no
Build/Wave yes frame/time parameters object/texture edges where used frame-6 desktop/WASM geometry parity no
Geometry Nodes yes node group/default socket values node-group edge bounded Transform Geometry and Set Position closures match desktop no
Edge Split yes angle/sharp flags no desktop/WASM topology and geometry parity no
Screw yes axis/angle/steps/merge optional axis object desktop/WASM topology and geometry parity no
Displace yes direction/strength/mid-level/space optional mapping object constant local-space desktop/WASM parity; resource configurations block no

Native targetObjectIds currently covers Array, Mirror, Boolean, Lattice, Curve, Armature, Hook, Mesh Deform, Shrinkwrap, Surface Deform, Screw and Displace mapping objects. The ordered dependsOn list contains the prior stack entry followed by those external object IDs. These SceneIR entries remain METADATA_ONLY; the Worker still blocks topology/LOD commands until evaluated input is available.

Complete Blender 5.2 identity coverage

The lightweight reader now covers every DNA slot from 0 through 86; a C++ static_assert fails the build when NUM_MODIFIER_TYPES grows without a table update. The category-golden native whitelist contains 24 evaluated types: SUBSURF, MIRROR, ARRAY, exact BOOLEAN, BEVEL, SOLIDIFY, TRIANGULATE, WELD, LATTICE, HOOK, SHRINKWRAP, SIMPLE_DEFORM, MESH_DEFORM, SURFACE_DEFORM, CURVE, BUILD, WAVE and the bounded NODES closures, plus SMOOTH, CAST, WIREFRAME, EDGE_SPLIT, SCREW and bounded DISPLACE. Armature, Shape Key and Decimate have earlier dedicated fixtures. The remaining identity-only types are:

NONE, SOFT_BODY, UV_PROJECT, PARTICLE_SYSTEM, PARTICLE_INSTANCE, EXPLODE, CLOTH, COLLISION, FLUID_SIM, MASK, MULTIRES, SURFACE, reserved slot 31, WARP, WEIGHT_VG_EDIT, WEIGHT_VG_MIX, WEIGHT_VG_PROXIMITY, OCEAN, DYNAMIC_PAINT, REMESH, SKIN, LAPLACIAN_SMOOTH, UV_WARP, MESH_CACHE, LAPLACIAN_DEFORM, DATA_TRANSFER, NORMAL_EDIT, CORRECTIVE_SMOOTH, MESH_SEQUENCE_CACHE, WEIGHTED_NORMAL, FLUID, MESH_TO_VOLUME, VOLUME_DISPLACE, VOLUME_TO_MESH, GREASE_PENCIL_OPACITY, GREASE_PENCIL_SUBDIV, GREASE_PENCIL_COLOR, GREASE_PENCIL_TINT, GREASE_PENCIL_SMOOTH, GREASE_PENCIL_OFFSET, GREASE_PENCIL_NOISE, GREASE_PENCIL_MIRROR, GREASE_PENCIL_THICKNESS, GREASE_PENCIL_LATTICE, GREASE_PENCIL_DASH, GREASE_PENCIL_MULTIPLY, GREASE_PENCIL_LENGTH, GREASE_PENCIL_WEIGHT_ANGLE, GREASE_PENCIL_ARRAY, GREASE_PENCIL_WEIGHT_PROXIMITY, GREASE_PENCIL_HOOK, GREASE_PENCIL_LINEART, GREASE_PENCIL_ARMATURE, GREASE_PENCIL_TIME, GREASE_PENCIL_ENVELOPE, GREASE_PENCIL_OUTLINE, GREASE_PENCIL_SHRINKWRAP, GREASE_PENCIL_BUILD, GREASE_PENCIL_SIMPLIFY, GREASE_PENCIL_TEXTURE.

Blocking contract

An enabled unregistered native modifier returns UNSUPPORTED_MODIFIER_TYPE. An enabled target-based modifier without a target returns MODIFIER_TARGET_MISSING. An error raised by Blender itself returns BLENDER_MODIFIER_ERROR. Resource/configuration-dependent Displace returns MODIFIER_CONFIGURATION_UNSUPPORTED; simulation/bake GN returns GEOMETRY_NODES_SIMULATION_UNAVAILABLE. A target path that reaches the owner returns MODIFIER_DEPENDENCY_CYCLE. All blockers include the modifier object/name/type, error, and an actionable suggestion. Viewport-disabled modifiers remain DISABLED and do not inherit stale evaluated errors.

Category fixtures

Category Blender 5.2 golden Current Web result
Generate Subdivision, Mirror, Array, Boolean, Bevel, Solidify, Triangulate, Weld All eight execute native Blender code. Subdivision matches the 26-vertex/48-triangle OpenSubdiv golden; Exact Boolean matches the 12-vertex/20-triangle surface golden.
Deform Lattice, Hook, Shrinkwrap, Simple Deform, Mesh Deform, Surface Deform All six match desktop geometry; Mesh/Surface fixtures contain real bind caches and target deformation.
Curve Curve target and evaluated output in a dedicated fixture Native Curve evaluation matches desktop topology and positions within the declared floating-point tolerance.
Physics/time Build and Wave at frame 6; disabled Cloth, Soft Body and Collision Build and Wave match desktop geometry at frame 6; simulation entries remain DISABLED.
Geometry Nodes Self-contained Transform Geometry, Set Position and simulation-zone graphs Constant Transform and Set Position match desktop positions/topology. Simulation zones preserve input and return GEOMETRY_NODES_SIMULATION_UNAVAILABLE without consuming temporal state.
Grease Pencil One drawing plus all 26 GP modifier types exposed by Blender 5.2 Python GP data loads; all modifier codes/modes are preserved and remain DISABLED.
Extended native Edge Split, Screw and bounded Displace All match desktop topology/positions; RGB/resource Displace preserves input and returns MODIFIER_CONFIGURATION_UNSUPPORTED.

Line Art is exposed as LINEART rather than with the GREASE_PENCIL_ prefix; the generator includes it explicitly. The fixtures, desktop goldens and comparison runner are generated by tools/web/generate-modifier-fixtures.py, tools/web/generate-modifier-goldens.py and checked offline with npm --prefix web run test:modifier-goldens.

Local native dependencies

Subdivision uses the local OpenSubdiv 3.7.0 source and archive under blender-5.2.0/extern/opensubdiv-source. The Web build enables its CPU-only static evaluator and disables GPU, examples, documentation and tests. The archive MD5 is 470d53c4d4335a601c33a052ce7c33b4; SHA-256 is f843eb49daf20264007d807cbc64516a1fed9cdb1149aaf84ff47691d97491f9.

Exact Boolean uses the local GMP 6.3.0 DFSG source plus Emscripten static archives under blender-5.2.0/extern/gmp-source and blender-5.2.0/extern/gmp-wasm. The source archive MD5 is d4a3890b5e28df535b653b07798b11b2; SHA-256 is bd2966e6d277f79328e894a5a9f3ba3fbf2ed2be81def5f48623e30c23fb1572. WITH_MANIFOLD remains off: Blender 5.2's verified Exact solver path uses GMP, so Manifold is not part of the tested runtime closure. wasm32 and desktop may choose different valid diagonals on coplanar faces; the golden therefore compares oriented surface area and geometry instead of requiring identical triangle indices.

npm --prefix web run check:local-deps verifies both source archive hashes, the OpenSubdiv CMake source and the local GMP/GMPXX headers and WASM archives.

Future whitelist expansion

  1. Add deterministic physics cache stepping for Cloth/Soft Body/Collision; Build and Wave are complete for the current frame golden.
  2. Expand Geometry Nodes from the verified Transform Geometry and Set Position closures in small node/dependency batches. Simulation zones, bake data, fields, instances and the full lazy-function graph remain outside the current whitelist.
  3. Enable Grease Pencil modifiers in small dependency batches; keep target and simulation types disabled until their external resources are validated.
  4. Add native geometry goldens for the remaining Generate/Deform families, including Cast, Remesh, Multires and volume conversions.