@aura3d/engine 4.0.4 → 4.0.6

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.
Files changed (64) hide show
  1. package/README.md +2 -2
  2. package/dist/aura3d-cli/migrate-three/CompatibilityWarnings.js +1 -1
  3. package/dist/aura3d-cli/migrate-three/CompatibilityWarnings.js.map +1 -1
  4. package/dist/aura3d-cli/migrate-three/emit.js +3 -3
  5. package/dist/aura3d-cli/migrate-three/emit.js.map +1 -1
  6. package/dist/aura3d-cli/migrate-three/mappings.d.ts.map +1 -1
  7. package/dist/aura3d-cli/migrate-three/mappings.js +3 -1
  8. package/dist/aura3d-cli/migrate-three/mappings.js.map +1 -1
  9. package/dist/create-aura3d/index.js +1 -1
  10. package/dist/engine/agent-api/compiler/customMaterial.d.ts +26 -3
  11. package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
  12. package/dist/engine/agent-api/compiler/customMaterial.js +115 -9
  13. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  14. package/dist/engine/agent-api/compiler/customTextures.d.ts +17 -0
  15. package/dist/engine/agent-api/compiler/customTextures.d.ts.map +1 -0
  16. package/dist/engine/agent-api/compiler/customTextures.js +84 -0
  17. package/dist/engine/agent-api/compiler/customTextures.js.map +1 -0
  18. package/dist/engine/agent-api/compiler/errors.d.ts +1 -1
  19. package/dist/engine/agent-api/compiler/errors.d.ts.map +1 -1
  20. package/dist/engine/agent-api/compiler/errors.js.map +1 -1
  21. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  22. package/dist/engine/agent-api/compiler/primitives.js +7 -1
  23. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  24. package/dist/engine/agent-api/compiler/renderer.d.ts.map +1 -1
  25. package/dist/engine/agent-api/compiler/renderer.js +12 -0
  26. package/dist/engine/agent-api/compiler/renderer.js.map +1 -1
  27. package/dist/engine/agent-api/index.d.ts +2 -0
  28. package/dist/engine/agent-api/index.d.ts.map +1 -1
  29. package/dist/engine/agent-api/index.js +2 -0
  30. package/dist/engine/agent-api/index.js.map +1 -1
  31. package/dist/engine/agent-api/nodes/material.d.ts +6 -0
  32. package/dist/engine/agent-api/nodes/material.d.ts.map +1 -1
  33. package/dist/engine/agent-api/nodes/material.js +6 -0
  34. package/dist/engine/agent-api/nodes/material.js.map +1 -1
  35. package/dist/engine/agent-api/nodes/tsl/emit.d.ts +48 -0
  36. package/dist/engine/agent-api/nodes/tsl/emit.d.ts.map +1 -0
  37. package/dist/engine/agent-api/nodes/tsl/emit.js +361 -0
  38. package/dist/engine/agent-api/nodes/tsl/emit.js.map +1 -0
  39. package/dist/engine/agent-api/nodes/tsl/index.d.ts +115 -0
  40. package/dist/engine/agent-api/nodes/tsl/index.d.ts.map +1 -0
  41. package/dist/engine/agent-api/nodes/tsl/index.js +175 -0
  42. package/dist/engine/agent-api/nodes/tsl/index.js.map +1 -0
  43. package/dist/engine/agent-api/nodes/tsl/interpret.d.ts +21 -0
  44. package/dist/engine/agent-api/nodes/tsl/interpret.d.ts.map +1 -0
  45. package/dist/engine/agent-api/nodes/tsl/interpret.js +113 -0
  46. package/dist/engine/agent-api/nodes/tsl/interpret.js.map +1 -0
  47. package/dist/engine/agent-api/nodes/tsl/ir.d.ts +204 -0
  48. package/dist/engine/agent-api/nodes/tsl/ir.d.ts.map +1 -0
  49. package/dist/engine/agent-api/nodes/tsl/ir.js +501 -0
  50. package/dist/engine/agent-api/nodes/tsl/ir.js.map +1 -0
  51. package/dist/engine/agent-api/nodes/types.d.ts +2 -2
  52. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  53. package/dist/engine/public/index.d.ts +2 -2
  54. package/dist/engine/public/index.d.ts.map +1 -1
  55. package/dist/engine/public/index.js +1 -1
  56. package/dist/engine/public/index.js.map +1 -1
  57. package/package.json +26 -26
  58. package/templates/cinematic-scene/package.json +2 -2
  59. package/templates/mini-game/package.json +2 -2
  60. package/templates/product-viewer/package.json +2 -2
  61. package/templates/production-asset-inspector/package.json +1 -1
  62. package/templates/production-material-studio/package.json +1 -1
  63. package/templates/production-product-configurator/package.json +1 -1
  64. package/templates/production-product-viewer/package.json +1 -1
