408 lines
18 KiB
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"}}
|
|
}
|
|
}
|
|
}
|
|
}
|