@womp/spark-agent 2.2.0 → 3.0.0

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.
@@ -1,979 +1,979 @@
1
- {
2
- "types": [
3
- "Int",
4
- "Float",
5
- "Bool",
6
- "Vec3",
7
- "Geometry",
8
- "Int[]",
9
- "Float[]",
10
- "Vec3[]"
11
- ],
12
- "enums": [
13
- {
14
- "name": "BooleanOp",
15
- "values": [
16
- "Subtract",
17
- "Union",
18
- "Brush",
19
- "Intersect"
20
- ]
21
- },
22
- {
23
- "name": "PrimitiveType",
24
- "values": [
25
- "Sphere",
26
- "Cylinder",
27
- "Box",
28
- "Cone",
29
- "Torus",
30
- "Link",
31
- "Hexagon",
32
- "Triangular",
33
- "Octahedron",
34
- "Pyramid",
35
- "Glyph",
36
- "Field",
37
- "Ellipsoid",
38
- "Capsule"
39
- ]
40
- },
41
- {
42
- "name": "GeoNodeMathOp",
43
- "values": [
44
- "Add",
45
- "Subtract",
46
- "Multiply",
47
- "Divide",
48
- "Sine",
49
- "Cosine",
50
- "Length",
51
- "Round",
52
- "Floor",
53
- "Ceil",
54
- "Modulo",
55
- "Fraction",
56
- "Absolute",
57
- "Minimum",
58
- "Maximum",
59
- "Power",
60
- "DotProduct",
61
- "CrossProduct",
62
- "Tangent",
63
- "Arcsine",
64
- "Arccosine",
65
- "Arctangent",
66
- "ToRadians",
67
- "ToDegrees"
68
- ]
69
- },
70
- {
71
- "name": "GeoNodeRemapRangeOp",
72
- "values": [
73
- "Linear"
74
- ]
75
- },
76
- {
77
- "name": "LatticeType",
78
- "values": [
79
- "Gyroid",
80
- "Schwarz",
81
- "Diamond",
82
- "OctetBeam",
83
- "BCCBeam",
84
- "CubicBeam",
85
- "Spheres"
86
- ]
87
- }
88
- ],
89
- "casts": [
90
- {
91
- "from": "Int",
92
- "to": "Float",
93
- "desc": "promote"
94
- },
95
- {
96
- "from": "Int",
97
- "to": "Vec3",
98
- "desc": "splat: x -> Vec3(x,x,x)"
99
- },
100
- {
101
- "from": "Int",
102
- "to": "Vec3[]",
103
- "desc": "splat then wrap: x -> [Vec3(x,x,x)]"
104
- },
105
- {
106
- "from": "Float",
107
- "to": "Vec3",
108
- "desc": "splat: x -> Vec3(x,x,x)"
109
- },
110
- {
111
- "from": "Float",
112
- "to": "Vec3[]",
113
- "desc": "splat then wrap: x -> [Vec3(x,x,x)]"
114
- },
115
- {
116
- "from": "Vec3",
117
- "to": "Vec3[]",
118
- "desc": "wrap: v -> [v]"
119
- },
120
- {
121
- "from": "Float[]",
122
- "to": "Vec3[]",
123
- "desc": "splat each: [a,b] -> [Vec3(a,a,a),Vec3(b,b,b)]"
124
- },
125
- {
126
- "from": "Vec3[]",
127
- "to": "Float[]",
128
- "desc": "extract X: [Vec3(a,b,c)] -> [a]"
129
- },
130
- {
131
- "from": "Vec3[]",
132
- "to": "Vec3",
133
- "desc": "take first element"
134
- },
135
- {
136
- "from": "Float",
137
- "to": "Int",
138
- "desc": "truncate"
139
- },
140
- {
141
- "from": "Float[]",
142
- "to": "Int",
143
- "desc": "take first element + truncate"
144
- },
145
- {
146
- "from": "Int[]",
147
- "to": "Float[]",
148
- "desc": "promote each"
149
- }
150
- ],
151
- "nodes": [
152
- {
153
- "name": "Primitive",
154
- "type": "541746723",
155
- "inputs": [
156
- {
157
- "name": "Type",
158
- "type": "PrimitiveType",
159
- "enum": "PrimitiveType"
160
- },
161
- {
162
- "name": "Position",
163
- "type": "Vec3",
164
- "desc": "center in world space"
165
- },
166
- {
167
- "name": "Rotation",
168
- "type": "Vec3"
169
- },
170
- {
171
- "name": "Size",
172
- "type": "Vec3",
173
- "desc": [
174
- "Size interpretation per Type:",
175
- " -Sphere: x=width (uniform), yz unused.",
176
- " -Ellipsoid: x=width, y=height, z=depth.",
177
- " -Cylinder: x=width, y=height.",
178
- " -Capsule: x=width, y=height.",
179
- " -Box: x=width, y=height, z=depth.",
180
- " -Cone: x=base width, y=height.",
181
- " -Torus: x=outer diameter, y=tube thickness.",
182
- " -Link: x=width, y=height, z=tube thickness.",
183
- " -Hexagon: x=width, y=height (extrusion).",
184
- " -Triangular: x=width, y=height, z=depth.",
185
- " -Octahedron: x=size (uniform), yz unused.",
186
- " -Pyramid: x=base width, y=height."
187
- ]
188
- },
189
- {
190
- "name": "Unused",
191
- "type": "Float",
192
- "optional": true
193
- },
194
- {
195
- "name": "Roundness",
196
- "type": "Float",
197
- "desc": "edge roundness ratio [0,1]"
198
- }
199
- ],
200
- "outputs": [
201
- {
202
- "name": "Geometry",
203
- "type": "Geometry"
204
- }
205
- ]
206
- },
207
- {
208
- "name": "InstancePrimitive",
209
- "type": "2042784705",
210
- "inputs": [
211
- {
212
- "name": "Geometry",
213
- "type": "Geometry"
214
- },
215
- {
216
- "name": "Positions",
217
- "type": "Vec3[]",
218
- "lift": "len1"
219
- },
220
- {
221
- "name": "Rotations",
222
- "type": "Vec3[]",
223
- "lift": "len1"
224
- },
225
- {
226
- "name": "Scales",
227
- "type": "Vec3[]",
228
- "lift": "len1"
229
- }
230
- ],
231
- "outputs": [
232
- {
233
- "name": "Geometry",
234
- "type": "Geometry"
235
- }
236
- ],
237
- "semantics": [
238
- "zip-by-max with repeat-first indexing.",
239
- "defaults: Scales=Vec3(1,1,1).",
240
- "Emit one instance per index."
241
- ]
242
- },
243
- {
244
- "name": "Boolean",
245
- "type": "3996326709",
246
- "inputs": [
247
- {
248
- "name": "Operation",
249
- "type": "BooleanOp",
250
- "enum": "BooleanOp"
251
- },
252
- {
253
- "name": "A",
254
- "type": "Geometry"
255
- },
256
- {
257
- "name": "B",
258
- "type": "Geometry"
259
- },
260
- {
261
- "name": "Blend",
262
- "type": "Float",
263
- "desc": [
264
- "Goop: smooth blend where A and B meet; 0.0 = sharp edge.",
265
- "Value is about 26 per mm of blend radius (e.g. 260 for 10 mm). Typical radius: 10-50% of the smaller operand's size."
266
- ]
267
- },
268
- {
269
- "name": "Material_Neutral_Cutout",
270
- "type": "Bool"
271
- }
272
- ],
273
- "outputs": [
274
- {
275
- "name": "Geometry",
276
- "type": "Geometry"
277
- }
278
- ]
279
- },
280
- {
281
- "name": "CombineXYZ",
282
- "type": "795684903",
283
- "inputs": [
284
- {
285
- "name": "X",
286
- "type": "Float[]",
287
- "lift": "len1"
288
- },
289
- {
290
- "name": "Y",
291
- "type": "Float[]",
292
- "lift": "len1"
293
- },
294
- {
295
- "name": "Z",
296
- "type": "Float[]",
297
- "lift": "len1"
298
- }
299
- ],
300
- "outputs": [
301
- {
302
- "name": "XYZ",
303
- "type": "Vec3[]"
304
- }
305
- ],
306
- "semantics": [
307
- "zip-by-max with repeat-first indexing."
308
- ]
309
- },
310
- {
311
- "name": "SeparateXYZ",
312
- "type": "2101815638",
313
- "inputs": [
314
- {
315
- "name": "XYZ",
316
- "type": "Vec3[]",
317
- "lift": "len1"
318
- }
319
- ],
320
- "outputs": [
321
- {
322
- "name": "X",
323
- "type": "Float[]"
324
- },
325
- {
326
- "name": "Y",
327
- "type": "Float[]"
328
- },
329
- {
330
- "name": "Z",
331
- "type": "Float[]"
332
- }
333
- ]
334
- },
335
- {
336
- "name": "MathFloat",
337
- "type": "3979505435",
338
- "inputs": [
339
- {
340
- "name": "Operation",
341
- "type": "GeoNodeMathOp",
342
- "enum": "GeoNodeMathOp"
343
- },
344
- {
345
- "name": "A",
346
- "type": "Float[]",
347
- "lift": "len1"
348
- },
349
- {
350
- "name": "B",
351
- "type": "Float[]",
352
- "lift": "len1"
353
- }
354
- ],
355
- "outputs": [
356
- {
357
- "name": "Result",
358
- "type": "Float[]"
359
- }
360
- ],
361
- "semantics": [
362
- "zip-by-max with repeat-first indexing.",
363
- "Unary ops read A and ignore B.",
364
- "Trig ops take radians.",
365
- "For DotProduct or CrossProduct, use MathVec3."
366
- ]
367
- },
368
- {
369
- "name": "MathVec3",
370
- "type": "3979505435",
371
- "inputs": [
372
- {
373
- "name": "Operation",
374
- "type": "GeoNodeMathOp",
375
- "enum": "GeoNodeMathOp"
376
- },
377
- {
378
- "name": "A",
379
- "type": "Vec3[]",
380
- "lift": "len1"
381
- },
382
- {
383
- "name": "B",
384
- "type": "Vec3[]",
385
- "lift": "len1"
386
- }
387
- ],
388
- "outputs": [
389
- {
390
- "name": "Result",
391
- "type": "Vec3[]"
392
- }
393
- ],
394
- "semantics": [
395
- "zip-by-max with repeat-first indexing.",
396
- "Unary ops read A and ignore B.",
397
- "Trig ops take radians."
398
- ]
399
- },
400
- {
401
- "name": "Range",
402
- "type": "437223984",
403
- "inputs": [
404
- {
405
- "name": "Count",
406
- "type": "Int"
407
- }
408
- ],
409
- "outputs": [
410
- {
411
- "name": "Values",
412
- "type": "Float[]"
413
- }
414
- ],
415
- "semantics": [
416
- "Output length = max(Count,0).",
417
- "Values[i] = float(i) for i in [0,n)."
418
- ]
419
- },
420
- {
421
- "name": "AlignRotationToVector",
422
- "type": "124894945",
423
- "inputs": [
424
- {
425
- "name": "Rotations",
426
- "type": "Vec3[]",
427
- "lift": "len1"
428
- },
429
- {
430
- "name": "Vectors",
431
- "type": "Vec3[]",
432
- "lift": "len1"
433
- }
434
- ],
435
- "outputs": [
436
- {
437
- "name": "AlignedRotations",
438
- "type": "Vec3[]"
439
- }
440
- ],
441
- "semantics": [
442
- "zip-by-max with repeat-first indexing.",
443
- "defaults: Vectors=Vec3(0,0,1).",
444
- "Aligns local +Z to each Vector via shortest-arc rotation."
445
- ]
446
- },
447
- {
448
- "name": "TransformGeometry",
449
- "type": "3656718715",
450
- "inputs": [
451
- {
452
- "name": "Geometry",
453
- "type": "Geometry"
454
- },
455
- {
456
- "name": "Positions",
457
- "type": "Vec3[]",
458
- "lift": "len1"
459
- },
460
- {
461
- "name": "Rotations",
462
- "type": "Vec3[]",
463
- "lift": "len1"
464
- },
465
- {
466
- "name": "Scales",
467
- "type": "Vec3[]",
468
- "lift": "len1"
469
- }
470
- ],
471
- "outputs": [
472
- {
473
- "name": "Geometry",
474
- "type": "Geometry"
475
- }
476
- ],
477
- "semantics": [
478
- "per-primitive with repeat-first indexing.",
479
- "defaults: Scales=Vec3(1,1,1).",
480
- "Does NOT duplicate geometry (use InstancePrimitive to duplicate)."
481
- ]
482
- },
483
- {
484
- "name": "SwitchGeometry",
485
- "type": "251928043",
486
- "inputs": [
487
- {
488
- "name": "Index",
489
- "type": "Int"
490
- },
491
- {
492
- "name": "A",
493
- "type": "Geometry"
494
- },
495
- {
496
- "name": "B",
497
- "type": "Geometry"
498
- },
499
- {
500
- "name": "C",
501
- "type": "Geometry"
502
- },
503
- {
504
- "name": "D",
505
- "type": "Geometry"
506
- }
507
- ],
508
- "outputs": [
509
- {
510
- "name": "Geometry",
511
- "type": "Geometry"
512
- }
513
- ],
514
- "semantics": [
515
- "Outputs geometry at slot Index (0=A, 1=B, 2=C, 3=D).",
516
- "Returns empty geometry if Index is out of range [0,3]."
517
- ]
518
- },
519
- {
520
- "name": "LatticeGeometry",
521
- "type": "2831894357",
522
- "inputs": [
523
- {
524
- "name": "Geometry",
525
- "type": "Geometry"
526
- },
527
- {
528
- "name": "Type",
529
- "type": "LatticeType",
530
- "enum": "LatticeType"
531
- },
532
- {
533
- "name": "Position",
534
- "type": "Vec3",
535
- "desc": "lattice cell placement"
536
- },
537
- {
538
- "name": "Rotation",
539
- "type": "Vec3",
540
- "desc": "lattice cell orientation"
541
- },
542
- {
543
- "name": "Scale",
544
- "type": "Float",
545
- "desc": "uniform cell size"
546
- },
547
- {
548
- "name": "Thickness",
549
- "type": "Float",
550
- "desc": "strut thickness"
551
- },
552
- {
553
- "name": "WallThickness",
554
- "type": "Float",
555
- "desc": "outer wall thickness"
556
- }
557
- ],
558
- "outputs": [
559
- {
560
- "name": "Geometry",
561
- "type": "Geometry"
562
- }
563
- ],
564
- "semantics": [
565
- "Fills geometry with a lattice infill pattern."
566
- ]
567
- },
568
- {
569
- "name": "RandomPointsInVolume",
570
- "type": "662065381",
571
- "inputs": [
572
- {
573
- "name": "Geometry",
574
- "type": "Geometry"
575
- },
576
- {
577
- "name": "Density",
578
- "type": "Float",
579
- "desc": "points per unit volume, min 1.0"
580
- },
581
- {
582
- "name": "AABBMin",
583
- "type": "Vec3"
584
- },
585
- {
586
- "name": "AABBMax",
587
- "type": "Vec3"
588
- },
589
- {
590
- "name": "Seed",
591
- "type": "Int"
592
- }
593
- ],
594
- "outputs": [
595
- {
596
- "name": "Positions",
597
- "type": "Vec3[]"
598
- }
599
- ],
600
- "semantics": [
601
- "Scatters random points inside the SDF volume."
602
- ]
603
- },
604
- {
605
- "name": "GridPointsInVolume",
606
- "type": "3453342624",
607
- "inputs": [
608
- {
609
- "name": "Geometry",
610
- "type": "Geometry"
611
- },
612
- {
613
- "name": "Spacing",
614
- "type": "Vec3",
615
- "desc": "min 1.0 per component"
616
- },
617
- {
618
- "name": "AABBMin",
619
- "type": "Vec3"
620
- },
621
- {
622
- "name": "AABBMax",
623
- "type": "Vec3"
624
- }
625
- ],
626
- "outputs": [
627
- {
628
- "name": "Positions",
629
- "type": "Vec3[]"
630
- }
631
- ],
632
- "semantics": [
633
- "Places grid-spaced points inside the SDF volume.",
634
- "Only points inside the volume are output."
635
- ]
636
- },
637
- {
638
- "name": "RandomPointsOnSurface",
639
- "type": "2235454654",
640
- "inputs": [
641
- {
642
- "name": "Geometry",
643
- "type": "Geometry"
644
- },
645
- {
646
- "name": "Density",
647
- "type": "Float"
648
- },
649
- {
650
- "name": "Seed",
651
- "type": "Int"
652
- }
653
- ],
654
- "outputs": [
655
- {
656
- "name": "Positions",
657
- "type": "Vec3[]"
658
- },
659
- {
660
- "name": "Normals",
661
- "type": "Vec3[]"
662
- }
663
- ],
664
- "semantics": [
665
- "Scatters random points on the surface of Geometry."
666
- ]
667
- },
668
- {
669
- "name": "PointGrid3D",
670
- "type": "3992787817",
671
- "inputs": [
672
- {
673
- "name": "Size",
674
- "type": "Vec3",
675
- "desc": "full extent per axis"
676
- },
677
- {
678
- "name": "VerticesX",
679
- "type": "Int"
680
- },
681
- {
682
- "name": "VerticesY",
683
- "type": "Int"
684
- },
685
- {
686
- "name": "VerticesZ",
687
- "type": "Int"
688
- }
689
- ],
690
- "outputs": [
691
- {
692
- "name": "Positions",
693
- "type": "Vec3[]"
694
- }
695
- ],
696
- "semantics": [
697
- "Centered at origin.",
698
- "Total points = VerticesX*VerticesY*VerticesZ.",
699
- "Evenly spaced within [-Size/2, +Size/2]."
700
- ]
701
- },
702
- {
703
- "name": "MapRange",
704
- "type": "789012436",
705
- "inputs": [
706
- {
707
- "name": "Mode",
708
- "type": "GeoNodeRemapRangeOp",
709
- "enum": "GeoNodeRemapRangeOp"
710
- },
711
- {
712
- "name": "Clamp",
713
- "type": "Bool",
714
- "desc": "when true, clamps to [ToMin,ToMax]"
715
- },
716
- {
717
- "name": "Value",
718
- "type": "Vec3[]",
719
- "lift": "len1"
720
- },
721
- {
722
- "name": "FromMin",
723
- "type": "Vec3[]",
724
- "lift": "len1"
725
- },
726
- {
727
- "name": "FromMax",
728
- "type": "Vec3[]",
729
- "lift": "len1"
730
- },
731
- {
732
- "name": "ToMin",
733
- "type": "Vec3[]",
734
- "lift": "len1"
735
- },
736
- {
737
- "name": "ToMax",
738
- "type": "Vec3[]",
739
- "lift": "len1"
740
- }
741
- ],
742
- "outputs": [
743
- {
744
- "name": "Result",
745
- "type": "Vec3[]"
746
- }
747
- ],
748
- "semantics": [
749
- "zip-by-max with repeat-first indexing.",
750
- "defaults: Value=1, FromMax=1, ToMax=1.",
751
- "Per-component: output = (Value-FromMin)/(FromMax-FromMin)*(ToMax-ToMin)+ToMin."
752
- ]
753
- },
754
- {
755
- "name": "Clamp",
756
- "type": "1371925756",
757
- "inputs": [
758
- {
759
- "name": "Value",
760
- "type": "Vec3[]",
761
- "lift": "len1"
762
- },
763
- {
764
- "name": "Min",
765
- "type": "Vec3[]",
766
- "lift": "len1"
767
- },
768
- {
769
- "name": "Max",
770
- "type": "Vec3[]",
771
- "lift": "len1"
772
- }
773
- ],
774
- "outputs": [
775
- {
776
- "name": "Result",
777
- "type": "Vec3[]"
778
- }
779
- ],
780
- "semantics": [
781
- "zip-by-max with repeat-first indexing.",
782
- "defaults: Value=1, Max=1.",
783
- "Per-component: output[i] = clamp(Value[i], Min[i], Max[i])."
784
- ]
785
- },
786
- {
787
- "name": "Lerp",
788
- "type": "341650924",
789
- "inputs": [
790
- {
791
- "name": "A",
792
- "type": "Vec3[]",
793
- "lift": "len1"
794
- },
795
- {
796
- "name": "B",
797
- "type": "Vec3[]",
798
- "lift": "len1"
799
- },
800
- {
801
- "name": "Factor",
802
- "type": "Vec3[]",
803
- "lift": "len1"
804
- }
805
- ],
806
- "outputs": [
807
- {
808
- "name": "Result",
809
- "type": "Vec3[]"
810
- }
811
- ],
812
- "semantics": [
813
- "zip-by-max with repeat-first indexing.",
814
- "defaults: Factor=Vec3(1,1,1).",
815
- "Per-component: output = A + (B-A)*Factor."
816
- ]
817
- },
818
- {
819
- "name": "RandomFloat",
820
- "type": "2827187451",
821
- "inputs": [
822
- {
823
- "name": "Domain",
824
- "type": "Float[]",
825
- "lift": "len1",
826
- "desc": "determines output length, min 1, values ignored"
827
- },
828
- {
829
- "name": "Min",
830
- "type": "Float"
831
- },
832
- {
833
- "name": "Max",
834
- "type": "Float"
835
- },
836
- {
837
- "name": "Seed",
838
- "type": "Int"
839
- }
840
- ],
841
- "outputs": [
842
- {
843
- "name": "Values",
844
- "type": "Float[]"
845
- }
846
- ],
847
- "semantics": [
848
- "Generates one random float per Domain element in [Min,Max]."
849
- ]
850
- },
851
- {
852
- "name": "RandomVec3",
853
- "type": "3144770264",
854
- "inputs": [
855
- {
856
- "name": "Domain",
857
- "type": "Vec3[]",
858
- "lift": "len1",
859
- "desc": "determines output length, min 1, values ignored"
860
- },
861
- {
862
- "name": "Min",
863
- "type": "Vec3"
864
- },
865
- {
866
- "name": "Max",
867
- "type": "Vec3"
868
- },
869
- {
870
- "name": "Seed",
871
- "type": "Int"
872
- }
873
- ],
874
- "outputs": [
875
- {
876
- "name": "Values",
877
- "type": "Vec3[]"
878
- }
879
- ],
880
- "semantics": [
881
- "Generates one random Vec3 per Domain element.",
882
- "Each component independently sampled in [Min.xyz, Max.xyz]."
883
- ]
884
- },
885
- {
886
- "name": "BoundingBox",
887
- "type": "2062451000",
888
- "inputs": [
889
- {
890
- "name": "Geometry",
891
- "type": "Geometry"
892
- }
893
- ],
894
- "outputs": [
895
- {
896
- "name": "Min",
897
- "type": "Vec3"
898
- },
899
- {
900
- "name": "Max",
901
- "type": "Vec3"
902
- },
903
- {
904
- "name": "Center",
905
- "type": "Vec3"
906
- },
907
- {
908
- "name": "Size",
909
- "type": "Vec3"
910
- }
911
- ],
912
- "semantics": [
913
- "Tight axis-aligned bounding box of Geometry's SDF volume.",
914
- "Center=(Min+Max)/2, Size=Max-Min."
915
- ]
916
- },
917
- {
918
- "name": "FrameInfo",
919
- "type": "854958909",
920
- "inputs": [],
921
- "outputs": [
922
- {
923
- "name": "Time",
924
- "type": "Float",
925
- "desc": "elapsed seconds"
926
- },
927
- {
928
- "name": "DeltaTime",
929
- "type": "Float"
930
- },
931
- {
932
- "name": "Index",
933
- "type": "Int"
934
- }
935
- ]
936
- },
937
- {
938
- "name": "Indices",
939
- "type": "3500690645",
940
- "inputs": [
941
- {
942
- "name": "Domain",
943
- "type": "Vec3[]"
944
- }
945
- ],
946
- "outputs": [
947
- {
948
- "name": "Indices",
949
- "type": "Int[]"
950
- }
951
- ],
952
- "semantics": [
953
- "Returns integer indices [0, 1, ..., len(Domain)-1].",
954
- "Output length equals Domain length."
955
- ]
956
- },
957
- {
958
- "name": "PolarToCartesian",
959
- "type": "2278706838",
960
- "inputs": [
961
- {
962
- "name": "Angles",
963
- "type": "Vec3[]",
964
- "lift": "len1"
965
- }
966
- ],
967
- "outputs": [
968
- {
969
- "name": "Direction",
970
- "type": "Vec3[]"
971
- }
972
- ],
973
- "semantics": [
974
- "Per-element: takes Angles[i].x as angle in radians.",
975
- "Output[i] = Vec3(sin(a), 0, cos(a))."
976
- ]
977
- }
978
- ]
1
+ {
2
+ "types": [
3
+ "Int",
4
+ "Float",
5
+ "Bool",
6
+ "Vec3",
7
+ "Geometry",
8
+ "Int[]",
9
+ "Float[]",
10
+ "Vec3[]"
11
+ ],
12
+ "enums": [
13
+ {
14
+ "name": "BooleanOp",
15
+ "values": [
16
+ "Subtract",
17
+ "Union",
18
+ "Brush",
19
+ "Intersect"
20
+ ]
21
+ },
22
+ {
23
+ "name": "PrimitiveType",
24
+ "values": [
25
+ "Sphere",
26
+ "Cylinder",
27
+ "Box",
28
+ "Cone",
29
+ "Torus",
30
+ "Link",
31
+ "Hexagon",
32
+ "Triangular",
33
+ "Octahedron",
34
+ "Pyramid",
35
+ "Glyph",
36
+ "Field",
37
+ "Ellipsoid",
38
+ "Capsule"
39
+ ]
40
+ },
41
+ {
42
+ "name": "GeoNodeMathOp",
43
+ "values": [
44
+ "Add",
45
+ "Subtract",
46
+ "Multiply",
47
+ "Divide",
48
+ "Sine",
49
+ "Cosine",
50
+ "Length",
51
+ "Round",
52
+ "Floor",
53
+ "Ceil",
54
+ "Modulo",
55
+ "Fraction",
56
+ "Absolute",
57
+ "Minimum",
58
+ "Maximum",
59
+ "Power",
60
+ "DotProduct",
61
+ "CrossProduct",
62
+ "Tangent",
63
+ "Arcsine",
64
+ "Arccosine",
65
+ "Arctangent",
66
+ "ToRadians",
67
+ "ToDegrees"
68
+ ]
69
+ },
70
+ {
71
+ "name": "GeoNodeRemapRangeOp",
72
+ "values": [
73
+ "Linear"
74
+ ]
75
+ },
76
+ {
77
+ "name": "LatticeType",
78
+ "values": [
79
+ "Gyroid",
80
+ "Schwarz",
81
+ "Diamond",
82
+ "OctetBeam",
83
+ "BCCBeam",
84
+ "CubicBeam",
85
+ "Spheres"
86
+ ]
87
+ }
88
+ ],
89
+ "casts": [
90
+ {
91
+ "from": "Int",
92
+ "to": "Float",
93
+ "desc": "promote"
94
+ },
95
+ {
96
+ "from": "Int",
97
+ "to": "Vec3",
98
+ "desc": "splat: x -> Vec3(x,x,x)"
99
+ },
100
+ {
101
+ "from": "Int",
102
+ "to": "Vec3[]",
103
+ "desc": "splat then wrap: x -> [Vec3(x,x,x)]"
104
+ },
105
+ {
106
+ "from": "Float",
107
+ "to": "Vec3",
108
+ "desc": "splat: x -> Vec3(x,x,x)"
109
+ },
110
+ {
111
+ "from": "Float",
112
+ "to": "Vec3[]",
113
+ "desc": "splat then wrap: x -> [Vec3(x,x,x)]"
114
+ },
115
+ {
116
+ "from": "Vec3",
117
+ "to": "Vec3[]",
118
+ "desc": "wrap: v -> [v]"
119
+ },
120
+ {
121
+ "from": "Float[]",
122
+ "to": "Vec3[]",
123
+ "desc": "splat each: [a,b] -> [Vec3(a,a,a),Vec3(b,b,b)]"
124
+ },
125
+ {
126
+ "from": "Vec3[]",
127
+ "to": "Float[]",
128
+ "desc": "extract X: [Vec3(a,b,c)] -> [a]"
129
+ },
130
+ {
131
+ "from": "Vec3[]",
132
+ "to": "Vec3",
133
+ "desc": "take first element"
134
+ },
135
+ {
136
+ "from": "Float",
137
+ "to": "Int",
138
+ "desc": "truncate"
139
+ },
140
+ {
141
+ "from": "Float[]",
142
+ "to": "Int",
143
+ "desc": "take first element + truncate"
144
+ },
145
+ {
146
+ "from": "Int[]",
147
+ "to": "Float[]",
148
+ "desc": "promote each"
149
+ }
150
+ ],
151
+ "nodes": [
152
+ {
153
+ "name": "Primitive",
154
+ "type": "541746723",
155
+ "inputs": [
156
+ {
157
+ "name": "Type",
158
+ "type": "PrimitiveType",
159
+ "enum": "PrimitiveType"
160
+ },
161
+ {
162
+ "name": "Position",
163
+ "type": "Vec3",
164
+ "desc": "center in world space"
165
+ },
166
+ {
167
+ "name": "Rotation",
168
+ "type": "Vec3"
169
+ },
170
+ {
171
+ "name": "Size",
172
+ "type": "Vec3",
173
+ "desc": [
174
+ "Size interpretation per Type:",
175
+ " -Sphere: x=width (uniform), yz unused.",
176
+ " -Ellipsoid: x=width, y=height, z=depth.",
177
+ " -Cylinder: x=width, y=height.",
178
+ " -Capsule: x=width, y=height.",
179
+ " -Box: x=width, y=height, z=depth.",
180
+ " -Cone: x=base width, y=height.",
181
+ " -Torus: x=outer diameter, y=tube thickness.",
182
+ " -Link: x=width, y=height, z=tube thickness.",
183
+ " -Hexagon: x=width, y=height (extrusion).",
184
+ " -Triangular: x=width, y=height, z=depth.",
185
+ " -Octahedron: x=size (uniform), yz unused.",
186
+ " -Pyramid: x=base width, y=height."
187
+ ]
188
+ },
189
+ {
190
+ "name": "Unused",
191
+ "type": "Float",
192
+ "optional": true
193
+ },
194
+ {
195
+ "name": "Roundness",
196
+ "type": "Float",
197
+ "desc": "edge roundness ratio [0,1]"
198
+ }
199
+ ],
200
+ "outputs": [
201
+ {
202
+ "name": "Geometry",
203
+ "type": "Geometry"
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "name": "InstancePrimitive",
209
+ "type": "2042784705",
210
+ "inputs": [
211
+ {
212
+ "name": "Geometry",
213
+ "type": "Geometry"
214
+ },
215
+ {
216
+ "name": "Positions",
217
+ "type": "Vec3[]",
218
+ "lift": "len1"
219
+ },
220
+ {
221
+ "name": "Rotations",
222
+ "type": "Vec3[]",
223
+ "lift": "len1"
224
+ },
225
+ {
226
+ "name": "Scales",
227
+ "type": "Vec3[]",
228
+ "lift": "len1"
229
+ }
230
+ ],
231
+ "outputs": [
232
+ {
233
+ "name": "Geometry",
234
+ "type": "Geometry"
235
+ }
236
+ ],
237
+ "semantics": [
238
+ "zip-by-max with repeat-first indexing.",
239
+ "defaults: Scales=Vec3(1,1,1).",
240
+ "Emit one instance per index."
241
+ ]
242
+ },
243
+ {
244
+ "name": "Boolean",
245
+ "type": "3996326709",
246
+ "inputs": [
247
+ {
248
+ "name": "Operation",
249
+ "type": "BooleanOp",
250
+ "enum": "BooleanOp"
251
+ },
252
+ {
253
+ "name": "A",
254
+ "type": "Geometry"
255
+ },
256
+ {
257
+ "name": "B",
258
+ "type": "Geometry"
259
+ },
260
+ {
261
+ "name": "Blend",
262
+ "type": "Float",
263
+ "desc": [
264
+ "Goop: smooth blend where A and B meet; 0.0 = sharp edge.",
265
+ "Value is about 26 per mm of blend radius (e.g. 260 for 10 mm). Typical radius: 10-50% of the smaller operand's size."
266
+ ]
267
+ },
268
+ {
269
+ "name": "Material_Neutral_Cutout",
270
+ "type": "Bool"
271
+ }
272
+ ],
273
+ "outputs": [
274
+ {
275
+ "name": "Geometry",
276
+ "type": "Geometry"
277
+ }
278
+ ]
279
+ },
280
+ {
281
+ "name": "CombineXYZ",
282
+ "type": "795684903",
283
+ "inputs": [
284
+ {
285
+ "name": "X",
286
+ "type": "Float[]",
287
+ "lift": "len1"
288
+ },
289
+ {
290
+ "name": "Y",
291
+ "type": "Float[]",
292
+ "lift": "len1"
293
+ },
294
+ {
295
+ "name": "Z",
296
+ "type": "Float[]",
297
+ "lift": "len1"
298
+ }
299
+ ],
300
+ "outputs": [
301
+ {
302
+ "name": "XYZ",
303
+ "type": "Vec3[]"
304
+ }
305
+ ],
306
+ "semantics": [
307
+ "zip-by-max with repeat-first indexing."
308
+ ]
309
+ },
310
+ {
311
+ "name": "SeparateXYZ",
312
+ "type": "2101815638",
313
+ "inputs": [
314
+ {
315
+ "name": "XYZ",
316
+ "type": "Vec3[]",
317
+ "lift": "len1"
318
+ }
319
+ ],
320
+ "outputs": [
321
+ {
322
+ "name": "X",
323
+ "type": "Float[]"
324
+ },
325
+ {
326
+ "name": "Y",
327
+ "type": "Float[]"
328
+ },
329
+ {
330
+ "name": "Z",
331
+ "type": "Float[]"
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "name": "MathFloat",
337
+ "type": "3979505435",
338
+ "inputs": [
339
+ {
340
+ "name": "Operation",
341
+ "type": "GeoNodeMathOp",
342
+ "enum": "GeoNodeMathOp"
343
+ },
344
+ {
345
+ "name": "A",
346
+ "type": "Float[]",
347
+ "lift": "len1"
348
+ },
349
+ {
350
+ "name": "B",
351
+ "type": "Float[]",
352
+ "lift": "len1"
353
+ }
354
+ ],
355
+ "outputs": [
356
+ {
357
+ "name": "Result",
358
+ "type": "Float[]"
359
+ }
360
+ ],
361
+ "semantics": [
362
+ "zip-by-max with repeat-first indexing.",
363
+ "Unary ops read A and ignore B.",
364
+ "Trig ops take radians.",
365
+ "For DotProduct or CrossProduct, use MathVec3."
366
+ ]
367
+ },
368
+ {
369
+ "name": "MathVec3",
370
+ "type": "3979505435",
371
+ "inputs": [
372
+ {
373
+ "name": "Operation",
374
+ "type": "GeoNodeMathOp",
375
+ "enum": "GeoNodeMathOp"
376
+ },
377
+ {
378
+ "name": "A",
379
+ "type": "Vec3[]",
380
+ "lift": "len1"
381
+ },
382
+ {
383
+ "name": "B",
384
+ "type": "Vec3[]",
385
+ "lift": "len1"
386
+ }
387
+ ],
388
+ "outputs": [
389
+ {
390
+ "name": "Result",
391
+ "type": "Vec3[]"
392
+ }
393
+ ],
394
+ "semantics": [
395
+ "zip-by-max with repeat-first indexing.",
396
+ "Unary ops read A and ignore B.",
397
+ "Trig ops take radians."
398
+ ]
399
+ },
400
+ {
401
+ "name": "Range",
402
+ "type": "437223984",
403
+ "inputs": [
404
+ {
405
+ "name": "Count",
406
+ "type": "Int"
407
+ }
408
+ ],
409
+ "outputs": [
410
+ {
411
+ "name": "Values",
412
+ "type": "Float[]"
413
+ }
414
+ ],
415
+ "semantics": [
416
+ "Output length = max(Count,0).",
417
+ "Values[i] = float(i) for i in [0,n)."
418
+ ]
419
+ },
420
+ {
421
+ "name": "AlignRotationToVector",
422
+ "type": "124894945",
423
+ "inputs": [
424
+ {
425
+ "name": "Rotations",
426
+ "type": "Vec3[]",
427
+ "lift": "len1"
428
+ },
429
+ {
430
+ "name": "Vectors",
431
+ "type": "Vec3[]",
432
+ "lift": "len1"
433
+ }
434
+ ],
435
+ "outputs": [
436
+ {
437
+ "name": "AlignedRotations",
438
+ "type": "Vec3[]"
439
+ }
440
+ ],
441
+ "semantics": [
442
+ "zip-by-max with repeat-first indexing.",
443
+ "defaults: Vectors=Vec3(0,0,1).",
444
+ "Aligns local +Z to each Vector via shortest-arc rotation."
445
+ ]
446
+ },
447
+ {
448
+ "name": "TransformGeometry",
449
+ "type": "3656718715",
450
+ "inputs": [
451
+ {
452
+ "name": "Geometry",
453
+ "type": "Geometry"
454
+ },
455
+ {
456
+ "name": "Positions",
457
+ "type": "Vec3[]",
458
+ "lift": "len1"
459
+ },
460
+ {
461
+ "name": "Rotations",
462
+ "type": "Vec3[]",
463
+ "lift": "len1"
464
+ },
465
+ {
466
+ "name": "Scales",
467
+ "type": "Vec3[]",
468
+ "lift": "len1"
469
+ }
470
+ ],
471
+ "outputs": [
472
+ {
473
+ "name": "Geometry",
474
+ "type": "Geometry"
475
+ }
476
+ ],
477
+ "semantics": [
478
+ "per-primitive with repeat-first indexing.",
479
+ "defaults: Scales=Vec3(1,1,1).",
480
+ "Does NOT duplicate geometry (use InstancePrimitive to duplicate)."
481
+ ]
482
+ },
483
+ {
484
+ "name": "SwitchGeometry",
485
+ "type": "251928043",
486
+ "inputs": [
487
+ {
488
+ "name": "Index",
489
+ "type": "Int"
490
+ },
491
+ {
492
+ "name": "A",
493
+ "type": "Geometry"
494
+ },
495
+ {
496
+ "name": "B",
497
+ "type": "Geometry"
498
+ },
499
+ {
500
+ "name": "C",
501
+ "type": "Geometry"
502
+ },
503
+ {
504
+ "name": "D",
505
+ "type": "Geometry"
506
+ }
507
+ ],
508
+ "outputs": [
509
+ {
510
+ "name": "Geometry",
511
+ "type": "Geometry"
512
+ }
513
+ ],
514
+ "semantics": [
515
+ "Outputs geometry at slot Index (0=A, 1=B, 2=C, 3=D).",
516
+ "Returns empty geometry if Index is out of range [0,3]."
517
+ ]
518
+ },
519
+ {
520
+ "name": "LatticeGeometry",
521
+ "type": "2831894357",
522
+ "inputs": [
523
+ {
524
+ "name": "Geometry",
525
+ "type": "Geometry"
526
+ },
527
+ {
528
+ "name": "Type",
529
+ "type": "LatticeType",
530
+ "enum": "LatticeType"
531
+ },
532
+ {
533
+ "name": "Position",
534
+ "type": "Vec3",
535
+ "desc": "lattice cell placement"
536
+ },
537
+ {
538
+ "name": "Rotation",
539
+ "type": "Vec3",
540
+ "desc": "lattice cell orientation"
541
+ },
542
+ {
543
+ "name": "Scale",
544
+ "type": "Float",
545
+ "desc": "uniform cell size"
546
+ },
547
+ {
548
+ "name": "Thickness",
549
+ "type": "Float",
550
+ "desc": "strut thickness"
551
+ },
552
+ {
553
+ "name": "WallThickness",
554
+ "type": "Float",
555
+ "desc": "outer wall thickness"
556
+ }
557
+ ],
558
+ "outputs": [
559
+ {
560
+ "name": "Geometry",
561
+ "type": "Geometry"
562
+ }
563
+ ],
564
+ "semantics": [
565
+ "Fills geometry with a lattice infill pattern."
566
+ ]
567
+ },
568
+ {
569
+ "name": "RandomPointsInVolume",
570
+ "type": "662065381",
571
+ "inputs": [
572
+ {
573
+ "name": "Geometry",
574
+ "type": "Geometry"
575
+ },
576
+ {
577
+ "name": "Density",
578
+ "type": "Float",
579
+ "desc": "points per unit volume, min 1.0"
580
+ },
581
+ {
582
+ "name": "AABBMin",
583
+ "type": "Vec3"
584
+ },
585
+ {
586
+ "name": "AABBMax",
587
+ "type": "Vec3"
588
+ },
589
+ {
590
+ "name": "Seed",
591
+ "type": "Int"
592
+ }
593
+ ],
594
+ "outputs": [
595
+ {
596
+ "name": "Positions",
597
+ "type": "Vec3[]"
598
+ }
599
+ ],
600
+ "semantics": [
601
+ "Scatters random points inside the SDF volume."
602
+ ]
603
+ },
604
+ {
605
+ "name": "GridPointsInVolume",
606
+ "type": "3453342624",
607
+ "inputs": [
608
+ {
609
+ "name": "Geometry",
610
+ "type": "Geometry"
611
+ },
612
+ {
613
+ "name": "Spacing",
614
+ "type": "Vec3",
615
+ "desc": "min 1.0 per component"
616
+ },
617
+ {
618
+ "name": "AABBMin",
619
+ "type": "Vec3"
620
+ },
621
+ {
622
+ "name": "AABBMax",
623
+ "type": "Vec3"
624
+ }
625
+ ],
626
+ "outputs": [
627
+ {
628
+ "name": "Positions",
629
+ "type": "Vec3[]"
630
+ }
631
+ ],
632
+ "semantics": [
633
+ "Places grid-spaced points inside the SDF volume.",
634
+ "Only points inside the volume are output."
635
+ ]
636
+ },
637
+ {
638
+ "name": "RandomPointsOnSurface",
639
+ "type": "2235454654",
640
+ "inputs": [
641
+ {
642
+ "name": "Geometry",
643
+ "type": "Geometry"
644
+ },
645
+ {
646
+ "name": "Density",
647
+ "type": "Float"
648
+ },
649
+ {
650
+ "name": "Seed",
651
+ "type": "Int"
652
+ }
653
+ ],
654
+ "outputs": [
655
+ {
656
+ "name": "Positions",
657
+ "type": "Vec3[]"
658
+ },
659
+ {
660
+ "name": "Normals",
661
+ "type": "Vec3[]"
662
+ }
663
+ ],
664
+ "semantics": [
665
+ "Scatters random points on the surface of Geometry."
666
+ ]
667
+ },
668
+ {
669
+ "name": "PointGrid3D",
670
+ "type": "3992787817",
671
+ "inputs": [
672
+ {
673
+ "name": "Size",
674
+ "type": "Vec3",
675
+ "desc": "full extent per axis"
676
+ },
677
+ {
678
+ "name": "VerticesX",
679
+ "type": "Int"
680
+ },
681
+ {
682
+ "name": "VerticesY",
683
+ "type": "Int"
684
+ },
685
+ {
686
+ "name": "VerticesZ",
687
+ "type": "Int"
688
+ }
689
+ ],
690
+ "outputs": [
691
+ {
692
+ "name": "Positions",
693
+ "type": "Vec3[]"
694
+ }
695
+ ],
696
+ "semantics": [
697
+ "Centered at origin.",
698
+ "Total points = VerticesX*VerticesY*VerticesZ.",
699
+ "Evenly spaced within [-Size/2, +Size/2]."
700
+ ]
701
+ },
702
+ {
703
+ "name": "MapRange",
704
+ "type": "789012436",
705
+ "inputs": [
706
+ {
707
+ "name": "Mode",
708
+ "type": "GeoNodeRemapRangeOp",
709
+ "enum": "GeoNodeRemapRangeOp"
710
+ },
711
+ {
712
+ "name": "Clamp",
713
+ "type": "Bool",
714
+ "desc": "when true, clamps to [ToMin,ToMax]"
715
+ },
716
+ {
717
+ "name": "Value",
718
+ "type": "Vec3[]",
719
+ "lift": "len1"
720
+ },
721
+ {
722
+ "name": "FromMin",
723
+ "type": "Vec3[]",
724
+ "lift": "len1"
725
+ },
726
+ {
727
+ "name": "FromMax",
728
+ "type": "Vec3[]",
729
+ "lift": "len1"
730
+ },
731
+ {
732
+ "name": "ToMin",
733
+ "type": "Vec3[]",
734
+ "lift": "len1"
735
+ },
736
+ {
737
+ "name": "ToMax",
738
+ "type": "Vec3[]",
739
+ "lift": "len1"
740
+ }
741
+ ],
742
+ "outputs": [
743
+ {
744
+ "name": "Result",
745
+ "type": "Vec3[]"
746
+ }
747
+ ],
748
+ "semantics": [
749
+ "zip-by-max with repeat-first indexing.",
750
+ "defaults: Value=1, FromMax=1, ToMax=1.",
751
+ "Per-component: output = (Value-FromMin)/(FromMax-FromMin)*(ToMax-ToMin)+ToMin."
752
+ ]
753
+ },
754
+ {
755
+ "name": "Clamp",
756
+ "type": "1371925756",
757
+ "inputs": [
758
+ {
759
+ "name": "Value",
760
+ "type": "Vec3[]",
761
+ "lift": "len1"
762
+ },
763
+ {
764
+ "name": "Min",
765
+ "type": "Vec3[]",
766
+ "lift": "len1"
767
+ },
768
+ {
769
+ "name": "Max",
770
+ "type": "Vec3[]",
771
+ "lift": "len1"
772
+ }
773
+ ],
774
+ "outputs": [
775
+ {
776
+ "name": "Result",
777
+ "type": "Vec3[]"
778
+ }
779
+ ],
780
+ "semantics": [
781
+ "zip-by-max with repeat-first indexing.",
782
+ "defaults: Value=1, Max=1.",
783
+ "Per-component: output[i] = clamp(Value[i], Min[i], Max[i])."
784
+ ]
785
+ },
786
+ {
787
+ "name": "Lerp",
788
+ "type": "341650924",
789
+ "inputs": [
790
+ {
791
+ "name": "A",
792
+ "type": "Vec3[]",
793
+ "lift": "len1"
794
+ },
795
+ {
796
+ "name": "B",
797
+ "type": "Vec3[]",
798
+ "lift": "len1"
799
+ },
800
+ {
801
+ "name": "Factor",
802
+ "type": "Vec3[]",
803
+ "lift": "len1"
804
+ }
805
+ ],
806
+ "outputs": [
807
+ {
808
+ "name": "Result",
809
+ "type": "Vec3[]"
810
+ }
811
+ ],
812
+ "semantics": [
813
+ "zip-by-max with repeat-first indexing.",
814
+ "defaults: Factor=Vec3(1,1,1).",
815
+ "Per-component: output = A + (B-A)*Factor."
816
+ ]
817
+ },
818
+ {
819
+ "name": "RandomFloat",
820
+ "type": "2827187451",
821
+ "inputs": [
822
+ {
823
+ "name": "Domain",
824
+ "type": "Float[]",
825
+ "lift": "len1",
826
+ "desc": "determines output length, min 1, values ignored"
827
+ },
828
+ {
829
+ "name": "Min",
830
+ "type": "Float"
831
+ },
832
+ {
833
+ "name": "Max",
834
+ "type": "Float"
835
+ },
836
+ {
837
+ "name": "Seed",
838
+ "type": "Int"
839
+ }
840
+ ],
841
+ "outputs": [
842
+ {
843
+ "name": "Values",
844
+ "type": "Float[]"
845
+ }
846
+ ],
847
+ "semantics": [
848
+ "Generates one random float per Domain element in [Min,Max]."
849
+ ]
850
+ },
851
+ {
852
+ "name": "RandomVec3",
853
+ "type": "3144770264",
854
+ "inputs": [
855
+ {
856
+ "name": "Domain",
857
+ "type": "Vec3[]",
858
+ "lift": "len1",
859
+ "desc": "determines output length, min 1, values ignored"
860
+ },
861
+ {
862
+ "name": "Min",
863
+ "type": "Vec3"
864
+ },
865
+ {
866
+ "name": "Max",
867
+ "type": "Vec3"
868
+ },
869
+ {
870
+ "name": "Seed",
871
+ "type": "Int"
872
+ }
873
+ ],
874
+ "outputs": [
875
+ {
876
+ "name": "Values",
877
+ "type": "Vec3[]"
878
+ }
879
+ ],
880
+ "semantics": [
881
+ "Generates one random Vec3 per Domain element.",
882
+ "Each component independently sampled in [Min.xyz, Max.xyz]."
883
+ ]
884
+ },
885
+ {
886
+ "name": "BoundingBox",
887
+ "type": "2062451000",
888
+ "inputs": [
889
+ {
890
+ "name": "Geometry",
891
+ "type": "Geometry"
892
+ }
893
+ ],
894
+ "outputs": [
895
+ {
896
+ "name": "Min",
897
+ "type": "Vec3"
898
+ },
899
+ {
900
+ "name": "Max",
901
+ "type": "Vec3"
902
+ },
903
+ {
904
+ "name": "Center",
905
+ "type": "Vec3"
906
+ },
907
+ {
908
+ "name": "Size",
909
+ "type": "Vec3"
910
+ }
911
+ ],
912
+ "semantics": [
913
+ "Tight axis-aligned bounding box of Geometry's SDF volume.",
914
+ "Center=(Min+Max)/2, Size=Max-Min."
915
+ ]
916
+ },
917
+ {
918
+ "name": "FrameInfo",
919
+ "type": "854958909",
920
+ "inputs": [],
921
+ "outputs": [
922
+ {
923
+ "name": "Time",
924
+ "type": "Float",
925
+ "desc": "elapsed seconds"
926
+ },
927
+ {
928
+ "name": "DeltaTime",
929
+ "type": "Float"
930
+ },
931
+ {
932
+ "name": "Index",
933
+ "type": "Int"
934
+ }
935
+ ]
936
+ },
937
+ {
938
+ "name": "Indices",
939
+ "type": "3500690645",
940
+ "inputs": [
941
+ {
942
+ "name": "Domain",
943
+ "type": "Vec3[]"
944
+ }
945
+ ],
946
+ "outputs": [
947
+ {
948
+ "name": "Indices",
949
+ "type": "Int[]"
950
+ }
951
+ ],
952
+ "semantics": [
953
+ "Returns integer indices [0, 1, ..., len(Domain)-1].",
954
+ "Output length equals Domain length."
955
+ ]
956
+ },
957
+ {
958
+ "name": "PolarToCartesian",
959
+ "type": "2278706838",
960
+ "inputs": [
961
+ {
962
+ "name": "Angles",
963
+ "type": "Vec3[]",
964
+ "lift": "len1"
965
+ }
966
+ ],
967
+ "outputs": [
968
+ {
969
+ "name": "Direction",
970
+ "type": "Vec3[]"
971
+ }
972
+ ],
973
+ "semantics": [
974
+ "Per-element: takes Angles[i].x as angle in radians.",
975
+ "Output[i] = Vec3(sin(a), 0, cos(a))."
976
+ ]
977
+ }
978
+ ]
979
979
  }