@aura3d/engine 4.3.7 → 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 (577) hide show
  1. package/README.md +1 -0
  2. package/dist/animation/AnimationTrack.d.ts.map +1 -1
  3. package/dist/animation/AnimationTrack.js +3 -1
  4. package/dist/animation/AnimationTrack.js.map +1 -1
  5. package/dist/animation/pose/BoneMask.d.ts +8 -0
  6. package/dist/animation/pose/BoneMask.d.ts.map +1 -1
  7. package/dist/animation/pose/BoneMask.js +18 -1
  8. package/dist/animation/pose/BoneMask.js.map +1 -1
  9. package/dist/animation/pose/PoseMixer.d.ts +18 -2
  10. package/dist/animation/pose/PoseMixer.d.ts.map +1 -1
  11. package/dist/animation/pose/PoseMixer.js +55 -4
  12. package/dist/animation/pose/PoseMixer.js.map +1 -1
  13. package/dist/animation/pose/RetargetWorker.d.ts +8 -1
  14. package/dist/animation/pose/RetargetWorker.d.ts.map +1 -1
  15. package/dist/animation/pose/RetargetWorker.js +30 -2
  16. package/dist/animation/pose/RetargetWorker.js.map +1 -1
  17. package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
  18. package/dist/assets/GLTFAnimationRuntime.js +11 -4
  19. package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
  20. package/dist/assets/GLTFLoader.d.ts +2 -0
  21. package/dist/assets/GLTFLoader.d.ts.map +1 -1
  22. package/dist/assets/GLTFLoader.js +17 -3
  23. package/dist/assets/GLTFLoader.js.map +1 -1
  24. package/dist/aura3d-cli/index.d.ts +6 -0
  25. package/dist/aura3d-cli/index.d.ts.map +1 -1
  26. package/dist/aura3d-cli/index.js +28 -0
  27. package/dist/aura3d-cli/index.js.map +1 -1
  28. package/dist/aura3d-cli/migrate-three/emit.d.ts.map +1 -1
  29. package/dist/aura3d-cli/migrate-three/emit.js +109 -29
  30. package/dist/aura3d-cli/migrate-three/emit.js.map +1 -1
  31. package/dist/aura3d-cli/migrate-three/mappings.d.ts +15 -0
  32. package/dist/aura3d-cli/migrate-three/mappings.d.ts.map +1 -1
  33. package/dist/aura3d-cli/migrate-three/mappings.js +70 -60
  34. package/dist/aura3d-cli/migrate-three/mappings.js.map +1 -1
  35. package/dist/aura3d-cli/migrate-three/parse.d.ts +9 -0
  36. package/dist/aura3d-cli/migrate-three/parse.d.ts.map +1 -1
  37. package/dist/aura3d-cli/migrate-three/parse.js +1 -1
  38. package/dist/aura3d-cli/migrate-three/parse.js.map +1 -1
  39. package/dist/create-aura3d/cli.js +22 -2
  40. package/dist/create-aura3d/cli.js.map +1 -1
  41. package/dist/create-aura3d/index.d.ts +11 -0
  42. package/dist/create-aura3d/index.d.ts.map +1 -1
  43. package/dist/create-aura3d/index.js +9 -2
  44. package/dist/create-aura3d/index.js.map +1 -1
  45. package/dist/create-aura3d/template-assets.d.ts +53 -0
  46. package/dist/create-aura3d/template-assets.d.ts.map +1 -0
  47. package/dist/create-aura3d/template-assets.js +116 -0
  48. package/dist/create-aura3d/template-assets.js.map +1 -0
  49. package/dist/engine/agent-api/Clock.d.ts +9 -3
  50. package/dist/engine/agent-api/Clock.d.ts.map +1 -1
  51. package/dist/engine/agent-api/Clock.js +17 -6
  52. package/dist/engine/agent-api/Clock.js.map +1 -1
  53. package/dist/engine/agent-api/animationMask.d.ts +26 -0
  54. package/dist/engine/agent-api/animationMask.d.ts.map +1 -0
  55. package/dist/engine/agent-api/animationMask.js +38 -0
  56. package/dist/engine/agent-api/animationMask.js.map +1 -0
  57. package/dist/engine/agent-api/app/actorAnimationHandle.d.ts +2 -0
  58. package/dist/engine/agent-api/app/actorAnimationHandle.d.ts.map +1 -1
  59. package/dist/engine/agent-api/app/actorAnimationHandle.js +26 -3
  60. package/dist/engine/agent-api/app/actorAnimationHandle.js.map +1 -1
  61. package/dist/engine/agent-api/app/canvas.d.ts +21 -0
  62. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  63. package/dist/engine/agent-api/app/canvas.js +119 -7
  64. package/dist/engine/agent-api/app/canvas.js.map +1 -1
  65. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  66. package/dist/engine/agent-api/app/createAuraApp.js +153 -14
  67. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  68. package/dist/engine/agent-api/app/frameLoop.d.ts +13 -0
  69. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  70. package/dist/engine/agent-api/app/frameLoop.js +118 -15
  71. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  72. package/dist/engine/agent-api/app/mountRenderer.d.ts +6 -1
  73. package/dist/engine/agent-api/app/mountRenderer.d.ts.map +1 -1
  74. package/dist/engine/agent-api/app/mountRenderer.js +2 -2
  75. package/dist/engine/agent-api/app/mountRenderer.js.map +1 -1
  76. package/dist/engine/agent-api/app/parentFit.d.ts +20 -2
  77. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -1
  78. package/dist/engine/agent-api/app/parentFit.js +13 -9
  79. package/dist/engine/agent-api/app/parentFit.js.map +1 -1
  80. package/dist/engine/agent-api/app/renderPath.d.ts +86 -0
  81. package/dist/engine/agent-api/app/renderPath.d.ts.map +1 -0
  82. package/dist/engine/agent-api/app/renderPath.js +269 -0
  83. package/dist/engine/agent-api/app/renderPath.js.map +1 -0
  84. package/dist/engine/agent-api/app/rendererOptions.d.ts +31 -1
  85. package/dist/engine/agent-api/app/rendererOptions.d.ts.map +1 -1
  86. package/dist/engine/agent-api/app/rendererOptions.js +74 -7
  87. package/dist/engine/agent-api/app/rendererOptions.js.map +1 -1
  88. package/dist/engine/agent-api/app/routeState.d.ts.map +1 -1
  89. package/dist/engine/agent-api/app/routeState.js +8 -3
  90. package/dist/engine/agent-api/app/routeState.js.map +1 -1
  91. package/dist/engine/agent-api/app/runtimeNodes.d.ts +2 -0
  92. package/dist/engine/agent-api/app/runtimeNodes.d.ts.map +1 -1
  93. package/dist/engine/agent-api/app/runtimeNodes.js +111 -2
  94. package/dist/engine/agent-api/app/runtimeNodes.js.map +1 -1
  95. package/dist/engine/agent-api/camera/extension.d.ts.map +1 -1
  96. package/dist/engine/agent-api/camera/extension.js +2 -2
  97. package/dist/engine/agent-api/camera/extension.js.map +1 -1
  98. package/dist/engine/agent-api/camera/rigs/fromSpec.d.ts +2 -0
  99. package/dist/engine/agent-api/camera/rigs/fromSpec.d.ts.map +1 -1
  100. package/dist/engine/agent-api/camera/rigs/fromSpec.js +11 -1
  101. package/dist/engine/agent-api/camera/rigs/fromSpec.js.map +1 -1
  102. package/dist/engine/agent-api/compiler/animation.d.ts.map +1 -1
  103. package/dist/engine/agent-api/compiler/animation.js +4 -2
  104. package/dist/engine/agent-api/compiler/animation.js.map +1 -1
  105. package/dist/engine/agent-api/compiler/camera.d.ts.map +1 -1
  106. package/dist/engine/agent-api/compiler/camera.js +10 -0
  107. package/dist/engine/agent-api/compiler/camera.js.map +1 -1
  108. package/dist/engine/agent-api/compiler/compileScene.d.ts +21 -5
  109. package/dist/engine/agent-api/compiler/compileScene.d.ts.map +1 -1
  110. package/dist/engine/agent-api/compiler/compileScene.js +112 -13
  111. package/dist/engine/agent-api/compiler/compileScene.js.map +1 -1
  112. package/dist/engine/agent-api/compiler/contactShadowKey.d.ts +14 -0
  113. package/dist/engine/agent-api/compiler/contactShadowKey.d.ts.map +1 -0
  114. package/dist/engine/agent-api/compiler/contactShadowKey.js +66 -0
  115. package/dist/engine/agent-api/compiler/contactShadowKey.js.map +1 -0
  116. package/dist/engine/agent-api/compiler/environment.d.ts +56 -2
  117. package/dist/engine/agent-api/compiler/environment.d.ts.map +1 -1
  118. package/dist/engine/agent-api/compiler/environment.js +202 -15
  119. package/dist/engine/agent-api/compiler/environment.js.map +1 -1
  120. package/dist/engine/agent-api/compiler/geometry.d.ts +18 -1
  121. package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
  122. package/dist/engine/agent-api/compiler/geometry.js +25 -5
  123. package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
  124. package/dist/engine/agent-api/compiler/lights.d.ts.map +1 -1
  125. package/dist/engine/agent-api/compiler/lights.js +14 -6
  126. package/dist/engine/agent-api/compiler/lights.js.map +1 -1
  127. package/dist/engine/agent-api/compiler/mountedRoots.d.ts +6 -0
  128. package/dist/engine/agent-api/compiler/mountedRoots.d.ts.map +1 -0
  129. package/dist/engine/agent-api/compiler/mountedRoots.js +25 -0
  130. package/dist/engine/agent-api/compiler/mountedRoots.js.map +1 -0
  131. package/dist/engine/agent-api/compiler/observations.d.ts +9 -1
  132. package/dist/engine/agent-api/compiler/observations.d.ts.map +1 -1
  133. package/dist/engine/agent-api/compiler/observations.js +5 -4
  134. package/dist/engine/agent-api/compiler/observations.js.map +1 -1
  135. package/dist/engine/agent-api/compiler/optionCoverage.js +17 -0
  136. package/dist/engine/agent-api/compiler/optionCoverage.js.map +1 -1
  137. package/dist/engine/agent-api/compiler/postprocess.d.ts.map +1 -1
  138. package/dist/engine/agent-api/compiler/postprocess.js +2 -0
  139. package/dist/engine/agent-api/compiler/postprocess.js.map +1 -1
  140. package/dist/engine/agent-api/compiler/primitives.d.ts +34 -0
  141. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  142. package/dist/engine/agent-api/compiler/primitives.js +113 -3
  143. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  144. package/dist/engine/agent-api/compiler/renderInput.d.ts.map +1 -1
  145. package/dist/engine/agent-api/compiler/renderInput.js +40 -4
  146. package/dist/engine/agent-api/compiler/renderInput.js.map +1 -1
  147. package/dist/engine/agent-api/compiler/renderer.d.ts +6 -4
  148. package/dist/engine/agent-api/compiler/renderer.d.ts.map +1 -1
  149. package/dist/engine/agent-api/compiler/renderer.js +54 -14
  150. package/dist/engine/agent-api/compiler/renderer.js.map +1 -1
  151. package/dist/engine/agent-api/compiler/shadows.d.ts +35 -1
  152. package/dist/engine/agent-api/compiler/shadows.d.ts.map +1 -1
  153. package/dist/engine/agent-api/compiler/shadows.js +103 -4
  154. package/dist/engine/agent-api/compiler/shadows.js.map +1 -1
  155. package/dist/engine/agent-api/diagnostics.d.ts +22 -0
  156. package/dist/engine/agent-api/diagnostics.d.ts.map +1 -1
  157. package/dist/engine/agent-api/diagnostics.js +53 -1
  158. package/dist/engine/agent-api/diagnostics.js.map +1 -1
  159. package/dist/engine/agent-api/feel/extension.d.ts.map +1 -1
  160. package/dist/engine/agent-api/feel/extension.js +2 -1
  161. package/dist/engine/agent-api/feel/extension.js.map +1 -1
  162. package/dist/engine/agent-api/looks/lookFill.d.ts +4 -0
  163. package/dist/engine/agent-api/looks/lookFill.d.ts.map +1 -0
  164. package/dist/engine/agent-api/looks/lookFill.js +29 -0
  165. package/dist/engine/agent-api/looks/lookFill.js.map +1 -0
  166. package/dist/engine/agent-api/looks/lookPresets.d.ts +13 -0
  167. package/dist/engine/agent-api/looks/lookPresets.d.ts.map +1 -1
  168. package/dist/engine/agent-api/looks/lookPresets.js +5 -0
  169. package/dist/engine/agent-api/looks/lookPresets.js.map +1 -1
  170. package/dist/engine/agent-api/looks/looks.d.ts.map +1 -1
  171. package/dist/engine/agent-api/looks/looks.js +6 -0
  172. package/dist/engine/agent-api/looks/looks.js.map +1 -1
  173. package/dist/engine/agent-api/looks/structuralQA.d.ts.map +1 -1
  174. package/dist/engine/agent-api/looks/structuralQA.js +4 -2
  175. package/dist/engine/agent-api/looks/structuralQA.js.map +1 -1
  176. package/dist/engine/agent-api/nodes/game/instanceTransforms.d.ts +5 -4
  177. package/dist/engine/agent-api/nodes/game/instanceTransforms.d.ts.map +1 -1
  178. package/dist/engine/agent-api/nodes/game/instanceTransforms.js +61 -5
  179. package/dist/engine/agent-api/nodes/game/instanceTransforms.js.map +1 -1
  180. package/dist/engine/agent-api/nodes/groups.d.ts.map +1 -1
  181. package/dist/engine/agent-api/nodes/groups.js +2 -1
  182. package/dist/engine/agent-api/nodes/groups.js.map +1 -1
  183. package/dist/engine/agent-api/nodes/instances.d.ts.map +1 -1
  184. package/dist/engine/agent-api/nodes/instances.js +16 -4
  185. package/dist/engine/agent-api/nodes/instances.js.map +1 -1
  186. package/dist/engine/agent-api/nodes/interactions.d.ts +32 -10
  187. package/dist/engine/agent-api/nodes/interactions.d.ts.map +1 -1
  188. package/dist/engine/agent-api/nodes/interactions.js +40 -11
  189. package/dist/engine/agent-api/nodes/interactions.js.map +1 -1
  190. package/dist/engine/agent-api/nodes/model.d.ts +18 -0
  191. package/dist/engine/agent-api/nodes/model.d.ts.map +1 -1
  192. package/dist/engine/agent-api/nodes/model.js +41 -1
  193. package/dist/engine/agent-api/nodes/model.js.map +1 -1
  194. package/dist/engine/agent-api/nodes/optionDiagnostics.d.ts +14 -0
  195. package/dist/engine/agent-api/nodes/optionDiagnostics.d.ts.map +1 -0
  196. package/dist/engine/agent-api/nodes/optionDiagnostics.js +34 -0
  197. package/dist/engine/agent-api/nodes/optionDiagnostics.js.map +1 -0
  198. package/dist/engine/agent-api/nodes/orbitInteraction.d.ts +9 -0
  199. package/dist/engine/agent-api/nodes/orbitInteraction.d.ts.map +1 -0
  200. package/dist/engine/agent-api/nodes/orbitInteraction.js +52 -0
  201. package/dist/engine/agent-api/nodes/orbitInteraction.js.map +1 -0
  202. package/dist/engine/agent-api/nodes/physics.d.ts +26 -0
  203. package/dist/engine/agent-api/nodes/physics.d.ts.map +1 -1
  204. package/dist/engine/agent-api/nodes/physics.js +115 -7
  205. package/dist/engine/agent-api/nodes/physics.js.map +1 -1
  206. package/dist/engine/agent-api/nodes/primitives.d.ts +16 -1
  207. package/dist/engine/agent-api/nodes/primitives.d.ts.map +1 -1
  208. package/dist/engine/agent-api/nodes/primitives.js +27 -1
  209. package/dist/engine/agent-api/nodes/primitives.js.map +1 -1
  210. package/dist/engine/agent-api/nodes/scene.d.ts.map +1 -1
  211. package/dist/engine/agent-api/nodes/scene.js +4 -2
  212. package/dist/engine/agent-api/nodes/scene.js.map +1 -1
  213. package/dist/engine/agent-api/nodes/text3d.d.ts.map +1 -1
  214. package/dist/engine/agent-api/nodes/text3d.js +11 -2
  215. package/dist/engine/agent-api/nodes/text3d.js.map +1 -1
  216. package/dist/engine/agent-api/nodes/types/runtime.d.ts +38 -0
  217. package/dist/engine/agent-api/nodes/types/runtime.d.ts.map +1 -1
  218. package/dist/engine/agent-api/nodes/types.d.ts +44 -0
  219. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  220. package/dist/engine/agent-api/platform.d.ts +5 -0
  221. package/dist/engine/agent-api/platform.d.ts.map +1 -1
  222. package/dist/engine/agent-api/platform.js +15 -0
  223. package/dist/engine/agent-api/platform.js.map +1 -1
  224. package/dist/engine/agent-api/postBridge.d.ts.map +1 -1
  225. package/dist/engine/agent-api/postBridge.js +5 -1
  226. package/dist/engine/agent-api/postBridge.js.map +1 -1
  227. package/dist/engine/agent-api/sceneKitDiagnostics.d.ts.map +1 -1
  228. package/dist/engine/agent-api/sceneKitDiagnostics.js +5 -2
  229. package/dist/engine/agent-api/sceneKitDiagnostics.js.map +1 -1
  230. package/dist/engine/contracts/animation.d.ts +5 -3
  231. package/dist/engine/contracts/animation.d.ts.map +1 -1
  232. package/dist/engine/contracts/animation.js.map +1 -1
  233. package/dist/engine/contracts/environment.d.ts +9 -0
  234. package/dist/engine/contracts/environment.d.ts.map +1 -1
  235. package/dist/engine/contracts/environment.js.map +1 -1
  236. package/dist/engine/contracts/flags.d.ts.map +1 -1
  237. package/dist/engine/contracts/flags.js +2 -1
  238. package/dist/engine/contracts/flags.js.map +1 -1
  239. package/dist/engine/contracts/lighting.d.ts +3 -0
  240. package/dist/engine/contracts/lighting.d.ts.map +1 -1
  241. package/dist/engine/contracts/lighting.js.map +1 -1
  242. package/dist/engine/contracts/stubs/game.d.ts.map +1 -1
  243. package/dist/engine/contracts/stubs/game.js +9 -1
  244. package/dist/engine/contracts/stubs/game.js.map +1 -1
  245. package/dist/engine/contracts/urlCache.d.ts +4 -0
  246. package/dist/engine/contracts/urlCache.d.ts.map +1 -0
  247. package/dist/engine/contracts/urlCache.js +25 -0
  248. package/dist/engine/contracts/urlCache.js.map +1 -0
  249. package/dist/engine/lanes/prd01/outputSurface.d.ts.map +1 -1
  250. package/dist/engine/lanes/prd01/outputSurface.js +25 -1
  251. package/dist/engine/lanes/prd01/outputSurface.js.map +1 -1
  252. package/dist/engine/lanes/prd02.d.ts +12 -4
  253. package/dist/engine/lanes/prd02.d.ts.map +1 -1
  254. package/dist/engine/lanes/prd02.js +23 -7
  255. package/dist/engine/lanes/prd02.js.map +1 -1
  256. package/dist/game/touch/TouchControls.d.ts.map +1 -1
  257. package/dist/game/touch/TouchControls.js +48 -12
  258. package/dist/game/touch/TouchControls.js.map +1 -1
  259. package/dist/math/SphericalHarmonics3.d.ts +6 -3
  260. package/dist/math/SphericalHarmonics3.d.ts.map +1 -1
  261. package/dist/math/SphericalHarmonics3.js +8 -5
  262. package/dist/math/SphericalHarmonics3.js.map +1 -1
  263. package/dist/math/three/Box3.d.ts +106 -0
  264. package/dist/math/three/Box3.d.ts.map +1 -0
  265. package/dist/math/three/Box3.js +348 -0
  266. package/dist/math/three/Box3.js.map +1 -0
  267. package/dist/math/three/Color.d.ts +127 -0
  268. package/dist/math/three/Color.d.ts.map +1 -0
  269. package/dist/math/three/Color.js +501 -0
  270. package/dist/math/three/Color.js.map +1 -0
  271. package/dist/math/three/Euler.d.ts +50 -0
  272. package/dist/math/three/Euler.d.ts.map +1 -0
  273. package/dist/math/three/Euler.js +210 -0
  274. package/dist/math/three/Euler.js.map +1 -0
  275. package/dist/math/three/Frustum.d.ts +59 -0
  276. package/dist/math/three/Frustum.d.ts.map +1 -0
  277. package/dist/math/three/Frustum.js +135 -0
  278. package/dist/math/three/Frustum.js.map +1 -0
  279. package/dist/math/three/Matrix3.d.ts +56 -0
  280. package/dist/math/three/Matrix3.d.ts.map +1 -0
  281. package/dist/math/three/Matrix3.js +248 -0
  282. package/dist/math/three/Matrix3.js.map +1 -0
  283. package/dist/math/three/Matrix4.d.ts +79 -0
  284. package/dist/math/three/Matrix4.d.ts.map +1 -0
  285. package/dist/math/three/Matrix4.js +708 -0
  286. package/dist/math/three/Matrix4.js.map +1 -0
  287. package/dist/math/three/Plane.d.ts +65 -0
  288. package/dist/math/three/Plane.d.ts.map +1 -0
  289. package/dist/math/three/Plane.js +135 -0
  290. package/dist/math/three/Plane.js.map +1 -0
  291. package/dist/math/three/Quaternion.d.ts +91 -0
  292. package/dist/math/three/Quaternion.d.ts.map +1 -0
  293. package/dist/math/three/Quaternion.js +444 -0
  294. package/dist/math/three/Quaternion.js.map +1 -0
  295. package/dist/math/three/Ray.d.ts +56 -0
  296. package/dist/math/three/Ray.d.ts.map +1 -0
  297. package/dist/math/three/Ray.js +340 -0
  298. package/dist/math/three/Ray.js.map +1 -0
  299. package/dist/math/three/Sphere.d.ts +58 -0
  300. package/dist/math/three/Sphere.d.ts.map +1 -0
  301. package/dist/math/three/Sphere.js +166 -0
  302. package/dist/math/three/Sphere.js.map +1 -0
  303. package/dist/math/three/Triangle.d.ts +58 -0
  304. package/dist/math/three/Triangle.d.ts.map +1 -0
  305. package/dist/math/three/Triangle.js +229 -0
  306. package/dist/math/three/Triangle.js.map +1 -0
  307. package/dist/math/three/Vector2.d.ts +88 -0
  308. package/dist/math/three/Vector2.d.ts.map +1 -0
  309. package/dist/math/three/Vector2.js +283 -0
  310. package/dist/math/three/Vector2.js.map +1 -0
  311. package/dist/math/three/Vector3.d.ts +137 -0
  312. package/dist/math/three/Vector3.d.ts.map +1 -0
  313. package/dist/math/three/Vector3.js +458 -0
  314. package/dist/math/three/Vector3.js.map +1 -0
  315. package/dist/math/three/Vector4.d.ts +100 -0
  316. package/dist/math/three/Vector4.d.ts.map +1 -0
  317. package/dist/math/three/Vector4.js +443 -0
  318. package/dist/math/three/Vector4.js.map +1 -0
  319. package/dist/math/three/index.d.ts +29 -0
  320. package/dist/math/three/index.d.ts.map +1 -0
  321. package/dist/math/three/index.js +29 -0
  322. package/dist/math/three/index.js.map +1 -0
  323. package/dist/react/index.d.ts +21 -0
  324. package/dist/react/index.d.ts.map +1 -1
  325. package/dist/react/index.js +128 -21
  326. package/dist/react/index.js.map +1 -1
  327. package/dist/rendering/DepthPass.d.ts +7 -0
  328. package/dist/rendering/DepthPass.d.ts.map +1 -1
  329. package/dist/rendering/DepthPass.js +43 -6
  330. package/dist/rendering/DepthPass.js.map +1 -1
  331. package/dist/rendering/ForwardPass.d.ts +82 -5
  332. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  333. package/dist/rendering/ForwardPass.js +180 -35
  334. package/dist/rendering/ForwardPass.js.map +1 -1
  335. package/dist/rendering/MaterialBinding.js +6 -2
  336. package/dist/rendering/MaterialBinding.js.map +1 -1
  337. package/dist/rendering/RenderDevice.d.ts +5 -0
  338. package/dist/rendering/RenderDevice.d.ts.map +1 -1
  339. package/dist/rendering/RenderDevice.js.map +1 -1
  340. package/dist/rendering/Renderer.d.ts +8 -0
  341. package/dist/rendering/Renderer.d.ts.map +1 -1
  342. package/dist/rendering/Renderer.js +37 -6
  343. package/dist/rendering/Renderer.js.map +1 -1
  344. package/dist/rendering/RendererPostprocessPlan.d.ts.map +1 -1
  345. package/dist/rendering/RendererPostprocessPlan.js +8 -1
  346. package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
  347. package/dist/rendering/ShaderChunks.d.ts.map +1 -1
  348. package/dist/rendering/ShaderChunks.js +3 -1
  349. package/dist/rendering/ShaderChunks.js.map +1 -1
  350. package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
  351. package/dist/rendering/ShaderLibrary.js +17 -5
  352. package/dist/rendering/ShaderLibrary.js.map +1 -1
  353. package/dist/rendering/ShaderLibraryCore.d.ts.map +1 -1
  354. package/dist/rendering/ShaderLibraryCore.js +2 -1
  355. package/dist/rendering/ShaderLibraryCore.js.map +1 -1
  356. package/dist/rendering/WebGL2Device.d.ts +19 -1
  357. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  358. package/dist/rendering/WebGL2Device.js +114 -37
  359. package/dist/rendering/WebGL2Device.js.map +1 -1
  360. package/dist/rendering/WebGL2StateCache.d.ts +22 -0
  361. package/dist/rendering/WebGL2StateCache.d.ts.map +1 -1
  362. package/dist/rendering/WebGL2StateCache.js +71 -42
  363. package/dist/rendering/WebGL2StateCache.js.map +1 -1
  364. package/dist/rendering/contracts/core.d.ts.map +1 -1
  365. package/dist/rendering/contracts/core.js +22 -2
  366. package/dist/rendering/contracts/core.js.map +1 -1
  367. package/dist/rendering/contracts/program.d.ts.map +1 -1
  368. package/dist/rendering/contracts/program.js +8 -1
  369. package/dist/rendering/contracts/program.js.map +1 -1
  370. package/dist/rendering/contracts/quality.d.ts +21 -0
  371. package/dist/rendering/contracts/quality.d.ts.map +1 -1
  372. package/dist/rendering/contracts/quality.js +5 -0
  373. package/dist/rendering/contracts/quality.js.map +1 -1
  374. package/dist/rendering/contracts/renderItem.d.ts +6 -0
  375. package/dist/rendering/contracts/renderItem.d.ts.map +1 -1
  376. package/dist/rendering/contracts/structuralMemo.d.ts +23 -0
  377. package/dist/rendering/contracts/structuralMemo.d.ts.map +1 -0
  378. package/dist/rendering/contracts/structuralMemo.js +81 -0
  379. package/dist/rendering/contracts/structuralMemo.js.map +1 -0
  380. package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
  381. package/dist/rendering/environment/EnvironmentCache.js +6 -1
  382. package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
  383. package/dist/rendering/environment/FirstFrameGate.d.ts +23 -0
  384. package/dist/rendering/environment/FirstFrameGate.d.ts.map +1 -0
  385. package/dist/rendering/environment/FirstFrameGate.js +58 -0
  386. package/dist/rendering/environment/FirstFrameGate.js.map +1 -0
  387. package/dist/rendering/environment/Rgb9e5Cube.d.ts.map +1 -1
  388. package/dist/rendering/environment/Rgb9e5Cube.js +8 -4
  389. package/dist/rendering/environment/Rgb9e5Cube.js.map +1 -1
  390. package/dist/rendering/environment/probeBuild.d.ts +29 -0
  391. package/dist/rendering/environment/probeBuild.d.ts.map +1 -1
  392. package/dist/rendering/environment/probeBuild.js +124 -45
  393. package/dist/rendering/environment/probeBuild.js.map +1 -1
  394. package/dist/rendering/forward/Lighting.d.ts +43 -3
  395. package/dist/rendering/forward/Lighting.d.ts.map +1 -1
  396. package/dist/rendering/forward/Lighting.js +127 -17
  397. package/dist/rendering/forward/Lighting.js.map +1 -1
  398. package/dist/rendering/forward/contactShadowMaskStore.d.ts +41 -0
  399. package/dist/rendering/forward/contactShadowMaskStore.d.ts.map +1 -0
  400. package/dist/rendering/forward/contactShadowMaskStore.js +85 -0
  401. package/dist/rendering/forward/contactShadowMaskStore.js.map +1 -0
  402. package/dist/rendering/geometry/Shape.d.ts.map +1 -1
  403. package/dist/rendering/geometry/Shape.js +7 -2
  404. package/dist/rendering/geometry/Shape.js.map +1 -1
  405. package/dist/rendering/geometry/Support.d.ts +4 -0
  406. package/dist/rendering/geometry/Support.d.ts.map +1 -1
  407. package/dist/rendering/geometry/Support.js +3 -2
  408. package/dist/rendering/geometry/Support.js.map +1 -1
  409. package/dist/rendering/index.d.ts +6 -0
  410. package/dist/rendering/index.d.ts.map +1 -1
  411. package/dist/rendering/index.js +5 -0
  412. package/dist/rendering/index.js.map +1 -1
  413. package/dist/rendering/passes/ContactShadowPass.d.ts +40 -3
  414. package/dist/rendering/passes/ContactShadowPass.d.ts.map +1 -1
  415. package/dist/rendering/passes/ContactShadowPass.js +73 -13
  416. package/dist/rendering/passes/ContactShadowPass.js.map +1 -1
  417. package/dist/rendering/passes/Prd02ContactShadowsContributor.d.ts +19 -0
  418. package/dist/rendering/passes/Prd02ContactShadowsContributor.d.ts.map +1 -1
  419. package/dist/rendering/passes/Prd02ContactShadowsContributor.js +179 -28
  420. package/dist/rendering/passes/Prd02ContactShadowsContributor.js.map +1 -1
  421. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  422. package/dist/rendering/post/v2Stages.js +2 -0
  423. package/dist/rendering/post/v2Stages.js.map +1 -1
  424. package/dist/rendering/program/ProgramFeatures.d.ts +6 -0
  425. package/dist/rendering/program/ProgramFeatures.d.ts.map +1 -1
  426. package/dist/rendering/program/ProgramFeatures.js +11 -5
  427. package/dist/rendering/program/ProgramFeatures.js.map +1 -1
  428. package/dist/rendering/program/ProgramGenerator.d.ts +6 -0
  429. package/dist/rendering/program/ProgramGenerator.d.ts.map +1 -1
  430. package/dist/rendering/program/ProgramGenerator.js +36 -1
  431. package/dist/rendering/program/ProgramGenerator.js.map +1 -1
  432. package/dist/rendering/program/ProgramKey.d.ts.map +1 -1
  433. package/dist/rendering/program/ProgramKey.js +4 -1
  434. package/dist/rendering/program/ProgramKey.js.map +1 -1
  435. package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts +1 -1
  436. package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts.map +1 -1
  437. package/dist/rendering/program/chunks/shadow_forward.glsl.js +4 -1
  438. package/dist/rendering/program/chunks/shadow_forward.glsl.js.map +1 -1
  439. package/dist/rendering/quality/DirectPath.d.ts +56 -0
  440. package/dist/rendering/quality/DirectPath.d.ts.map +1 -0
  441. package/dist/rendering/quality/DirectPath.js +74 -0
  442. package/dist/rendering/quality/DirectPath.js.map +1 -0
  443. package/dist/rendering/renderer/Background.d.ts +0 -5
  444. package/dist/rendering/renderer/Background.d.ts.map +1 -1
  445. package/dist/rendering/renderer/Background.js +56 -4
  446. package/dist/rendering/renderer/Background.js.map +1 -1
  447. package/dist/rendering/renderer/InstanceFrustumCull.d.ts +41 -0
  448. package/dist/rendering/renderer/InstanceFrustumCull.d.ts.map +1 -0
  449. package/dist/rendering/renderer/InstanceFrustumCull.js +138 -0
  450. package/dist/rendering/renderer/InstanceFrustumCull.js.map +1 -0
  451. package/dist/rendering/renderer/ShadowOrchestration.d.ts +2 -0
  452. package/dist/rendering/renderer/ShadowOrchestration.d.ts.map +1 -1
  453. package/dist/rendering/renderer/ShadowOrchestration.js +1 -0
  454. package/dist/rendering/renderer/ShadowOrchestration.js.map +1 -1
  455. package/dist/rendering/renderer/coreOutputPostRoute.d.ts +0 -5
  456. package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
  457. package/dist/rendering/renderer/coreOutputPostRoute.js +12 -2
  458. package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
  459. package/dist/rendering/resources/InstanceBuffer.d.ts +2 -0
  460. package/dist/rendering/resources/InstanceBuffer.d.ts.map +1 -1
  461. package/dist/rendering/resources/InstanceBuffer.js +23 -0
  462. package/dist/rendering/resources/InstanceBuffer.js.map +1 -1
  463. package/dist/rendering/shaders/chunks/contact_shadow.glsl.d.ts +11 -6
  464. package/dist/rendering/shaders/chunks/contact_shadow.glsl.d.ts.map +1 -1
  465. package/dist/rendering/shaders/chunks/contact_shadow.glsl.js +41 -19
  466. package/dist/rendering/shaders/chunks/contact_shadow.glsl.js.map +1 -1
  467. package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.d.ts +12 -0
  468. package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.d.ts.map +1 -0
  469. package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.js +21 -0
  470. package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.js.map +1 -0
  471. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.d.ts +6 -1
  472. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.d.ts.map +1 -1
  473. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.js +8 -2
  474. package/dist/rendering/shaders/chunks/lighting_ibl.glsl.js.map +1 -1
  475. package/dist/rendering/shadows/CascadeUse.d.ts +31 -0
  476. package/dist/rendering/shadows/CascadeUse.d.ts.map +1 -0
  477. package/dist/rendering/shadows/CascadeUse.js +60 -0
  478. package/dist/rendering/shadows/CascadeUse.js.map +1 -0
  479. package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts +7 -1
  480. package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
  481. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +12 -3
  482. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
  483. package/dist/rendering/shadows/Prd02ShadowBridge.d.ts +12 -1
  484. package/dist/rendering/shadows/Prd02ShadowBridge.d.ts.map +1 -1
  485. package/dist/rendering/shadows/Prd02ShadowBridge.js +17 -5
  486. package/dist/rendering/shadows/Prd02ShadowBridge.js.map +1 -1
  487. package/dist/rendering/shadows/Prd02ShadowsContributor.d.ts +4 -0
  488. package/dist/rendering/shadows/Prd02ShadowsContributor.d.ts.map +1 -1
  489. package/dist/rendering/shadows/Prd02ShadowsContributor.js +3 -1
  490. package/dist/rendering/shadows/Prd02ShadowsContributor.js.map +1 -1
  491. package/dist/rendering/shadows/ShadowFilterTier.d.ts +51 -0
  492. package/dist/rendering/shadows/ShadowFilterTier.d.ts.map +1 -0
  493. package/dist/rendering/shadows/ShadowFilterTier.js +89 -0
  494. package/dist/rendering/shadows/ShadowFilterTier.js.map +1 -0
  495. package/dist/rendering/shadows/ShadowSystem.d.ts +15 -0
  496. package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
  497. package/dist/rendering/shadows/ShadowSystem.js +12 -2
  498. package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
  499. package/dist/rendering/shadows/shadowLegacy.d.ts +12 -0
  500. package/dist/rendering/shadows/shadowLegacy.d.ts.map +1 -1
  501. package/dist/rendering/shadows/shadowLegacy.js +24 -0
  502. package/dist/rendering/shadows/shadowLegacy.js.map +1 -1
  503. package/dist/rendering/webgl2/BloomFusion.d.ts +31 -0
  504. package/dist/rendering/webgl2/BloomFusion.d.ts.map +1 -0
  505. package/dist/rendering/webgl2/BloomFusion.js +25 -0
  506. package/dist/rendering/webgl2/BloomFusion.js.map +1 -0
  507. package/dist/rendering/webgl2/ContextLifecycle.d.ts +14 -0
  508. package/dist/rendering/webgl2/ContextLifecycle.d.ts.map +1 -1
  509. package/dist/rendering/webgl2/ContextLifecycle.js +44 -5
  510. package/dist/rendering/webgl2/ContextLifecycle.js.map +1 -1
  511. package/dist/rendering/webgl2/LegacyPost.d.ts +30 -0
  512. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  513. package/dist/rendering/webgl2/LegacyPost.js +259 -27
  514. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  515. package/dist/rendering/webgl2/MultiDraw.d.ts +2 -0
  516. package/dist/rendering/webgl2/MultiDraw.d.ts.map +1 -1
  517. package/dist/rendering/webgl2/MultiDraw.js +33 -7
  518. package/dist/rendering/webgl2/MultiDraw.js.map +1 -1
  519. package/dist/rendering/webgl2/Samplers.d.ts +10 -1
  520. package/dist/rendering/webgl2/Samplers.d.ts.map +1 -1
  521. package/dist/rendering/webgl2/Samplers.js +24 -1
  522. package/dist/rendering/webgl2/Samplers.js.map +1 -1
  523. package/dist/rendering/webgl2/TextureFormats.d.ts +12 -0
  524. package/dist/rendering/webgl2/TextureFormats.d.ts.map +1 -1
  525. package/dist/rendering/webgl2/TextureFormats.js +16 -0
  526. package/dist/rendering/webgl2/TextureFormats.js.map +1 -1
  527. package/package.json +25 -25
  528. package/templates/cinematic-scene/package.json +2 -2
  529. package/templates/mini-game/package.json +2 -2
  530. package/templates/product-viewer/package.json +2 -2
  531. package/templates/production-asset-inspector/package.json +1 -1
  532. package/templates/production-material-studio/package.json +1 -1
  533. package/templates/production-product-configurator/package.json +1 -1
  534. package/templates/production-product-viewer/package.json +1 -1
  535. package/dist/environments/EnvironmentPreview.d.ts +0 -13
  536. package/dist/environments/EnvironmentPreview.d.ts.map +0 -1
  537. package/dist/environments/EnvironmentPreview.js +0 -16
  538. package/dist/environments/EnvironmentPreview.js.map +0 -1
  539. package/dist/environments/EnvironmentRegistry.d.ts +0 -35
  540. package/dist/environments/EnvironmentRegistry.d.ts.map +0 -1
  541. package/dist/environments/EnvironmentRegistry.js +0 -39
  542. package/dist/environments/EnvironmentRegistry.js.map +0 -1
  543. package/dist/environments/HDRIEnvironment.d.ts +0 -38
  544. package/dist/environments/HDRIEnvironment.d.ts.map +0 -1
  545. package/dist/environments/HDRIEnvironment.js +0 -34
  546. package/dist/environments/HDRIEnvironment.js.map +0 -1
  547. package/dist/environments/PMREMPreset.d.ts +0 -14
  548. package/dist/environments/PMREMPreset.d.ts.map +0 -1
  549. package/dist/environments/PMREMPreset.js +0 -16
  550. package/dist/environments/PMREMPreset.js.map +0 -1
  551. package/dist/environments/index.d.ts +0 -6
  552. package/dist/environments/index.d.ts.map +0 -1
  553. package/dist/environments/index.js +0 -3
  554. package/dist/environments/index.js.map +0 -1
  555. package/dist/environments/node.d.ts +0 -7
  556. package/dist/environments/node.d.ts.map +0 -1
  557. package/dist/environments/node.js +0 -5
  558. package/dist/environments/node.js.map +0 -1
  559. package/dist/environments/production-runtime/ProductionEnvironmentCorpus.d.ts +0 -78
  560. package/dist/environments/production-runtime/ProductionEnvironmentCorpus.d.ts.map +0 -1
  561. package/dist/environments/production-runtime/ProductionEnvironmentCorpus.js +0 -67
  562. package/dist/environments/production-runtime/ProductionEnvironmentCorpus.js.map +0 -1
  563. package/dist/environments/production-runtime/index.d.ts +0 -3
  564. package/dist/environments/production-runtime/index.d.ts.map +0 -1
  565. package/dist/environments/production-runtime/index.js +0 -2
  566. package/dist/environments/production-runtime/index.js.map +0 -1
  567. package/dist/environments/threejs-example-parity/index.d.ts +0 -17
  568. package/dist/environments/threejs-example-parity/index.d.ts.map +0 -1
  569. package/dist/environments/threejs-example-parity/index.js +0 -49
  570. package/dist/environments/threejs-example-parity/index.js.map +0 -1
  571. package/templates/cinematic-scene/node_modules/.vite/deps/_metadata.json +0 -8
  572. package/templates/cinematic-scene/node_modules/.vite/deps/package.json +0 -3
  573. package/templates/cinematic-scene/test-results/.last-run.json +0 -6
  574. package/templates/cinematic-scene/test-results/route-health-Aura3D-cinematic-scene-reaches-ready-state/error-context.md +0 -64
  575. package/templates/mini-game/package-lock.json +0 -1312
  576. package/templates/product-viewer/node_modules/.vite/deps/_metadata.json +0 -8
  577. package/templates/product-viewer/node_modules/.vite/deps/package.json +0 -3
