zcbot/software-contracts/blender.scene.author.v3.json

408 lines
18 KiB
JSON

{
"capability": "blender.scene.author@v3",
"display_name": "Blender 受管三维场景创作",
"default_enrollment": false,
"output_namespace": "blender",
"input_policy": {
"suffixes": [],
"max_count": 0,
"max_bytes": 0,
"max_total_bytes": 0
},
"outputs": {
"project": {
"filename": "scene.blend",
"media_type": "application/x-blender",
"relative_path": "scene.blend",
"publish": true,
"required": true
},
"preview_01": {
"filename": "preview-01.png",
"media_type": "image/png",
"relative_path": "preview-01.png",
"publish": true,
"required": true
},
"preview_02": {
"filename": "preview-02.png",
"media_type": "image/png",
"relative_path": "preview-02.png",
"publish": true,
"required": false
},
"preview_03": {
"filename": "preview-03.png",
"media_type": "image/png",
"relative_path": "preview-03.png",
"publish": true,
"required": false
},
"preview_04": {
"filename": "preview-04.png",
"media_type": "image/png",
"relative_path": "preview-04.png",
"publish": true,
"required": false
},
"preview_05": {
"filename": "preview-05.png",
"media_type": "image/png",
"relative_path": "preview-05.png",
"publish": true,
"required": false
},
"preview_06": {
"filename": "preview-06.png",
"media_type": "image/png",
"relative_path": "preview-06.png",
"publish": true,
"required": false
},
"preview_07": {
"filename": "preview-07.png",
"media_type": "image/png",
"relative_path": "preview-07.png",
"publish": true,
"required": false
},
"preview_08": {
"filename": "preview-08.png",
"media_type": "image/png",
"relative_path": "preview-08.png",
"publish": true,
"required": false
},
"scene_manifest": {
"filename": "scene-manifest.json",
"media_type": "application/json",
"relative_path": "scene-manifest.json",
"publish": true,
"required": true
},
"scene_glb": {
"filename": "scene.glb",
"media_type": "model/gltf-binary",
"relative_path": "scene.glb",
"publish": true,
"required": false
},
"provenance": {
"filename": "provenance.json",
"media_type": "application/json",
"relative_path": ".meta/provenance.json",
"publish": false,
"required": true
}
},
"feature_path": ["operation", "scene", "type"],
"features": {
"recipe": "1.0.0"
},
"summary": {
"title_path": ["operation", "scene", "title"]
},
"legacy_runtime": null,
"workspace": {
"state_output": "project",
"preview_outputs": [
"preview_01", "preview_02", "preview_03", "preview_04",
"preview_05", "preview_06", "preview_07", "preview_08"
],
"required_adapter_version": "1.0.0"
},
"request_schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"x-maxBytes": 262144,
"required": ["schema_version", "inputs", "operation", "outputs"],
"additionalProperties": false,
"properties": {
"schema_version": {"const": 3},
"inputs": {"type": "array", "maxItems": 0},
"operation": {
"type": "object",
"required": ["scene"],
"additionalProperties": false,
"properties": {
"scene": {"$ref": "#/$defs/recipeScene"}
}
},
"outputs": {
"type": "array",
"maxItems": 8,
"uniqueItems": true,
"description": "preview_01 固定生成;为其余 render.views 请求对应预览,可另选 GLB。",
"items": {
"oneOf": [
{"$ref": "#/$defs/preview02Output"},
{"$ref": "#/$defs/preview03Output"},
{"$ref": "#/$defs/preview04Output"},
{"$ref": "#/$defs/preview05Output"},
{"$ref": "#/$defs/preview06Output"},
{"$ref": "#/$defs/preview07Output"},
{"$ref": "#/$defs/preview08Output"},
{"$ref": "#/$defs/glbOutput"}
]
}
}
},
"$defs": {
"identifier": {"type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$"},
"color": {"type": "string", "pattern": "^#[0-9A-Fa-f]{6}$"},
"positive": {"type": "number", "exclusiveMinimum": 0, "maximum": 10000},
"vector2": {
"type": "array", "minItems": 2, "maxItems": 2,
"items": {"type": "number", "minimum": -10000, "maximum": 10000}
},
"vector3": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"type": "number", "minimum": -10000, "maximum": 10000}
},
"scale3": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {"type": "number", "exclusiveMinimum": 0, "maximum": 1000}
},
"transform": {
"type": "object",
"additionalProperties": false,
"properties": {
"position": {"$ref": "#/$defs/vector3"},
"rotation_deg": {"$ref": "#/$defs/vector3"},
"scale": {"$ref": "#/$defs/scale3"}
}
},
"material": {
"type": "object",
"required": ["id", "base_color"],
"additionalProperties": false,
"properties": {
"id": {"$ref": "#/$defs/identifier"},
"base_color": {"$ref": "#/$defs/color"},
"metallic": {"type": "number", "minimum": 0, "maximum": 1},
"roughness": {"type": "number", "minimum": 0, "maximum": 1},
"emission_color": {"$ref": "#/$defs/color"},
"emission_strength": {"type": "number", "minimum": 0, "maximum": 100},
"opacity": {"type": "number", "exclusiveMinimum": 0, "maximum": 1}
}
},
"boxGeometry": {
"type": "object", "required": ["type", "size"], "additionalProperties": false,
"properties": {"type": {"const": "box"}, "size": {"$ref": "#/$defs/scale3"}}
},
"cylinderGeometry": {
"type": "object", "required": ["type", "radius", "depth"], "additionalProperties": false,
"properties": {
"type": {"const": "cylinder"}, "radius": {"$ref": "#/$defs/positive"},
"depth": {"$ref": "#/$defs/positive"},
"vertices": {"type": "integer", "minimum": 8, "maximum": 256}
}
},
"coneGeometry": {
"type": "object", "required": ["type", "radius1", "radius2", "depth"], "additionalProperties": false,
"properties": {
"type": {"const": "cone"}, "radius1": {"type": "number", "minimum": 0, "maximum": 10000},
"radius2": {"type": "number", "minimum": 0, "maximum": 10000},
"depth": {"$ref": "#/$defs/positive"},
"vertices": {"type": "integer", "minimum": 8, "maximum": 256}
}
},
"sphereGeometry": {
"type": "object", "required": ["type", "radius"], "additionalProperties": false,
"properties": {
"type": {"const": "sphere"}, "radius": {"$ref": "#/$defs/positive"},
"segments": {"type": "integer", "minimum": 8, "maximum": 256},
"rings": {"type": "integer", "minimum": 4, "maximum": 128}
}
},
"torusGeometry": {
"type": "object", "required": ["type", "major_radius", "minor_radius"], "additionalProperties": false,
"properties": {
"type": {"const": "torus"}, "major_radius": {"$ref": "#/$defs/positive"},
"minor_radius": {"$ref": "#/$defs/positive"},
"major_segments": {"type": "integer", "minimum": 8, "maximum": 256},
"minor_segments": {"type": "integer", "minimum": 4, "maximum": 128}
}
},
"planeGeometry": {
"type": "object", "required": ["type", "size"], "additionalProperties": false,
"properties": {"type": {"const": "plane"}, "size": {"$ref": "#/$defs/vector2"}}
},
"extrudeGeometry": {
"type": "object", "required": ["type", "profile", "depth"], "additionalProperties": false,
"properties": {
"type": {"const": "extrude"}, "depth": {"$ref": "#/$defs/positive"},
"profile": {"type": "array", "minItems": 3, "maxItems": 128, "items": {"$ref": "#/$defs/vector2"}}
}
},
"revolveGeometry": {
"type": "object", "required": ["type", "profile"], "additionalProperties": false,
"properties": {
"type": {"const": "revolve"},
"profile": {"type": "array", "minItems": 2, "maxItems": 128, "items": {"$ref": "#/$defs/vector2"}},
"angle_deg": {"type": "number", "exclusiveMinimum": 0, "maximum": 360},
"segments": {"type": "integer", "minimum": 8, "maximum": 256}
}
},
"sweepGeometry": {
"type": "object", "required": ["type", "path", "radius"], "additionalProperties": false,
"properties": {
"type": {"const": "sweep"}, "radius": {"$ref": "#/$defs/positive"},
"resolution": {"type": "integer", "minimum": 0, "maximum": 12},
"path": {"type": "array", "minItems": 2, "maxItems": 128, "items": {"$ref": "#/$defs/vector3"}}
}
},
"pipeGeometry": {
"type": "object", "required": ["type", "start", "end", "outer_radius", "wall_thickness"], "additionalProperties": false,
"properties": {
"type": {"const": "pipe"}, "start": {"$ref": "#/$defs/vector3"}, "end": {"$ref": "#/$defs/vector3"},
"outer_radius": {"$ref": "#/$defs/positive"}, "wall_thickness": {"$ref": "#/$defs/positive"},
"vertices": {"type": "integer", "minimum": 8, "maximum": 256}
}
},
"geometry": {
"oneOf": [
{"$ref": "#/$defs/boxGeometry"}, {"$ref": "#/$defs/cylinderGeometry"},
{"$ref": "#/$defs/coneGeometry"}, {"$ref": "#/$defs/sphereGeometry"},
{"$ref": "#/$defs/torusGeometry"}, {"$ref": "#/$defs/planeGeometry"},
{"$ref": "#/$defs/extrudeGeometry"}, {"$ref": "#/$defs/revolveGeometry"},
{"$ref": "#/$defs/sweepGeometry"}, {"$ref": "#/$defs/pipeGeometry"}
]
},
"modifier": {
"oneOf": [
{
"type": "object", "required": ["type", "width"], "additionalProperties": false,
"properties": {"type": {"const": "bevel"}, "width": {"$ref": "#/$defs/positive"}, "segments": {"type": "integer", "minimum": 1, "maximum": 12}}
},
{
"type": "object", "required": ["type", "axes"], "additionalProperties": false,
"properties": {"type": {"const": "mirror"}, "axes": {"type": "array", "minItems": 1, "maxItems": 3, "uniqueItems": true, "items": {"enum": ["x", "y", "z"]}}}
},
{
"type": "object", "required": ["type", "count", "offset"], "additionalProperties": false,
"properties": {"type": {"const": "array"}, "count": {"type": "integer", "minimum": 2, "maximum": 100}, "offset": {"$ref": "#/$defs/vector3"}}
},
{
"type": "object", "required": ["type", "thickness"], "additionalProperties": false,
"properties": {"type": {"const": "solidify"}, "thickness": {"type": "number", "minimum": -1000, "maximum": 1000, "not": {"const": 0}}}
},
{
"type": "object", "required": ["type", "operation", "target"], "additionalProperties": false,
"properties": {"type": {"const": "boolean"}, "operation": {"enum": ["union", "difference", "intersect"]}, "target": {"$ref": "#/$defs/identifier"}}
}
]
},
"object": {
"type": "object",
"required": ["id", "kind"],
"additionalProperties": false,
"properties": {
"id": {"$ref": "#/$defs/identifier"}, "name": {"type": "string", "minLength": 1, "maxLength": 160},
"kind": {"enum": ["geometry", "generator", "text", "empty"]},
"geometry": {"$ref": "#/$defs/geometry"},
"generator": {"const": "rotary_kiln"},
"parameters": {"$ref": "#/$defs/rotaryKilnParameters"},
"text": {"type": "string", "minLength": 1, "maxLength": 1000},
"text_size": {"$ref": "#/$defs/positive"},
"text_extrude": {"type": "number", "minimum": 0, "maximum": 10},
"transform": {"$ref": "#/$defs/transform"},
"material": {"$ref": "#/$defs/identifier"},
"parent": {"$ref": "#/$defs/identifier"},
"collection": {"$ref": "#/$defs/identifier"},
"modifiers": {"type": "array", "maxItems": 12, "items": {"$ref": "#/$defs/modifier"}},
"visible": {"type": "boolean"}
},
"allOf": [
{"if": {"properties": {"kind": {"const": "geometry"}}}, "then": {"required": ["geometry"]}},
{"if": {"properties": {"kind": {"const": "generator"}}}, "then": {"required": ["generator", "parameters"]}},
{"if": {"properties": {"kind": {"const": "text"}}}, "then": {"required": ["text"]}}
]
},
"rotaryKilnParameters": {
"type": "object",
"required": ["length_m", "outer_diameter_m", "shell_thickness_m", "lining_thickness_m", "slope_percent", "support_stations"],
"additionalProperties": false,
"properties": {
"length_m": {"type": "number", "minimum": 1, "maximum": 200},
"outer_diameter_m": {"type": "number", "minimum": 0.2, "maximum": 15},
"shell_thickness_m": {"type": "number", "minimum": 0.005, "maximum": 0.5},
"lining_thickness_m": {"type": "number", "minimum": 0.01, "maximum": 1.5},
"slope_percent": {"type": "number", "minimum": 0, "maximum": 10},
"support_stations": {"type": "integer", "minimum": 2, "maximum": 8},
"drive_system": {"type": "boolean"}, "burner": {"type": "boolean"},
"hoods": {"type": "boolean"}, "inspection_platform": {"type": "boolean"},
"material_bed": {"type": "boolean"}
}
},
"light": {
"type": "object", "required": ["id", "type", "position", "energy"], "additionalProperties": false,
"properties": {
"id": {"$ref": "#/$defs/identifier"}, "type": {"enum": ["sun", "area", "point", "spot"]},
"position": {"$ref": "#/$defs/vector3"}, "target": {"$ref": "#/$defs/vector3"},
"energy": {"type": "number", "exclusiveMinimum": 0, "maximum": 1000000},
"color": {"$ref": "#/$defs/color"}, "size": {"$ref": "#/$defs/positive"},
"spot_size_deg": {"type": "number", "exclusiveMinimum": 0, "maximum": 180}
}
},
"view": {
"type": "object",
"required": ["name", "output_key", "position", "target", "projection"],
"additionalProperties": false,
"properties": {
"name": {"type": "string", "minLength": 1, "maxLength": 80},
"output_key": {"enum": ["preview_01", "preview_02", "preview_03", "preview_04", "preview_05", "preview_06", "preview_07", "preview_08"]},
"position": {"$ref": "#/$defs/vector3"}, "target": {"$ref": "#/$defs/vector3"},
"projection": {"enum": ["perspective", "orthographic"]},
"lens_mm": {"type": "number", "minimum": 1, "maximum": 300},
"ortho_scale": {"$ref": "#/$defs/positive"},
"clip_end": {"type": "number", "minimum": 1, "maximum": 100000}
}
},
"render": {
"type": "object", "required": ["views"], "additionalProperties": false,
"properties": {
"width": {"type": "integer", "minimum": 320, "maximum": 3840},
"height": {"type": "integer", "minimum": 240, "maximum": 2160},
"transparent_background": {"type": "boolean"},
"background_color": {"$ref": "#/$defs/color"},
"views": {
"type": "array", "minItems": 1, "maxItems": 8,
"contains": {"type": "object", "properties": {"output_key": {"const": "preview_01"}}, "required": ["output_key"]},
"items": {"$ref": "#/$defs/view"}
}
}
},
"recipeScene": {
"type": "object",
"required": ["type", "recipe_version", "title", "units", "objects", "render"],
"additionalProperties": false,
"properties": {
"type": {"const": "recipe"}, "recipe_version": {"const": 1},
"title": {"type": "string", "minLength": 1, "maxLength": 160},
"units": {"enum": ["meters", "millimeters"]},
"materials": {"type": "array", "maxItems": 64, "items": {"$ref": "#/$defs/material"}},
"objects": {"type": "array", "minItems": 1, "maxItems": 200, "items": {"$ref": "#/$defs/object"}},
"lights": {"type": "array", "maxItems": 16, "items": {"$ref": "#/$defs/light"}},
"render": {"$ref": "#/$defs/render"}
}
},
"pngOutput": {
"type": "object", "required": ["key", "type", "format"], "additionalProperties": false,
"properties": {"key": {"type": "string"}, "type": {"const": "figure"}, "format": {"const": "png"}}
},
"preview02Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_02"}}}]},
"preview03Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_03"}}}]},
"preview04Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_04"}}}]},
"preview05Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_05"}}}]},
"preview06Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_06"}}}]},
"preview07Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_07"}}}]},
"preview08Output": {"allOf": [{"$ref": "#/$defs/pngOutput"}, {"properties": {"key": {"const": "preview_08"}}}]},
"glbOutput": {
"type": "object", "required": ["key", "type", "format"], "additionalProperties": false,
"properties": {"key": {"const": "scene_glb"}, "type": {"const": "model"}, "format": {"const": "glb"}}
}
}
}
}