@aura3d/cli 4.6.1 → 4.7.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.
Files changed (45) hide show
  1. package/dist/admission/cubeLut.d.ts +18 -0
  2. package/dist/admission/cubeLut.d.ts.map +1 -0
  3. package/dist/admission/cubeLut.js +53 -0
  4. package/dist/admission/cubeLut.js.map +1 -0
  5. package/dist/asset-core-types.d.ts +7 -4
  6. package/dist/asset-core-types.d.ts.map +1 -1
  7. package/dist/cli-help.d.ts.map +1 -1
  8. package/dist/cli-help.js +7 -4
  9. package/dist/cli-help.js.map +1 -1
  10. package/dist/cli-options.d.ts +1 -1
  11. package/dist/cli-options.d.ts.map +1 -1
  12. package/dist/cli-options.js +2 -2
  13. package/dist/cli-options.js.map +1 -1
  14. package/dist/cli.js +3 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/assets/certifyCategories.d.ts +26 -0
  17. package/dist/commands/assets/certifyCategories.d.ts.map +1 -0
  18. package/dist/commands/assets/certifyCategories.js +31 -0
  19. package/dist/commands/assets/certifyCategories.js.map +1 -0
  20. package/dist/commands/assets/optimize.d.ts +66 -0
  21. package/dist/commands/assets/optimize.d.ts.map +1 -1
  22. package/dist/commands/assets/optimize.js +270 -1
  23. package/dist/commands/assets/optimize.js.map +1 -1
  24. package/dist/commands/assets/optimizeVerb.d.ts.map +1 -1
  25. package/dist/commands/assets/optimizeVerb.js +26 -1
  26. package/dist/commands/assets/optimizeVerb.js.map +1 -1
  27. package/dist/commands/evidence/judge.d.ts +50 -1
  28. package/dist/commands/evidence/judge.d.ts.map +1 -1
  29. package/dist/commands/evidence/judge.js +154 -6
  30. package/dist/commands/evidence/judge.js.map +1 -1
  31. package/dist/commands/prd05/index.js +1 -1
  32. package/dist/commands/prd05/index.js.map +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +25 -9
  35. package/dist/index.js.map +1 -1
  36. package/dist/look/judge.d.ts +53 -5
  37. package/dist/look/judge.d.ts.map +1 -1
  38. package/dist/look/judge.js +226 -50
  39. package/dist/look/judge.js.map +1 -1
  40. package/package.json +5 -5
  41. package/skills/aura3d-art-direction/references/look-recipes.md +2 -1
  42. package/skills/aura3d-game-art/SKILL.md +39 -17
  43. package/skills/aura3d-materials-environments/SKILL.md +4 -4
  44. package/skills/aura3d-materials-environments/references/look-overrides-4.7.md +93 -0
  45. package/skills/llms.txt +2 -2
@@ -5,6 +5,9 @@
5
5
  * budgeted simplify, prune, texture downscale (colour/ORM -> jpeg, normal -> png) and a stable vertex order. Geometry
6
6
  * stays float32 by default: meshopt quantisation moves scale into a node transform, which skews the grounding and
7
7
  * bounds checks `assets import-meshy` runs, so `meshopt: true` is for static background props you will not measure.
8
+ *
9
+ * GU47 E-A HDRI delivery: `aura3d assets optimize --file in.hdr --out out_1k.hdr --hdri 1k|2k [--rgb9e5-cube]` writes
10
+ * a box-downsized Radiance `.hdr` and, with `--rgb9e5-cube`, a KTX2 RGB9E5 radiance cube next to it (`optimizeHdriFile`).
8
11
  */
9
12
  import { type GltfToolkit } from "./gltfToolkit.js";
10
13
  export type OptimizeRole = "hero" | "vehicle" | "character" | "prop" | "background";
@@ -51,4 +54,67 @@ export declare function isOptimizeRole(value: string): value is OptimizeRole;
51
54
  export declare function planOptimize(options: Pick<OptimizeGlbOptions, "role" | "maxVerts" | "tex" | "simplify" | "meshopt" | "error">): OptimizePlan;
52
55
  export declare function optimizeGlbFile(options: OptimizeGlbOptions): Promise<OptimizeGlbResult>;
53
56
  export declare function optimizeUsage(): string;
