@aura3d/engine 4.5.0 → 4.6.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 (199) hide show
  1. package/README.md +1 -0
  2. package/dist/animation/pose/BoneMask.d.ts +8 -0
  3. package/dist/animation/pose/BoneMask.d.ts.map +1 -1
  4. package/dist/animation/pose/BoneMask.js +18 -1
  5. package/dist/animation/pose/BoneMask.js.map +1 -1
  6. package/dist/animation/pose/PoseMixer.d.ts +18 -2
  7. package/dist/animation/pose/PoseMixer.d.ts.map +1 -1
  8. package/dist/animation/pose/PoseMixer.js +52 -4
  9. package/dist/animation/pose/PoseMixer.js.map +1 -1
  10. package/dist/animation/pose/RetargetWorker.d.ts +8 -1
  11. package/dist/animation/pose/RetargetWorker.d.ts.map +1 -1
  12. package/dist/animation/pose/RetargetWorker.js +30 -2
  13. package/dist/animation/pose/RetargetWorker.js.map +1 -1
  14. package/dist/aura3d-cli/index.d.ts +6 -0
  15. package/dist/aura3d-cli/index.d.ts.map +1 -1
  16. package/dist/aura3d-cli/index.js +28 -0
  17. package/dist/aura3d-cli/index.js.map +1 -1
  18. package/dist/create-aura3d/cli.js +22 -2
  19. package/dist/create-aura3d/cli.js.map +1 -1
  20. package/dist/create-aura3d/index.d.ts +11 -0
  21. package/dist/create-aura3d/index.d.ts.map +1 -1
  22. package/dist/create-aura3d/index.js +9 -2
  23. package/dist/create-aura3d/index.js.map +1 -1
  24. package/dist/create-aura3d/template-assets.d.ts +53 -0
  25. package/dist/create-aura3d/template-assets.d.ts.map +1 -0
  26. package/dist/create-aura3d/template-assets.js +116 -0
  27. package/dist/create-aura3d/template-assets.js.map +1 -0
  28. package/dist/engine/agent-api/Clock.d.ts +5 -2
  29. package/dist/engine/agent-api/Clock.d.ts.map +1 -1
  30. package/dist/engine/agent-api/Clock.js +9 -4
  31. package/dist/engine/agent-api/Clock.js.map +1 -1
  32. package/dist/engine/agent-api/animationMask.d.ts +14 -2
  33. package/dist/engine/agent-api/animationMask.d.ts.map +1 -1
  34. package/dist/engine/agent-api/animationMask.js +19 -4
  35. package/dist/engine/agent-api/animationMask.js.map +1 -1
  36. package/dist/engine/agent-api/app/actorAnimationHandle.d.ts.map +1 -1
  37. package/dist/engine/agent-api/app/actorAnimationHandle.js +7 -4
  38. package/dist/engine/agent-api/app/actorAnimationHandle.js.map +1 -1
  39. package/dist/engine/agent-api/app/canvas.d.ts +21 -0
  40. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  41. package/dist/engine/agent-api/app/canvas.js +119 -7
  42. package/dist/engine/agent-api/app/canvas.js.map +1 -1
  43. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  44. package/dist/engine/agent-api/app/createAuraApp.js +104 -15
  45. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  46. package/dist/engine/agent-api/app/frameLoop.d.ts +13 -0
  47. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  48. package/dist/engine/agent-api/app/frameLoop.js +93 -12
  49. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  50. package/dist/engine/agent-api/app/parentFit.d.ts +20 -2
  51. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -1
  52. package/dist/engine/agent-api/app/parentFit.js +13 -9
  53. package/dist/engine/agent-api/app/parentFit.js.map +1 -1
  54. package/dist/engine/agent-api/app/renderPath.d.ts +31 -2
  55. package/dist/engine/agent-api/app/renderPath.d.ts.map +1 -1
  56. package/dist/engine/agent-api/app/renderPath.js +128 -22
  57. package/dist/engine/agent-api/app/renderPath.js.map +1 -1
  58. package/dist/engine/agent-api/app/rendererOptions.d.ts +27 -4
  59. package/dist/engine/agent-api/app/rendererOptions.d.ts.map +1 -1
  60. package/dist/engine/agent-api/app/rendererOptions.js +63 -16
  61. package/dist/engine/agent-api/app/rendererOptions.js.map +1 -1
  62. package/dist/engine/agent-api/app/runtimeNodes.d.ts +2 -0
  63. package/dist/engine/agent-api/app/runtimeNodes.d.ts.map +1 -1
  64. package/dist/engine/agent-api/app/runtimeNodes.js +76 -2
  65. package/dist/engine/agent-api/app/runtimeNodes.js.map +1 -1
  66. package/dist/engine/agent-api/compiler/animation.d.ts.map +1 -1
  67. package/dist/engine/agent-api/compiler/animation.js +4 -3
  68. package/dist/engine/agent-api/compiler/animation.js.map +1 -1
  69. package/dist/engine/agent-api/compiler/compileScene.d.ts +21 -5
  70. package/dist/engine/agent-api/compiler/compileScene.d.ts.map +1 -1
  71. package/dist/engine/agent-api/compiler/compileScene.js +103 -11
  72. package/dist/engine/agent-api/compiler/compileScene.js.map +1 -1
  73. package/dist/engine/agent-api/compiler/contactShadowKey.d.ts +14 -0
  74. package/dist/engine/agent-api/compiler/contactShadowKey.d.ts.map +1 -0
  75. package/dist/engine/agent-api/compiler/contactShadowKey.js +66 -0
  76. package/dist/engine/agent-api/compiler/contactShadowKey.js.map +1 -0
  77. package/dist/engine/agent-api/compiler/environment.d.ts +37 -0
  78. package/dist/engine/agent-api/compiler/environment.d.ts.map +1 -1
  79. package/dist/engine/agent-api/compiler/environment.js +129 -11
  80. package/dist/engine/agent-api/compiler/environment.js.map +1 -1
  81. package/dist/engine/agent-api/compiler/mountedRoots.d.ts +6 -0
  82. package/dist/engine/agent-api/compiler/mountedRoots.d.ts.map +1 -0
  83. package/dist/engine/agent-api/compiler/mountedRoots.js +25 -0
  84. package/dist/engine/agent-api/compiler/mountedRoots.js.map +1 -0
  85. package/dist/engine/agent-api/compiler/primitives.d.ts +13 -1
  86. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  87. package/dist/engine/agent-api/compiler/primitives.js +28 -3
  88. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  89. package/dist/engine/agent-api/compiler/renderer.d.ts +5 -3
  90. package/dist/engine/agent-api/compiler/renderer.d.ts.map +1 -1
  91. package/dist/engine/agent-api/compiler/renderer.js +33 -7
  92. package/dist/engine/agent-api/compiler/renderer.js.map +1 -1
  93. package/dist/engine/agent-api/compiler/shadows.d.ts +4 -1
  94. package/dist/engine/agent-api/compiler/shadows.d.ts.map +1 -1
  95. package/dist/engine/agent-api/compiler/shadows.js +6 -2
  96. package/dist/engine/agent-api/compiler/shadows.js.map +1 -1
  97. package/dist/engine/agent-api/nodes/instances.d.ts.map +1 -1
  98. package/dist/engine/agent-api/nodes/instances.js +16 -4
  99. package/dist/engine/agent-api/nodes/instances.js.map +1 -1
  100. package/dist/engine/agent-api/nodes/model.d.ts +15 -0
  101. package/dist/engine/agent-api/nodes/model.d.ts.map +1 -1
  102. package/dist/engine/agent-api/nodes/model.js +37 -0
  103. package/dist/engine/agent-api/nodes/model.js.map +1 -1
  104. package/dist/engine/agent-api/nodes/physics.d.ts +25 -0
  105. package/dist/engine/agent-api/nodes/physics.d.ts.map +1 -1
  106. package/dist/engine/agent-api/nodes/physics.js +107 -11
  107. package/dist/engine/agent-api/nodes/physics.js.map +1 -1
  108. package/dist/engine/agent-api/nodes/primitives.d.ts +16 -1
  109. package/dist/engine/agent-api/nodes/primitives.d.ts.map +1 -1
  110. package/dist/engine/agent-api/nodes/primitives.js +11 -8
  111. package/dist/engine/agent-api/nodes/primitives.js.map +1 -1
  112. package/dist/engine/agent-api/nodes/types/runtime.d.ts +5 -0
  113. package/dist/engine/agent-api/nodes/types/runtime.d.ts.map +1 -1
  114. package/dist/engine/agent-api/nodes/types.d.ts +2 -0
  115. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  116. package/dist/engine/contracts/environment.d.ts +9 -0
  117. package/dist/engine/contracts/environment.d.ts.map +1 -1
  118. package/dist/engine/contracts/environment.js.map +1 -1
  119. package/dist/engine/contracts/lighting.d.ts +3 -0
  120. package/dist/engine/contracts/lighting.d.ts.map +1 -1
  121. package/dist/engine/contracts/lighting.js.map +1 -1
  122. package/dist/engine/lanes/prd02.d.ts +12 -4
  123. package/dist/engine/lanes/prd02.d.ts.map +1 -1
  124. package/dist/engine/lanes/prd02.js +23 -7
  125. package/dist/engine/lanes/prd02.js.map +1 -1
  126. package/dist/game/touch/TouchControls.d.ts.map +1 -1
  127. package/dist/game/touch/TouchControls.js +48 -12
  128. package/dist/game/touch/TouchControls.js.map +1 -1
  129. package/dist/react/index.d.ts +13 -0
  130. package/dist/react/index.d.ts.map +1 -1
  131. package/dist/react/index.js +88 -8
  132. package/dist/react/index.js.map +1 -1
  133. package/dist/rendering/DepthPass.d.ts +7 -0
  134. package/dist/rendering/DepthPass.d.ts.map +1 -1
  135. package/dist/rendering/DepthPass.js +40 -4
  136. package/dist/rendering/DepthPass.js.map +1 -1
  137. package/dist/rendering/ForwardPass.d.ts +69 -5
  138. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  139. package/dist/rendering/ForwardPass.js +119 -27
  140. package/dist/rendering/ForwardPass.js.map +1 -1
  141. package/dist/rendering/RenderDevice.d.ts +5 -0
  142. package/dist/rendering/RenderDevice.d.ts.map +1 -1
  143. package/dist/rendering/RenderDevice.js.map +1 -1
  144. package/dist/rendering/RendererPostprocessPlan.d.ts.map +1 -1
  145. package/dist/rendering/RendererPostprocessPlan.js +8 -1
  146. package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
  147. package/dist/rendering/WebGL2Device.d.ts +3 -0
  148. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  149. package/dist/rendering/WebGL2Device.js +20 -0
  150. package/dist/rendering/WebGL2Device.js.map +1 -1
  151. package/dist/rendering/forward/Lighting.d.ts +32 -0
  152. package/dist/rendering/forward/Lighting.d.ts.map +1 -1
  153. package/dist/rendering/forward/Lighting.js +103 -3
  154. package/dist/rendering/forward/Lighting.js.map +1 -1
  155. package/dist/rendering/index.d.ts +2 -2
  156. package/dist/rendering/index.d.ts.map +1 -1
  157. package/dist/rendering/index.js +1 -1
  158. package/dist/rendering/index.js.map +1 -1
  159. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  160. package/dist/rendering/post/v2Stages.js +2 -0
  161. package/dist/rendering/post/v2Stages.js.map +1 -1
  162. package/dist/rendering/quality/DirectPath.d.ts +13 -0
  163. package/dist/rendering/quality/DirectPath.d.ts.map +1 -1
  164. package/dist/rendering/quality/DirectPath.js +33 -1
  165. package/dist/rendering/quality/DirectPath.js.map +1 -1
  166. package/dist/rendering/renderer/Background.d.ts.map +1 -1
  167. package/dist/rendering/renderer/Background.js +31 -2
  168. package/dist/rendering/renderer/Background.js.map +1 -1
  169. package/dist/rendering/renderer/InstanceFrustumCull.d.ts +5 -3
  170. package/dist/rendering/renderer/InstanceFrustumCull.d.ts.map +1 -1
  171. package/dist/rendering/renderer/InstanceFrustumCull.js +17 -6
  172. package/dist/rendering/renderer/InstanceFrustumCull.js.map +1 -1
  173. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.d.ts +6 -1
  174. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.d.ts.map +1 -1
  175. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.js +8 -2
  176. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.js.map +1 -1
  177. package/dist/rendering/shadows/CascadeUse.d.ts +3 -0
  178. package/dist/rendering/shadows/CascadeUse.d.ts.map +1 -1
  179. package/dist/rendering/shadows/CascadeUse.js +16 -1
  180. package/dist/rendering/shadows/CascadeUse.js.map +1 -1
  181. package/dist/rendering/shadows/Prd02ShadowsContributor.d.ts +4 -0
  182. package/dist/rendering/shadows/Prd02ShadowsContributor.d.ts.map +1 -1
  183. package/dist/rendering/shadows/Prd02ShadowsContributor.js +3 -1
  184. package/dist/rendering/shadows/Prd02ShadowsContributor.js.map +1 -1
  185. package/dist/rendering/webgl2/ContextLifecycle.d.ts.map +1 -1
  186. package/dist/rendering/webgl2/ContextLifecycle.js +14 -2
  187. package/dist/rendering/webgl2/ContextLifecycle.js.map +1 -1
  188. package/dist/rendering/webgl2/MultiDraw.d.ts +2 -0
  189. package/dist/rendering/webgl2/MultiDraw.d.ts.map +1 -1
  190. package/dist/rendering/webgl2/MultiDraw.js +24 -6
  191. package/dist/rendering/webgl2/MultiDraw.js.map +1 -1
  192. package/package.json +25 -25
  193. package/templates/cinematic-scene/package.json +2 -2
  194. package/templates/mini-game/package.json +2 -2
  195. package/templates/product-viewer/package.json +2 -2
  196. package/templates/production-asset-inspector/package.json +1 -1
  197. package/templates/production-material-studio/package.json +1 -1
  198. package/templates/production-product-configurator/package.json +1 -1
  199. package/templates/production-product-viewer/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  // beat-three.js L-P1: pick the render path for one mount (direct canvas MSAA vs HDR multisampled target).