@@ -0,0 +1,501 @@
1
+ /**
2
+ * SH-01 / L1-11 — TSL-style node graph subset: IR, type inference, constant
3
+ * folding and the imperative statement recorder (`Fn`, `If`, `Loop`).
4
+ *
5
+ * This is a deliberately small subset of three.js TSL that lowers to GLSL 300 es
6
+ * and feeds `material.custom` (see `emit.ts`). Anything outside the subset fails
7
+ * with a named `AuraRuntimeError`, never silently.
8
+ */
9
+ import { AuraRuntimeError } from "../../compiler/errors.js";
10
+ export const TSL_BUILTIN_TYPES = {
11
+ positionLocal: "vec3",
12
+ positionWorld: "vec3",
13
+ normalLocal: "vec3",
14
+ normalWorld: "vec3",
15
+ uv: "vec2",
16
+ time: "float",
17
+ cameraPosition: "vec3"
18
+ };
19
+ export function tslError(code, message) {
20
+ throw new AuraRuntimeError(code, message);
21
+ }
22
+ export const dimOf = (type) => (type === "vec2" ? 2 : type === "vec3" ? 3 : type === "vec4" ? 4 : 1);
23
+ export const isVec = (type) => dimOf(type) > 1;
24
+ export const isNumericScalar = (type) => type === "float" || type === "int";
25
+ const vecOf = (n) => (n === 2 ? "vec2" : n === 3 ? "vec3" : n === 4 ? "vec4" : "float");
26
+ let nodeCounter = 0;
27
+ /** A node in the graph. Chainable methods mirror three's TSL (`a.mul(b).add(c)`). */
28
+ export class TslNode {
29
+ type;
30
+ data;
31
+ id;
32
+ constructor(type, data) {
33
+ this.type = type;
34
+ this.data = data;
35
+ this.id = nodeCounter++;
36
+ }
37
+ add(other) { return op("add", this, other); }
38
+ sub(other) { return op("sub", this, other); }
39
+ mul(other) { return op("mul", this, other); }
40
+ div(other) { return op("div", this, other); }
41
+ mod(other) { return op("mod", this, other); }
42
+ pow(other) { return op("pow", this, other); }
43
+ min(other) { return op("min", this, other); }
44
+ max(other) { return op("max", this, other); }
45
+ dot(other) { return op("dot", this, other); }
46
+ cross(other) { return op("cross", this, other); }
47
+ distance(other) { return op("distance", this, other); }
48
+ atan2(other) { return op("atan2", this, other); }
49
+ /** `edge.step(x)` is GLSL `step(edge, x)`: 0 where `x < edge`, else 1. */
50
+ step(x) { return op("step", this, x); }
51
+ lessThan(other) { return op("lessThan", this, other); }
52
+ greaterThan(other) { return op("greaterThan", this, other); }
53
+ lessThanEqual(other) { return op("lessThanEqual", this, other); }
54
+ greaterThanEqual(other) { return op("greaterThanEqual", this, other); }
55
+ equal(other) { return op("equal", this, other); }
56
+ notEqual(other) { return op("notEqual", this, other); }
57
+ and(other) { return op("and", this, other); }
58
+ or(other) { return op("or", this, other); }
59
+ not() { return op("not", this); }
60
+ sin() { return op("sin", this); }
61
+ cos() { return op("cos", this); }
62
+ tan() { return op("tan", this); }
63
+ abs() { return op("abs", this); }
64
+ sign() { return op("sign", this); }
65
+ sqrt() { return op("sqrt", this); }
66
+ exp() { return op("exp", this); }
67
+ log() { return op("log", this); }
68
+ fract() { return op("fract", this); }
69
+ floor() { return op("floor", this); }
70
+ ceil() { return op("ceil", this); }
71
+ normalize() { return op("normalize", this); }
72
+ saturate() { return op("saturate", this); }
73
+ oneMinus() { return op("oneMinus", this); }
74
+ negate() { return op("negate", this); }
75
+ length() { return op("length", this); }
76
+ mix(other, t) { return op("mix", this, other, t); }
77
+ clamp(lo = 0, hi = 1) { return op("clamp", this, lo, hi); }
78
+ smoothstep(edge0, edge1) { return op("smoothstep", edge0, edge1, this); }
79
+ /** Local variable declaration (valid only inside `Fn`). */
80
+ toVar() {
81
+ if (this.type === "sampler2D")
82
+ tslError("tsl-type-mismatch", "a texture sampler cannot be stored in a variable");
83
+ const variable = new TslNode(this.type, { k: "var", init: this });
84
+ record({ s: "decl", node: variable }, "toVar()");
85
+ return variable;
86
+ }
87
+ assign(value) { return assignTo(this, value, undefined); }
88
+ addAssign(value) { return assignTo(this, value, "+"); }
89
+ subAssign(value) { return assignTo(this, value, "-"); }
90
+ mulAssign(value) { return assignTo(this, value, "*"); }
91
+ divAssign(value) { return assignTo(this, value, "/"); }
92
+ /** Static-index convenience for `uniformArray(...).element(i)` results. */
93
+ get isConstant() { return this.data.k === "const"; }
94
+ }
95
+ /** `uniformArray` handle: lowered to N scalar/vector uniforms named `<name>_0 ... <name>_{N-1}`. */
96
+ export class TslUniformArray {
97
+ name;
98
+ elementType;
99
+ values;
100
+ elements;
101
+ constructor(name, elementType, values, elements) {
102
+ this.name = name;
103
+ this.elementType = elementType;
104
+ this.values = values;
105
+ this.elements = elements;
106
+ }
107
+ get length() { return this.elements.length; }
108
+ /** Static index returns the element's uniform node; a node index lowers to a select ladder. */
109
+ element(index) {
110
+ if (typeof index === "number") {
111
+ if (!Number.isInteger(index) || index < 0 || index >= this.elements.length) {
112
+ tslError("invalid-tsl-graph", `uniformArray element index ${index} is outside 0..${this.elements.length - 1}`);
113
+ }
114
+ return this.elements[index];
115
+ }
116
+ return new TslNode(this.elementType, { k: "element", array: this, index: toNode(index) });
117
+ }
118
+ }
119
+ /* ------------------------------------------------------------------------- */
120
+ /* Statement recorder */
121
+ /* ------------------------------------------------------------------------- */
122
+ const blockStack = [];
123
+ function record(statement, what) {
124
+ const top = blockStack[blockStack.length - 1];
125
+ if (!top)
126
+ tslError("tsl-statement-outside-fn", `${what} is a statement and is only valid inside Fn(() => { ... }); wrap imperative TSL code in Fn`);
127
+ top.push(statement);
128
+ }
129
+ function withBlock(fn) {
130
+ const block = [];
131
+ blockStack.push(block);
132
+ try {
133
+ const result = fn();
134
+ return { block, result };
135
+ }
136
+ finally {
137
+ blockStack.pop();
138
+ }
139
+ }
140
+ function assignTo(target, value, compound) {
141
+ if (target.data.k !== "var")
142
+ tslError("tsl-type-mismatch", "assign() target must be a node created with toVar()");
143
+ const rhs = toNode(value);
144
+ const compatible = target.type === rhs.type || (target.type === "float" && rhs.type === "int") || (isVec(target.type) && rhs.type === "float" && compound !== undefined);
145
+ if (!compatible)
146
+ tslError("tsl-type-mismatch", `cannot assign ${rhs.type} to a ${target.type} variable`);
147
+ record({ s: "assign", target, value: rhs, ...(compound ? { op: compound } : {}) }, "assign()");
148
+ return target;
149
+ }
150
+ /** `Fn(callback)`: callback runs once per call site; its statements and return node become an inline block. */
151
+ export function Fn(callback) {
152
+ return (...args) => {
153
+ const argNodes = args.map((arg) => toNode(arg));
154
+ const { block, result } = withBlock(() => callback(...argNodes));
155
+ if (result === undefined)
156
+ tslError("invalid-tsl-graph", "Fn callback must return a node (statement-only Fn blocks have no value to use)");
157
+ const returned = toNode(result);
158
+ return new TslNode(returned.type, { k: "call", block, result: returned, args: argNodes });
159
+ };
160
+ }
161
+ /** `If(cond, () => { ... }).ElseIf(...).Else(...)` — statement form, valid only inside `Fn`. */
162
+ export function If(condition, body) {
163
+ const branches = [];
164
+ const statement = { s: "if", branches };
165
+ record(statement, "If()");
166
+ const addBranch = (cond, fn) => {
167
+ const node = toNode(cond);
168
+ if (node.type !== "bool")
169
+ tslError("tsl-type-mismatch", `If condition must be a bool node (got ${node.type}); build one with lessThan/greaterThan/equal/and/or/not`);
170
+ branches.push({ cond: node, block: withBlock(fn).block });
171
+ };
172
+ addBranch(condition, body);
173
+ const chain = {
174
+ ElseIf(cond, fn) { addBranch(cond, fn); return chain; },
175
+ Else(fn) { statement.otherwise = withBlock(fn).block; }
176
+ };
177
+ return chain;
178
+ }
179
+ export const TSL_MAX_STATIC_LOOP = 1024;
180
+ /** `Loop(count | { start, end }, ({ i }) => { ... })` — statement form, valid only inside `Fn`. */
181
+ export function Loop(range, body) {
182
+ const bounds = typeof range === "number" || range instanceof TslNode ? { start: 0, end: range } : range;
183
+ const start = toIntNode(bounds.start ?? 0, "Loop start");
184
+ const end = toIntNode(bounds.end, "Loop end");
185
+ if (start.data.k === "const" && end.data.k === "const" && end.data.value[0] - start.data.value[0] > TSL_MAX_STATIC_LOOP) {
186
+ tslError("invalid-tsl-graph", `Loop of ${end.data.value[0] - start.data.value[0]} iterations exceeds the ${TSL_MAX_STATIC_LOOP} iteration limit`);
187
+ }
188
+ const index = new TslNode("int", { k: "loopIndex" });
189
+ const statement = { s: "loop", index, start, end, block: withBlock(() => body({ i: index })).block };
190
+ record(statement, "Loop()");
191
+ }
192
+ function toIntNode(value, what) {
193
+ if (typeof value === "number") {
194
+ if (!Number.isInteger(value))
195
+ tslError("tsl-type-mismatch", `${what} must be an integer`);
196
+ return new TslNode("int", { k: "const", value: [value] });
197
+ }
198
+ const node = toNode(value);
199
+ if (node.type !== "int")
200
+ tslError("tsl-type-mismatch", `${what} must be an int node (got ${node.type})`);
201
+ return node;
202
+ }
203
+ /* ------------------------------------------------------------------------- */
204
+ /* Construction helpers */
205
+ /* ------------------------------------------------------------------------- */
206
+ export function constNode(type, value) {
207
+ if (value.length !== dimOf(type))
208
+ tslError("invalid-tsl-graph", `${type} constant needs ${dimOf(type)} component(s), got ${value.length}`);
209
+ for (const component of value) {
210
+ if (!Number.isFinite(component))
211
+ tslError("invalid-tsl-graph", `${type} constant has a non-finite component`);
212
+ }
213
+ return new TslNode(type, { k: "const", value: [...value] });
214
+ }
215
+ export function parseHexColor(value) {
216
+ const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(value.trim());
217
+ if (!match)
218
+ tslError("invalid-tsl-graph", `unsupported color "${value}" (use "#rgb" or "#rrggbb")`);
219
+ let hex = match[1];
220
+ if (hex.length === 3)
221
+ hex = hex.split("").map((c) => c + c).join("");
222
+ return [parseInt(hex.slice(0, 2), 16) / 255, parseInt(hex.slice(2, 4), 16) / 255, parseInt(hex.slice(4, 6), 16) / 255];
223
+ }
224
+ export function toNode(value) {
225
+ if (value instanceof TslNode)
226
+ return value;
227
+ if (typeof value === "number")
228
+ return constNode("float", [value]);
229
+ if (typeof value === "boolean")
230
+ return constNode("bool", [value ? 1 : 0]);
231
+ if (typeof value === "string")
232
+ return constNode("vec3", [...parseHexColor(value)]);
233
+ if (Array.isArray(value) && value.length >= 2 && value.length <= 4)
234
+ return constNode(vecOf(value.length), value);
235
+ return tslError("invalid-tsl-graph", `cannot convert ${String(value)} to a node`);
236
+ }
237
+ /** Promote numeric argument types to one generic type (float or vecN). */
238
+ function promoteGen(op, types, allowInt) {
239
+ let dim = 1;
240
+ let sawFloat = false;
241
+ for (const type of types) {
242
+ if (type === "bool" || type === "sampler2D")
243
+ tslError("tsl-type-mismatch", `${op}() cannot take a ${type} operand`);
244
+ const d = dimOf(type);
245
+ if (d > 1) {
246
+ if (dim > 1 && d !== dim)
247
+ tslError("tsl-type-mismatch", `${op}() cannot combine ${vecOf(dim)} with ${type}`);
248
+ dim = d;
249
+ }
250
+ if (type !== "int")
251
+ sawFloat = true;
252
+ }
253
+ if (dim > 1)
254
+ return vecOf(dim);
255
+ return allowInt && !sawFloat ? "int" : "float";
256
+ }
257
+ const COMPARISONS = new Set(["lessThan", "greaterThan", "lessThanEqual", "greaterThanEqual", "equal", "notEqual"]);
258
+ /** Result type (and validation) for an op over already-converted argument nodes. */
259
+ export function opResultType(name, args) {
260
+ const types = args.map((arg) => arg.type);
261
+ switch (name) {
262
+ case "add":
263
+ case "sub":
264
+ case "mul":
265
+ return promoteGen(name, types, true);
266
+ case "div":
267
+ case "mod":
268
+ case "pow":
269
+ case "min":
270
+ case "max":
271
+ case "atan2":
272
+ case "step":
273
+ return promoteGen(name, types, false);
274
+ case "mix":
275
+ case "smoothstep":
276
+ case "clamp":
277
+ return promoteGen(name, types, false);
278
+ case "sin":
279
+ case "cos":
280
+ case "tan":
281
+ case "sqrt":
282
+ case "exp":
283
+ case "log":
284
+ case "fract":
285
+ case "floor":
286
+ case "ceil":
287
+ case "saturate":
288
+ case "toFloat":
289
+ return promoteGen(name, types, false);
290
+ case "abs":
291
+ case "sign":
292
+ case "negate":
293
+ case "oneMinus":
294
+ return promoteGen(name, types, name === "abs" || name === "negate");
295
+ case "normalize": {
296
+ const type = promoteGen(name, types, false);
297
+ if (!isVec(type))
298
+ tslError("tsl-type-mismatch", "normalize() needs a vec2, vec3 or vec4");
299
+ return type;
300
+ }
301
+ case "length":
302
+ case "distance":
303
+ case "dot": {
304
+ promoteGen(name, types, false);
305
+ return "float";
306
+ }
307
+ case "cross":
308
+ if (types[0] !== "vec3" || types[1] !== "vec3")
309
+ tslError("tsl-type-mismatch", "cross() needs two vec3 operands");
310
+ return "vec3";
311
+ case "toInt":
312
+ if (!isNumericScalar(types[0]))
313
+ tslError("tsl-type-mismatch", "int() needs a float or int scalar");
314
+ return "int";
315
+ case "not":
316
+ if (types[0] !== "bool")
317
+ tslError("tsl-type-mismatch", "not() needs a bool operand");
318
+ return "bool";
319
+ case "and":
320
+ case "or":
321
+ if (types[0] !== "bool" || types[1] !== "bool")
322
+ tslError("tsl-type-mismatch", `${name}() needs two bool operands`);
323
+ return "bool";
324
+ case "select": {
325
+ if (types[0] !== "bool")
326
+ tslError("tsl-type-mismatch", "select() condition must be a bool node");
327
+ if (types[1] === "bool" && types[2] === "bool")
328
+ return "bool";
329
+ return promoteGen(name, types.slice(1), true);
330
+ }
331
+ default:
332
+ if (COMPARISONS.has(name)) {
333
+ for (const type of types)
334
+ if (!isNumericScalar(type) && !(name === "equal" || name === "notEqual"))
335
+ tslError("tsl-type-mismatch", `${name}() compares float or int scalars`);
336
+ if (name !== "equal" && name !== "notEqual" && types.length !== 2)
337
+ tslError("invalid-tsl-graph", `${name}() takes two operands`);
338
+ return "bool";
339
+ }
340
+ return tslError("tsl-unsupported-node", `unsupported op ${String(name)}`);
341
+ }
342
+ }
343
+ const ARITY = {
344
+ sin: 1, cos: 1, tan: 1, abs: 1, sign: 1, sqrt: 1, exp: 1, log: 1, fract: 1, floor: 1, ceil: 1, normalize: 1,
345
+ saturate: 1, oneMinus: 1, negate: 1, length: 1, not: 1, toFloat: 1, toInt: 1,
346
+ add: 2, sub: 2, mul: 2, div: 2, mod: 2, pow: 2, min: 2, max: 2, step: 2, dot: 2, cross: 2, distance: 2, atan2: 2,
347
+ lessThan: 2, greaterThan: 2, lessThanEqual: 2, greaterThanEqual: 2, equal: 2, notEqual: 2, and: 2, or: 2,
348
+ mix: 3, smoothstep: 3, clamp: 3, select: 3
349
+ };
350
+ /** Build an op node, folding it to a constant when every argument is a constant. */
351
+ export function op(name, ...inputs) {
352
+ if (inputs.length !== ARITY[name])
353
+ tslError("invalid-tsl-graph", `${name}() takes ${ARITY[name]} argument(s), got ${inputs.length}`);
354
+ const args = inputs.map((input) => toNode(input));
355
+ const type = opResultType(name, args);
356
+ if (args.every((arg) => arg.data.k === "const")) {
357
+ const folded = evalOp(name, args.map((arg) => ({ type: arg.type, value: arg.data.value })), type);
358
+ return constNode(type, folded);
359
+ }
360
+ return new TslNode(type, { k: "op", op: name, args });
361
+ }
362
+ const at = (value, index) => (value.length === 1 ? value[0] : value[index]);
363
+ const glslFract = (x) => x - Math.floor(x);
364
+ const glslSign = (x) => (x > 0 ? 1 : x < 0 ? -1 : 0);
365
+ const glslMod = (x, y) => x - y * Math.floor(x / y);
366
+ const smooth = (e0, e1, x) => {
367
+ const t = Math.min(1, Math.max(0, (x - e0) / (e1 - e0)));
368
+ return t * t * (3 - 2 * t);
369
+ };
370
+ export function evalOp(name, args, resultType) {
371
+ const n = dimOf(resultType);
372
+ const values = args.map((arg) => arg.value);
373
+ const cw = (fn) => Array.from({ length: n }, (_, i) => fn(...values.map((v) => at(v, i))));
374
+ switch (name) {
375
+ case "add": return cw((a, b) => a + b);
376
+ case "sub": return cw((a, b) => a - b);
377
+ case "mul": return cw((a, b) => a * b);
378
+ case "div": return cw((a, b) => a / b);
379
+ case "mod": return cw((a, b) => glslMod(a, b));
380
+ case "pow": return cw((a, b) => Math.pow(a, b));
381
+ case "min": return cw((a, b) => Math.min(a, b));
382
+ case "max": return cw((a, b) => Math.max(a, b));
383
+ case "atan2": return cw((a, b) => Math.atan2(a, b));
384
+ case "step": return cw((edge, x) => (x < edge ? 0 : 1));
385
+ case "sin": return cw((a) => Math.sin(a));
386
+ case "cos": return cw((a) => Math.cos(a));
387
+ case "tan": return cw((a) => Math.tan(a));
388
+ case "abs": return cw((a) => Math.abs(a));
389
+ case "sign": return cw((a) => glslSign(a));
390
+ case "sqrt": return cw((a) => Math.sqrt(a));
391
+ case "exp": return cw((a) => Math.exp(a));
392
+ case "log": return cw((a) => Math.log(a));
393
+ case "fract": return cw((a) => glslFract(a));
394
+ case "floor": return cw((a) => Math.floor(a));
395
+ case "ceil": return cw((a) => Math.ceil(a));
396
+ case "saturate": return cw((a) => Math.min(1, Math.max(0, a)));
397
+ case "oneMinus": return cw((a) => 1 - a);
398
+ case "negate": return cw((a) => -a);
399
+ case "toFloat": return [values[0][0]];
400
+ case "toInt": return [Math.trunc(values[0][0])];
401
+ case "normalize": {
402
+ const v = values[0];
403
+ const len = Math.hypot(...v);
404
+ return v.map((x) => x / len);
405
+ }
406
+ case "length": return [Math.hypot(...values[0])];
407
+ case "dot": {
408
+ const a = values[0];
409
+ const b = values[1];
410
+ const d = Math.max(a.length, b.length);
411
+ let sum = 0;
412
+ for (let i = 0; i < d; i++)
413
+ sum += at(a, i) * at(b, i);
414
+ return [sum];
415
+ }
416
+ case "distance": {
417
+ const a = values[0];
418
+ const b = values[1];
419
+ const d = Math.max(a.length, b.length);
420
+ let sum = 0;
421
+ for (let i = 0; i < d; i++)
422
+ sum += (at(a, i) - at(b, i)) ** 2;
423
+ return [Math.sqrt(sum)];
424
+ }
425
+ case "cross": {
426
+ const [ax, ay, az] = values[0];
427
+ const [bx, by, bz] = values[1];
428
+ return [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];
429
+ }
430
+ case "mix": return cw((a, b, t) => a * (1 - t) + b * t);
431
+ case "smoothstep": return cw((e0, e1, x) => smooth(e0, e1, x));
432
+ case "clamp": return cw((x, lo, hi) => Math.min(Math.max(x, lo), hi));
433
+ case "select": return values[0][0] ? [...values[1]] : [...values[2]];
434
+ case "lessThan": return [values[0][0] < values[1][0] ? 1 : 0];
435
+ case "greaterThan": return [values[0][0] > values[1][0] ? 1 : 0];
436
+ case "lessThanEqual": return [values[0][0] <= values[1][0] ? 1 : 0];
437
+ case "greaterThanEqual": return [values[0][0] >= values[1][0] ? 1 : 0];
438
+ case "equal": return [values[0][0] === values[1][0] ? 1 : 0];
439
+ case "notEqual": return [values[0][0] !== values[1][0] ? 1 : 0];
440
+ case "and": return [values[0][0] && values[1][0] ? 1 : 0];
441
+ case "or": return [values[0][0] || values[1][0] ? 1 : 0];
442
+ case "not": return [values[0][0] ? 0 : 1];
443
+ default: return tslError("tsl-unsupported-node", `unsupported op ${String(name)}`);
444
+ }
445
+ }
446
+ /* ------------------------------------------------------------------------- */
447
+ /* Swizzle + construct */
448
+ /* ------------------------------------------------------------------------- */
449
+ const SWIZZLE_SETS = ["xyzw", "rgba"];
450
+ export function swizzle(src, comps) {
451
+ const set = SWIZZLE_SETS.find((candidate) => [...comps].every((c) => candidate.includes(c)));
452
+ if (!set || comps.length < 1 || comps.length > 4)
453
+ tslError("invalid-tsl-graph", `invalid swizzle ".${comps}"`);
454
+ if (!isVec(src.type))
455
+ tslError("tsl-type-mismatch", `cannot swizzle a ${src.type}`);
456
+ const indices = [...comps].map((c) => set.indexOf(c));
457
+ if (indices.some((i) => i >= dimOf(src.type)))
458
+ tslError("tsl-type-mismatch", `swizzle ".${comps}" is out of range for ${src.type}`);
459
+ const normalized = indices.map((i) => "xyzw"[i]).join("");
460
+ const type = vecOf(indices.length);
461
+ if (src.data.k === "const")
462
+ return constNode(type, indices.map((i) => src.data.value[i]));
463
+ return new TslNode(type, { k: "swizzle", src, comps: normalized });
464
+ }
465
+ export function construct(type, inputs) {
466
+ const args = inputs.map((input) => toNode(input));
467
+ const need = dimOf(type);
468
+ const total = args.reduce((sum, arg) => sum + dimOf(arg.type), 0);
469
+ for (const arg of args)
470
+ if (arg.type === "bool" || arg.type === "sampler2D")
471
+ tslError("tsl-type-mismatch", `${type}() cannot take a ${arg.type}`);
472
+ const broadcast = args.length === 1 && dimOf(args[0].type) === 1;
473
+ if (!broadcast && total !== need)
474
+ tslError("tsl-type-mismatch", `${type}() needs ${need} component(s) in total, got ${total}`);
475
+ if (args.every((arg) => arg.data.k === "const")) {
476
+ const flat = args.flatMap((arg) => [...arg.data.value]);
477
+ return constNode(type, broadcast ? Array.from({ length: need }, () => flat[0]) : flat);
478
+ }
479
+ return new TslNode(type, { k: "construct", args });
480
+ }
481
+ /* Swizzle accessors (x, y, z, w, xy, xyz, rgb, ...) defined once on the prototype. */
482
+ const swizzleKeys = new Set();
483
+ function defineSwizzles(set) {
484
+ const build = (prefix, depth) => {
485
+ for (const ch of set) {
486
+ const key = prefix + ch;
487
+ swizzleKeys.add(key);
488
+ if (depth < 4)
489
+ build(key, depth + 1);
490
+ }
491
+ };
492
+ build("", 1);
493
+ }
494
+ for (const set of SWIZZLE_SETS)
495
+ defineSwizzles(set);
496
+ for (const key of swizzleKeys) {
497
+ if (key in TslNode.prototype)
498
+ continue;
499
+ Object.defineProperty(TslNode.prototype, key, { configurable: true, get() { return swizzle(this, key); } });
500
+ }
501
+ //# sourceMappingURL=ir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.js","sourceRoot":"","sources":["../../../../../../../packages/engine/src/agent-api/nodes/tsl/ir.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import type { GamePlatformerSceneBinding, GameRacingSceneBinding } from "../Game
8
8
  import type { LabelTelemetry, TextBucketSummary } from "../LabelTelemetry.js";