@@ -1,41 +1,70 @@
1
1
  // PRD-15 Phase 3 carve-out (CONTRACTS.md §3.2) — verbatim move from agent-api/index.ts; 0 changed logic lines.
2
+ // Beat-three.js WP-S.2: every builder reports an option it does not read (an `OPTION_IGNORED` note on the node,
3
+ // surfaced as an `option-ignored` degradation at compile) and `orbit` takes a node name or a world point
4
+ // through typed overloads.
2
5
  import { AuraNodeBuilder } from "./builder.js";
3
- export const interactions = {
4
- orbit: (options = {}) => new AuraNodeBuilder({
6
+ import { ignoredOptionsNote } from "./optionDiagnostics.js";
7
+ /** Radians per second for `autoRotate: true`. */
8
+ export const ORBIT_AUTO_ROTATE_DEFAULT = 0.5;
9
+ const ORBIT_KEYS = ["target", "position", "autoRotate"];
10
+ function orbit(arg = {}) {
11
+ const options = typeof arg === "string" || Array.isArray(arg) ? { target: arg } : arg;
12
+ const { target, position, autoRotate } = options;
13
+ const speed = autoRotate === true ? ORBIT_AUTO_ROTATE_DEFAULT : typeof autoRotate === "number" && Number.isFinite(autoRotate) ? autoRotate : undefined;
14
+ return new AuraNodeBuilder({
5
15
  kind: "interaction",
6
16
  mode: "orbit",
7
- target: options.target
8
- }),
17
+ target: typeof target === "string" ? target : undefined,
18
+ ...(Array.isArray(target) ? { targetPoint: [target[0], target[1], target[2]] } : {}),
19
+ ...(position !== undefined ? { orbitPosition: [position[0], position[1], position[2]] } : {}),
20
+ ...(speed !== undefined && speed !== 0 ? { autoRotate: speed } : {}),
21
+ ...ignoredOptionsNote("interactions.orbit", options, ORBIT_KEYS)
22
+ });
23
+ }
24
+ const interaction = (builder, options, valid) => ignoredOptionsNote(`interactions.${builder}`, options, valid);
25
+ export const interactions = {
26
+ orbit,
9
27
  pointer: (options = {}) => new AuraNodeBuilder({
10
28
  kind: "interaction",
11
29
  mode: "pointer",
12
- target: options.target
30
+ target: options.target,
31
+ ...interaction("pointer", options, ["target"])
13
32
  }),
14
33
  keyboard: (options = {}) => new AuraNodeBuilder({
15
34
  kind: "interaction",
16
35
  mode: "keyboard",
17
- target: options.target
36
+ target: options.target,
37
+ ...interaction("keyboard", options, ["target"])
18
38
  }),
19
39
  hover: (options = {}) => new AuraNodeBuilder({
20
40
  kind: "interaction",
21
41
  mode: "hover",
22
42
  target: options.target,
23
- selected: options.selected
43
+ selected: options.selected,
44
+ ...interaction("hover", options, ["target", "selected"])
45
+ }),
46
+ raycastHover: (options = {}) => new AuraNodeBuilder({
47
+ ...interactions.hover({ target: options.target, selected: options.selected }).toJSON(),
48
+ ...interaction("raycastHover", options, ["target", "selected"])
49
+ }),
50
+ highlight: (options = {}) => new AuraNodeBuilder({
51
+ ...interactions.hover({ target: options.target, selected: options.selected ?? options.target }).toJSON(),
52
+ ...interaction("highlight", options, ["target", "selected"])
24
53
  }),
25
- raycastHover: (options = {}) => interactions.hover(options),
26
- highlight: (options = {}) => interactions.hover({ target: options.target, selected: options.selected ?? options.target }),
27
54
  dragVector: (options = {}) => new AuraNodeBuilder({
28
55
  kind: "interaction",
29
56
  mode: "drag-vector",
30
57
  target: options.target,
31
- vector: options.vector ?? [1, 0, 0]
58
+ vector: options.vector ?? [1, 0, 0],
59
+ ...interaction("dragVector", options, ["target", "vector"])
32
60
  }),
33
61
  clickImpulse: (options = {}) => new AuraNodeBuilder({
34
62
  kind: "interaction",
35
63
  mode: "click-impulse",
36
64
  target: options.target,
37
65
  impulse: options.impulse ?? 1,
38
- vector: options.vector ?? [1, 0, 0]
66
+ vector: options.vector ?? [1, 0, 0],
67
+ ...interaction("clickImpulse", options, ["target", "impulse", "vector"])
39
68
  })
40
69
  };
41
70
  //# sourceMappingURL=interactions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/interactions.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAG/G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC,UAAwC,EAAE,EAAwC,EAAE,CAC1F,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IACJ,OAAO,EAAE,CAAC,UAAwC,EAAE,EAAwC,EAAE,CAC5F,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IACJ,QAAQ,EAAE,CAAC,UAAwC,EAAE,EAAwC,EAAE,CAC7F,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IACJ,KAAK,EAAE,CAAC,UAAoE,EAAE,EAAwC,EAAE,CACtH,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IACJ,YAAY,EAAE,CAAC,UAAoE,EAAE,EAAwC,EAAE,CAC7H,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7B,SAAS,EAAE,CAAC,UAAoE,EAAE,EAAwC,EAAE,CAC1H,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAC9F,UAAU,EAAE,CAAC,UAAoE,EAAE,EAAwC,EAAE,CAC3H,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACpC,CAAC;IACJ,YAAY,EAAE,CAAC,UAA+F,EAAE,EAAwC,EAAE,CACxJ,IAAI,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACpC,CAAC;CACI,CAAC"}
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/interactions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
1
  import type { AuraAssetDefinition, AuraAssetRef, AuraModelOptions, AuraModelNode } from "./types.js";
2
2
  import { AuraNodeBuilder } from "./builder.js";
3
+ /**
4
+ * Every top-level option `model()` reads, plus the transform extras it forwards to the node
5
+ * (the render path reads `renderOrder`, `frustumCulled`, `layers`, `userData`; the scene graph
6
+ * reads `rotationOrder`, `quaternion`). `lod` and `collider` are typed but not applied by
7
+ * `model()`: `false` (the default behaviour) is accepted, any other value is OPTION_IGNORED
8
+ * (anim-phys-06).
9
+ */
10
+ export declare const MODEL_OPTION_KEYS: readonly string[];
11
+ /** Builder label and readable keys for the OPTION_IGNORED note; `instances.model` passes its own. */
12
+ export interface ModelOptionGuard {
13
+ readonly builder: string;
14
+ readonly validKeys: readonly string[];
15
+ }
3
16
  export declare function model<TAsset extends AuraAssetRef<"model">>(asset: TAsset, options?: AuraModelOptions): AuraNodeBuilder<AuraModelNode>;
17
+ /** `model()` with the OPTION_IGNORED label and key list of the calling builder. */
18
+ export declare function buildModel<TAsset extends AuraAssetRef<"model">>(asset: TAsset, options: AuraModelOptions, guard: ModelOptionGuard): AuraNodeBuilder<AuraModelNode>;
4
19
  export declare function unsafeModelUrl(url: string, options?: Omit<AuraAssetDefinition, "type" | "format" | "url">): AuraAssetRef<"model", "unsafe">;
5
20
  export declare const builtInCharacterAssets: import("./types.js").AuraAssetMap<{
6
21
  readonly humanoid: {
@@ -14,6 +29,9 @@ export declare const builtInCharacterAssets: import("./types.js").AuraAssetMap<{
14
29
  readonly animations: readonly ["Idle", "Run", "TPose", "Walk"];
15
30
  readonly textures: readonly ["embedded soldier/vanguard textures"];
16
31
  readonly license: "Aura3D bundled soldier fixture from the existing repository corpus";
32
+ readonly provenance: {
33
+ readonly builtIn: true;
34
+ };
17
35
  };
18
36
  };
19
37
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAO/C,wBAAgB,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACxD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAAC,aAAa,CAAC,CAwBhC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAM,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAc/I;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;EAevB,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAO/C;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAM9C,CAAC;AAKF,qGAAqG;AACrG,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAWD,wBAAgB,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACxD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAAC,aAAa,CAAC,CAEhC;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EAC7D,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,gBAAgB,GACtB,eAAe,CAAC,aAAa,CAAC,CAiChC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAM,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAc/I;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;EAkBvB,CAAC"}
@@ -4,7 +4,36 @@ import { defineAuraAssets } from "./assets.js";
4
4
  import { material } from "./material.js";
5
5
  import { physics } from "./physics.js";
6
6
  import { lazyNamespace } from "../lazyNamespace.js";
7
+ import { formatIgnoredOptions, unreadOptionKeys } from "./optionDiagnostics.js";
8
+ /**
9
+ * Every top-level option `model()` reads, plus the transform extras it forwards to the node
10
+ * (the render path reads `renderOrder`, `frustumCulled`, `layers`, `userData`; the scene graph
11
+ * reads `rotationOrder`, `quaternion`). `lod` and `collider` are typed but not applied by
12
+ * `model()`: `false` (the default behaviour) is accepted, any other value is OPTION_IGNORED
13
+ * (anim-phys-06).
14
+ */
15
+ export const MODEL_OPTION_KEYS = [
16
+ "name", "position", "rotation", "scale", "lookAt", "rotationOrder", "quaternion",
17
+ "renderOrder", "frustumCulled", "layers", "userData",
18
+ "material", "castShadow", "receiveShadow", "visible", "role", "scaleMode",
19
+ "targetHeight", "targetMaxDimension", "targetLength", "physics", "hiddenNodeNames",
20
+ "materialOverrides", "variant", "wrinkle"
21
+ ];
22
+ /** Typed model options that are honoured only when `false` (nothing to build). */
23
+ const MODEL_FALSE_ONLY_KEYS = ["lod", "collider"];
24
+ function modelIgnoredOptions(options, guard) {
25
+ const record = options;
26
+ const unread = unreadOptionKeys(options, [...guard.validKeys, ...MODEL_FALSE_ONLY_KEYS]);
27
+ const falseOnly = MODEL_FALSE_ONLY_KEYS.filter((key) => !guard.validKeys.includes(key) && record[key] !== undefined && record[key] !== false);
28
+ const all = [...unread, ...falseOnly];
29
+ return all.length === 0 ? {} : { ignoredOptions: [formatIgnoredOptions(guard.builder, all, guard.validKeys)] };
30
+ }
7
31
  export function model(asset, options = {}) {
32
+ return buildModel(asset, options, { builder: "model", validKeys: MODEL_OPTION_KEYS });
33
+ }
34
+ /** `model()` with the OPTION_IGNORED label and key list of the calling builder. */
35
+ export function buildModel(asset, options, guard) {
36
+ const ignored = modelIgnoredOptions(options, guard);
8
37
  return new AuraNodeBuilder({
9
38
  kind: "model",
10
39
  asset,
@@ -13,6 +42,14 @@ export function model(asset, options = {}) {
13
42
  rotation: options.rotation,
14
43
  scale: options.scale,
15
44
  lookAt: options.lookAt,
45
+ // Transform extras, as `primitive()` forwards them; spread only when set so node JSON is unchanged otherwise.
46
+ ...(options.rotationOrder !== undefined ? { rotationOrder: options.rotationOrder } : {}),
47
+ ...(options.quaternion !== undefined ? { quaternion: options.quaternion } : {}),
48
+ ...(options.renderOrder !== undefined ? { renderOrder: options.renderOrder } : {}),
49
+ ...(options.frustumCulled !== undefined ? { frustumCulled: options.frustumCulled } : {}),
50
+ ...(options.layers !== undefined ? { layers: options.layers } : {}),
51
+ ...(options.userData !== undefined ? { userData: options.userData } : {}),
52
+ ...ignored,
16
53
  material: options.material,
17
54
  castShadow: options.castShadow ?? true,
18
55
  receiveShadow: options.receiveShadow ?? true,
@@ -56,7 +93,10 @@ export const builtInCharacterAssets = lazyNamespace(() => defineAuraAssets({
56
93
  // Exactly the clips authored in humanoid-fixture.glb (guarded by a GLB-parsing test); do not add names that are not in the binary.
57
94
  animations: ["Idle", "Run", "TPose", "Walk"],
58
95
  textures: ["embedded soldier/vanguard textures"],
59
- license: "Aura3D bundled soldier fixture from the existing repository corpus"
96
+ license: "Aura3D bundled soldier fixture from the existing repository corpus",
97
+ // Bundled with the engine package and addressed by hash; served from the package origin, so its
98
+ // URL is http(s) in a browser. Marks it as trusted for the production bridge (see createAssetProvenance).
99
+ provenance: { builtIn: true }
60
100
  }
61
101
  }
62
102
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/model.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAG/G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,KAAK,CACnB,KAAa,EACb,UAA4B,EAAE;IAE9B,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,OAAO;QACb,KAAK;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,UAAgE,EAAE;IAC5G,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,OAAO,gBAAgB,CAAC;QACtB,MAAM,EAAE;YACN,GAAG,OAAO;YACV,IAAI,EAAE,OAAO;YACb,MAAM;YACN,GAAG;YACH,QAAQ,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC3B,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,SAAS;aAChD;SACF;KACF,CAAC,CAAC,MAAM,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IACzE,QAAQ,EAAE;QACR,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;QACnE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACvB,IAAI,EAAE,yEAAyE;QAC/E,QAAQ,EAAE;YACR,SAAS,EAAE,CAAC,sBAAsB,EAAE,eAAe,EAAE,OAAO,CAAC;YAC7D,mIAAmI;YACnI,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;YAC5C,QAAQ,EAAE,CAAC,oCAAoC,CAAC;YAChD,OAAO,EAAE,oEAAoE;SAC9E;KACF;CACO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AuraSceneNode } from "./types.js";
2
+ /** Keys of `options` that are set (not `undefined`) and not in `valid`. */
3
+ export declare function unreadOptionKeys(options: unknown, valid: readonly string[]): readonly string[];
4
+ export declare function formatIgnoredOptions(builder: string, unread: readonly string[], valid: readonly string[]): string;
5
+ /** `{}` when every key is read, else `{ ignoredOptions: [message] }`; spread it into the node literal. */
6
+ export declare function ignoredOptionsNote(builder: string, options: unknown, valid: readonly string[]): {
7
+ readonly ignoredOptions?: readonly string[];
8
+ };
9
+ /** Every `OPTION_IGNORED` note carried by `nodes`, with the node that carries it. */
10
+ export declare function ignoredOptionMessages(nodes: readonly AuraSceneNode[]): readonly {
11
+ readonly node: AuraSceneNode;
12
+ readonly message: string;
13
+ }[];
14
+ //# sourceMappingURL=optionDiagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionDiagnostics.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/optionDiagnostics.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAG9F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIjH;AAED,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAG/I;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAO5I"}
@@ -0,0 +1,34 @@
1
+ // Beat-three.js WP-S.1 (decision 5): a builder never accepts an option and silently drops it.
2
+ //
3
+ // Builders run at module scope with no app or compile context, and an existing app that passes a stray key must
4
+ // keep building, so the guard does not throw. It records the unread keys on the node (`ignoredOptions`); the
5
+ // compiler turns each note into an `option-ignored` degradation (compileScene.ts), which lands in
6
+ // `app.diagnostics()` and throws only under strict mode, the same channel unknown node kinds already use.
7
+ /** Keys of `options` that are set (not `undefined`) and not in `valid`. */
8
+ export function unreadOptionKeys(options, valid) {
9
+ if (options === undefined || options === null || typeof options !== "object" || Array.isArray(options))
10
+ return [];
11
+ return Object.keys(options).filter((key) => !valid.includes(key) && options[key] !== undefined);
12
+ }
13
+ export function formatIgnoredOptions(builder, unread, valid) {
14
+ return `OPTION_IGNORED ${builder}: option${unread.length === 1 ? "" : "s"} ${unread.map((key) => `"${key}"`).join(", ")} ` +
15
+ `${unread.length === 1 ? "is" : "are"} not read by this builder, so ${unread.length === 1 ? "it has" : "they have"} no effect. ` +
16
+ `Valid options: ${valid.join(", ")}`;
17
+ }
18
+ /** `{}` when every key is read, else `{ ignoredOptions: [message] }`; spread it into the node literal. */
19
+ export function ignoredOptionsNote(builder, options, valid) {
20
+ const unread = unreadOptionKeys(options, valid);
21
+ return unread.length === 0 ? {} : { ignoredOptions: [formatIgnoredOptions(builder, unread, valid)] };
22
+ }
23
+ /** Every `OPTION_IGNORED` note carried by `nodes`, with the node that carries it. */
24
+ export function ignoredOptionMessages(nodes) {
25
+ const found = [];
26
+ for (const node of nodes) {
27
+ const notes = node.ignoredOptions;
28
+ if (notes)
29
+ for (const message of notes)
30
+ found.push({ node, message });
31
+ }
32
+ return found;
33
+ }
34
+ //# sourceMappingURL=optionDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionDiagnostics.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/optionDiagnostics.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,EAAE;AACF,gHAAgH;AAChH,6GAA6G;AAC7G,kGAAkG;AAClG,0GAA0G;AAI1G,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,KAAwB;IACzE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAClH,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,OAAmC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,MAAyB,EAAE,KAAwB;IACvG,OAAO,kBAAkB,OAAO,WAAW,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACxH,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iCAAiC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,cAAc;QAChI,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAgB,EAAE,KAAwB;IAC5F,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CAAC,KAA+B;IACnE,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAI,IAAwD,CAAC,cAAc,CAAC;QACvF,IAAI,KAAK;YAAE,KAAK,MAAM,OAAO,IAAI,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AuraCameraSpec, AuraSceneNode } from "./types.js";
2
+ /**
3
+ * Returns `camera` with the scene's orbit interaction folded in: `targetPoint` becomes the camera `target` (and
4
+ * the eye keeps its offset from it unless `orbitPosition` pins it), `orbitPosition` becomes `position`, and
5
+ * `autoRotate` becomes the camera's orbit speed. Non-orbit cameras and scenes without such an interaction are
6
+ * returned untouched. When several orbit interactions set the same field the last one wins.
7
+ */
8
+ export declare function applyOrbitInteraction(camera: AuraCameraSpec, nodes: readonly AuraSceneNode[]): AuraCameraSpec;
9
+ //# sourceMappingURL=orbitInteraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbitInteraction.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/orbitInteraction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAuB,aAAa,EAAY,MAAM,YAAY,CAAC;AAU/F;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,cAAc,CA0B7G"}
@@ -0,0 +1,52 @@
1
+ // Beat-three.js WP-S.2: `interactions.orbit({ target: [x, y, z], position, autoRotate })` configures the scene's
2
+ // orbit camera. Every camera path (compiler/camera.ts, the rigs, the controller) reads the camera spec, so the
3
+ // interaction is folded into the spec once, when the snapshot is built, and each path honours it unchanged.
4
+ function orbitInteractions(nodes, found = []) {
5
+ for (const node of nodes) {
6
+ if (node.kind === "interaction" && node.mode === "orbit")
7
+ found.push(node);
8
+ else if (node.kind === "group")
9
+ orbitInteractions(node.children, found);
10
+ }
11
+ return found;
12
+ }
13
+ /**
14
+ * Returns `camera` with the scene's orbit interaction folded in: `targetPoint` becomes the camera `target` (and
15
+ * the eye keeps its offset from it unless `orbitPosition` pins it), `orbitPosition` becomes `position`, and
16
+ * `autoRotate` becomes the camera's orbit speed. Non-orbit cameras and scenes without such an interaction are
17
+ * returned untouched. When several orbit interactions set the same field the last one wins.
18
+ */
19
+ export function applyOrbitInteraction(camera, nodes) {
20
+ if (camera.mode !== "orbit")
21
+ return camera;
22
+ let target;
23
+ let position;
24
+ let autoRotate;
25
+ for (const node of orbitInteractions(nodes)) {
26
+ if (node.targetPoint)
27
+ target = node.targetPoint;
28
+ if (node.orbitPosition)
29
+ position = node.orbitPosition;
30
+ if (node.autoRotate !== undefined)
31
+ autoRotate = node.autoRotate;
32
+ }
33
+ if (!target && !position && autoRotate === undefined)
34
+ return camera;
35
+ let eye = camera.position;
36
+ if (position)
37
+ eye = position;
38
+ else if (target && camera.position && camera.target) {
39
+ eye = [
40
+ camera.position[0] + target[0] - camera.target[0],
41
+ camera.position[1] + target[1] - camera.target[1],
42
+ camera.position[2] + target[2] - camera.target[2]
43
+ ];
44
+ }
45
+ return {
46
+ ...camera,
47
+ ...(target ? { target } : {}),
48
+ ...(eye ? { position: eye } : {}),
49
+ ...(autoRotate !== undefined ? { autoRotate } : {})
50
+ };
51
+ }
52
+ //# sourceMappingURL=orbitInteraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbitInteraction.js","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/orbitInteraction.ts"],"names":[],"mappings":"AAAA,iHAAiH;AACjH,+GAA+G;AAC/G,4GAA4G;AAI5G,SAAS,iBAAiB,CAAC,KAA+B,EAAE,QAA+B,EAAE;IAC3F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB,EAAE,KAA+B;IAC3F,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,MAA4B,CAAC;IACjC,IAAI,QAA8B,CAAC;IACnC,IAAI,UAA8B,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,WAAW;YAAE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChD,IAAI,IAAI,CAAC,aAAa;YAAE,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACtD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACpE,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1B,IAAI,QAAQ;QAAE,GAAG,GAAG,QAAQ,CAAC;SACxB,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACpD,GAAG,GAAG;YACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAClD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
@@ -43,7 +43,33 @@ interface AuraRuntimeScenePhysics {
43
43
  step(deltaSeconds: number): void;
44
44
  }
45
45
  export declare function createRuntimeScenePhysics(snapshot: AuraSceneSnapshot): AuraRuntimeScenePhysics | undefined;
46
+ type AuraPhysicsEulerOrder = "XYZ" | "YXZ" | "ZXY" | "ZYX" | "YZX" | "XZY";
47
+ type AuraPhysicsQuat = readonly [number, number, number, number];
48
+ /**
49
+ * Node rotation as the renderer composes it: `quaternion` wins, otherwise `rotation` in the
50
+ * node's `rotationOrder` (default "ZYX", `Rz·Ry·Rx`, see `sceneGraph.ts`). Physics bodies are
51
+ * seeded from this so a rotated body starts where the node is drawn (anim-phys-01).
52
+ */
53
+ export declare function nodeRotationQuaternion(node: {
54
+ readonly rotation?: AuraVec3 | undefined;
55
+ readonly rotationOrder?: AuraPhysicsEulerOrder | undefined;
56
+ readonly quaternion?: AuraPhysicsQuat | undefined;
57
+ }): AuraPhysicsQuat;
58
+ /** Euler -> quaternion for any order, three.js `Quaternion.setFromEuler` semantics. */
59
+ export declare function orderedEulerToQuat(euler: AuraVec3, order: AuraPhysicsEulerOrder): AuraPhysicsQuat;
60
+ /** Quaternion -> Euler in `order`, three.js `Euler.setFromRotationMatrix` semantics. */
61
+ export declare function quatToOrderedEuler(rotation: AuraPhysicsQuat, order: AuraPhysicsEulerOrder): AuraVec3;
62
+ /**
63
+ * Write a body's world rotation back onto a scene node in the convention the renderer reads:
64
+ * a quaternion-authored node gets its quaternion, otherwise `rotation` in its `rotationOrder`.
65
+ */
66
+ export declare function writeNodeRotationFromBody(target: object, rotation: AuraPhysicsQuat, setRotation: (euler: AuraVec3) => void): void;
67
+ /**
68
+ * XYZ-order (`Rx·Ry·Rz`) Euler -> quaternion. Kept for existing callers; it is NOT the
69
+ * renderer's default order. Seed physics bodies from scene nodes with `nodeRotationQuaternion`.
70
+ */
46
71
  export declare function eulerToQuat(rotation: AuraVec3): readonly [number, number, number, number];
72
+ export declare function quatToEuler(rotation: readonly [number, number, number, number]): AuraVec3;
47
73
  export declare function resolveNodePhysicsShape(node: AuraModelNode | AuraPrimitiveNode, spec: AuraNodePhysicsSpec): PhysicsShape;
48
74
  export {};
49
75
  //# sourceMappingURL=physics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"physics.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/physics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"physics.d.ts","sourceRoot":"","sources":["../../../../../../packages/engine/src/agent-api/nodes/physics.ts"],"names":[],"mappings":"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"}
@@ -352,7 +352,7 @@ function populatePhysicsWorldFromScene(controller, nodes) {
352
352
  const body = controller.createBody({
353
353
  type: node.physics.type ?? "dynamic",
354
354
  position: node.position ?? [0, 0, 0],
355
- rotation: eulerToQuat(node.rotation ?? [0, 0, 0]),
355
+ rotation: nodeRotationQuaternion(node),
356
356
  mass: node.physics.mass,
357
357
  friction: node.physics.friction,
358
358
  restitution: node.physics.restitution,
@@ -373,14 +373,16 @@ function scenePhysicsNodeAdapter(node) {
373
373
  getWorldPosition: () => node.position ?? [0, 0, 0],
374
374
  getWorldQuaternion: () => {
375
375
  const nodeWithPhysicsRotation = node;
376
- return nodeWithPhysicsRotation.physicsRotation ?? eulerToQuat(node.rotation ?? [0, 0, 0]);
376
+ return nodeWithPhysicsRotation.physicsRotation ?? nodeRotationQuaternion(node);
377
377
  },
378
378
  setWorldPosition: (position) => {
379
379
  node.position = [position[0], position[1], position[2]];
380
380
  },
381
381
  setWorldQuaternion: (rotation) => {
382
382
  node.physicsRotation = [rotation[0], rotation[1], rotation[2], rotation[3]];
383
- node.rotation = quatToEuler(rotation);
383
+ writeNodeRotationFromBody(node, rotation, (euler) => {
384
+ node.rotation = euler;
385
+ });
384
386
  }
385
387
  };
386
388
  }
@@ -400,7 +402,7 @@ export function createRuntimeScenePhysics(snapshot) {
400
402
  const body = world.createRigidBody({
401
403
  type: spec.type ?? "dynamic",
402
404
  position: node.position ?? [0, 0, 0],
403
- rotation: eulerToQuat(node.rotation ?? [0, 0, 0]),
405
+ rotation: nodeRotationQuaternion(node),
404
406
  mass: spec.mass,
405
407
  friction: spec.friction,
406
408
  restitution: spec.restitution,
@@ -457,6 +459,91 @@ export function createRuntimeScenePhysics(snapshot) {
457
459
  }
458
460
  };
459
461
  }
462
+ /**
463
+ * Node rotation as the renderer composes it: `quaternion` wins, otherwise `rotation` in the
464
+ * node's `rotationOrder` (default "ZYX", `Rz·Ry·Rx`, see `sceneGraph.ts`). Physics bodies are
465
+ * seeded from this so a rotated body starts where the node is drawn (anim-phys-01).
466
+ */
467
+ export function nodeRotationQuaternion(node) {
468
+ if (node.quaternion)
469
+ return [node.quaternion[0], node.quaternion[1], node.quaternion[2], node.quaternion[3]];
470
+ return orderedEulerToQuat(node.rotation ?? [0, 0, 0], node.rotationOrder ?? "ZYX");
471
+ }
472
+ /** Sign of the second term of x, y, z, w per Euler order (three.js `setFromEuler`). */
473
+ const EULER_QUAT_SIGNS = {
474
+ XYZ: [1, -1, 1, -1],
475
+ YXZ: [1, -1, -1, 1],
476
+ ZXY: [-1, 1, 1, -1],
477
+ ZYX: [-1, 1, -1, 1],
478
+ YZX: [1, 1, -1, -1],
479
+ XZY: [-1, -1, 1, 1]
480
+ };
481
+ /** Euler -> quaternion for any order, three.js `Quaternion.setFromEuler` semantics. */
482
+ export function orderedEulerToQuat(euler, order) {
483
+ const c1 = Math.cos(euler[0] / 2);
484
+ const c2 = Math.cos(euler[1] / 2);
485
+ const c3 = Math.cos(euler[2] / 2);
486
+ const s1 = Math.sin(euler[0] / 2);
487
+ const s2 = Math.sin(euler[1] / 2);
488
+ const s3 = Math.sin(euler[2] / 2);
489
+ const [sx, sy, sz, sw] = EULER_QUAT_SIGNS[order];
490
+ return [
491
+ s1 * c2 * c3 + sx * c1 * s2 * s3,
492
+ c1 * s2 * c3 + sy * s1 * c2 * s3,
493
+ c1 * c2 * s3 + sz * s1 * s2 * c3,
494
+ c1 * c2 * c3 + sw * s1 * s2 * s3
495
+ ];
496
+ }
497
+ /** Quaternion -> Euler in `order`, three.js `Euler.setFromRotationMatrix` semantics. */
498
+ export function quatToOrderedEuler(rotation, order) {
499
+ const [x, y, z, w] = rotation;
500
+ const m11 = 1 - 2 * (y * y + z * z), m12 = 2 * (x * y - w * z), m13 = 2 * (x * z + w * y);
501
+ const m21 = 2 * (x * y + w * z), m22 = 1 - 2 * (x * x + z * z), m23 = 2 * (y * z - w * x);
502
+ const m31 = 2 * (x * z - w * y), m32 = 2 * (y * z + w * x), m33 = 1 - 2 * (x * x + y * y);
503
+ const clamp = (value) => Math.min(1, Math.max(-1, value));
504
+ const nearPole = (value) => Math.abs(value) >= 0.9999999;
505
+ switch (order) {
506
+ case "XYZ": {
507
+ const ey = Math.asin(clamp(m13));
508
+ return nearPole(m13) ? [Math.atan2(m32, m22), ey, 0] : [Math.atan2(-m23, m33), ey, Math.atan2(-m12, m11)];
509
+ }
510
+ case "YXZ": {
511
+ const ex = Math.asin(-clamp(m23));
512
+ return nearPole(m23) ? [ex, Math.atan2(-m31, m11), 0] : [ex, Math.atan2(m13, m33), Math.atan2(m21, m22)];
513
+ }
514
+ case "ZXY": {
515
+ const ex = Math.asin(clamp(m32));
516
+ return nearPole(m32) ? [ex, 0, Math.atan2(m21, m11)] : [ex, Math.atan2(-m31, m33), Math.atan2(-m12, m22)];
517
+ }
518
+ case "ZYX": {
519
+ const ey = Math.asin(-clamp(m31));
520
+ return nearPole(m31) ? [0, ey, Math.atan2(-m12, m22)] : [Math.atan2(m32, m33), ey, Math.atan2(m21, m11)];
521
+ }
522
+ case "YZX": {
523
+ const ez = Math.asin(clamp(m21));
524
+ return nearPole(m21) ? [0, Math.atan2(m13, m33), ez] : [Math.atan2(-m23, m22), Math.atan2(-m31, m11), ez];
525
+ }
526
+ case "XZY": {
527
+ const ez = Math.asin(-clamp(m12));
528
+ return nearPole(m12) ? [Math.atan2(-m23, m33), 0, ez] : [Math.atan2(m32, m22), Math.atan2(m13, m11), ez];
529
+ }
530
+ }
531
+ }
532
+ /**
533
+ * Write a body's world rotation back onto a scene node in the convention the renderer reads:
534
+ * a quaternion-authored node gets its quaternion, otherwise `rotation` in its `rotationOrder`.
535
+ */
536
+ export function writeNodeRotationFromBody(target, rotation, setRotation) {
537
+ const node = target;
538
+ if (node.quaternion) {
539
+ node.quaternion = [rotation[0], rotation[1], rotation[2], rotation[3]];
540
+ }
541
+ setRotation(quatToOrderedEuler(rotation, node.rotationOrder ?? "ZYX"));
542
+ }
543
+ /**
544
+ * XYZ-order (`Rx·Ry·Rz`) Euler -> quaternion. Kept for existing callers; it is NOT the
545
+ * renderer's default order. Seed physics bodies from scene nodes with `nodeRotationQuaternion`.
546
+ */
460
547
  export function eulerToQuat(rotation) {
461
548
  const [x, y, z] = rotation;
462
549
  const c1 = Math.cos(x / 2);
@@ -472,7 +559,7 @@ export function eulerToQuat(rotation) {
472
559
  c1 * c2 * c3 - s1 * s2 * s3
473
560
  ];
474
561
  }
475
- function quatToEuler(rotation) {
562
+ export function quatToEuler(rotation) {
476
563
  const [x, y, z, w] = rotation;
477
564
  const sinrCosp = 2 * (w * x + y * z);
478
565
  const cosrCosp = 1 - 2 * (x * x + y * y);
@@ -484,6 +571,27 @@ function quatToEuler(rotation) {
484
571
  const yaw = Math.atan2(sinyCosp, cosyCosp);
485
572
  return [roll, pitch, yaw];
486
573
  }
574
+ /**
575
+ * Collider for a capsule or cylinder primitive whose physics spec names no dimensions. The
576
+ * primitive's `size` is [diameter, total height, diameter]. When the body is at least as tall
577
+ * as it is wide, a capsule spanning exactly that height fits it (radius half the diameter,
578
+ * cylindrical half-height the total half-height minus one cap radius). A short, wide body
579
+ * (a disc, a coin, a squat capsule) would degenerate to a sphere as small as its height, far
580
+ * inside the visible shape, so it gets a box with the visible radius and height (anim-phys-04).
581
+ */
582
+ function derivedCapsule(size, scale) {
583
+ const halfTotal = Math.max(0.02, size[1] * scale[1] * 0.5);
584
+ const halfX = Math.max(0.01, size[0] * scale[0] * 0.5);
585
+ const halfZ = Math.max(0.01, size[2] * scale[2] * 0.5);
586
+ const radius = Math.max(halfX, halfZ);
587
+ if (radius > halfTotal + 1e-6)
588
+ return PhysicsShapeFactory.box(halfX, halfTotal, halfZ);
589
+ const halfHeight = halfTotal - radius;
590
+ // As tall as it is wide: the capsule has no cylindrical part (capsule() rejects 0).
591
+ if (halfHeight <= 1e-6)
592
+ return PhysicsShapeFactory.sphere(radius);
593
+ return PhysicsShapeFactory.capsule(radius, halfHeight);
594
+ }
487
595
  export function resolveNodePhysicsShape(node, spec) {
488
596
  if (typeof spec.shape === "object" || spec.halfExtents || spec.radius || spec.halfHeight || spec.shape)
489
597
  return resolveAgentPhysicsShape(spec);
@@ -493,13 +601,13 @@ export function resolveNodePhysicsShape(node, spec) {
493
601
  if (node.primitive === "sphere")
494
602
  return PhysicsShapeFactory.sphere(Math.max(size[0] * scale[0], size[1] * scale[1], size[2] * scale[2]) * 0.5);
495
603
  if (node.primitive === "capsule")
496
- return PhysicsShapeFactory.capsule(Math.max(size[0] * scale[0], size[2] * scale[2]) * 0.25, Math.max(0.1, size[1] * scale[1] * 0.5));
604
+ return derivedCapsule(size, scale);
497
605
  if (node.primitive === "torus")
498
606
  return PhysicsShapeFactory.sphere(Math.max(size[0] * scale[0], size[1] * scale[1], size[2] * scale[2]) * 0.5);
499
607
  if (node.primitive === "plane")
500
608
  return PhysicsShapeFactory.plane();
501
609
  if (node.primitive === "cylinder")
502
- return PhysicsShapeFactory.capsule(Math.max(size[0] * scale[0], size[2] * scale[2]) * 0.25, Math.max(0.1, size[1] * scale[1] * 0.5));
610
+ return derivedCapsule(size, scale);
503
611
  return PhysicsShapeFactory.box(Math.max(0.02, size[0] * scale[0] * 0.5), Math.max(0.02, size[1] * scale[1] * 0.5), Math.max(0.02, size[2] * scale[2] * 0.5));
504
612
  }
505
613
  const bounds = node.asset.bounds ?? [1, 1, 1];