2
- import { isQualityMode, qrCoreOutputOn, resolveBloomFusionConfig, resolveRenderPath, withDirectPath } from "../../../rendering/index.js";
2
+ import { directPathItemBlockers, isQualityMode, qrCoreOutputOn, resolveBloomFusionConfig, resolveRenderPath, withDirectPath } from "../../../rendering/index.js";
3
3
  import { groups } from "../nodes/groups.js";
4
- import { parseBloomFusionOption } from "./rendererOptions.js";
4
+ import { ignoreInvalidUrlValue, parseBloomFusionOption } from "./rendererOptions.js";
5
5
  /** Fusion is allowed only under quality `auto` or `cinematic`; the mount (`applyRenderPathToCanvas`) and the report both use this. */
6
6
  export function bloomFusionAllowed(quality) {
7
7
  return quality === "auto" || quality === "cinematic";
@@ -11,8 +11,8 @@ export function bloomFusionAllowed(quality) {
11
11
  * effect (the only source of a bloom pass), so every other combination reports `"off"`. The option is validated first so a
12
12
  * typo throws whatever the quality.
13
13
  */
14
- function reportedBloomFusion(quality, path, legacyLdrRoute, snapshot, options) {
15
- const mode = parseBloomFusionOption(options.renderer);
14
+ function reportedBloomFusion(quality, path, legacyLdrRoute, snapshot, options, search, policy) {
15
+ const mode = parseBloomFusionOption(options.renderer, search, policy);
16
16
  if (!bloomFusionAllowed(quality) || path !== "hdr-msaa" || legacyLdrRoute)
17
17
  return "off";
18
18
  const hasBloom = groups.flatten(snapshot.nodes).some((node) => node.kind === "effect" && node.effect === "bloom");
@@ -55,6 +55,61 @@ export function configureBloomFusionDevice(device, canvas, rendererOptions) {
55
55
  export function isDirectRenderPath(canvas) {
56
56
  return canvas !== undefined && directPathCanvases.has(canvas);
57
57
  }
58
+ /*
59
+ * RP-01 / RP-03: reasons, found after the path was chosen, why this canvas must leave the direct path. The direct-path decision
60
+ * reads the authored snapshot, so it cannot see a GLB's own BLEND or transmission materials (known only once decoded) or a custom
61
+ * post pass registered after mount. Each mount on the canvas reads these as extra blockers, so the re-mount takes the HDR target.
62
+ */
63
+ const directPathVetoes = new WeakMap();
64
+ /** Add a reason that keeps `canvas` off the direct path; returns a release function (reference counted per reason). */
65
+ export function vetoDirectPath(canvas, reason) {
66
+ let reasons = directPathVetoes.get(canvas);
67
+ if (!reasons)
68
+ directPathVetoes.set(canvas, (reasons = new Map()));
69
+ reasons.set(reason, (reasons.get(reason) ?? 0) + 1);
70
+ let released = false;
71
+ return () => {
72
+ if (released)
73
+ return;
74
+ released = true;
75
+ const count = (reasons.get(reason) ?? 1) - 1;
76
+ if (count > 0)
77
+ reasons.set(reason, count);
78
+ else
79
+ reasons.delete(reason);
80
+ };
81
+ }
82
+ export function directPathVetoReasons(canvas) {
83
+ return canvas === undefined ? [] : [...(directPathVetoes.get(canvas)?.keys() ?? [])];
84
+ }
85
+ /** RP-01: decoded-material blockers of a mounted scene's GLB actors (their render items at the default placement). */
86
+ export function decodedModelDirectPathBlockers(actors) {
87
+ if (actors.length === 0)
88
+ return [];
89
+ const items = [];
90
+ for (const entry of actors) {
91
+ try {
92
+ items.push(...entry.actor.collectRenderItems());
93
+ }
94
+ catch {
95
+ // An actor that cannot collect here is not evidence either way; the frame loop reports its own errors.
96
+ }
97
+ }
98
+ return directPathItemBlockers(items);
99
+ }
100
+ const decodedBlockers = new WeakMap();
101
+ /** Called by the mount once its GLBs are decoded (direct path only); read once by the frame loop through {@link takeDecodedDirectPathBlockers}. */
102
+ export function recordDecodedDirectPathBlockers(canvas, blockers) {
103
+ if (blockers.length > 0)
104
+ decodedBlockers.set(canvas, blockers);
105
+ else
106
+ decodedBlockers.delete(canvas);
107
+ }
108
+ export function takeDecodedDirectPathBlockers(canvas) {
109
+ const blockers = decodedBlockers.get(canvas) ?? [];
110
+ decodedBlockers.delete(canvas);
111
+ return blockers;
112
+ }
58
113
  /** Effects the forward pass draws itself; every other effect is a post pass or a frame contributor that reads the HDR target. */
59
114
  const FORWARD_ONLY_EFFECTS = new Set(["fog"]);
60
115
  const DIRECT_SAFE_NODE_KINDS = new Set(["model", "primitive", "group", "light", "environment", "interaction", "label"]);
@@ -69,6 +124,21 @@ export function renderPathBlockers(snapshot, options) {
69
124
  blockers.push("URL tone-mapping or exposure override");
70
125
  if (snapshot.backgroundToneMapped === false)
71
126
  blockers.push("background opts out of tone mapping");
127
+ // RP-02: the background-image shader encodes with its own ACES fit (Narkowicz), not the r185 curve the direct path's forward
128
+ // shader uses, so on the direct path the backdrop and the scene would be tone-mapped differently (linear 0.18 grey: 141 vs 127).
129
+ if (snapshot.backgroundImage !== undefined)
130
+ blockers.push("background image");
131
+ for (const reason of nodeDirectPathBlockers(snapshot.nodes))
132
+ blockers.push(reason);
133
+ return blockers;
134
+ }
135
+ /**
136
+ * The node-level part of {@link renderPathBlockers}: effects other than fog, node kinds the direct path does not draw, HDRI
137
+ * environments, and custom, transmissive or transparent materials (authored, from the asset manifest, or overrides). Also used for
138
+ * nodes added at runtime (RP-03).
139
+ */
140
+ export function nodeDirectPathBlockers(nodes) {
141
+ const blockers = [];
72
142
  const seen = new Set();
73
143
  const note = (message) => {
74
144
  if (seen.has(message))
@@ -76,7 +146,7 @@ export function renderPathBlockers(snapshot, options) {
76
146
  seen.add(message);
77
147
  blockers.push(message);
78
148
  };
79
- for (const node of groups.flatten(snapshot.nodes)) {
149
+ for (const node of groups.flatten(nodes)) {
80
150
  if (node.kind === "effect") {
81
151
  if (!FORWARD_ONLY_EFFECTS.has(node.effect))
82
152
  note(`effect "${node.effect}"`);
@@ -91,6 +161,9 @@ export function renderPathBlockers(snapshot, options) {
91
161
  note("hdri environment");
92
162
  if (node.kind !== "model" && node.kind !== "primitive")
93
163
  continue;
164
+ if (node.kind === "model")
165
+ for (const reason of modelAssetBlockers(node))
166
+ note(reason);
94
167
  const material = node.material;
95
168
  if (!material)
96
169
  continue;
@@ -106,41 +179,74 @@ export function renderPathBlockers(snapshot, options) {
106
179
  }
107
180
  return blockers;
108
181
  }
109
- function requestedQuality(options) {
110
- // `?aura3d-render=<mode>` wins over the option (like `?aura3d-quality=`): compare a page's two render paths without a rebuild.
111
- const fromUrl = typeof location !== "undefined" ? new URLSearchParams(location.search).get("aura3d-render") : null;
112
- if (fromUrl !== null) {
113
- if (!isQualityMode(fromUrl))
114
- throw new Error(`QUALITY_OPTION_INVALID:?aura3d-render=${fromUrl} (expected auto|production|safe-basic|cinematic)`);
115
- return fromUrl;
182
+ /**
183
+ * RP-01: material facts the asset manifest records for a typed GLB (`metadata.materialMetadata`, written by `aura3d assets add`
184
+ * and `assets typegen`), plus `materialOverrides` opacity. A BLEND or partly transparent material blends after the in-shader encode
185
+ * on the direct path. Transmission is not in the manifest; the mount catches it after decode (`decodedModelDirectPathBlockers`).
186
+ */
187
+ function modelAssetBlockers(node) {
188
+ const reasons = [];
189
+ const facts = node.asset?.metadata?.materialMetadata;
190
+ if (Array.isArray(facts)) {
191
+ const transparent = facts.some((fact) => fact !== null && typeof fact === "object"
192
+ // glTF ignores base-colour alpha on OPAQUE and MASK materials, so opacity counts only when no alpha mode was recorded.
193
+ && (typeof fact.alphaMode === "string" ? fact.alphaMode.toUpperCase() === "BLEND" : typeof fact.opacity === "number" && fact.opacity < 1));
194
+ if (transparent)
195
+ reasons.push("model asset has a transparent (BLEND) material");
116
196
  }
197
+ if (node.materialOverrides?.some((override) => typeof override.opacity === "number" && override.opacity < 1))
198
+ reasons.push("transparent material override");
199
+ return reasons;
200
+ }
201
+ function requestedQuality(options, search, policy) {
202
+ let fromOptions;
117
203
  if (options.quality !== undefined) {
118
204
  if (!isQualityMode(options.quality)) {
119
205
  throw new Error(`QUALITY_OPTION_INVALID:quality=${String(options.quality)} (expected auto|production|safe-basic|cinematic)`);
120
206
  }
121
- return options.quality;
207
+ fromOptions = options.quality;
208
+ }
209
+ // `?aura3d-render=<mode>` wins over the option (like `?aura3d-quality=`): compare a page's two render paths without a rebuild.
210
+ // RP-04: a typo there warns and keeps the code option (strict apps still throw).
211
+ const fromUrl = search ? new URLSearchParams(search).get("aura3d-render") : null;
212
+ if (fromUrl !== null) {
213
+ if (isQualityMode(fromUrl))
214
+ return fromUrl;
215
+ ignoreInvalidUrlValue(`?aura3d-render=${fromUrl} (expected auto|production|safe-basic|cinematic); using "${fromOptions ?? "auto"}"`, policy);
122
216
  }
123
217
  // `renderer.qualityProfile` is a deprecated pixel-ratio/draw-budget preset, not a pipeline request.
124
- return undefined;
218
+ return fromOptions;
125
219
  }
126
- export function resolveAppRenderPath(snapshot, options, flags) {
127
- const quality = requestedQuality(options) ?? "auto";
220
+ export function resolveAppRenderPath(snapshot, options, flags, context = {}) {
221
+ const search = context.search !== undefined ? context.search : typeof location !== "undefined" ? location.search : null;
222
+ const warnings = [];
223
+ const policy = { strict: options.strict ?? flags.on("A3D_QR_STRICT"), warnings };
224
+ const quality = requestedQuality(options, search, policy) ?? "auto";
128
225
  if (!qrCoreOutputOn(flags)) {
129
226
  const explicit = flags.values.A3D_QR_CORE_OUTPUT !== undefined;
130
227
  return {
131
- report: { path: "direct", quality, reason: explicit ? "A3D_QR_CORE_OUTPUT is off: legacy LDR route" : "A3D_QR_CORE is off: legacy LDR route (its own post chain is kept)", bloomFusion: reportedBloomFusion(quality, "direct", true, snapshot, options) },
228
+ report: { path: "direct", quality, reason: explicit ? "A3D_QR_CORE_OUTPUT is off: legacy LDR route" : "A3D_QR_CORE is off: legacy LDR route (its own post chain is kept)", bloomFusion: reportedBloomFusion(quality, "direct", true, snapshot, options, search, policy) },
132
229
  flags,
133
- direct: false
230
+ direct: false,
231
+ warnings
134
232
  };
135
233
  }
136
234
  if (flags.values.A3D_QR_CORE_OUTPUT !== undefined) {
137
- return { report: { path: "hdr-msaa", quality, reason: "A3D_QR_CORE_OUTPUT is set explicitly", bloomFusion: reportedBloomFusion(quality, "hdr-msaa", false, snapshot, options) }, flags, direct: false };
235
+ return { report: { path: "hdr-msaa", quality, reason: "A3D_QR_CORE_OUTPUT is set explicitly", bloomFusion: reportedBloomFusion(quality, "hdr-msaa", false, snapshot, options, search, policy) }, flags, direct: false, warnings };
236
+ }
237
+ // RP-06: blockers are computed for safe-basic too, so what it does not render is named instead of dropped silently.
238
+ const blockers = quality === "auto" || quality === "safe-basic"
239
+ ? [...new Set([...renderPathBlockers(snapshot, options), ...(context.extraBlockers ?? [])])]
240
+ : [];
241
+ const decision = resolveRenderPath({ quality, blockers });
242
+ if (quality === "safe-basic" && blockers.length > 0) {
243
+ warnings.push(`SAFE_BASIC_DROPS: quality "safe-basic" renders on the direct path, which has no post chain or HDR target, so these are not rendered: ${blockers.join("; ")}. Use quality "auto" or "production" to keep them.`);
138
244
  }
139
- const decision = resolveRenderPath({ quality, blockers: quality === "auto" ? renderPathBlockers(snapshot, options) : [] });
140
245
  return {
141
- report: { path: decision.path, quality: decision.quality, reason: decision.reason, bloomFusion: reportedBloomFusion(decision.quality, decision.path, false, snapshot, options) },
246
+ report: { path: decision.path, quality: decision.quality, reason: decision.reason, bloomFusion: reportedBloomFusion(decision.quality, decision.path, false, snapshot, options, search, policy) },
142
247
  flags: decision.path === "direct" ? withDirectPath(flags) : flags,
143
- direct: decision.path === "direct"
248
+ direct: decision.path === "direct",
249
+ warnings
144
250
  };
145
251
  }
146
252
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"renderPath.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/renderPath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderPath.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/renderPath.ts"],"names":[],"mappings":"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"}
@@ -42,11 +42,34 @@ export declare function resetRendererOptionDeprecationsForTests(): void;
42
42
  */
43
43
  export declare function parseQualityRendererOptions(renderer: AuraCreateAppRendererOptions | undefined, search?: string | null, root?: {
44
44
  readonly performanceQuality?: unknown;
45
- }): ParsedQualityRendererOptions;
45
+ }, urlPolicy?: Pick<UrlOptionPolicy, "strict">): ParsedQualityRendererOptions;
46
+ /** How URL-sourced debug switches behave on an invalid value (RP-04). */
47
+ export interface UrlOptionPolicy {
48
+ /** Throw on an invalid URL value, like an invalid code option. Default false: warn and fall back. */
49
+ readonly strict?: boolean;
50
+ /** Receives one `QUALITY_URL_IGNORED:` message per ignored URL value. */
51
+ readonly warnings?: string[];
52
+ /** Also `console.warn` the message (once per message). Default true; false when the caller prints `warnings` itself. */
53
+ readonly console?: boolean;
54
+ }
55
+ /**
56
+ * RP-04: a typo in a debug URL switch (`?aura3d-render=`, `?aura3d-bloom-fusion=`, `?aura3d-quality=`, `?aura3d-adaptive=`) used to
57
+ * throw inside the mount, so every game showed its "needs WebGL 2" error screen. URL values are a tester's switch, not code: warn
58
+ * once (console and `diagnostics().warnings`) and keep the code option or default. Strict apps keep the throw.
59
+ */
60
+ export declare function ignoreInvalidUrlValue(message: string, policy: UrlOptionPolicy | undefined): void;
46
61
  /**
47
62
  * Bloom pass-fusion mode (PRD beat-threejs-2 contract 2.1): `renderer.bloomFusion` (`"separable"` default | `"fused-2d"`),
48
- * overridden by `?aura3d-bloom-fusion=`. Invalid values throw so a typo never silently runs the default. The mode only
49
- * takes effect under `quality: "auto"` / `"cinematic"`; `production` never fuses.
63
+ * overridden by `?aura3d-bloom-fusion=`. An invalid code option throws so a typo never silently runs the default; an invalid URL
64
+ * value warns and falls back to the code option (RP-04) unless `policy.strict`. The mode only takes effect under
65
+ * `quality: "auto"` / `"cinematic"`; `production` never fuses.
66
+ */
67
+ export declare function parseBloomFusionOption(renderer: Pick<AuraCreateAppRendererOptions, "bloomFusion"> | undefined, search?: string | null, policy?: UrlOptionPolicy): AuraBloomFusion;
68
+ /**
69
+ * Top-tennis C11 (engine part): `renderer.quality` diagnostics, reported in `diagnostics().warnings` (not the console, since the
70
+ * string form is valid). A tier-name string is a fixed tier: every device, phones included, mounts at that tier, which a reader
71
+ * of `renderer: { quality: "high" }` easily takes for a no-op or for "best available". An unknown name used to mount at "high"
72
+ * with no message while the quality lane is off.
50
73
  */
51
- export declare function parseBloomFusionOption(renderer: Pick<AuraCreateAppRendererOptions, "bloomFusion"> | undefined, search?: string | null): AuraBloomFusion;
74
+ export declare function rendererQualityWarnings(renderer: Pick<AuraCreateAppRendererOptions, "quality"> | undefined): string[];
52
75
  //# sourceMappingURL=rendererOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rendererOptions.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/rendererOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAC3J,OAAO,EAA4C,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE7G;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,oBAAoB,CAAU;gBAElC,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,EAAE,yBAAyB,CAAC,CAqB5G,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,4BAA4B,EAAE,0BAA0B,CAAC,CA6D9G,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,4BAA4B,GAAG,SAAS,GAAG,0BAA0B,CAOtH;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,4BAA4B,GAAG,SAAS,GAAG,QAAQ,CAAC,4BAA4B,CAAC,GAAG;IAC7I,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;CAC9C,CAYA;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7E;AAQD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACjD,6EAA6E;IAC7E,QAAQ,CAAC,eAAe,EAAE,KAAK,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,KAAK,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAiBD,kFAAkF;AAClF,wBAAgB,uCAAuC,IAAI,IAAI,CAE9D;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,4BAA4B,GAAG,SAAS,EAClD,MAAM,GAAE,MAAM,GAAG,IAA+D,EAChF,IAAI,GAAE;IAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,4BAA4B,CA4D9B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,aAAa,CAAC,GAAG,SAAS,EACvE,MAAM,GAAE,MAAM,GAAG,IAA+D,GAC/E,eAAe,CAYjB"}
1
+ {"version":3,"file":"rendererOptions.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/rendererOptions.ts"],"names":[],"mappings":"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"}
@@ -141,6 +141,7 @@ function deprecation(id, message, out) {
141
141
  /** Test seam: forget which one-time deprecation warnings were already emitted. */
142
142
  export function resetRendererOptionDeprecationsForTests() {
143
143
  warnedDeprecations.clear();
144
+ warnedUrlValues.clear();
144
145
  }
145
146
  /**
146
147
  * Parse `renderer.quality` (tier string or `{ tier, overrides }`),
@@ -150,7 +151,7 @@ export function resetRendererOptionDeprecationsForTests() {
150
151
  * `source: "url"`). `qualityProfile` and root `performanceQuality` stay
151
152
  * accepted and emit a one-time deprecation warning pointing at `quality`.
152
153
  */
153
- export function parseQualityRendererOptions(renderer, search = typeof location !== "undefined" ? location.search : null, root = {}) {
154
+ export function parseQualityRendererOptions(renderer, search = typeof location !== "undefined" ? location.search : null, root = {}, urlPolicy) {
154
155
  const warnings = [];
155
156
  const quality = renderer?.quality;
156
157
  let requested;
@@ -186,16 +187,24 @@ export function parseQualityRendererOptions(renderer, search = typeof location !
186
187
  const params = new URLSearchParams(search);
187
188
  const urlTier = params.get("aura3d-quality");
188
189
  if (urlTier !== null) {
189
- requested = parseTier(urlTier, "?aura3d-quality");
190
- requestedSource = "url";
190
+ // RP-04: a URL typo warns and keeps the code option (strict apps still throw).
191
+ if (urlTier === "auto" || QUALITY_TIER_NAMES.includes(urlTier)) {
192
+ requested = urlTier;
193
+ requestedSource = "url";
194
+ }
195
+ else {
196
+ ignoreInvalidUrlValue(`?aura3d-quality=${urlTier} (expected low|medium|high|ultra|auto); using "${requested}"`, { strict: urlPolicy?.strict, warnings, console: false });
197
+ }
191
198
  }
192
199
  const urlAdaptive = params.get("aura3d-adaptive");
193
200
  if (urlAdaptive !== null) {
194
- if (urlAdaptive !== "0" && urlAdaptive !== "1") {
195
- throw new Error(`QUALITY_OPTION_INVALID:?aura3d-adaptive=${urlAdaptive} (expected 0|1)`);
201
+ if (urlAdaptive === "0" || urlAdaptive === "1") {
202
+ adaptive = urlAdaptive === "1";
203
+ adaptiveSource = "url";
204
+ }
205
+ else {
206
+ ignoreInvalidUrlValue(`?aura3d-adaptive=${urlAdaptive} (expected 0|1); using ${adaptive ? "1" : "0"}`, { strict: urlPolicy?.strict, warnings, console: false });
196
207
  }
197
- adaptive = urlAdaptive === "1";
198
- adaptiveSource = "url";
199
208
  }
200
209
  }
201
210
  if (renderer?.qualityProfile !== undefined) {
@@ -206,23 +215,61 @@ export function parseQualityRendererOptions(renderer, search = typeof location !
206
215
  }
207
216
  return { requested, requestedSource, overrides, adaptive, adaptiveSource, targetFrameRate, batching, warnings };
208
217
  }
218
+ const warnedUrlValues = new Set();
219
+ /**
220
+ * RP-04: a typo in a debug URL switch (`?aura3d-render=`, `?aura3d-bloom-fusion=`, `?aura3d-quality=`, `?aura3d-adaptive=`) used to
221
+ * throw inside the mount, so every game showed its "needs WebGL 2" error screen. URL values are a tester's switch, not code: warn
222
+ * once (console and `diagnostics().warnings`) and keep the code option or default. Strict apps keep the throw.
223
+ */
224
+ export function ignoreInvalidUrlValue(message, policy) {
225
+ if (policy?.strict)
226
+ throw new Error(`QUALITY_OPTION_INVALID:${message}`);
227
+ const warning = `QUALITY_URL_IGNORED: ${message}`;
228
+ policy?.warnings?.push(warning);
229
+ if (policy?.console !== false && !warnedUrlValues.has(warning)) {
230
+ warnedUrlValues.add(warning);
231
+ if (typeof console !== "undefined")
232
+ console.warn(`[aura3d] ${warning}`);
233
+ }
234
+ }
209
235
  /**
210
236
  * Bloom pass-fusion mode (PRD beat-threejs-2 contract 2.1): `renderer.bloomFusion` (`"separable"` default | `"fused-2d"`),
211
- * overridden by `?aura3d-bloom-fusion=`. Invalid values throw so a typo never silently runs the default. The mode only
212
- * takes effect under `quality: "auto"` / `"cinematic"`; `production` never fuses.
237
+ * overridden by `?aura3d-bloom-fusion=`. An invalid code option throws so a typo never silently runs the default; an invalid URL
238
+ * value warns and falls back to the code option (RP-04) unless `policy.strict`. The mode only takes effect under
239
+ * `quality: "auto"` / `"cinematic"`; `production` never fuses.
213
240
  */
214
- export function parseBloomFusionOption(renderer, search = typeof location !== "undefined" ? location.search : null) {
215
- let mode = renderer?.bloomFusion ?? DEFAULT_BLOOM_FUSION_MODE;
216
- let where = "renderer.bloomFusion";
241
+ export function parseBloomFusionOption(renderer, search = typeof location !== "undefined" ? location.search : null, policy) {
242
+ const mode = renderer?.bloomFusion ?? DEFAULT_BLOOM_FUSION_MODE;
243
+ if (!isBloomFusion(mode))
244
+ throw new Error(`QUALITY_OPTION_INVALID:renderer.bloomFusion=${String(mode)} (expected separable|fused-2d)`);
217
245
  if (search) {
218
246
  const fromUrl = new URLSearchParams(search).get("aura3d-bloom-fusion");
219
247
  if (fromUrl !== null) {
220
- mode = fromUrl;
221
- where = "?aura3d-bloom-fusion";
248
+ if (isBloomFusion(fromUrl))
249
+ return fromUrl;
250
+ ignoreInvalidUrlValue(`?aura3d-bloom-fusion=${fromUrl} (expected separable|fused-2d); using "${mode}"`, policy);
222
251
  }
223
252
  }
224
- if (!isBloomFusion(mode))
225
- throw new Error(`QUALITY_OPTION_INVALID:${where}=${String(mode)} (expected separable|fused-2d)`);
226
253
  return mode;
227
254
  }
255
+ /**
256
+ * Top-tennis C11 (engine part): `renderer.quality` diagnostics, reported in `diagnostics().warnings` (not the console, since the
257
+ * string form is valid). A tier-name string is a fixed tier: every device, phones included, mounts at that tier, which a reader
258
+ * of `renderer: { quality: "high" }` easily takes for a no-op or for "best available". An unknown name used to mount at "high"
259
+ * with no message while the quality lane is off.
260
+ */
261
+ export function rendererQualityWarnings(renderer) {
262
+ const quality = renderer?.quality;
263
+ if (quality === undefined || quality === "auto")
264
+ return [];
265
+ const tier = typeof quality === "string" ? quality : quality !== null && typeof quality === "object" ? quality.tier : quality;
266
+ if (tier === undefined || tier === "auto")
267
+ return [];
268
+ if (typeof tier !== "string" || !QUALITY_TIER_NAMES.includes(tier)) {
269
+ return [`RENDERER_QUALITY_INVALID: renderer.quality${typeof quality === "object" ? ".tier" : ""}=${String(tier)} is not a tier (expected low|medium|high|ultra|auto); the mount uses "high".`];
270
+ }
271
+ if (typeof quality !== "string")
272
+ return [];
273
+ return [`RENDERER_QUALITY_STRING: renderer.quality "${tier}" is a fixed tier, so every device, phones included, mounts at "${tier}" (pixel-ratio cap, shadow and post settings). Use "auto" or { tier: "auto" } to let the tier follow the device where the quality lane (A3D_QR_TIERS) is on.`];
274
+ }
228
275
  //# sourceMappingURL=rendererOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rendererOptions.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/rendererOptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rendererOptions.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/rendererOptions.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,8 @@ export interface MutableAuraRuntimeNodeRegistry extends AuraRuntimeNodeRegistry
46
46
  attachCompiled(scene: CompiledScene): void;
47
47
  detachCompiled(scene: CompiledScene): void;
48
48
  reset(snapshot: AuraSceneSnapshot): void;
49
+ /** The live scene plus nodes added through the compiled subtree path (RP-03), for a remount that must keep them. */
50
+ sceneWithRuntimeAdditions(): AuraSceneSnapshot | undefined;
49
51
  }
50
52
  export declare function collectRuntimeNodeHandles(snapshot: AuraSceneSnapshot): Map<string, AuraRuntimeNodeHandle>;
51
53
  export declare function createRuntimeNodeHandle(node: MutableAuraRuntimeSceneNode, runtime: AuraRuntimeNodeSpec): AuraRuntimeNodeHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeNodes.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/runtimeNodes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAyC,gBAAgB,EAAE,qBAAqB,EAAwC,uBAAuB,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAoB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEtS,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAqCD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,GAAE,2BAAgC,GAAG,8BAA8B,CA6HjJ;AAED,MAAM,MAAM,2BAA2B,GAAG,aAAa,GAAG;IACxD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,OAAO,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;IACrE,cAAc,CAAC,EAAE,SAAS,OAAO,mBAAmB,EAAE,SAAS,EAAE,CAAC;IAGlE,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,+BAA+B,EAAE,cAAc,CAAC;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAmEF,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,qBAAqB,CAAC;IACzH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,OAAO,CAAC;IAC5D,SAAS,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACnD,qFAAqF;IACrF,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,KAAK,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAQzG;AA6BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,mBAAmB,GAAG,qBAAqB,CA+d9H"}
1
+ {"version":3,"file":"runtimeNodes.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/app/runtimeNodes.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { resolveQrFlags } from "../../contracts/flags.js";
10
10
  import { asRuntimeCompiled } from "../../contracts/compiler.js";
11
11
  import { nodeHandleExtensionsAll } from "../../contracts/runtimeNodes.js";
12
12
  import { assertCustomUniformWrite, recordCustomUniformWrite } from "../compiler/customMaterial.js";
13
+ import { isDirectRenderPath, nodeDirectPathBlockers } from "./renderPath.js";
13
14
  const asAttachable = (scene) => {
14
15
  const internals = asRuntimeCompiled(scene);
15
16
  return internals ? internals : undefined;
@@ -36,6 +37,26 @@ const removeRuntimeNodeById = (nodes, runtimeId) => {
36
37
  }
37
38
  return { nodes: next, removed };
38
39
  };
40
+ /** Insert `node` as the last child of the group whose runtime id is `parentId`; top level when no such group exists. */
41
+ const insertRuntimeNode = (nodes, node, parentId) => {
42
+ if (parentId !== undefined) {
43
+ let placed = false;
44
+ const visit = (list) => list.map((entry) => {
45
+ if (placed || entry.kind !== "group")
46
+ return entry;
47
+ if (entry.runtime?.id === parentId) {
48
+ placed = true;
49
+ return { ...entry, children: [...entry.children, node] };
50
+ }
51
+ const children = visit(entry.children);
52
+ return placed ? { ...entry, children } : entry;
53
+ });
54
+ const next = visit(nodes);
55
+ if (placed)
56
+ return next;
57
+ }
58
+ return [...nodes, node];
59
+ };
39
60
  export function createAuraRuntimeNodeRegistry(snapshot, deps = {}) {
40
61
  let handles = new Map();
41
62
  let registryVersion = 0;
@@ -47,6 +68,21 @@ export function createAuraRuntimeNodeRegistry(snapshot, deps = {}) {
47
68
  let setScene = deps.setScene;
48
69
  let diagnostic = deps.diagnostic;
49
70
  const compilerFlagOn = () => flags.on("A3D_QR_COMPILER");
71
+ /*
72
+ * RP-03: nodes added through the compiled subtree path live only in the compiled scene, not in the app snapshot. They are kept
73
+ * here so a remount (to take the HDR target, see `add`) carries them over instead of dropping them. Cleared on `reset`.
74
+ */
75
+ let compiledAdds = [];
76
+ /** Mounted (snapshot) node ids removed through the compiled subtree path; a remount must not bring them back. */
77
+ let compiledRemovals = new Set();
78
+ const sceneWithCompiledAdds = (scene) => {
79
+ let nodes = [...scene.nodes];
80
+ for (const id of compiledRemovals)
81
+ nodes = removeRuntimeNodeById(nodes, id).nodes;
82
+ for (const entry of compiledAdds)
83
+ nodes = insertRuntimeNode(nodes, entry.node, entry.parent);
84
+ return { ...scene, nodes };
85
+ };
50
86
  // C-37 (PRD 15 T3.12 seam): flatten every registered NodeHandleExtension
51
87
  // whose flag is on and whose `appliesTo` covers the node kind onto the
52
88
  // handle (`handle.animation`, `handle.materials`, ...). Applied lazily on
@@ -99,14 +135,35 @@ export function createAuraRuntimeNodeRegistry(snapshot, deps = {}) {
99
135
  const id = runtime?.id ?? `runtime-add-${++autoId}`;
100
136
  const node = (runtime?.id ? raw : { ...raw, runtime: { ...(runtime ?? {}), id } });
101
137
  registryVersion += 1;
138
+ /*
139
+ * RP-03: a direct-path app has no post chain and no HDR target, so an effect, a custom-shader or transparent material added
140
+ * now would be dropped or drawn wrong, silently. Remount with the node in the scene: the mount re-decides the path and takes
141
+ * the HDR target. Earlier compiled additions ride along.
142
+ */
143
+ const directBlockers = app?.canvas && isDirectRenderPath(app.canvas) ? nodeDirectPathBlockers([node]) : [];
144
+ const scene = getScene?.();
145
+ if (directBlockers.length > 0 && scene && setScene) {
146
+ const next = sceneWithCompiledAdds(scene);
147
+ compiledAdds = [];
148
+ compiledRemovals = new Set();
149
+ setScene({ ...next, nodes: insertRuntimeNode(next.nodes, node, options.parent) });
150
+ // After setScene: the remount resets the app's warning list.
151
+ diagnostic?.(`DIRECT_PATH_REMOUNT: runtime node "${id}" needs the HDR target (${directBlockers.join("; ")}); the scene was remounted so it renders.`);
152
+ const remounted = handles.get(id);
153
+ if (remounted)
154
+ return applyHandleExtensions(remounted);
155
+ const handle = applyHandleExtensions(createRuntimeNodeHandle(node, node.runtime));
156
+ handles.set(id, handle);
157
+ return handle;
158
+ }
102
159
  if (compiled && compilerFlagOn()) {
103
160
  compiled.addSubtree(node, options.parent);
161
+ compiledAdds.push({ id, node, ...(options.parent === undefined ? {} : { parent: options.parent }) });
104
162
  const handle = applyHandleExtensions(createRuntimeNodeHandle(node, node.runtime));
105
163
  handles.set(id, handle);
106
164
  return handle;
107
165
  }
108
166
  // Legacy seam (C-37 PR 0b-1): append to the snapshot and remount.
109
- const scene = getScene?.();
110
167
  if (scene && setScene) {
111
168
  diagnostic?.(`RUNTIME_ADD_REMOUNT: runtime node "${id}" appended and remounted (enable A3D_QR_COMPILER for subtree compile)`);
112
169
  setScene({ ...scene, nodes: [...scene.nodes, node] });
@@ -126,12 +183,23 @@ export function createAuraRuntimeNodeRegistry(snapshot, deps = {}) {
126
183
  },
127
184
  remove(idOrHandle) {
128
185
  const id = typeof idOrHandle === "string" ? idOrHandle : idOrHandle.id;
129
- if (!handles.has(id))
186
+ if (!handles.has(id)) {
187
+ // A mounted group or look has no handle (the app flattens it away), but the compiled scene keeps its children by its id.
188
+ if (compiled && compilerFlagOn() && compiled.removeSubtree(id)) {
189
+ registryVersion += 1;
190
+ compiledRemovals.add(id);
191
+ return true;
192
+ }
130
193
  return false;
194
+ }
131
195
  registryVersion += 1;
132
196
  handles.delete(id);
133
197
  if (compiled && compilerFlagOn()) {
134
198
  compiled.removeSubtree(id);
199
+ const wasAdded = compiledAdds.some((entry) => entry.id === id);
200
+ compiledAdds = compiledAdds.filter((entry) => entry.id !== id);
201
+ if (!wasAdded)
202
+ compiledRemovals.add(id);
135
203
  return true;
136
204
  }
137
205
  const scene = getScene?.();
@@ -155,7 +223,13 @@ export function createAuraRuntimeNodeRegistry(snapshot, deps = {}) {
155
223
  detachCompiled() {
156
224
  compiled = undefined;
157
225
  },
226
+ sceneWithRuntimeAdditions() {
227
+ const scene = getScene?.();
228
+ return scene ? sceneWithCompiledAdds(scene) : undefined;
229
+ },
158
230
  reset(nextSnapshot) {
231
+ compiledAdds = [];
232
+ compiledRemovals = new Set();
159
233
  handles = collectRuntimeNodeHandles(nextSnapshot);
160
234
  registryVersion += 1;
161
235
  }