57
+ /**
58
+ * Rendering math resolves through the declared `@aura3d/rendering` dependency's `./lanes` export (as
59
+ * `environments bake` does), so the command also works from a packed install.
60
+ */
61
+ type RenderingLanes = typeof import("@aura3d/rendering/lanes");
62
+ type HdrImage = import("@aura3d/rendering/lanes").HdrImage;
63
+ export type HdriSize = "1k" | "2k";
64
+ /** Equirect width per `--hdri` size; the height keeps the source aspect (2:1 for an equirect). */
65
+ export declare const HDRI_SIZE_WIDTH: Readonly<Record<HdriSize, number>>;
66
+ export declare function isHdriSize(value: string): value is HdriSize;
67
+ export interface OptimizeHdriOptions {
68
+ readonly input: string;
69
+ readonly output: string;
70
+ readonly projectDir?: string;
71
+ readonly size: HdriSize;
72
+ /** Explicit output width (default `HDRI_SIZE_WIDTH[size]`); a source at or below it is re-encoded, never upsampled. */
73
+ readonly width?: number;
74
+ /** Also write `<output stem>.rgb9e5.ktx2`: a radiance cube, face = output width / 8, box-filtered mip chain. */
75
+ readonly rgb9e5Cube?: boolean;
76
+ }
77
+ export interface OptimizeHdriResult {
78
+ readonly input: string;
79
+ readonly output: string;
80
+ readonly size: HdriSize;
81
+ readonly bytesIn: number;
82
+ readonly bytesOut: number;
83
+ readonly widthIn: number;
84
+ readonly heightIn: number;
85
+ readonly width: number;
86
+ readonly height: number;
87
+ readonly resized: boolean;
88
+ readonly cube?: {
89
+ readonly output: string;
90
+ readonly faceSize: number;
91
+ readonly mipCount: number;
92
+ readonly bytes: number;
93
+ };
94
+ }
95
+ /**
96
+ * Area-average (box) resample of an RGB float equirect: exact 2x2 / 8x8 means for integer ratios, fractional footprints
97
+ * otherwise, so the mean radiance (what IBL integrates) is kept. Never upsamples: a target at or above the source on an
98
+ * axis keeps that axis.
99
+ */
100
+ export declare function downsampleHdrImage(image: HdrImage, width: number, height: number): HdrImage;
101
+ /**
102
+ * Radiance RGBE `.hdr` writer: `#?RADIANCE`, `FORMAT=32-bit_rle_rgbe`, `-Y h +X w`, then per-scanline RLE (flat
103
+ * scanlines for widths outside 8..32767). `decodeHdrEquirect` reads it back.
104
+ */
105
+ export declare function encodeRadianceHdr(image: HdrImage, comments?: readonly string[]): Uint8Array;
106
+ /**
107
+ * KTX2 RGB9E5 cube of an equirect: mip 0 resampled through `equirectToCubeFaces`, then a box-filtered mip chain to 1x1,
108
+ * packed with `packRgb9e5` into the minimal container `readRgb9e5Cube` reads (6 faces, no supercompression). A radiance
109
+ * cube for delivery; `aura3d environments bake --hdr` makes the GGX-prefiltered probe.
110
+ */
111
+ export declare function encodeRgb9e5CubeKtx2(lanes: Pick<RenderingLanes, "equirectToCubeFaces" | "packRgb9e5" | "KTX2_MAGIC" | "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32">, image: HdrImage, faceSize: number): {
112
+ readonly bytes: Uint8Array;
113
+ readonly mipCount: number;
114
+ };
115
+ /** `out_1k.hdr` -> `out_1k.rgb9e5.ktx2`. */
116
+ export declare function hdriCubePath(output: string): string;
117
+ export declare function optimizeHdriFile(options: OptimizeHdriOptions): Promise<OptimizeHdriResult>;
118
+ export declare function optimizeHdriUsage(): string;
119
+ export {};
54
120
  //# sourceMappingURL=optimize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimize.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAiC,KAAK,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAE/F,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC;AAEpF,4GAA4G;AAC5G,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAMhH,CAAC;AAEF,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,YAAY,CAW5I;AASD,wBAAsB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6B7F;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"optimize.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimize.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,11 @@
5
5
  * budgeted simplify, prune, texture downscale (colour/ORM -> jpeg, normal -> png) and a stable vertex order. Geometry
6
6
  * stays float32 by default: meshopt quantisation moves scale into a node transform, which skews the grounding and
7
7
  * bounds checks `assets import-meshy` runs, so `meshopt: true` is for static background props you will not measure.
8
+ *
9
+ * GU47 E-A HDRI delivery: `aura3d assets optimize --file in.hdr --out out_1k.hdr --hdri 1k|2k [--rgb9e5-cube]` writes
10
+ * a box-downsized Radiance `.hdr` and, with `--rgb9e5-cube`, a KTX2 RGB9E5 radiance cube next to it (`optimizeHdriFile`).
8
11
  */
