Advance M8-M11 parity workflows
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-17 04:37:07 -04:00
parent 7c16b279ae
commit 0fe8d2bb56
324 changed files with 31920 additions and 863 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -19,6 +19,16 @@
"objectNames": ["BasicArea", "BasicCamera", "BasicCube"],
"frameRange": [1, 24]
},
{
"id": "m11_render_reference",
"path": "m11_render_reference.blend",
"objects": 2,
"meshes": 1,
"materials": 1,
"objectNames": ["M11 Reference Camera", "M11 Reference Cube"],
"frameRange": [1, 250],
"features": ["blender-eevee-reference", "webgl2-image-error-metrics", "main-offscreen-golden"]
},
{
"id": "attribute_scene",
"path": "attribute_scene.blend",
@@ -38,6 +48,17 @@
"frameRange": [1, 10],
"animationTargets": ["object:AnimatedObject"]
},
{
"id": "nla_time_mapping_scene",
"path": "nla_time_mapping_scene.blend",
"objects": 1,
"meshes": 1,
"materials": 0,
"objectNames": ["M10_NLA_TimeMapping"],
"frameRange": [1, 70],
"animationTargets": ["object:M10_NLA_TimeMapping"],
"features": ["nla-track-reader", "scaled-action-time", "reverse-repeat", "desktop-depsgraph-golden"]
},
{
"id": "rigged_shape_scene",
"path": "rigged_shape_scene.blend",
@@ -157,6 +178,13 @@
"meshes": 0,
"features": ["compositor-main-reader", "exposure-invert-parameters", "socket-links", "unsupported-node-preservation"]
},
{
"id": "m11_compositor_allowlist",
"path": "m11_compositor_allowlist.blend",
"objects": 0,
"meshes": 0,
"features": ["compositor-node-allowlist", "cpu-webgpu-golden", "constant-color", "exposure", "invert"]
},
{
"id": "sequencer_scene",
"path": "sequencer_scene.blend",

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,46 @@
{
"schemaVersion": 1,
"fixture": "tests/files/web/modifier_geometry_nodes_scene.blend",
"fixtureSha256": "f3820511f791769837d75be092934130c397cf46ee0acf79db28efca9a7948c9",
"desktopGolden": "tests/golden/W-075/modifier_geometry_nodes_scene.json",
"desktopGoldenSha256": "93c21e5158daefce10f2d4df674e636bf3f6ed3dd43e1576c45a02a8592f5886",
"graphs": [
{
"name": "WebGeometryNodes",
"nodeTypes": ["NodeGroupInput", "GeometryNodeTransform", "NodeGroupOutput"],
"linkCount": 2,
"defaults": {
"GeometryNodeTransform:Mode": 0,
"GeometryNodeTransform:Translation": [0.25, 0.5, 1.0],
"GeometryNodeTransform:Rotation": [0.0, 0.0, 0.2617993950843811],
"GeometryNodeTransform:Scale": [1.0, 1.0, 1.0]
}
},
{
"name": "WebGeometryNodesSetPosition",
"nodeTypes": ["NodeGroupInput", "GeometryNodeSetPosition", "NodeGroupOutput"],
"linkCount": 2,
"defaults": {
"GeometryNodeSetPosition:Selection": true,
"GeometryNodeSetPosition:Position": [0.0, 0.0, 0.0],
"GeometryNodeSetPosition:Offset": [0.0, 0.0, 1.0]
}
},
{
"name": "WebGeometryNodesSimulation",
"nodeTypes": ["GeometryNodeSimulationInput", "NodeGroupOutput", "GeometryNodeSimulationOutput", "NodeGroupInput"],
"linkCount": 3,
"defaults": {
"GeometryNodeSimulationInput:Delta Time": 0.0,
"GeometryNodeSimulationOutput:Skip": false
}
}
],
"budgets": {
"maxGraphs": 4096,
"maxNodesPerGraph": 4096,
"maxLinksPerGraph": 16384,
"maxSocketsPerGraph": 65536,
"maxInterfaceSocketsPerGraph": 4096
}
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"fixture": "tests/files/web/modifier_geometry_nodes_scene.blend",
"fixtureSha256": "f3820511f791769837d75be092934130c397cf46ee0acf79db28efca9a7948c9",
"allowlistSchemaVersion": 1,
"allowlist": [
"NodeGroupInput",
"NodeGroupOutput",
"GeometryNodeTransform",
"GeometryNodeSetPosition",
"GeometryNodeJoinGeometry",
"GeometryNodeSeparateGeometry",
"GeometryNodeRealizeInstances",
"GeometryNodeStoreNamedAttribute",
"FunctionNodeInputInt",
"FunctionNodeInputVector",
"FunctionNodeCompare",
"ShaderNodeValue",
"ShaderNodeMath",
"GeometryNodeObjectInfo",
"GeometryNodeCollectionInfo",
"GeometryNodeImageInfo"
],
"supportedGraph": "WebGeometryNodes",
"unsupportedGraph": "WebGeometryNodesSimulation",
"unsupportedNodeTypes": [
"GeometryNodeSimulationInput",
"GeometryNodeSimulationOutput"
],
"unsupportedErrorCode": "GN_NODE_UNSUPPORTED",
"evaluatorUnavailableErrorCode": "CAPABILITY_MISSING"
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,34 @@
{
"schemaVersion": 1,
"taskId": "M10-07",
"fixture": "tests/files/web/basic_scene.blend",
"fixtureSha256": "6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73",
"backend": "WEBGL2_THREE_PHYSICAL",
"allowlist": [
"RGB",
"VALUE",
"MATH",
"IMAGE_TEXTURE",
"NORMAL_MAP",
"PRINCIPLED",
"OUTPUT"
],
"mathOperations": [
"ADD",
"SUBTRACT",
"MULTIPLY",
"DIVIDE",
"MINIMUM",
"MAXIMUM"
],
"budget": {
"maxNodes": 128,
"maxLinks": 512,
"maxDepth": 64,
"maxTextures": 16,
"maxIdentifierBytes": 256,
"maxNameBytes": 1024
},
"expectedMathResult": 0.42,
"unsupportedNodeCode": "SHADER_NODE_UNSUPPORTED"
}

View File

@@ -0,0 +1,10 @@
{
"schemaVersion": 1,
"taskId": "M10-08",
"backend": "WEBGL2_THREE_PHYSICAL",
"textureColorSpaces": ["SRGB", "NON_COLOR", "LINEAR"],
"keyInputs": ["graphHash", "rendererBackend", "imageId", "usage", "assetId", "sha256", "colorSpace"],
"keyDigest": "sha256",
"unknownBackendCode": "CAPABILITY_MISSING",
"invalidTextureIdentityCode": "SHADER_INVALID_GRAPH"
}

View File

@@ -0,0 +1,8 @@
{
"schemaVersion": 1,
"taskId": "M10-09",
"failureStatus": "BLOCKED",
"preservedPipeline": true,
"replacedOnSuccess": true,
"failureDoesNotDisposePrevious": true
}

View File

@@ -0,0 +1,10 @@
{
"schemaVersion": 1,
"taskId": "M10-10",
"capability": "ARBITRARY_SHADER",
"status": "BLOCKED",
"unsupportedNodeTypes": ["VORONOI", "CUSTOM_OSL"],
"errorCode": "SHADER_NODE_UNSUPPORTED",
"recoverable": true,
"graphDataPolicy": "PRESERVE"
}

View File

@@ -0,0 +1,308 @@
{
"schemaVersion": 1,
"fixture": "tests/files/web/nla_time_mapping_scene.blend",
"fixtureSha256": "b32f783debe213a1345ec4528e5ed27f0f4de00d7896b626df39756289119855",
"blenderVersion": "5.2.0 LTS",
"object": "M10_NLA_TimeMapping",
"mesh": "M10_NLA_TimeMappingMesh",
"tracks": [
{
"name": "M10 Time Mapping",
"muted": false,
"solo": false,
"strips": [
{
"id": "M10 Scaled Clip",
"action": "M10_NLA_Scaled_X",
"frameStart": 20.0,
"frameEnd": 40.0,
"actionFrameStart": 1.0,
"actionFrameEnd": 11.0,
"scale": 2.0,
"repeat": 1.0,
"blendIn": 0.0,
"blendOut": 0.0,
"influence": 1.0,
"blendMode": "REPLACE",
"extrapolation": "NOTHING",
"muted": false,
"reverse": false
},
{
"id": "M10 Reverse Repeat Clip",
"action": "M10_NLA_ReverseRepeat_Y",
"frameStart": 45.0,
"frameEnd": 65.0,
"actionFrameStart": 1.0,
"actionFrameEnd": 11.0,
"scale": 1.0,
"repeat": 2.0,
"blendIn": 0.0,
"blendOut": 0.0,
"influence": 1.0,
"blendMode": "REPLACE",
"extrapolation": "NOTHING",
"muted": false,
"reverse": true
}
]
}
],
"frames": [
{
"frame": 1,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 20,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 25,
"worldMatrix": [
1.0,
0.0,
0.0,
2.5,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 30,
"worldMatrix": [
1.0,
0.0,
0.0,
5.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 35,
"worldMatrix": [
1.0,
0.0,
0.0,
7.5,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 40,
"worldMatrix": [
1.0,
0.0,
0.0,
10.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 45,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
10.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 50,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
5.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 55,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
10.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 60,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
5.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 65,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"frame": 70,
"worldMatrix": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
}
],
"tolerance": {
"maxMatrixError": 1e-05
}
}

View File

@@ -0,0 +1,24 @@
{
"familyOrder": [
"RIGID_BODY",
"SOFT_BODY",
"CLOTH",
"FLUID",
"DYNAMIC_PAINT",
"PARTICLE",
"HAIR"
],
"defaultProbe": "EXPORT_UNAVAILABLE",
"probes": {
"RIGID_BODY": "READY",
"SOFT_BODY": "INITIALIZATION_FAILED",
"CLOTH": "THREADS_UNAVAILABLE",
"FLUID": "MEMORY_UNAVAILABLE",
"DYNAMIC_PAINT": "INVALID_RESULT",
"PARTICLE": "INITIALIZATION_FAILED",
"HAIR": "EXPORT_UNAVAILABLE"
},
"localRoute": "LOCAL_SOLVER",
"fallbackRoute": "DESKTOP_SERVER_BAKE",
"fallbackErrorCode": "PHYSICS_SOLVER_UNAVAILABLE"
}

View File

@@ -0,0 +1,26 @@
{
"families": [
"RIGID_BODY",
"SOFT_BODY",
"CLOTH",
"FLUID",
"DYNAMIC_PAINT",
"PARTICLE",
"HAIR"
],
"sources": [
"BLENDER_DESKTOP_BAKE",
"BLENDER_SERVER_BAKE",
"BLENDER_DESKTOP_BAKE",
"BLENDER_SERVER_BAKE",
"BLENDER_DESKTOP_BAKE",
"BLENDER_SERVER_BAKE",
"BLENDER_DESKTOP_BAKE"
],
"byteLength": 4,
"frameCount": 2,
"sourceMismatch": "PHYSICS_CACHE_SOURCE_MISMATCH",
"payloadMismatch": "PHYSICS_CACHE_HASH_MISMATCH",
"versionMismatch": "PROTOCOL_MISMATCH",
"budgetExceeded": "PHYSICS_BUDGET_EXCEEDED"
}

View File

@@ -0,0 +1,33 @@
{
"schemaVersion": 1,
"domains": {
"GN": {
"workUnits": 10,
"maximumMs": 5000,
"performanceStatus": "SUPPORTED",
"oomCode": "GN_GRAPH_BUDGET_EXCEEDED",
"maliciousCode": "GN_DEPENDENCY_CYCLE"
},
"SHADER": {
"workUnits": 100,
"maximumMs": 5000,
"performanceStatus": "COMPILED",
"oomCode": "SHADER_NODE_UNSUPPORTED",
"maliciousCode": "SHADER_GRAPH_CYCLE"
},
"NLA": {
"workUnits": 20,
"maximumMs": 5000,
"performanceStatus": "SUPPORTED",
"oomCode": "NLA_BUDGET_EXCEEDED",
"maliciousCode": "NLA_INVALID_STACK"
},
"SIMULATION": {
"workUnits": 64,
"maximumMs": 10000,
"performanceStatus": "VERIFIED",
"oomCode": "SIMULATION_CACHE_BUDGET_EXCEEDED",
"maliciousCode": "SIMULATION_CACHE_INVALID"
}
}
}

View File

@@ -0,0 +1,128 @@
{
"schemaVersion": 1,
"task": "M11-01",
"blenderVersion": "5.2.0",
"legend": {
"VERIFIED": "Implemented and covered by the cited bounded path",
"PARTIAL": "Implemented for a declared subset or approximate mapping",
"METADATA_ONLY": "Exposed to the viewport but not visually evaluated",
"BLOCKED": "Not implemented or not parity-safe",
"NOT_APPLICABLE": "The stage does not mutate or visually consume this identity/status field"
},
"domains": [
{
"domain": "CAMERA",
"sourceInterface": "CameraIR",
"evidence": [
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"tools/web/check-lighting-roundtrip.mjs",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/workers/viewport-render.worker.ts"
],
"fields": [
{ "path": "id", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "name", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "projection", "reader": "VERIFIED", "writer": "PARTIAL", "viewportMain": "PARTIAL", "viewportOffscreen": "PARTIAL", "parity": "PARTIAL", "note": "Writer supports Perspective/Orthographic; viewport still uses PerspectiveCamera and blocks Panoramic/Custom parity." },
{ "path": "lensMm", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "sensorWidthMm", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "sensorHeightMm", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "sensorFit", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "shift", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "PARTIAL", "viewportOffscreen": "PARTIAL", "parity": "PARTIAL", "note": "Horizontal film offset is mapped; vertical shift is not." },
{ "path": "near", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "far", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "orthoScale", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "panoramaType", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "fisheyeFov", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.enabled", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.focusObjectId", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.focusDistance", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.apertureFStop", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.apertureBlades", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.apertureRotation", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "depthOfField.apertureRatio", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" }
]
},
{
"domain": "LIGHT",
"sourceInterface": "LightIR",
"evidence": [
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"tools/web/check-lighting-roundtrip.mjs",
"web/app/src/three-adapter/pbr.ts"
],
"fields": [
{ "path": "id", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "name", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "lightType", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "PARTIAL" },
{ "path": "color", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "energy", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "exposure", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "temperature", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "useTemperature", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "castsShadow", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "radius", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "spotAngle", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "spotBlend", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "areaShape", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "PARTIAL", "viewportOffscreen": "PARTIAL", "parity": "PARTIAL", "note": "All Area shapes currently map to RectAreaLight." },
{ "path": "areaSize", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "areaSizeY", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "areaSpread", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "sunAngle", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" }
]
},
{
"domain": "WORLD",
"sourceInterface": "WorldIR",
"evidence": [
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"tools/web/check-lighting-roundtrip.mjs",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/three-adapter/texture-assets.ts"
],
"fields": [
{ "path": "id", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "name", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" },
{ "path": "color", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "COMPLETE" },
{ "path": "exposure", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "PARTIAL", "viewportOffscreen": "PARTIAL", "parity": "PARTIAL", "note": "World exposure is used only when Scene exposure is absent." },
{ "path": "environmentImageId", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "PARTIAL" },
{ "path": "environmentStrength", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "PARTIAL" },
{ "path": "environmentRotation", "reader": "BLOCKED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "backgroundVisible", "reader": "PARTIAL", "writer": "BLOCKED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "PARTIAL", "note": "Reader currently emits true rather than resolving the full node visibility graph." },
{ "path": "mist.enabled", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "mist.type", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "mist.start", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "mist.depth", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "mist.intensity", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "mist.height", "reader": "VERIFIED", "writer": "VERIFIED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" }
]
},
{
"domain": "SCENE_COLOR_MANAGEMENT",
"sourceInterface": "SceneIR",
"evidence": [
"web/protocol/scene-ir.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"tools/web/check-lighting-roundtrip.mjs",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/workers/viewport-render.worker.ts"
],
"fields": [
{ "path": "renderEngine", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "colorManagement.displayDevice", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "colorManagement.viewTransform", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "colorManagement.look", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "METADATA_ONLY", "viewportOffscreen": "METADATA_ONLY", "parity": "PARTIAL" },
{ "path": "colorManagement.exposure", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "VERIFIED", "viewportOffscreen": "VERIFIED", "parity": "PARTIAL" },
{ "path": "colorManagement.gamma", "reader": "VERIFIED", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "colorManagement.temperature", "reader": "PARTIAL", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "colorManagement.tint", "reader": "PARTIAL", "writer": "BLOCKED", "viewportMain": "BLOCKED", "viewportOffscreen": "BLOCKED", "parity": "BLOCKED" },
{ "path": "colorManagement.whiteBalanceStatus", "reader": "VERIFIED", "writer": "NOT_APPLICABLE", "viewportMain": "NOT_APPLICABLE", "viewportOffscreen": "NOT_APPLICABLE", "parity": "COMPLETE" }
]
}
]
}

View File

@@ -0,0 +1,46 @@
{
"camera": {
"lensMm": 35,
"sensorWidthMm": 32,
"sensorHeightMm": 18,
"sensorFit": 2,
"shift": [0.1, -0.2],
"near": 0.2,
"far": 500,
"orthoScale": 8,
"viewportFov": 28.841546,
"viewportHorizontalFov": 49.134343,
"viewportFilmGauge": 18,
"viewportFilmOffset": 1.8
},
"light": {
"color": [0.25, 0.5, 0.75],
"energy": 400,
"exposure": 1,
"temperature": 5000,
"useTemperature": true,
"castsShadow": false,
"radius": 0.3,
"spotAngle": 1.1,
"spotBlend": 0.25,
"areaSize": 3,
"areaSizeY": 2,
"areaSpread": 2.4,
"sunAngle": 0.1,
"viewportIntensity": 80,
"viewportColor": [0.25, 0.3910381443, 0.4834313443]
},
"world": {
"color": [0.1, 0.2, 0.3],
"exposure": 0.5,
"mist": {
"enabled": true,
"type": "LINEAR",
"start": 2,
"depth": 50,
"intensity": 0.2,
"height": 3
}
},
"tolerance": 0.00001
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"webgl2": {
"maxLights": 16,
"reservedLights": 2,
"maxShadowMaps": 4,
"reservedShadowMaps": 1,
"shadowMapDimension": 1024,
"maxTextureAssets": 256,
"maxTexturePayloadBytes": 536870912,
"maxTextureGPUBytes": 536870912
},
"webgpu": {
"maxLights": 64,
"reservedLights": 2,
"maxShadowMaps": 8,
"reservedShadowMaps": 1,
"shadowMapDimension": 2048,
"maxTextureAssets": 256,
"maxTexturePayloadBytes": 536870912,
"maxTextureGPUBytes": 1073741824
},
"overflow": {
"requestedLights": 20,
"renderedLights": 14,
"droppedLights": 6,
"requestedShadowMaps": 14,
"renderedShadowMaps": 3,
"blockedShadowMaps": 11,
"codes": ["GPU_LIGHT_BUDGET_EXCEEDED", "GPU_SHADOW_BUDGET_EXCEEDED"]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,30 @@
{
"schemaVersion": 1,
"task": "M11-04",
"source": {
"fixture": "tests/files/web/m11_render_reference.blend",
"fixtureSha256": "d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963",
"generator": "tools/web/generate-m11-render-reference.py",
"generatorSha256": "118c98c77d98922e72660898bfb65842e11743fc77f4124c9f5088a76cb6a94a",
"blenderVersion": "5.2.0 LTS"
},
"reference": {
"file": "blender-eevee-reference.png",
"sha256": "f5c22636a232bcbb0ed0f772418cb12fced18ff72f4999804197e42caa61480a",
"width": 256,
"height": 256,
"colorSpace": "SRGB8",
"alphaMode": "STRAIGHT",
"renderEngine": "BLENDER_EEVEE"
},
"thresholds": {
"maxMeanAbsoluteError": 4,
"maxRootMeanSquaredError": 12,
"maxP95ChannelError": 12,
"maxBadPixelRatio": 0.02,
"badPixelChannelError": 48,
"foregroundDeltaFromReferenceBackground": 40,
"minForegroundIntersectionOverUnion": 0.97,
"maxAlphaCoverageDeltaRatio": 0
}
}

View File

@@ -0,0 +1,48 @@
{
"schemaVersion": 1,
"boundedEevee": {
"target": "WEB_LOCAL_BOUNDED",
"status": "READY",
"capability": "WEB_REALTIME_BOUNDED",
"reason": "BOUNDED_EEVEE"
},
"cycles": {
"target": "SERVER_JOB",
"withoutEndpoint": {
"status": "BLOCKED",
"code": "SERVER_JOB_UNAVAILABLE",
"reason": "CYCLES_REQUIRES_SERVER"
},
"withEndpoint": {
"status": "READY",
"capability": "CYCLES_SERVER_RENDER"
}
},
"complexEevee": {
"target": "SERVER_JOB",
"withoutEndpoint": {
"status": "BLOCKED",
"code": "SERVER_JOB_UNAVAILABLE",
"reason": "COMPLEX_EEVEE_REQUIRES_SERVER"
}
},
"hardware": {
"target": "SERVER_JOB",
"withoutEndpoint": {
"status": "BLOCKED",
"code": "SERVER_JOB_UNAVAILABLE",
"reason": "HARDWARE_BACKEND_REQUIRES_SERVER"
}
},
"webgpu": {
"target": "WEB_LOCAL_BOUNDED",
"status": "BLOCKED",
"code": "WEBGPU_RENDERER_UNAVAILABLE"
},
"unknownEngine": {
"target": "SERVER_JOB",
"status": "BLOCKED",
"capability": "UNSUPPORTED_RENDER_ENGINE",
"code": "PLATFORM_CAPABILITY_UNAVAILABLE"
}
}

View File

@@ -0,0 +1,18 @@
{
"schemaVersion": 1,
"task": "M11-06",
"blenderVersion": "5.2.0",
"sourceBlendSha256": "d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963",
"settingsSha256": "97bb832618bd27e8763722afa0d250ef74383fb355f0ff38763930f57ba1590b",
"output": {
"mime": "image/png",
"minimumByteLength": 1,
"sha256Pattern": "^[a-f0-9]{64}$"
},
"tamperCodes": {
"source": "SERVER_RENDER_SOURCE_HASH_MISMATCH",
"build": "SERVER_RENDER_BUILD_MISMATCH",
"settings": "SERVER_RENDER_SETTINGS_HASH_MISMATCH",
"output": "SERVER_RENDER_OUTPUT_HASH_MISMATCH"
}
}

View File

@@ -0,0 +1,46 @@
{
"schemaVersion": 1,
"task": "M11-07",
"fixture": {
"path": "tests/files/web/m11_compositor_allowlist.blend",
"sha256": "e844eba69002101c8cf4f376cdd844c4be78729091627d898634088707374b29",
"generator": "tools/web/generate-m11-compositor-allowlist.py",
"generatorSha256": "1389998aac849065311c85ef559a7d381274c0ebe1987afc3b6783c66a9a678e",
"blenderVersion": "5.2.0"
},
"width": 2,
"height": 2,
"maxAbsoluteError": 0,
"allowlist": ["CONSTANT_COLOR", "EXPOSURE", "INVERT", "COMPOSITE"],
"cases": [
{
"scene": "M11 Constant",
"newNode": "CONSTANT_COLOR",
"nodeTypes": ["CONSTANT_COLOR", "COMPOSITE"],
"pixel": [0.125, 0.25, 0.5, 0.75],
"float32Sha256": "3664d5dd48f309ba6a45e84ad84bf931c7775de21b2f8eef255651743dcc7bf5"
},
{
"scene": "M11 Exposure",
"newNode": "EXPOSURE",
"nodeTypes": ["CONSTANT_COLOR", "EXPOSURE", "COMPOSITE"],
"pixel": [0.25, 0.5, 1, 0.75],
"float32Sha256": "0c8caa21f76305cf3fc3a677f5c7af34811a0b29aaa035a5f55be15e2d89accd"
},
{
"scene": "M11 Invert",
"newNode": "INVERT",
"nodeTypes": ["CONSTANT_COLOR", "INVERT", "COMPOSITE"],
"pixel": [0.875, 0.75, 0.5, 0.75],
"float32Sha256": "d96848cf025a567550b7de8a3fcfb304594bb3fbad5c8722fa39f55e23845c55"
},
{
"scene": "M11 Chain",
"newNode": "INTEGRATION",
"nodeTypes": ["CONSTANT_COLOR", "EXPOSURE", "INVERT", "COMPOSITE"],
"pixel": [0.75, 0.5, 0, 0.75],
"float32Sha256": "20394b91c848df1aca00179b6785df2d5b38d44c333c9d9d1c926fe674f03a04"
}
],
"blockedNodeTypes": ["ALPHA_OVER", "BLUR", "IMAGE", "MIX", "RENDER_LAYER", "TRANSFORM", "UNSUPPORTED", "VIEWER"]
}

View File

@@ -0,0 +1,19 @@
{
"schemaVersion": 1,
"task": "M11-08",
"fixture": {
"path": "tests/files/web/compositor_scene.blend",
"sha256": "348eeefc28a0fdaa2d55b3c7251a737e0a04d82f61dd1eba804662a8f03713b9",
"generator": "tools/web/generate-compositor-fixture.py",
"generatorSha256": "e6ca40c989fb4bf1a26a34aa55861c2979142817a4cbe4e2628f4d0318775dc0",
"blenderVersion": "5.2.0"
},
"scene": "CompositorScene",
"unsupportedNode": {
"name": "PreservedUnsupportedGlare",
"type": "UNSUPPORTED",
"blenderType": "CompositorNodeGlare"
},
"expectedErrorCode": "COMPOSITOR_NODE_UNSUPPORTED",
"expectedRevisionDelta": 0
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M11-09",
"assets": [
{
"stripType": "IMAGE",
"mimeType": "image/png",
"path": "tests/files/web/media/sequencer-frame.png",
"sourcePath": "media/not-an-image.movie",
"byteLength": 261,
"sha256": "295b083db2299ab904947eb39c17173de70c211882b0d855537d8f3cc27698ed",
"backend": "IMAGE_BITMAP",
"decoded": { "width": 8, "height": 8 }
},
{
"stripType": "SOUND",
"mimeType": "audio/wav",
"path": "tests/files/web/media/sequencer-silence.wav",
"sourcePath": "media/not-a-sound.png",
"byteLength": 16044,
"sha256": "56d4af65701c26df20bd4021eda95b6e830348ce3a746086079fe89285548dc9",
"backend": "WEB_AUDIO",
"decoded": { "sampleRate": 48000, "channels": 1, "durationFrames": 48000 }
},
{
"stripType": "MOVIE",
"mimeType": "video/mp4",
"path": "tests/files/web/media/sequencer-probe.mp4",
"sourcePath": "media/not-a-movie.wav",
"byteLength": 1484,
"sha256": "f35a5a2765aef9d0fed7146108c699d0beb03f34414cb27e6b7a7d4871187b65",
"backend": "HTML_MEDIA",
"decoded": { "width": 16, "height": 16, "durationMicros": 1000000 }
}
],
"movieGenerator": {
"path": "tools/web/generate-sequencer-codec-fixture.sh",
"sha256": "bab7b0b56a16b96fd87302894c1c35d72ea316542d0ffffe9610458e47875b7a"
},
"blockedCode": "SEQUENCER_CODEC_UNSUPPORTED"
}

View File

@@ -0,0 +1,14 @@
{
"schemaVersion": 1,
"task": "M11-10",
"sourceSha256": "f35a5a2765aef9d0fed7146108c699d0beb03f34414cb27e6b7a7d4871187b65",
"profile": {
"kind": "MOVIE_RGBA8_FRAME",
"width": 8,
"height": 8,
"colorSpace": "SRGB8",
"alphaMode": "STRAIGHT"
},
"identitySha256": "68a3af14865841e81f69bd75f2605461de4819fe025d158ac3723fa0cdf31525",
"proxyByteLength": 256
}

View File

@@ -0,0 +1,14 @@
{
"schemaVersion": 1,
"task": "M11-11",
"sourceSha256": "f35a5a2765aef9d0fed7146108c699d0beb03f34414cb27e6b7a7d4871187b65",
"decisions": [
["SCRUB", 2, "PUBLISH", null],
["SEEK", 1, "STALE", "REVISION_CONFLICT"],
["DECODE", 3, "STALE", "REVISION_CONFLICT"],
["DECODE", 5, "PUBLISH", null],
["SEEK", 6, "STALE", "REVISION_CONFLICT"]
],
"published": ["SCRUB@2", "DECODE@5"],
"cacheWrites": ["DECODE@5"]
}

View File

@@ -0,0 +1,27 @@
{
"schemaVersion": 1,
"task": "M11-12",
"sourceBlendSha256": "5f5212487bb6b5df62b5ca915c75133f1ca45678614712ea4c7d902d823cd90c",
"settingsSha256": "01e39d1fdd88c75aecad7bc48a2b756bbcd645929963528b42ceb180b51e5566",
"requestSha256": "20d3a9e333804e014a993a9892a557842293fc44902229dd6eb65661f0691cfc",
"withoutServer": {
"schemaVersion": 1,
"requestSha256": "20d3a9e333804e014a993a9892a557842293fc44902229dd6eb65661f0691cfc",
"settingsSha256": "01e39d1fdd88c75aecad7bc48a2b756bbcd645929963528b42ceb180b51e5566",
"route": "SERVER_EXPORT",
"status": "BLOCKED",
"code": "SEQUENCER_EXPORT_SERVER_UNAVAILABLE",
"localEncoding": "BLOCKED",
"browserVideoEncoderDetected": false
},
"withServer": {
"schemaVersion": 1,
"requestSha256": "20d3a9e333804e014a993a9892a557842293fc44902229dd6eb65661f0691cfc",
"settingsSha256": "01e39d1fdd88c75aecad7bc48a2b756bbcd645929963528b42ceb180b51e5566",
"route": "SERVER_EXPORT",
"status": "SERVER_EXPORT_REQUIRED",
"code": null,
"localEncoding": "BLOCKED",
"browserVideoEncoderDetected": false
}
}

View File

@@ -0,0 +1,16 @@
{
"schemaVersion": 1,
"task": "M11-13",
"outputGain": 0.75,
"lifecycle": [
["SUSPENDED", "SILENT", false, 0.75, null],
["SUSPENDED", "SILENT", true, 0, null],
["RUNNING", "SILENT", true, 0, null],
["RUNNING", "ENABLED", false, 0.75, null],
["SUSPENDED", "SILENT", false, 0.75, null],
["RUNNING", "ENABLED", false, 0.75, null],
["CLOSED", "SILENT", false, 0, null]
],
"missingDevice": ["UNAVAILABLE", "BLOCKED", "SEQUENCER_AUDIO_DEVICE_UNAVAILABLE"],
"resumeFailure": ["SUSPENDED", "SILENT", "SEQUENCER_AUDIO_RESUME_FAILED"]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,75 @@
{
"schemaVersion": 1,
"taskId": "M8-19",
"source": {
"resourceId": "generated-smoke-vdb",
"sha256": "586f7cdf4b3329fcb7ef00fc57b12a268baafdbaac0a2b3d1bfa142a22ccda33",
"grid": "density",
"activeVoxelCount": 13997,
"indexBounds": {
"min": [
-14,
-14,
-14
],
"max": [
14,
14,
14
]
}
},
"native": {
"openVDBVersion": "13.0.0",
"generatorSourceSha256": "4d18306b9a498f8de73dccea9efd9f268fc24e07404c3e425c994b51434584eb"
},
"renderContract": {
"shaderSemanticVersion": "volume-wgsl-v1",
"width": 64,
"height": 64,
"format": "RGBA8_UNORM",
"interpolation": "LINEAR",
"densityScale": 1,
"emissionScale": 0,
"anisotropy": 0,
"color": [
0.72,
0.78,
0.86
],
"axes": [
"X",
"Y",
"Z"
],
"thresholds": {
"maxChannelError": 2,
"meanAbsoluteError": 0.1,
"rmsError": 0.5,
"alphaCoverageDeltaRatio": 0.002
}
},
"images": [
{
"axis": "X",
"file": "generated-smoke-x.rgba",
"byteLength": 16384,
"sha256": "87d08a77a644f37ed59609ebdd18555ab1924f9a3b30d8d084db35e7776cfb9c",
"alphaPixels": 3552
},
{
"axis": "Y",
"file": "generated-smoke-y.rgba",
"byteLength": 16384,
"sha256": "87d08a77a644f37ed59609ebdd18555ab1924f9a3b30d8d084db35e7776cfb9c",
"alphaPixels": 3552
},
{
"axis": "Z",
"file": "generated-smoke-z.rgba",
"byteLength": 16384,
"sha256": "87d08a77a644f37ed59609ebdd18555ab1924f9a3b30d8d084db35e7776cfb9c",
"alphaPixels": 3552
}
]
}

View File

@@ -0,0 +1,29 @@
{
"afterCyclicU": [
true,
false
],
"beforeCyclicU": [
false,
false
],
"blenderVersion": "5.2.0",
"curveName": "WebCurveData",
"fixture": "tests/files/web/nonmesh_scene.blend",
"fixtureSha256": "ae8ef85d606aa120ce6b7611fc03407fd80bb60311e94a6ef73f6384d0b6c8b4",
"operator": "TOGGLE_CYCLIC",
"reopenedCyclicU": [
true,
false
],
"schemaVersion": 1,
"splineIndex": 0,
"splinePointCounts": [
4,
3
],
"splineTypes": [
"POLY",
"BEZIER"
]
}

View File

@@ -0,0 +1,59 @@
{
"afterReorder": {
"framesByLayer": {
"Lines": [
1
],
"Web Drafts": [
12
]
},
"layerOrder": [
"Web Drafts",
"Lines"
]
},
"beforeReorder": {
"framesByLayer": {
"Lines": [
1
],
"Web Drafts": [
1
]
},
"layerOrder": [
"Lines",
"Web Drafts"
]
},
"blenderVersion": "5.2.0",
"fixture": "tests/files/web/modifier_grease_pencil_scene.blend",
"fixtureSha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3",
"greasePencilName": "GreasePencilData",
"reopened": {
"framesByLayer": {
"Lines": [
1
],
"Web Drafts": [
12
]
},
"layerOrder": [
"Web Drafts",
"Lines"
]
},
"schemaVersion": 1,
"source": {
"framesByLayer": {
"Lines": [
1
]
},
"layerOrder": [
"Lines"
]
}
}

View File

@@ -0,0 +1,193 @@
{
"blenderVersion": "5.2.0 LTS",
"fixture": "rigged_shape_scene.blend",
"mesh": "RiggedShapeMesh",
"object": "RiggedShapeObject",
"operations": [
{
"name": "normalize",
"vertex": 2
},
{
"limit": 2,
"name": "limit-normalize",
"vertex": 3
},
{
"axis": 0,
"name": "mirror",
"tolerance": 0.0001,
"vertices": [
0,
1
]
}
],
"schemaVersion": 1,
"steps": [
{
"groups": [
"Root",
"Tip",
"WebPaintGroup"
],
"name": "initial",
"vertices": [
{
"index": 0,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.75
}
},
{
"index": 1,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.25
}
},
{
"index": 2,
"weights": {
"Root": 0.25,
"Tip": 1.0
}
},
{
"index": 3,
"weights": {
"Root": 0.25,
"Tip": 1.0
}
}
]
},
{
"groups": [
"Root",
"Tip",
"WebPaintGroup"
],
"name": "normalize",
"vertices": [
{
"index": 0,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.75
}
},
{
"index": 1,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.25
}
},
{
"index": 2,
"weights": {
"Root": 0.142857149,
"Tip": 0.571428597,
"WebPaintGroup": 0.285714298
}
},
{
"index": 3,
"weights": {
"Root": 0.25,
"Tip": 1.0
}
}
]
},
{
"groups": [
"Root",
"Tip",
"WebPaintGroup"
],
"name": "limit-normalize",
"vertices": [
{
"index": 0,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.75
}
},
{
"index": 1,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.25
}
},
{
"index": 2,
"weights": {
"Root": 0.142857149,
"Tip": 0.571428597,
"WebPaintGroup": 0.285714298
}
},
{
"index": 3,
"weights": {
"Tip": 0.714285731,
"WebPaintGroup": 0.285714298
}
}
]
},
{
"groups": [
"Root",
"Tip",
"WebPaintGroup"
],
"name": "mirror",
"vertices": [
{
"index": 0,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.899999976
}
},
{
"index": 1,
"weights": {
"Root": 1.0,
"Tip": 0.25,
"WebPaintGroup": 0.899999976
}
},
{
"index": 2,
"weights": {
"Root": 0.142857149,
"Tip": 0.571428597,
"WebPaintGroup": 0.285714298
}
},
{
"index": 3,
"weights": {
"Tip": 0.714285731,
"WebPaintGroup": 0.285714298
}
}
]
}
],
"tolerance": 1e-06
}

View File

@@ -0,0 +1,31 @@
{
"schemaVersion": 1,
"task": "M9-14",
"domains": ["CURVE", "GREASE_PENCIL", "PAINT"],
"fixtures": {
"CURVE": {
"path": "tests/files/web/nonmesh_scene.blend",
"sha256": "ae8ef85d606aa120ce6b7611fc03407fd80bb60311e94a6ef73f6384d0b6c8b4"
},
"GREASE_PENCIL": {
"path": "tests/files/web/modifier_grease_pencil_scene.blend",
"sha256": "3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3"
},
"PAINT": {
"path": "tests/files/web/attribute_scene.blend",
"sha256": "12fa75bb79f8c38e660d3d2a8fc9cc16dd3df4fc9208b0e2ad94fb1f8aa68f71"
}
},
"requiredStages": ["WORKER_RESTART", "OOM", "GPU_RELEASE", "SMALL_SCENE"],
"invariants": {
"workerRestart": "identity hash preserved; new engine worker has one live Main handle",
"oom": "GPU_GEOMETRY_UPLOAD maps to GPU_GEOMETRY_BUDGET_EXCEEDED and leaves zero temporary resources",
"gpuRelease": "one WebGL2 resource release and one reinitialization render non-zero pixels",
"smallScene": "domain identity, data IDs and visible pixels are restored"
},
"verification": {
"unit": "web/tests/unit/editing-domain-recovery.test.mjs",
"browser": "web/tests/e2e/editing-domain-recovery.spec.ts",
"command": "npm --prefix web run test:editing-domain-recovery"
}
}