9
9
  import type { ProjectedLabel } from "../WorldLabelRenderer.js";
10
10
  import type { PublicPlatformerGeometryContract, PublicRacingGeometryContract } from "../PublicGameGeometry.js";
11
- import type { RenderDeviceDiagnostics, RendererPostprocessExecutionMode, WrinkleMapHook } from "../../../rendering/index.js";
11
+ import type { RenderDeviceDiagnostics, RendererPostprocessExecutionMode, WrinkleMapHook, Texture } from "../../../rendering/index.js";
12
12
  import type { auraAssetRefBrand } from "./assets.js";
13
13
  import type { GameRuntimeSourceEvidence } from "../GameEvidence.js";
14
14
  export type AuraVec3 = readonly [number, number, number];
@@ -2270,7 +2270,7 @@ export type AuraCustomUniformSpec = AuraCustomUniformType | {
2270
2270
  readonly value?: unknown;
2271
2271
  };
2272
2272
  /** Runtime uniform write (handle.setUniform / setPassUniform). */
2273
- export type AuraUniformValue = number | boolean | readonly number[] | AuraVec3 | readonly AuraVec3[] | readonly [number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | AuraTextureRef;
2273
+ export type AuraUniformValue = number | boolean | readonly number[] | AuraVec3 | readonly AuraVec3[] | readonly [number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | AuraTextureRef | AuraAssetRef<"texture"> | Texture;
2274
2274
  /**
2275
2275
  * SH-02 (L1): `material.custom(spec)` payload. GLSL is required —
2276
2276
  * `createAuraApp` mounts WebGL2 (PRD C2); `wgsl` is optional and runs only on