9
- import { mkdirSync, statSync } from "node:fs";
12
+ import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
10
13
  import { dirname, resolve } from "node:path";
11
14
  import { createGltfIo, loadGltfToolkit } from "./gltfToolkit.js";
12
15
  /** Vertex and texture budgets by role (Meshy meshes weld to roughly half as many vertices as triangles). */
@@ -73,4 +76,270 @@ export async function optimizeGlbFile(options) {
73
76
  export function optimizeUsage() {
74
77
  return "aura3d assets optimize --file in.glb --out out.glb [--role hero|vehicle|character|prop|background] [--max-verts N] [--tex N] [--no-simplify] [--meshopt] [--error 0.05] [--json]";
75
78
  }
79
+ const renderingLanes = () => import("@aura3d/rendering/lanes");
80
+ /** Equirect width per `--hdri` size; the height keeps the source aspect (2:1 for an equirect). */
81
+ export const HDRI_SIZE_WIDTH = { "1k": 1024, "2k": 2048 };
82
+ export function isHdriSize(value) {
83
+ return value === "1k" || value === "2k";
84
+ }
85
+ /** Per-axis box filter taps: destination pixel `d` averages its fractional source footprint `[d*r, (d+1)*r)`. */
86
+ function boxTaps(source, target) {
87
+ const ratio = source / target;
88
+ const start = new Int32Array(target + 1);
89
+ const index = [];
90
+ const weight = [];
91
+ for (let d = 0; d < target; d += 1) {
92
+ start[d] = index.length;
93
+ const lo = d * ratio;
94
+ const hi = (d + 1) * ratio;
95
+ for (let s = Math.floor(lo); s < Math.min(source, Math.ceil(hi)); s += 1) {
96
+ const overlap = Math.min(s + 1, hi) - Math.max(s, lo);
97
+ if (overlap > 0) {
98
+ index.push(s);
99
+ weight.push(overlap / ratio);
100
+ }
101
+ }
102
+ }
103
+ start[target] = index.length;
104
+ return { index: Int32Array.from(index), weight: Float32Array.from(weight), start };
105
+ }
106
+ /**
107
+ * Area-average (box) resample of an RGB float equirect: exact 2x2 / 8x8 means for integer ratios, fractional footprints
108
+ * otherwise, so the mean radiance (what IBL integrates) is kept. Never upsamples: a target at or above the source on an
109
+ * axis keeps that axis.
110
+ */
111
+ export function downsampleHdrImage(image, width, height) {
112
+ const outW = Math.max(1, Math.min(image.width, Math.round(width)));
113
+ const outH = Math.max(1, Math.min(image.height, Math.round(height)));
114
+ if (outW === image.width && outH === image.height)
115
+ return image;
116
+ const tx = boxTaps(image.width, outW);
117
+ const ty = boxTaps(image.height, outH);
118
+ // Horizontal pass: image.height rows of outW pixels.
119
+ const rows = new Float32Array(outW * image.height * 3);
120
+ for (let y = 0; y < image.height; y += 1) {
121
+ const src = y * image.width * 3;
122
+ const dst = y * outW * 3;
123
+ for (let x = 0; x < outW; x += 1) {
124
+ let r = 0, g = 0, b = 0;
125
+ for (let t = tx.start[x]; t < tx.start[x + 1]; t += 1) {
126
+ const i = src + tx.index[t] * 3;
127
+ const w = tx.weight[t];
128
+ r += image.data[i] * w;
129
+ g += image.data[i + 1] * w;
130
+ b += image.data[i + 2] * w;
131
+ }
132
+ rows[dst + x * 3] = r;
133
+ rows[dst + x * 3 + 1] = g;
134
+ rows[dst + x * 3 + 2] = b;
135
+ }
136
+ }
137
+ // Vertical pass.
138
+ const data = new Float32Array(outW * outH * 3);
139
+ for (let y = 0; y < outH; y += 1) {
140
+ const dst = y * outW * 3;
141
+ for (let t = ty.start[y]; t < ty.start[y + 1]; t += 1) {
142
+ const src = ty.index[t] * outW * 3;
143
+ const w = ty.weight[t];
144
+ for (let i = 0; i < outW * 3; i += 1)
145
+ data[dst + i] = data[dst + i] + rows[src + i] * w;
146
+ }
147
+ }
148
+ return { width: outW, height: outH, data };
149
+ }
150
+ /** Float RGB to an RGBE texel, the inverse of `decodeHdrEquirect`'s `m * 2^(e-128) / 255` (three r185 convention). */
151
+ function writeRgbeTexel(r, g, b, out, offset, stride) {
152
+ const max = Math.max(r, g, b);
153
+ let exp = max > 1e-32 && Number.isFinite(max) ? Math.floor(Math.log2(max)) + 1 : -Infinity;
154
+ if (exp !== -Infinity && max / Math.pow(2, exp) >= 1)
155
+ exp += 1; // log2 rounding at exact powers of two
156
+ if (exp === -Infinity || exp + 128 < 1) {
157
+ out[offset] = 0;
158
+ out[offset + stride] = 0;
159
+ out[offset + stride * 2] = 0;
160
+ out[offset + stride * 3] = 0;
161
+ return;
162
+ }
163
+ const e = Math.min(255, exp + 128);
164
+ const scale = 255 / Math.pow(2, e - 128);
165
+ const byte = (c) => Math.min(255, Math.max(0, Math.round(c * scale)));
166
+ out[offset] = byte(r);
167
+ out[offset + stride] = byte(g);
168
+ out[offset + stride * 2] = byte(b);
169
+ out[offset + stride * 3] = e;
170
+ }
171
+ const RLE_MIN_RUN = 4;
172
+ /** One planar channel of a scanline in the new-style Radiance RLE: runs (count > 128) of >= 4 bytes, else dumps. */
173
+ function writeRleChannel(src, start, length, out, at) {
174
+ const end = start + length;
175
+ let cursor = start;
176
+ let o = at;
177
+ while (cursor < end) {
178
+ let runStart = cursor;
179
+ let runLength = 0;
180
+ while (runStart < end) {
181
+ runLength = 1;
182
+ while (runLength < 127 && runStart + runLength < end && src[runStart + runLength] === src[runStart])
183
+ runLength += 1;
184
+ if (runLength >= RLE_MIN_RUN)
185
+ break;
186
+ runStart += runLength;
187
+ }
188
+ if (runStart >= end) {
189
+ runStart = end;
190
+ runLength = 0;
191
+ }
192
+ while (cursor < runStart) {
193
+ const count = Math.min(128, runStart - cursor);
194
+ out[o++] = count;
195
+ out.set(src.subarray(cursor, cursor + count), o);
196
+ o += count;
197
+ cursor += count;
198
+ }
199
+ if (runLength >= RLE_MIN_RUN) {
200
+ out[o++] = 128 + runLength;
201
+ out[o++] = src[runStart];
202
+ cursor = runStart + runLength;
203
+ }
204
+ }
205
+ return o;
206
+ }
207
+ /**
208
+ * Radiance RGBE `.hdr` writer: `#?RADIANCE`, `FORMAT=32-bit_rle_rgbe`, `-Y h +X w`, then per-scanline RLE (flat
209
+ * scanlines for widths outside 8..32767). `decodeHdrEquirect` reads it back.
210
+ */
211
+ export function encodeRadianceHdr(image, comments = []) {
212
+ const { width, height, data } = image;
213
+ const header = new TextEncoder().encode(`#?RADIANCE\n${comments.map((line) => `# ${line.replace(/[\r\n]+/g, " ")}\n`).join("")}FORMAT=32-bit_rle_rgbe\n\n-Y ${height} +X ${width}\n`);
214
+ const rle = width >= 8 && width <= 0x7fff;
215
+ // Worst case per scanline: the 4-byte RLE marker plus one dump byte per 128 literal bytes on each channel.
216
+ const perLine = rle ? 4 + 4 * (width + Math.ceil(width / 128)) : width * 4;
217
+ const out = new Uint8Array(header.length + perLine * height);
218
+ out.set(header, 0);
219
+ let o = header.length;
220
+ const line = new Uint8Array(width * 4);
221
+ for (let y = 0; y < height; y += 1) {
222
+ for (let x = 0; x < width; x += 1) {
223
+ const i = (y * width + x) * 3;
224
+ // Planar (r..., g..., b..., e...) for RLE; interleaved rgbe for flat scanlines.
225
+ if (rle)
226
+ writeRgbeTexel(data[i], data[i + 1], data[i + 2], line, x, width);
227
+ else
228
+ writeRgbeTexel(data[i], data[i + 1], data[i + 2], line, x * 4, 1);
229
+ }
230
+ if (!rle) {
231
+ out.set(line, o);
232
+ o += line.length;
233
+ continue;
234
+ }
235
+ out[o++] = 2;
236
+ out[o++] = 2;
237
+ out[o++] = width >> 8;
238
+ out[o++] = width & 0xff;
239
+ for (let c = 0; c < 4; c += 1)
240
+ o = writeRleChannel(line, c * width, width, out, o);
241
+ }
242
+ return out.subarray(0, o);
243
+ }
244
+ /** 2x2 box mip of one RGBA float cube face. */
245
+ function halveFace(face, size) {
246
+ const half = Math.max(1, size >> 1);
247
+ const out = new Float32Array(half * half * 4);
248
+ for (let y = 0; y < half; y += 1) {
249
+ for (let x = 0; x < half; x += 1) {
250
+ for (let c = 0; c < 4; c += 1) {
251
+ const at = (yy, xx) => face[(Math.min(size - 1, yy) * size + Math.min(size - 1, xx)) * 4 + c];
252
+ out[(y * half + x) * 4 + c] = (at(2 * y, 2 * x) + at(2 * y, 2 * x + 1) + at(2 * y + 1, 2 * x) + at(2 * y + 1, 2 * x + 1)) / 4;
253
+ }
254
+ }
255
+ }
256
+ return out;
257
+ }
258
+ /**
259
+ * KTX2 RGB9E5 cube of an equirect: mip 0 resampled through `equirectToCubeFaces`, then a box-filtered mip chain to 1x1,
260
+ * packed with `packRgb9e5` into the minimal container `readRgb9e5Cube` reads (6 faces, no supercompression). A radiance
261
+ * cube for delivery; `aura3d environments bake --hdr` makes the GGX-prefiltered probe.
262
+ */
263
+ export function encodeRgb9e5CubeKtx2(lanes, image, faceSize) {
264
+ const levels = [lanes.equirectToCubeFaces(image, faceSize)];
265
+ for (let size = faceSize; size > 1; size >>= 1)
266
+ levels.push(levels[levels.length - 1].map((face) => halveFace(face, size)));
267
+ const header = 68;
268
+ const indexBytes = levels.length * 24;
269
+ const levelBytes = levels.map((_, level) => 6 * Math.max(1, faceSize >> level) ** 2 * 4);
270
+ const bytes = new Uint8Array(header + indexBytes + levelBytes.reduce((sum, n) => sum + n, 0));
271
+ bytes.set(lanes.KTX2_MAGIC, 0);
272
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
273
+ view.setUint32(12, lanes.VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, true);
274
+ view.setUint32(16, 4, true); // typeSize
275
+ view.setUint32(20, faceSize, true);
276
+ view.setUint32(24, faceSize, true);
277
+ view.setUint32(36, 6, true); // faces; depth, layers and supercompression stay 0
278
+ view.setUint32(40, levels.length, true);
279
+ view.setUint32(48, header, true); // empty DFD / KVD at the header end
280
+ view.setUint32(56, header, true);
281
+ let offset = header + indexBytes;
282
+ levels.forEach((faces, level) => {
283
+ const size = Math.max(1, faceSize >> level);
284
+ view.setBigUint64(header + level * 24, BigInt(offset), true);
285
+ view.setBigUint64(header + level * 24 + 8, BigInt(levelBytes[level]), true);
286
+ view.setBigUint64(header + level * 24 + 16, BigInt(levelBytes[level]), true);
287
+ for (const face of faces) {
288
+ for (let t = 0; t < size * size; t += 1) {
289
+ view.setUint32(offset, lanes.packRgb9e5(face[t * 4], face[t * 4 + 1], face[t * 4 + 2]), true);
290
+ offset += 4;
291
+ }
292
+ }
293
+ });
294
+ return { bytes, mipCount: levels.length };
295
+ }
296
+ /** `out_1k.hdr` -> `out_1k.rgb9e5.ktx2`. */
297
+ export function hdriCubePath(output) {
298
+ return `${output.replace(/\.hdr$/i, "")}.rgb9e5.ktx2`;
299
+ }
300
+ export async function optimizeHdriFile(options) {
301
+ if (!isHdriSize(options.size))
302
+ throw new Error(`--hdri must be 1k or 2k (got ${String(options.size)}).`);
303
+ const projectDir = resolve(options.projectDir ?? process.cwd());
304
+ const input = resolve(projectDir, options.input);
305
+ const output = resolve(projectDir, options.output);
306
+ if (input === output)
307
+ throw new Error("--out must differ from --file: optimize never overwrites its input.");
308
+ const width = options.width ?? HDRI_SIZE_WIDTH[options.size];
309
+ if (!Number.isInteger(width) || width < 8)
310
+ throw new Error(`HDRI width must be an integer >= 8 (got ${width}).`);
311
+ const lanes = await renderingLanes();
312
+ const source = lanes.decodeHdrEquirect(readFileSync(input));
313
+ const image = downsampleHdrImage(source, width, Math.max(1, Math.round((width * source.height) / source.width)));
314
+ const resized = image !== source;
315
+ const encoded = encodeRadianceHdr(image, [
316
+ `aura3d assets optimize --hdri ${options.size}: ${source.width}x${source.height} -> ${image.width}x${image.height} box filter`
317
+ ]);
318
+ mkdirSync(dirname(output), { recursive: true });
319
+ writeFileSync(output, encoded);
320
+ let cube;
321
+ if (options.rgb9e5Cube) {
322
+ const faceSize = Math.max(1, 2 ** Math.floor(Math.log2(Math.max(1, image.width / 8))));
323
+ const { bytes, mipCount } = encodeRgb9e5CubeKtx2(lanes, image, faceSize);
324
+ const cubeOutput = hdriCubePath(output);
325
+ writeFileSync(cubeOutput, bytes);
326
+ cube = { output: cubeOutput, faceSize, mipCount, bytes: bytes.byteLength };
327
+ }
328
+ return {
329
+ input,
330
+ output,
331
+ size: options.size,
332
+ bytesIn: statSync(input).size,
333
+ bytesOut: encoded.byteLength,
334
+ widthIn: source.width,
335
+ heightIn: source.height,
336
+ width: image.width,
337
+ height: image.height,
338
+ resized,
339
+ ...(cube ? { cube } : {})
340
+ };
341
+ }
342
+ export function optimizeHdriUsage() {
343
+ return "aura3d assets optimize --file in.hdr --out out_1k.hdr --hdri 1k|2k [--rgb9e5-cube] [--json]";
344
+ }
76
345
  //# sourceMappingURL=optimize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAgC,MAAM,kBAAkB,CAAC;AAI/F,4GAA4G;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAwF;IACnH,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;IACpC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;IACvC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;IACzC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAqCzC,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,IAAI,gBAAgB,CAAC;AACnC,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,YAAY,CAAC,OAAiG;IAC5H,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxI,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,IAAI,CAAC,CAAC;IAC/H,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,oBAAoB;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,oBAAoB,SAAS,GAAG,IAAI,CAAC,CAAC;IACnK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,IAAI,CAAC,CAAC;IAC7F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;AACjH,CAAC;AAED,SAAS,UAAU,CAAC,GAAU;IAC5B,OAAO,GAAG;SACP,OAAO,EAAE;SACT,UAAU,EAAE;SACZ,MAAM,CAAC,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1K,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA2B;IAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IACxG,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACrK,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,GAAG,CAAC,SAAS,CACjB,QAAQ,EAAE,EACV,KAAK,EAAE,EACP,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAClI,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAC3F,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAC7C,CAAC;IACF,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACnK,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,kLAAkL,CAAC;AAC5L,CAAC;AAaD,MAAM,cAAc,GAAG,GAA4B,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAIxF,kGAAkG;AAClG,MAAM,CAAC,MAAM,eAAe,GAAuC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE9F,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;AAC1C,CAAC;AA2BD,iHAAiH;AACjH,SAAS,OAAO,CAAC,MAAc,EAAE,MAAc;IAC7C,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;IAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,qDAAqD;IACrD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;gBACxB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC;gBAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;gBAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,iBAAiB;IACjB,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,sHAAsH;AACtH,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAe,EAAE,MAAc,EAAE,MAAc;IACtG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3F,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE,GAAG,IAAI,CAAC,CAAC,CAAC,uCAAuC;IACvG,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACtG,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,oHAAoH;AACpH,SAAS,eAAe,CAAC,GAAe,EAAE,KAAa,EAAE,MAAc,EAAE,GAAe,EAAE,EAAU;IAClG,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,MAAM,GAAG,GAAG,EAAE,CAAC;QACpB,IAAI,QAAQ,GAAG,MAAM,CAAC;QACtB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,OAAO,QAAQ,GAAG,GAAG,EAAE,CAAC;YACtB,SAAS,GAAG,CAAC,CAAC;YACd,OAAO,SAAS,GAAG,GAAG,IAAI,QAAQ,GAAG,SAAS,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YACpH,IAAI,SAAS,IAAI,WAAW;gBAAE,MAAM;YACpC,QAAQ,IAAI,SAAS,CAAC;QACxB,CAAC;QACD,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACpB,QAAQ,GAAG,GAAG,CAAC;YACf,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;YAC/C,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC,IAAI,KAAK,CAAC;YACX,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;QACD,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;YAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAE,CAAC;YAC1B,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAe,EAAE,WAA8B,EAAE;IACjF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CACrC,eAAe,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,gCAAgC,MAAM,OAAO,KAAK,IAAI,CAC7I,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC;IAC1C,2GAA2G;IAC3G,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9B,gFAAgF;YAChF,IAAI,GAAG;gBAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;;gBACzE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;YACjB,SAAS;QACX,CAAC;QACD,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,+CAA+C;AAC/C,SAAS,SAAS,CAAC,IAAkB,EAAE,IAAY;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAU,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;gBACvH,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChI,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAqH,EACrH,KAAe,EACf,QAAgB;IAEhB,MAAM,MAAM,GAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,KAAK,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW;IACxC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,mDAAmD;IAChF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,oCAAoC;IACtE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACjC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACjG,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IACjE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzG,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,IAAI,CAAC,CAAC;IACjH,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;IACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE;QACvC,iCAAiC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,aAAa;KAC/H,CAAC,CAAC;IACH,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,IAAgC,CAAC;IACrC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO;QACL,KAAK;QACL,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI;QAC7B,QAAQ,EAAE,OAAO,CAAC,UAAU;QAC5B,OAAO,EAAE,MAAM,CAAC,KAAK;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,6FAA6F,CAAC;AACvG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeVerb.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimizeVerb.ts"],"names":[],"mappings":"AAEA,UAAU,MAAM;IACd,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAQD,sHAAsH;AACtH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B3F"}
1
+ {"version":3,"file":"optimizeVerb.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimizeVerb.ts"],"names":[],"mappings":"AAUA,UAAU,MAAM;IACd,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAyBD,sHAAsH;AACtH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC3F"}
@@ -1,15 +1,40 @@
1
- import { isOptimizeRole, optimizeGlbFile, optimizeUsage } from "./optimize.js";
1
+ import { isHdriSize, isOptimizeRole, optimizeGlbFile, optimizeHdriFile, optimizeHdriUsage, optimizeUsage } from "./optimize.js";
2
2
  function flag(argv, name) {
3
3
  const index = argv.indexOf(name);
4
4
  const value = index >= 0 ? argv[index + 1] : undefined;
5
5
  return value && !value.startsWith("--") ? value : undefined;
6
6
  }
7
+ /** GU47 E-A: `--file in.hdr --out out_1k.hdr --hdri 1k|2k [--rgb9e5-cube]` (downsized `.hdr`, optional RGB9E5 cube). */
8
+ async function optimizeHdriVerb(argv, io, file, out) {
9
+ const size = flag(argv, "--hdri");
10
+ if (size === undefined || !isHdriSize(size)) {
11
+ io.stderr(`Unsupported --hdri "${size ?? ""}". Use 1k or 2k. Usage: ${optimizeHdriUsage()}`);
12
+ return 2;
13
+ }
14
+ const result = await optimizeHdriFile({ projectDir: io.cwd, input: file, output: out, size, rgb9e5Cube: argv.includes("--rgb9e5-cube") });
15
+ if (argv.includes("--json")) {
16
+ io.stdout(JSON.stringify(result, null, 2));
17
+ return 0;
18
+ }
19
+ io.stdout(`${result.output}: ${result.bytesIn} -> ${result.bytesOut} bytes, ${result.widthIn}x${result.heightIn} -> ${result.width}x${result.height}${result.resized ? "" : " (source at or below target, not upsampled)"}`);
20
+ if (result.cube)
21
+ io.stdout(`${result.cube.output}: RGB9E5 cube ${result.cube.faceSize}px x ${result.cube.mipCount} mips, ${result.cube.bytes} bytes`);
22
+ return 0;
23
+ }
7
24
  /** CLI wrapper for direct-file optimize; the prd05 `assets optimize` verb delegates here when `--file` is present. */
8
25
  export async function optimizeFileVerb(argv, io) {
9
26
  const file = flag(argv, "--file");
10
27
  const out = flag(argv, "--out");
28
+ const hdri = argv.includes("--hdri");
11
29
  if (!file || !out) {
12
30
  io.stderr(`Usage: ${optimizeUsage()}`);
31
+ io.stderr(` ${optimizeHdriUsage()}`);
32
+ return 2;
33
+ }
34
+ if (hdri)
35
+ return optimizeHdriVerb(argv, io, file, out);
36
+ if (argv.includes("--rgb9e5-cube")) {
37
+ io.stderr(`--rgb9e5-cube needs --hdri. Usage: ${optimizeHdriUsage()}`);
13
38
  return 2;
14
39
  }
15
40
  const role = flag(argv, "--role");
@@ -1 +1 @@
1
- {"version":3,"file":"optimizeVerb.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimizeVerb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimizeVerb.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/assets/optimizeVerb.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,57 @@
5
5
  * name. For every trial the reference is shown as image A or B in a seeded, balanced order; a vision-capable model reached
6
6
  * through Kiro Prism (`/v1/messages`, never a provider SDK) says whether the two are the same game and which one is the
7
7
  * reference. The key comes from `PRISM_KEY_FILE` (or `PRISM_API_KEY`) at run time and is never printed or written.
8
+ *
9
+ * `--mode sibling` (GU47 WP-9 E-I) asks a different question of two DIFFERENT games: "are these two frames from the same
10
+ * game?". `--a` holds this game's frames, `--b` a genre neighbour's; frames are paired by a seeded shuffle of every (a, b)
11
+ * combination (not by name), this game's frame shows as Image A in half the trials of each pass, and the result carries
12
+ * `same_game` / `same_game_confidence` (majority answer and the mean confidence of the trials that gave it). The PRD
13
+ * acceptance is `same_game: false` at `same_game_confidence >= 0.8`.
8
14
  */
9
- export declare const JUDGE_USAGE = "aura3d evidence judge --a <ref-frames-dir> --b <candidate-frames-dir> [--trials 48] [--seed 20261023] [--out dir] [--model claude-sonnet-5.5] [--concurrency 3] [--subject \"a browser 3D game\"] [--no-judge] [--json]";
15
+ export declare const JUDGE_USAGE = "aura3d evidence judge --a <ref-frames-dir> --b <candidate-frames-dir> [--mode reference|sibling] [--trials 48] [--seed 20261023] [--out dir] [--model claude-sonnet-5.5] [--concurrency 3] [--subject \"a browser 3D game\"] [--no-judge] [--json]";
16
+ export type JudgeMode = "reference" | "sibling";
17
+ /** Sibling acceptance (PRD §7.2): `same_game: false` with `same_game_confidence` at or above this. */
18
+ export declare const SIBLING_CONFIDENCE_THRESHOLD = 0.8;
19
+ export declare function siblingPromptIntro(subject: string): string;
20
+ export declare const SIBLING_PROMPT_QUESTION: string;
21
+ export interface SiblingPair {
22
+ readonly step: number;
23
+ readonly pass: number;
24
+ readonly a: string;
25
+ readonly b: string;
26
+ readonly gameIs: "A" | "B";
27
+ }
28
+ /** Seeded pairing for sibling mode: every (a, b) combination once per pass in shuffled order, this game's frame shown as
29
+ * Image A in half of each pass (balanced, shuffled), repeated with a new shuffle until `trials` pairs exist. */
30
+ export declare function siblingPlan(aNames: readonly string[], bNames: readonly string[], trials: number, seed: number): SiblingPair[];
31
+ export interface SiblingTrial {
32
+ step: number;
33
+ pass: number;
34
+ a: string;
35
+ b: string;
36
+ gameIs: "A" | "B";
37
+ sameGame: boolean | null;
38
+ sameGameConfidence: number | null;
39
+ tells: string[];
40
+ error?: string;
41
+ }
42
+ export interface SiblingSummary {
43
+ readonly trials: number;
44
+ readonly valid: number;
45
+ readonly differentGame: number;
46
+ readonly sameGameYes: number;
47
+ readonly differentRate: number;
48
+ readonly ci95: [number, number];
49
+ /** Trials answered `same_game: false` with confidence >= SIBLING_CONFIDENCE_THRESHOLD. */
50
+ readonly confidentDifferent: number;
51
+ readonly confidentDifferentRate: number;
52
+ /** Majority answer over the valid trials (a tie counts as the same game, the failing side). */
53
+ readonly same_game: boolean | null;
54
+ /** Mean confidence of the trials that gave the majority answer. */
55
+ readonly same_game_confidence: number | null;
56
+ readonly passes: boolean;
57
+ }
58
+ export declare function summarizeSibling(trials: readonly SiblingTrial[]): SiblingSummary;
10
59
  export declare function promptIntro(subject: string): string;
11
60
  export declare const PROMPT_QUESTION: string;
12
61
  export declare function listFrames(dir: string): Map<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/evidence/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,eAAO,MAAM,WAAW,4NACmM,CAAC;AAW5N,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,eAAO,MAAM,eAAe,QAOjB,CAAC;AAEZ,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3D;AAwDD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8FvJ"}
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/evidence/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,eAAO,MAAM,WAAW,uPAC8N,CAAC;AAEvP,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEhD,sGAAsG;AACtG,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,eAAO,MAAM,uBAAuB,QAKzB,CAAC;AAEZ,MAAM,WAAW,WAAW;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAA;CAAE;AAEjJ;iHACiH;AACjH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAmB7H;AAED,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAEnM,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,+FAA+F;IAC/F,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,cAAc,CAqBhF;AAWD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,eAAO,MAAM,eAAe,QAOjB,CAAC;AAEZ,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3D;AAwDD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsGvJ"}