@deepblend/dsh-blender-contracts 0.2.20 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/artistic-review.js +57 -0
- package/lib/asset-content.js +6 -3
- package/lib/handled-cup.js +55 -0
- package/lib/index.js +31 -14
- package/lib/recipe.js +253 -0
- package/lib/reference-images.js +28 -0
- package/lib/runtime-types.d.ts +208 -0
- package/lib/scene-patch.js +133 -1
- package/lib/scene-spec.js +249 -4
- package/lib/schema-types.d.ts +185 -0
- package/lib/schemas/job-result.schema.json +117 -0
- package/lib/schemas/recipe.schema.json +332 -0
- package/lib/schemas/scene-patch.schema.json +793 -57
- package/lib/schemas/scene-spec.schema.json +653 -76
- package/lib/sdk.d.ts +101 -0
- package/lib/sdk.js +41 -0
- package/lib/ui-api.js +68 -3
- package/lib/visual-composition.js +38 -24
- package/lib/visual-issue.js +26 -8
- package/lib/visual-loop.js +204 -26
- package/package.json +8 -1
|
@@ -105,6 +105,22 @@
|
|
|
105
105
|
"type": "number",
|
|
106
106
|
"minimum": 0,
|
|
107
107
|
"maximum": 1000
|
|
108
|
+
},
|
|
109
|
+
"environment": {
|
|
110
|
+
"type": "object",
|
|
111
|
+
"additionalProperties": false,
|
|
112
|
+
"required": [
|
|
113
|
+
"assetId"
|
|
114
|
+
],
|
|
115
|
+
"properties": {
|
|
116
|
+
"assetId": {
|
|
117
|
+
"$ref": "#/$defs/id"
|
|
118
|
+
},
|
|
119
|
+
"rotation": {
|
|
120
|
+
"type": "number",
|
|
121
|
+
"description": "Rotation around world Z in radians; default zero."
|
|
122
|
+
}
|
|
123
|
+
}
|
|
108
124
|
}
|
|
109
125
|
}
|
|
110
126
|
},
|
|
@@ -184,65 +200,159 @@
|
|
|
184
200
|
"type": "number",
|
|
185
201
|
"minimum": 0,
|
|
186
202
|
"maximum": 1
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
"proceduralTexture": {
|
|
191
|
-
"type": "object",
|
|
192
|
-
"additionalProperties": false,
|
|
193
|
-
"required": [
|
|
194
|
-
"type",
|
|
195
|
-
"scale"
|
|
196
|
-
],
|
|
197
|
-
"description": "A procedural surface texture. Duplicated from scene-spec.schema.json because this schema is deliberately self-contained (it never $refs across files), so the two copies are kept in step by hand.",
|
|
198
|
-
"properties": {
|
|
199
|
-
"type": {
|
|
200
|
-
"type": "string",
|
|
201
|
-
"enum": [
|
|
202
|
-
"noise",
|
|
203
|
-
"wave",
|
|
204
|
-
"voronoi"
|
|
205
|
-
]
|
|
206
|
-
},
|
|
207
|
-
"scale": {
|
|
208
|
-
"type": "number",
|
|
209
|
-
"exclusiveMinimum": 0
|
|
210
|
-
},
|
|
211
|
-
"detail": {
|
|
212
|
-
"type": "number",
|
|
213
|
-
"minimum": 0,
|
|
214
|
-
"maximum": 16
|
|
215
|
-
},
|
|
216
|
-
"distortion": {
|
|
217
|
-
"type": "number",
|
|
218
|
-
"minimum": 0
|
|
219
|
-
},
|
|
220
|
-
"stretch": {
|
|
221
|
-
"type": "array",
|
|
222
|
-
"minItems": 3,
|
|
223
|
-
"maxItems": 3,
|
|
224
|
-
"items": {
|
|
225
|
-
"type": "number",
|
|
226
|
-
"exclusiveMinimum": 0
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
"bump": {
|
|
230
|
-
"type": "number",
|
|
231
|
-
"minimum": 0,
|
|
232
|
-
"maximum": 1
|
|
233
203
|
},
|
|
234
|
-
"
|
|
204
|
+
"anisotropic": {
|
|
235
205
|
"type": "number",
|
|
236
206
|
"minimum": 0,
|
|
237
|
-
"maximum": 1
|
|
207
|
+
"maximum": 1,
|
|
208
|
+
"description": "Cycles Principled specular anisotropy. 0 disables; positive values need an explicit material tangent."
|
|
238
209
|
},
|
|
239
|
-
"
|
|
210
|
+
"anisotropicRotation": {
|
|
240
211
|
"type": "number",
|
|
241
212
|
"minimum": 0,
|
|
242
|
-
"maximum": 1
|
|
213
|
+
"maximum": 1,
|
|
214
|
+
"description": "Rotate the anisotropic tangent in turns: 0.25 is 90 degrees; 1 is one full turn. Nonzero values need an explicit tangent."
|
|
243
215
|
}
|
|
244
216
|
}
|
|
245
217
|
},
|
|
218
|
+
"proceduralTexture": {
|
|
219
|
+
"description": "A procedural surface texture. Duplicated from scene-spec.schema.json because this schema is deliberately self-contained (it never $refs across files), so the two copies are kept in step by hand.",
|
|
220
|
+
"oneOf": [
|
|
221
|
+
{
|
|
222
|
+
"type": "object",
|
|
223
|
+
"additionalProperties": false,
|
|
224
|
+
"required": [
|
|
225
|
+
"type",
|
|
226
|
+
"scale"
|
|
227
|
+
],
|
|
228
|
+
"properties": {
|
|
229
|
+
"type": {
|
|
230
|
+
"type": "string",
|
|
231
|
+
"enum": [
|
|
232
|
+
"noise",
|
|
233
|
+
"wave",
|
|
234
|
+
"voronoi"
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"scale": {
|
|
238
|
+
"type": "number",
|
|
239
|
+
"exclusiveMinimum": 0,
|
|
240
|
+
"description": "Pattern density in the selected coordinate space. Larger is finer; UV density is relative to the UV layout."
|
|
241
|
+
},
|
|
242
|
+
"detail": {
|
|
243
|
+
"type": "number",
|
|
244
|
+
"minimum": 0,
|
|
245
|
+
"maximum": 16
|
|
246
|
+
},
|
|
247
|
+
"distortion": {
|
|
248
|
+
"type": "number",
|
|
249
|
+
"minimum": 0
|
|
250
|
+
},
|
|
251
|
+
"stretch": {
|
|
252
|
+
"type": "array",
|
|
253
|
+
"minItems": 3,
|
|
254
|
+
"maxItems": 3,
|
|
255
|
+
"items": {
|
|
256
|
+
"type": "number",
|
|
257
|
+
"exclusiveMinimum": 0
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"bump": {
|
|
261
|
+
"type": "number",
|
|
262
|
+
"minimum": 0,
|
|
263
|
+
"maximum": 1
|
|
264
|
+
},
|
|
265
|
+
"roughnessVariation": {
|
|
266
|
+
"type": "number",
|
|
267
|
+
"minimum": 0,
|
|
268
|
+
"maximum": 1
|
|
269
|
+
},
|
|
270
|
+
"colorVariation": {
|
|
271
|
+
"type": "number",
|
|
272
|
+
"minimum": 0,
|
|
273
|
+
"maximum": 1
|
|
274
|
+
},
|
|
275
|
+
"coordinates": {
|
|
276
|
+
"type": "string",
|
|
277
|
+
"enum": [
|
|
278
|
+
"object"
|
|
279
|
+
],
|
|
280
|
+
"description": "Coordinate source. Omitted means object space. UV uses the named UV map or the active render UV map on each used surface."
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"type": "object",
|
|
286
|
+
"additionalProperties": false,
|
|
287
|
+
"required": [
|
|
288
|
+
"type",
|
|
289
|
+
"scale",
|
|
290
|
+
"coordinates"
|
|
291
|
+
],
|
|
292
|
+
"properties": {
|
|
293
|
+
"type": {
|
|
294
|
+
"type": "string",
|
|
295
|
+
"enum": [
|
|
296
|
+
"noise",
|
|
297
|
+
"wave",
|
|
298
|
+
"voronoi"
|
|
299
|
+
]
|
|
300
|
+
},
|
|
301
|
+
"scale": {
|
|
302
|
+
"type": "number",
|
|
303
|
+
"exclusiveMinimum": 0,
|
|
304
|
+
"description": "Pattern density in the selected coordinate space. Larger is finer; UV density is relative to the UV layout."
|
|
305
|
+
},
|
|
306
|
+
"detail": {
|
|
307
|
+
"type": "number",
|
|
308
|
+
"minimum": 0,
|
|
309
|
+
"maximum": 16
|
|
310
|
+
},
|
|
311
|
+
"distortion": {
|
|
312
|
+
"type": "number",
|
|
313
|
+
"minimum": 0
|
|
314
|
+
},
|
|
315
|
+
"stretch": {
|
|
316
|
+
"type": "array",
|
|
317
|
+
"minItems": 3,
|
|
318
|
+
"maxItems": 3,
|
|
319
|
+
"items": {
|
|
320
|
+
"type": "number",
|
|
321
|
+
"exclusiveMinimum": 0
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"bump": {
|
|
325
|
+
"type": "number",
|
|
326
|
+
"minimum": 0,
|
|
327
|
+
"maximum": 1
|
|
328
|
+
},
|
|
329
|
+
"roughnessVariation": {
|
|
330
|
+
"type": "number",
|
|
331
|
+
"minimum": 0,
|
|
332
|
+
"maximum": 1
|
|
333
|
+
},
|
|
334
|
+
"colorVariation": {
|
|
335
|
+
"type": "number",
|
|
336
|
+
"minimum": 0,
|
|
337
|
+
"maximum": 1
|
|
338
|
+
},
|
|
339
|
+
"coordinates": {
|
|
340
|
+
"type": "string",
|
|
341
|
+
"enum": [
|
|
342
|
+
"uv"
|
|
343
|
+
],
|
|
344
|
+
"description": "Coordinate source. Omitted means object space. UV uses the named UV map or the active render UV map on each used surface."
|
|
345
|
+
},
|
|
346
|
+
"uvMap": {
|
|
347
|
+
"type": "string",
|
|
348
|
+
"minLength": 1,
|
|
349
|
+
"pattern": "\\S",
|
|
350
|
+
"description": "Existing UV map name. Requires coordinates: uv. Omit to use the active render UV map."
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
]
|
|
355
|
+
},
|
|
246
356
|
"generator": {
|
|
247
357
|
"type": "object",
|
|
248
358
|
"additionalProperties": false,
|
|
@@ -259,7 +369,10 @@
|
|
|
259
369
|
"cone",
|
|
260
370
|
"plane",
|
|
261
371
|
"torus",
|
|
262
|
-
"rounded_box"
|
|
372
|
+
"rounded_box",
|
|
373
|
+
"lathe",
|
|
374
|
+
"curve",
|
|
375
|
+
"handled_cup"
|
|
263
376
|
]
|
|
264
377
|
},
|
|
265
378
|
"size": {
|
|
@@ -300,8 +413,115 @@
|
|
|
300
413
|
"maximum": 16
|
|
301
414
|
}
|
|
302
415
|
}
|
|
416
|
+
},
|
|
417
|
+
"profile": {
|
|
418
|
+
"type": "array",
|
|
419
|
+
"minItems": 2,
|
|
420
|
+
"maxItems": 128,
|
|
421
|
+
"items": {
|
|
422
|
+
"type": "array",
|
|
423
|
+
"minItems": 2,
|
|
424
|
+
"maxItems": 2,
|
|
425
|
+
"items": {
|
|
426
|
+
"type": "number"
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"description": "Lathe boundary in ordered [radius, height] points, in scene units. Radius must be nonnegative. Do not repeat the first point to close it."
|
|
430
|
+
},
|
|
431
|
+
"closedProfile": {
|
|
432
|
+
"type": "boolean",
|
|
433
|
+
"description": "Join the final profile point to the first, for annular or hollow sections. Default false."
|
|
434
|
+
},
|
|
435
|
+
"capEnds": {
|
|
436
|
+
"type": "boolean",
|
|
437
|
+
"description": "Close open lathe rings or curve ends. Default true; closed paths and profiles need no caps."
|
|
438
|
+
},
|
|
439
|
+
"path": {
|
|
440
|
+
"type": "array",
|
|
441
|
+
"minItems": 2,
|
|
442
|
+
"maxItems": 128,
|
|
443
|
+
"items": {
|
|
444
|
+
"$ref": "#/$defs/vec3"
|
|
445
|
+
},
|
|
446
|
+
"description": "Ordered local-space points for a swept round section."
|
|
447
|
+
},
|
|
448
|
+
"pathClosed": {
|
|
449
|
+
"type": "boolean",
|
|
450
|
+
"description": "Connect the last path point to the first. Default false."
|
|
451
|
+
},
|
|
452
|
+
"pathInterpolation": {
|
|
453
|
+
"type": "string",
|
|
454
|
+
"enum": [
|
|
455
|
+
"poly",
|
|
456
|
+
"bezier"
|
|
457
|
+
],
|
|
458
|
+
"description": "poly preserves straight segments; bezier uses automatic smooth handles. Default poly."
|
|
459
|
+
},
|
|
460
|
+
"curveResolution": {
|
|
461
|
+
"type": "integer",
|
|
462
|
+
"minimum": 1,
|
|
463
|
+
"maximum": 64
|
|
464
|
+
},
|
|
465
|
+
"bevelResolution": {
|
|
466
|
+
"type": "integer",
|
|
467
|
+
"minimum": 0,
|
|
468
|
+
"maximum": 16
|
|
469
|
+
},
|
|
470
|
+
"height": {
|
|
471
|
+
"$ref": "#/$defs/positiveNumber"
|
|
472
|
+
},
|
|
473
|
+
"wallThickness": {
|
|
474
|
+
"$ref": "#/$defs/positiveNumber"
|
|
475
|
+
},
|
|
476
|
+
"baseThickness": {
|
|
477
|
+
"$ref": "#/$defs/positiveNumber"
|
|
478
|
+
},
|
|
479
|
+
"footRound": {
|
|
480
|
+
"$ref": "#/$defs/positiveNumber"
|
|
481
|
+
},
|
|
482
|
+
"handleRadius": {
|
|
483
|
+
"$ref": "#/$defs/positiveNumber"
|
|
484
|
+
},
|
|
485
|
+
"handleLower": {
|
|
486
|
+
"$ref": "#/$defs/positiveNumber"
|
|
487
|
+
},
|
|
488
|
+
"handleUpper": {
|
|
489
|
+
"$ref": "#/$defs/positiveNumber"
|
|
490
|
+
},
|
|
491
|
+
"rootRadius": {
|
|
492
|
+
"$ref": "#/$defs/positiveNumber"
|
|
493
|
+
},
|
|
494
|
+
"rootLength": {
|
|
495
|
+
"$ref": "#/$defs/positiveNumber"
|
|
496
|
+
},
|
|
497
|
+
"sectionSegments": {
|
|
498
|
+
"type": "integer",
|
|
499
|
+
"minimum": 32,
|
|
500
|
+
"maximum": 96
|
|
501
|
+
},
|
|
502
|
+
"handleSegments": {
|
|
503
|
+
"type": "integer",
|
|
504
|
+
"minimum": 24,
|
|
505
|
+
"maximum": 128
|
|
506
|
+
},
|
|
507
|
+
"rootSegments": {
|
|
508
|
+
"type": "integer",
|
|
509
|
+
"minimum": 8,
|
|
510
|
+
"maximum": 48
|
|
511
|
+
},
|
|
512
|
+
"wallRows": {
|
|
513
|
+
"type": "integer",
|
|
514
|
+
"minimum": 16,
|
|
515
|
+
"maximum": 64
|
|
516
|
+
},
|
|
517
|
+
"rootTension": {
|
|
518
|
+
"type": "number",
|
|
519
|
+
"minimum": 1,
|
|
520
|
+
"maximum": 2.5,
|
|
521
|
+
"description": "Dimensionless scale of both endpoint tangent speeds for the quintic attachment. Missing or 1 preserves the original surface. Values above 1.5 require the extended recipe capability. Native output validation still applies."
|
|
303
522
|
}
|
|
304
|
-
}
|
|
523
|
+
},
|
|
524
|
+
"description": "Deterministic procedural geometry. Lathe revolves a radius/height profile; handled_cup constructs a closed cup with shared-boundary flared handle roots. Coupled parameter constraints are checked before generation and the discrete output is validated."
|
|
305
525
|
},
|
|
306
526
|
"entity": {
|
|
307
527
|
"type": "object",
|
|
@@ -358,6 +578,18 @@
|
|
|
358
578
|
},
|
|
359
579
|
"visible": {
|
|
360
580
|
"type": "boolean"
|
|
581
|
+
},
|
|
582
|
+
"modifiers": {
|
|
583
|
+
"type": "array",
|
|
584
|
+
"maxItems": 8,
|
|
585
|
+
"items": {
|
|
586
|
+
"$ref": "#/$defs/modelModifier"
|
|
587
|
+
},
|
|
588
|
+
"description": "Ordered mesh operations, applied before animation and simulation. Boolean dependencies compile before their consumers. Each participating entity must contain exactly one mesh."
|
|
589
|
+
},
|
|
590
|
+
"materialBindings": {
|
|
591
|
+
"$ref": "#/$defs/materialBindings",
|
|
592
|
+
"description": "Asset mesh part overrides, preserving original slots and face indices. Part-wide overrides precede slot-specific overrides."
|
|
361
593
|
}
|
|
362
594
|
}
|
|
363
595
|
},
|
|
@@ -533,7 +765,9 @@
|
|
|
533
765
|
"baseColor.b",
|
|
534
766
|
"emissionColor.r",
|
|
535
767
|
"emissionColor.g",
|
|
536
|
-
"emissionColor.b"
|
|
768
|
+
"emissionColor.b",
|
|
769
|
+
"anisotropic",
|
|
770
|
+
"anisotropicRotation"
|
|
537
771
|
],
|
|
538
772
|
"description": "The channel to animate. Transform channels apply to entities and cameras; material parameters apply to materials and use the same names `material.parameter.update` takes."
|
|
539
773
|
},
|
|
@@ -832,6 +1066,12 @@
|
|
|
832
1066
|
},
|
|
833
1067
|
"texture": {
|
|
834
1068
|
"$ref": "#/$defs/proceduralTexture"
|
|
1069
|
+
},
|
|
1070
|
+
"images": {
|
|
1071
|
+
"$ref": "#/$defs/materialImages"
|
|
1072
|
+
},
|
|
1073
|
+
"tangent": {
|
|
1074
|
+
"$ref": "#/$defs/materialTangent"
|
|
835
1075
|
}
|
|
836
1076
|
}
|
|
837
1077
|
}
|
|
@@ -865,7 +1105,9 @@
|
|
|
865
1105
|
"emissionColor",
|
|
866
1106
|
"emissionStrength",
|
|
867
1107
|
"coatWeight",
|
|
868
|
-
"transmissionWeight"
|
|
1108
|
+
"transmissionWeight",
|
|
1109
|
+
"anisotropic",
|
|
1110
|
+
"anisotropicRotation"
|
|
869
1111
|
]
|
|
870
1112
|
},
|
|
871
1113
|
"value": {
|
|
@@ -1265,7 +1507,12 @@
|
|
|
1265
1507
|
"fbx",
|
|
1266
1508
|
"obj",
|
|
1267
1509
|
"usd",
|
|
1268
|
-
"blend"
|
|
1510
|
+
"blend",
|
|
1511
|
+
"png",
|
|
1512
|
+
"jpg",
|
|
1513
|
+
"jpeg",
|
|
1514
|
+
"hdr",
|
|
1515
|
+
"exr"
|
|
1269
1516
|
]
|
|
1270
1517
|
},
|
|
1271
1518
|
"path": {
|
|
@@ -1300,8 +1547,497 @@
|
|
|
1300
1547
|
"$ref": "#/$defs/id"
|
|
1301
1548
|
}
|
|
1302
1549
|
}
|
|
1303
|
-
}
|
|
1304
|
-
|
|
1550
|
+
},
|
|
1551
|
+
{
|
|
1552
|
+
"type": "object",
|
|
1553
|
+
"additionalProperties": false,
|
|
1554
|
+
"required": [
|
|
1555
|
+
"op",
|
|
1556
|
+
"entityId",
|
|
1557
|
+
"generator"
|
|
1558
|
+
],
|
|
1559
|
+
"properties": {
|
|
1560
|
+
"op": {
|
|
1561
|
+
"type": "string",
|
|
1562
|
+
"const": "entity.generator.set"
|
|
1563
|
+
},
|
|
1564
|
+
"entityId": {
|
|
1565
|
+
"$ref": "#/$defs/id"
|
|
1566
|
+
},
|
|
1567
|
+
"generator": {
|
|
1568
|
+
"$ref": "#/$defs/generator"
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
},
|
|
1572
|
+
{
|
|
1573
|
+
"type": "object",
|
|
1574
|
+
"additionalProperties": false,
|
|
1575
|
+
"required": [
|
|
1576
|
+
"op",
|
|
1577
|
+
"entityId",
|
|
1578
|
+
"modifiers"
|
|
1579
|
+
],
|
|
1580
|
+
"properties": {
|
|
1581
|
+
"op": {
|
|
1582
|
+
"type": "string",
|
|
1583
|
+
"const": "entity.modifiers.set"
|
|
1584
|
+
},
|
|
1585
|
+
"entityId": {
|
|
1586
|
+
"$ref": "#/$defs/id"
|
|
1587
|
+
},
|
|
1588
|
+
"modifiers": {
|
|
1589
|
+
"type": "array",
|
|
1590
|
+
"maxItems": 8,
|
|
1591
|
+
"items": {
|
|
1592
|
+
"$ref": "#/$defs/modelModifier"
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
"type": "object",
|
|
1599
|
+
"additionalProperties": false,
|
|
1600
|
+
"required": [
|
|
1601
|
+
"op",
|
|
1602
|
+
"materialId",
|
|
1603
|
+
"images"
|
|
1604
|
+
],
|
|
1605
|
+
"properties": {
|
|
1606
|
+
"op": {
|
|
1607
|
+
"type": "string",
|
|
1608
|
+
"const": "material.images.set"
|
|
1609
|
+
},
|
|
1610
|
+
"materialId": {
|
|
1611
|
+
"$ref": "#/$defs/id"
|
|
1612
|
+
},
|
|
1613
|
+
"images": {
|
|
1614
|
+
"oneOf": [
|
|
1615
|
+
{
|
|
1616
|
+
"$ref": "#/$defs/materialImages"
|
|
1617
|
+
},
|
|
1618
|
+
{
|
|
1619
|
+
"type": "null"
|
|
1620
|
+
}
|
|
1621
|
+
]
|
|
1622
|
+
}
|
|
1623
|
+
}
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
"type": "object",
|
|
1627
|
+
"additionalProperties": false,
|
|
1628
|
+
"required": [
|
|
1629
|
+
"op",
|
|
1630
|
+
"entityId",
|
|
1631
|
+
"materialBindings"
|
|
1632
|
+
],
|
|
1633
|
+
"properties": {
|
|
1634
|
+
"op": {
|
|
1635
|
+
"const": "entity.materialBindings.set"
|
|
1636
|
+
},
|
|
1637
|
+
"entityId": {
|
|
1638
|
+
"$ref": "#/$defs/id"
|
|
1639
|
+
},
|
|
1640
|
+
"materialBindings": {
|
|
1641
|
+
"$ref": "#/$defs/materialBindings"
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"type": "object",
|
|
1647
|
+
"additionalProperties": false,
|
|
1648
|
+
"required": [
|
|
1649
|
+
"op",
|
|
1650
|
+
"materialId",
|
|
1651
|
+
"tangent"
|
|
1652
|
+
],
|
|
1653
|
+
"properties": {
|
|
1654
|
+
"op": {
|
|
1655
|
+
"const": "material.tangent.set"
|
|
1656
|
+
},
|
|
1657
|
+
"materialId": {
|
|
1658
|
+
"$ref": "#/$defs/id"
|
|
1659
|
+
},
|
|
1660
|
+
"tangent": {
|
|
1661
|
+
"oneOf": [
|
|
1662
|
+
{
|
|
1663
|
+
"$ref": "#/$defs/materialTangent"
|
|
1664
|
+
},
|
|
1665
|
+
{
|
|
1666
|
+
"type": "null"
|
|
1667
|
+
}
|
|
1668
|
+
]
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
},
|
|
1672
|
+
{
|
|
1673
|
+
"type": "object",
|
|
1674
|
+
"additionalProperties": false,
|
|
1675
|
+
"required": [
|
|
1676
|
+
"op",
|
|
1677
|
+
"goal",
|
|
1678
|
+
"referenceImages"
|
|
1679
|
+
],
|
|
1680
|
+
"properties": {
|
|
1681
|
+
"op": {
|
|
1682
|
+
"const": "project.brief.set"
|
|
1683
|
+
},
|
|
1684
|
+
"goal": {
|
|
1685
|
+
"type": "string",
|
|
1686
|
+
"maxLength": 2000
|
|
1687
|
+
},
|
|
1688
|
+
"referenceImages": {
|
|
1689
|
+
"$ref": "#/$defs/referenceImages"
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
},
|
|
1693
|
+
{
|
|
1694
|
+
"type": "object",
|
|
1695
|
+
"additionalProperties": false,
|
|
1696
|
+
"required": [
|
|
1697
|
+
"op",
|
|
1698
|
+
"entityId"
|
|
1699
|
+
],
|
|
1700
|
+
"properties": {
|
|
1701
|
+
"op": {
|
|
1702
|
+
"const": "project.reviewSubject.set"
|
|
1703
|
+
},
|
|
1704
|
+
"entityId": {
|
|
1705
|
+
"oneOf": [
|
|
1706
|
+
{
|
|
1707
|
+
"$ref": "#/$defs/id"
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
"type": "null"
|
|
1711
|
+
}
|
|
1712
|
+
]
|
|
1713
|
+
}
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
]
|
|
1717
|
+
},
|
|
1718
|
+
"modelModifier": {
|
|
1719
|
+
"oneOf": [
|
|
1720
|
+
{
|
|
1721
|
+
"type": "object",
|
|
1722
|
+
"additionalProperties": false,
|
|
1723
|
+
"required": [
|
|
1724
|
+
"type",
|
|
1725
|
+
"thickness"
|
|
1726
|
+
],
|
|
1727
|
+
"properties": {
|
|
1728
|
+
"type": {
|
|
1729
|
+
"const": "solidify"
|
|
1730
|
+
},
|
|
1731
|
+
"thickness": {
|
|
1732
|
+
"type": "number"
|
|
1733
|
+
},
|
|
1734
|
+
"offset": {
|
|
1735
|
+
"type": "number",
|
|
1736
|
+
"minimum": -1,
|
|
1737
|
+
"maximum": 1
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
},
|
|
1741
|
+
{
|
|
1742
|
+
"type": "object",
|
|
1743
|
+
"additionalProperties": false,
|
|
1744
|
+
"required": [
|
|
1745
|
+
"type",
|
|
1746
|
+
"axis"
|
|
1747
|
+
],
|
|
1748
|
+
"properties": {
|
|
1749
|
+
"type": {
|
|
1750
|
+
"const": "mirror"
|
|
1751
|
+
},
|
|
1752
|
+
"axis": {
|
|
1753
|
+
"type": "string",
|
|
1754
|
+
"enum": [
|
|
1755
|
+
"x",
|
|
1756
|
+
"y",
|
|
1757
|
+
"z"
|
|
1758
|
+
]
|
|
1759
|
+
},
|
|
1760
|
+
"merge": {
|
|
1761
|
+
"type": "boolean"
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"type": "object",
|
|
1767
|
+
"additionalProperties": false,
|
|
1768
|
+
"required": [
|
|
1769
|
+
"type",
|
|
1770
|
+
"count",
|
|
1771
|
+
"offset"
|
|
1772
|
+
],
|
|
1773
|
+
"properties": {
|
|
1774
|
+
"type": {
|
|
1775
|
+
"const": "array"
|
|
1776
|
+
},
|
|
1777
|
+
"count": {
|
|
1778
|
+
"type": "integer",
|
|
1779
|
+
"minimum": 2,
|
|
1780
|
+
"maximum": 64
|
|
1781
|
+
},
|
|
1782
|
+
"offset": {
|
|
1783
|
+
"$ref": "#/$defs/vec3"
|
|
1784
|
+
}
|
|
1785
|
+
}
|
|
1786
|
+
},
|
|
1787
|
+
{
|
|
1788
|
+
"type": "object",
|
|
1789
|
+
"additionalProperties": false,
|
|
1790
|
+
"required": [
|
|
1791
|
+
"type",
|
|
1792
|
+
"operation",
|
|
1793
|
+
"targetEntityId"
|
|
1794
|
+
],
|
|
1795
|
+
"properties": {
|
|
1796
|
+
"type": {
|
|
1797
|
+
"const": "boolean"
|
|
1798
|
+
},
|
|
1799
|
+
"operation": {
|
|
1800
|
+
"type": "string",
|
|
1801
|
+
"enum": [
|
|
1802
|
+
"union",
|
|
1803
|
+
"difference",
|
|
1804
|
+
"intersect"
|
|
1805
|
+
]
|
|
1806
|
+
},
|
|
1807
|
+
"targetEntityId": {
|
|
1808
|
+
"$ref": "#/$defs/id"
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
},
|
|
1812
|
+
{
|
|
1813
|
+
"type": "object",
|
|
1814
|
+
"additionalProperties": false,
|
|
1815
|
+
"required": [
|
|
1816
|
+
"type",
|
|
1817
|
+
"width"
|
|
1818
|
+
],
|
|
1819
|
+
"properties": {
|
|
1820
|
+
"type": {
|
|
1821
|
+
"const": "bevel"
|
|
1822
|
+
},
|
|
1823
|
+
"width": {
|
|
1824
|
+
"type": "number",
|
|
1825
|
+
"exclusiveMinimum": 0
|
|
1826
|
+
},
|
|
1827
|
+
"segments": {
|
|
1828
|
+
"type": "integer",
|
|
1829
|
+
"minimum": 1,
|
|
1830
|
+
"maximum": 16
|
|
1831
|
+
},
|
|
1832
|
+
"angle": {
|
|
1833
|
+
"type": "number",
|
|
1834
|
+
"minimum": 0,
|
|
1835
|
+
"maximum": 180
|
|
1836
|
+
},
|
|
1837
|
+
"miterInner": {
|
|
1838
|
+
"type": "string",
|
|
1839
|
+
"enum": [
|
|
1840
|
+
"arc",
|
|
1841
|
+
"sharp"
|
|
1842
|
+
],
|
|
1843
|
+
"default": "arc",
|
|
1844
|
+
"description": "Inner corner join for this bevel modifier. Omitted values preserve the existing arc behavior."
|
|
1845
|
+
}
|
|
1846
|
+
}
|
|
1847
|
+
}
|
|
1848
|
+
]
|
|
1849
|
+
},
|
|
1850
|
+
"imageBinding": {
|
|
1851
|
+
"type": "object",
|
|
1852
|
+
"additionalProperties": false,
|
|
1853
|
+
"required": [
|
|
1854
|
+
"assetId"
|
|
1855
|
+
],
|
|
1856
|
+
"properties": {
|
|
1857
|
+
"assetId": {
|
|
1858
|
+
"$ref": "#/$defs/id"
|
|
1859
|
+
},
|
|
1860
|
+
"scale": {
|
|
1861
|
+
"$ref": "#/$defs/vec3"
|
|
1862
|
+
},
|
|
1863
|
+
"offset": {
|
|
1864
|
+
"$ref": "#/$defs/vec3"
|
|
1865
|
+
},
|
|
1866
|
+
"uvMap": {
|
|
1867
|
+
"type": "string",
|
|
1868
|
+
"minLength": 1,
|
|
1869
|
+
"maxLength": 64
|
|
1870
|
+
},
|
|
1871
|
+
"channel": {
|
|
1872
|
+
"type": "string",
|
|
1873
|
+
"enum": [
|
|
1874
|
+
"r",
|
|
1875
|
+
"g",
|
|
1876
|
+
"b",
|
|
1877
|
+
"a"
|
|
1878
|
+
]
|
|
1879
|
+
},
|
|
1880
|
+
"strength": {
|
|
1881
|
+
"type": "number",
|
|
1882
|
+
"minimum": 0,
|
|
1883
|
+
"maximum": 10
|
|
1884
|
+
}
|
|
1885
|
+
}
|
|
1886
|
+
},
|
|
1887
|
+
"materialImages": {
|
|
1888
|
+
"type": "object",
|
|
1889
|
+
"additionalProperties": false,
|
|
1890
|
+
"properties": {
|
|
1891
|
+
"baseColor": {
|
|
1892
|
+
"$ref": "#/$defs/imageBinding"
|
|
1893
|
+
},
|
|
1894
|
+
"roughness": {
|
|
1895
|
+
"$ref": "#/$defs/imageBinding"
|
|
1896
|
+
},
|
|
1897
|
+
"metallic": {
|
|
1898
|
+
"$ref": "#/$defs/imageBinding"
|
|
1899
|
+
},
|
|
1900
|
+
"normal": {
|
|
1901
|
+
"$ref": "#/$defs/imageBinding"
|
|
1902
|
+
},
|
|
1903
|
+
"alpha": {
|
|
1904
|
+
"$ref": "#/$defs/imageBinding"
|
|
1905
|
+
},
|
|
1906
|
+
"emissionColor": {
|
|
1907
|
+
"$ref": "#/$defs/imageBinding"
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
},
|
|
1911
|
+
"materialBinding": {
|
|
1912
|
+
"type": "object",
|
|
1913
|
+
"additionalProperties": false,
|
|
1914
|
+
"required": [
|
|
1915
|
+
"partId",
|
|
1916
|
+
"materialId"
|
|
1917
|
+
],
|
|
1918
|
+
"properties": {
|
|
1919
|
+
"partId": {
|
|
1920
|
+
"type": "string",
|
|
1921
|
+
"minLength": 2,
|
|
1922
|
+
"maxLength": 4096,
|
|
1923
|
+
"pattern": "^/",
|
|
1924
|
+
"description": "Exact source path returned in assetParts; JSON Pointer escaped segments."
|
|
1925
|
+
},
|
|
1926
|
+
"slotIndex": {
|
|
1927
|
+
"type": "integer",
|
|
1928
|
+
"minimum": 0,
|
|
1929
|
+
"description": "Original material slot index. Omit to replace every slot of this mesh part."
|
|
1930
|
+
},
|
|
1931
|
+
"materialId": {
|
|
1932
|
+
"$ref": "#/$defs/id"
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1935
|
+
},
|
|
1936
|
+
"materialBindings": {
|
|
1937
|
+
"type": "array",
|
|
1938
|
+
"maxItems": 128,
|
|
1939
|
+
"items": {
|
|
1940
|
+
"$ref": "#/$defs/materialBinding"
|
|
1941
|
+
}
|
|
1942
|
+
},
|
|
1943
|
+
"materialTangent": {
|
|
1944
|
+
"oneOf": [
|
|
1945
|
+
{
|
|
1946
|
+
"type": "object",
|
|
1947
|
+
"additionalProperties": false,
|
|
1948
|
+
"required": [
|
|
1949
|
+
"mode",
|
|
1950
|
+
"uvMap"
|
|
1951
|
+
],
|
|
1952
|
+
"properties": {
|
|
1953
|
+
"mode": {
|
|
1954
|
+
"const": "uv"
|
|
1955
|
+
},
|
|
1956
|
+
"uvMap": {
|
|
1957
|
+
"type": "string",
|
|
1958
|
+
"minLength": 1,
|
|
1959
|
+
"maxLength": 63
|
|
1960
|
+
}
|
|
1961
|
+
},
|
|
1962
|
+
"description": "Use the tangent along the named UV map U direction. The map must exist on every mesh face using this material."
|
|
1963
|
+
},
|
|
1964
|
+
{
|
|
1965
|
+
"type": "object",
|
|
1966
|
+
"additionalProperties": false,
|
|
1967
|
+
"required": [
|
|
1968
|
+
"mode",
|
|
1969
|
+
"axis"
|
|
1970
|
+
],
|
|
1971
|
+
"properties": {
|
|
1972
|
+
"mode": {
|
|
1973
|
+
"const": "radial"
|
|
1974
|
+
},
|
|
1975
|
+
"axis": {
|
|
1976
|
+
"enum": [
|
|
1977
|
+
"x",
|
|
1978
|
+
"y",
|
|
1979
|
+
"z"
|
|
1980
|
+
]
|
|
1981
|
+
}
|
|
1982
|
+
},
|
|
1983
|
+
"description": "Blender cylindrical-projection tangent around the selected object-local axis; no UV map required."
|
|
1984
|
+
}
|
|
1985
|
+
]
|
|
1986
|
+
},
|
|
1987
|
+
"referenceImage": {
|
|
1988
|
+
"type": "object",
|
|
1989
|
+
"additionalProperties": false,
|
|
1990
|
+
"required": [
|
|
1991
|
+
"id",
|
|
1992
|
+
"assetId",
|
|
1993
|
+
"sha256",
|
|
1994
|
+
"label",
|
|
1995
|
+
"purposes"
|
|
1996
|
+
],
|
|
1997
|
+
"properties": {
|
|
1998
|
+
"id": {
|
|
1999
|
+
"$ref": "#/$defs/id"
|
|
2000
|
+
},
|
|
2001
|
+
"assetId": {
|
|
2002
|
+
"$ref": "#/$defs/id"
|
|
2003
|
+
},
|
|
2004
|
+
"sha256": {
|
|
2005
|
+
"type": "string",
|
|
2006
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
2007
|
+
},
|
|
2008
|
+
"label": {
|
|
2009
|
+
"type": "string",
|
|
2010
|
+
"minLength": 1,
|
|
2011
|
+
"maxLength": 160
|
|
2012
|
+
},
|
|
2013
|
+
"purposes": {
|
|
2014
|
+
"type": "array",
|
|
2015
|
+
"minItems": 1,
|
|
2016
|
+
"maxItems": 4,
|
|
2017
|
+
"items": {
|
|
2018
|
+
"type": "string",
|
|
2019
|
+
"enum": [
|
|
2020
|
+
"geometry",
|
|
2021
|
+
"materials",
|
|
2022
|
+
"lighting",
|
|
2023
|
+
"goalFit"
|
|
2024
|
+
]
|
|
2025
|
+
},
|
|
2026
|
+
"description": "Distinct review dimensions this reference informs; duplicate purposes are rejected semantically."
|
|
2027
|
+
},
|
|
2028
|
+
"notes": {
|
|
2029
|
+
"type": "string",
|
|
2030
|
+
"maxLength": 1000
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
},
|
|
2034
|
+
"referenceImages": {
|
|
2035
|
+
"type": "array",
|
|
2036
|
+
"maxItems": 4,
|
|
2037
|
+
"items": {
|
|
2038
|
+
"$ref": "#/$defs/referenceImage"
|
|
2039
|
+
},
|
|
2040
|
+
"description": "Visual review references only. Each id is unique and points to a declared, hash-pinned PNG/JPEG project asset; this does not apply an object texture or environment map."
|
|
1305
2041
|
}
|
|
1306
2042
|
}
|
|
1307
2043
|
}
|