@aura3d/engine 4.1.2 → 4.2.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 (268) hide show
  1. package/README.md +52 -730
  2. package/dist/audio/synth/SynthCueBank.d.ts.map +1 -1
  3. package/dist/audio/synth/SynthCueBank.js +11 -2
  4. package/dist/audio/synth/SynthCueBank.js.map +1 -1
  5. package/dist/audio/synth/types.d.ts +4 -0
  6. package/dist/audio/synth/types.d.ts.map +1 -1
  7. package/dist/aura3d-cli/cli.d.ts.map +1 -1
  8. package/dist/aura3d-cli/cli.js +49 -17
  9. package/dist/aura3d-cli/cli.js.map +1 -1
  10. package/dist/aura3d-cli/commands/evidence/index.d.ts +3 -0
  11. package/dist/aura3d-cli/commands/evidence/index.d.ts.map +1 -0
  12. package/dist/aura3d-cli/commands/evidence/index.js +12 -0
  13. package/dist/aura3d-cli/commands/evidence/index.js.map +1 -0
  14. package/dist/aura3d-cli/commands/evidence/judge.d.ts +18 -0
  15. package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -0
  16. package/dist/aura3d-cli/commands/evidence/judge.js +194 -0
  17. package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -0
  18. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts +84 -0
  19. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts.map +1 -0
  20. package/dist/aura3d-cli/commands/evidence/judgeLib.js +178 -0
  21. package/dist/aura3d-cli/commands/evidence/judgeLib.js.map +1 -0
  22. package/dist/aura3d-cli/commands/registry.d.ts +1 -0
  23. package/dist/aura3d-cli/commands/registry.d.ts.map +1 -1
  24. package/dist/aura3d-cli/commands/registry.js +1 -0
  25. package/dist/aura3d-cli/commands/registry.js.map +1 -1
  26. package/dist/aura3d-cli/look/capture.d.ts +15 -7
  27. package/dist/aura3d-cli/look/capture.d.ts.map +1 -1
  28. package/dist/aura3d-cli/look/capture.js +85 -13
  29. package/dist/aura3d-cli/look/capture.js.map +1 -1
  30. package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
  31. package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
  32. package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
  33. package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
  34. package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
  35. package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
  36. package/dist/aura3d-cli/pull-bridge/search.js +7 -1
  37. package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
  38. package/dist/aura3d-cli/pull-bridge.js +1 -1
  39. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  40. package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
  41. package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
  42. package/dist/aura3d-cli/resolve-ladder.js +410 -0
  43. package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
  44. package/dist/create-aura3d/index.js +1 -1
  45. package/dist/debug/index.d.ts +2 -2
  46. package/dist/debug/index.d.ts.map +1 -1
  47. package/dist/debug/index.js +1 -1
  48. package/dist/debug/index.js.map +1 -1
  49. package/dist/debug/safety/frameBoundary.d.ts +33 -0
  50. package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
  51. package/dist/debug/safety/frameBoundary.js +40 -0
  52. package/dist/debug/safety/frameBoundary.js.map +1 -0
  53. package/dist/debug/safety/index.d.ts +1 -0
  54. package/dist/debug/safety/index.d.ts.map +1 -1
  55. package/dist/debug/safety/index.js +1 -0
  56. package/dist/debug/safety/index.js.map +1 -1
  57. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
  58. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
  59. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
  60. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
  61. package/dist/engine/agent-api/app/canvas.d.ts +16 -0
  62. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  63. package/dist/engine/agent-api/app/canvas.js +15 -0
  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 +21 -3
  67. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  68. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  69. package/dist/engine/agent-api/app/frameLoop.js +21 -3
  70. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  71. package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
  72. package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
  73. package/dist/engine/agent-api/app/mountFailure.js +9 -0
  74. package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
  75. package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
  76. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
  77. package/dist/engine/agent-api/app/parentFit.js +36 -0
  78. package/dist/engine/agent-api/app/parentFit.js.map +1 -0
  79. package/dist/engine/agent-api/compiler/customMaterial.js +3 -2
  80. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  81. package/dist/engine/agent-api/compiler/geometry.d.ts +13 -0
  82. package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
  83. package/dist/engine/agent-api/compiler/geometry.js +30 -3
  84. package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
  85. package/dist/engine/agent-api/compiler/primitives.d.ts +1 -2
  86. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  87. package/dist/engine/agent-api/compiler/primitives.js +21 -4
  88. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  89. package/dist/engine/agent-api/index.d.ts +4 -0
  90. package/dist/engine/agent-api/index.d.ts.map +1 -1
  91. package/dist/engine/agent-api/index.js +1 -0
  92. package/dist/engine/agent-api/index.js.map +1 -1
  93. package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
  94. package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
  95. package/dist/engine/agent-api/nodes/batched.js +7 -5
  96. package/dist/engine/agent-api/nodes/batched.js.map +1 -1
  97. package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
  98. package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
  99. package/dist/engine/agent-api/nodes/builder.js +7 -3
  100. package/dist/engine/agent-api/nodes/builder.js.map +1 -1
  101. package/dist/engine/agent-api/nodes/cameras.d.ts +7 -0
  102. package/dist/engine/agent-api/nodes/cameras.d.ts.map +1 -1
  103. package/dist/engine/agent-api/nodes/cameras.js +7 -0
  104. package/dist/engine/agent-api/nodes/cameras.js.map +1 -1
  105. package/dist/engine/agent-api/nodes/chaseCamera.d.ts +122 -0
  106. package/dist/engine/agent-api/nodes/chaseCamera.d.ts.map +1 -0
  107. package/dist/engine/agent-api/nodes/chaseCamera.js +130 -0
  108. package/dist/engine/agent-api/nodes/chaseCamera.js.map +1 -0
  109. package/dist/engine/agent-api/nodes/effects.composite.d.ts +1 -0
  110. package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
  111. package/dist/engine/agent-api/nodes/effects.composite.js +2 -0
  112. package/dist/engine/agent-api/nodes/effects.composite.js.map +1 -1
  113. package/dist/engine/agent-api/nodes/effects.toon.d.ts +26 -0
  114. package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -0
  115. package/dist/engine/agent-api/nodes/effects.toon.js +70 -0
  116. package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -0
  117. package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
  118. package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
  119. package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
  120. package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
  121. package/dist/engine/agent-api/nodes/prefabs/index.d.ts +3 -0
  122. package/dist/engine/agent-api/nodes/prefabs/index.d.ts.map +1 -1
  123. package/dist/engine/agent-api/nodes/prefabs/index.js +3 -0
  124. package/dist/engine/agent-api/nodes/prefabs/index.js.map +1 -1
  125. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts +32 -0
  126. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts.map +1 -0
  127. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js +77 -0
  128. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js.map +1 -0
  129. package/dist/engine/lanes/prd06.d.ts.map +1 -1
  130. package/dist/engine/lanes/prd06.js +1 -16
  131. package/dist/engine/lanes/prd06.js.map +1 -1
  132. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +1 -1
  133. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
  134. package/dist/engine/production-runtime/actor/ModelTextureShare.js +1 -1
  135. package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
  136. package/dist/engine/public/index.d.ts +52 -67
  137. package/dist/engine/public/index.d.ts.map +1 -1
  138. package/dist/engine/public/index.js +59 -56
  139. package/dist/engine/public/index.js.map +1 -1
  140. package/dist/engine/qa/countedRng.d.ts +2 -0
  141. package/dist/engine/qa/countedRng.d.ts.map +1 -1
  142. package/dist/engine/qa/countedRng.js +3 -0
  143. package/dist/engine/qa/countedRng.js.map +1 -1
  144. package/dist/engine/qa/fixedStepLoop.d.ts +4 -0
  145. package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
  146. package/dist/engine/qa/fixedStepLoop.js +6 -0
  147. package/dist/engine/qa/fixedStepLoop.js.map +1 -1
  148. package/dist/engine/qa/hooks.js +1 -1
  149. package/dist/engine/qa/hooks.js.map +1 -1
  150. package/dist/game/evidence/beacon.d.ts +16 -6
  151. package/dist/game/evidence/beacon.d.ts.map +1 -1
  152. package/dist/game/evidence/beacon.js +32 -14
  153. package/dist/game/evidence/beacon.js.map +1 -1
  154. package/dist/game/evidence/textureStatus.d.ts +24 -0
  155. package/dist/game/evidence/textureStatus.d.ts.map +1 -0
  156. package/dist/game/evidence/textureStatus.js +27 -0
  157. package/dist/game/evidence/textureStatus.js.map +1 -0
  158. package/dist/game/hud/canvasMinimap.d.ts +60 -0
  159. package/dist/game/hud/canvasMinimap.d.ts.map +1 -0
  160. package/dist/game/hud/canvasMinimap.js +62 -0
  161. package/dist/game/hud/canvasMinimap.js.map +1 -0
  162. package/dist/game/hud/compass.d.ts +16 -0
  163. package/dist/game/hud/compass.d.ts.map +1 -0
  164. package/dist/game/hud/compass.js +15 -0
  165. package/dist/game/hud/compass.js.map +1 -0
  166. package/dist/game/index.d.ts +9 -0
  167. package/dist/game/index.d.ts.map +1 -1
  168. package/dist/game/index.js +5 -0
  169. package/dist/game/index.js.map +1 -1
  170. package/dist/game/motion/boneAttach.d.ts +42 -0
  171. package/dist/game/motion/boneAttach.d.ts.map +1 -0
  172. package/dist/game/motion/boneAttach.js +166 -0
  173. package/dist/game/motion/boneAttach.js.map +1 -0
  174. package/dist/game/motion/cameraClear.d.ts +35 -0
  175. package/dist/game/motion/cameraClear.d.ts.map +1 -0
  176. package/dist/game/motion/cameraClear.js +64 -0
  177. package/dist/game/motion/cameraClear.js.map +1 -0
  178. package/dist/game/motion/doubleFrame.d.ts +37 -0
  179. package/dist/game/motion/doubleFrame.d.ts.map +1 -0
  180. package/dist/game/motion/doubleFrame.js +59 -0
  181. package/dist/game/motion/doubleFrame.js.map +1 -0
  182. package/dist/game/motion/footSlide.d.ts +32 -0
  183. package/dist/game/motion/footSlide.d.ts.map +1 -0
  184. package/dist/game/motion/footSlide.js +59 -0
  185. package/dist/game/motion/footSlide.js.map +1 -0
  186. package/dist/game/motion/impact.d.ts +113 -0
  187. package/dist/game/motion/impact.d.ts.map +1 -0
  188. package/dist/game/motion/impact.js +233 -0
  189. package/dist/game/motion/impact.js.map +1 -0
  190. package/dist/game/motion/index.d.ts +19 -0
  191. package/dist/game/motion/index.d.ts.map +1 -0
  192. package/dist/game/motion/index.js +10 -0
  193. package/dist/game/motion/index.js.map +1 -0
  194. package/dist/game/motion/locomotion.d.ts +55 -0
  195. package/dist/game/motion/locomotion.d.ts.map +1 -0
  196. package/dist/game/motion/locomotion.js +107 -0
  197. package/dist/game/motion/locomotion.js.map +1 -0
  198. package/dist/game/motion/motionGate.d.ts +41 -0
  199. package/dist/game/motion/motionGate.d.ts.map +1 -0
  200. package/dist/game/motion/motionGate.js +71 -0
  201. package/dist/game/motion/motionGate.js.map +1 -0
  202. package/dist/game/motion/presenter.d.ts +37 -0
  203. package/dist/game/motion/presenter.d.ts.map +1 -0
  204. package/dist/game/motion/presenter.js +72 -0
  205. package/dist/game/motion/presenter.js.map +1 -0
  206. package/dist/game/motion/smoothing.d.ts +34 -0
  207. package/dist/game/motion/smoothing.d.ts.map +1 -0
  208. package/dist/game/motion/smoothing.js +92 -0
  209. package/dist/game/motion/smoothing.js.map +1 -0
  210. package/dist/game/session/warmPrograms.d.ts +58 -0
  211. package/dist/game/session/warmPrograms.d.ts.map +1 -0
  212. package/dist/game/session/warmPrograms.js +63 -0
  213. package/dist/game/session/warmPrograms.js.map +1 -0
  214. package/dist/math/Random.d.ts +3 -0
  215. package/dist/math/Random.d.ts.map +1 -1
  216. package/dist/math/Random.js +7 -0
  217. package/dist/math/Random.js.map +1 -1
  218. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  219. package/dist/rendering/WebGL2Device.js +3 -4
  220. package/dist/rendering/WebGL2Device.js.map +1 -1
  221. package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
  222. package/dist/rendering/environment/EnvironmentCache.js +6 -1
  223. package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
  224. package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
  225. package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
  226. package/dist/rendering/environment/neutralEmbedded.js +1118 -0
  227. package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
  228. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
  229. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
  230. package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
  231. package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
  232. package/dist/rendering/geometry/Primitives.d.ts +4 -1
  233. package/dist/rendering/geometry/Primitives.d.ts.map +1 -1
  234. package/dist/rendering/geometry/Primitives.js +5 -1
  235. package/dist/rendering/geometry/Primitives.js.map +1 -1
  236. package/dist/rendering/renderer/CullingBatching.d.ts.map +1 -1
  237. package/dist/rendering/renderer/CullingBatching.js +3 -7
  238. package/dist/rendering/renderer/CullingBatching.js.map +1 -1
  239. package/dist/rendering/renderer/InstanceBounds.d.ts +18 -0
  240. package/dist/rendering/renderer/InstanceBounds.d.ts.map +1 -0
  241. package/dist/rendering/renderer/InstanceBounds.js +68 -0
  242. package/dist/rendering/renderer/InstanceBounds.js.map +1 -0
  243. package/dist/rendering/renderer/RenderShared.d.ts.map +1 -1
  244. package/dist/rendering/renderer/RenderShared.js +3 -7
  245. package/dist/rendering/renderer/RenderShared.js.map +1 -1
  246. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  247. package/dist/rendering/shadows/DirectionalCascadeFitter.js +19 -10
  248. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  249. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +24 -0
  250. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -0
  251. package/dist/rendering/webgl2/LdrPostprocessShader.js +233 -0
  252. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -0
  253. package/dist/rendering/webgl2/LegacyPost.d.ts +5 -3
  254. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  255. package/dist/rendering/webgl2/LegacyPost.js +23 -191
  256. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  257. package/package.json +25 -25
  258. package/templates/cinematic-scene/package.json +4 -3
  259. package/templates/mini-game/index.html +3 -1
  260. package/templates/mini-game/package.json +4 -3
  261. package/templates/mini-game/public/fonts/graphik/Graphik-Medium-Web.woff2 +0 -0
  262. package/templates/mini-game/public/fonts/graphik/Graphik-Regular-Web.woff2 +0 -0
  263. package/templates/mini-game/src/main.ts +1 -1
  264. package/templates/product-viewer/package.json +4 -3
  265. package/templates/production-asset-inspector/package.json +1 -1
  266. package/templates/production-material-studio/package.json +1 -1
  267. package/templates/production-product-configurator/package.json +1 -1
  268. package/templates/production-product-viewer/package.json +1 -1
package/README.md CHANGED
@@ -1,770 +1,92 @@
1
- # Aura3D 4.0.1
1
+ # Aura3D
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@aura3d/engine.svg)](https://www.npmjs.com/package/@aura3d/engine)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/@aura3d/engine.svg)](https://www.npmjs.com/package/@aura3d/engine)
5
- [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
5
+ [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://opensource.org/licenses/MIT)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-browser%203D-3178c6.svg)](https://www.typescriptlang.org/)
7
7
 
8
- **The batteries-included, agent-native 3D engine & game platform for the web — the practical default for agent-written browser 3D.**
9
-
10
- Licensed under MIT, `@aura3d/engine@4.0.1` unifies declarative scene authoring (`scene()`, `model()`, `primitives`, `lights`, `effects`, `camera`), deterministic Rapier 3D physics (`game.collisionWorld`), genre game kits (`game.platformer`, `game.racing`, `game.arcadeKart`, `game.grandPrixRoad`, `game.carSoccer`, `game.carSoccerPitch`, `game.racketSports`, `game.fallingBlocks`, `game.fighting`, `game.input`, `game.hud`), automatic glTF skeletal skinning & foot-planting IK, SHA-256 typed asset provenance (`src/aura-assets.ts` + Meshy 3D CLI pipeline), and automated release certification (`check-deploy`) in **one cohesive TypeScript SDK**.
11
-
12
- Describe the scene. Keep the code. Ship the app.
13
-
14
- ---
15
-
16
- ## Why Teams Choose Aura3D Over Raw Three.js
17
-
18
- **Three.js gives you a low-level scene graph and leaves you to assemble 15 incompatible libraries.** To ship a real 3D game or interactive product in raw Three.js, you have to wire your own WebGL/WebGPU render loop, hunt down a physics wrapper, manually configure shadow frustums and post-processing passes (`postprocessing` / `EffectComposer`), write custom glTF skinning/animation state machines, guess why untyped `/models/foo.glb` URLs 404 in production, and debug memory leaks when switching scenes.
19
-
20
- **Aura3D 4.0.1 gives developers and AI coding agents a complete 3D application and game platform out of the box.** Instead of stitching together imperative renderer plumbing, you author compact, deterministic TypeScript against one unified `@aura3d/engine@4.0.1` package—backed by 800,000+ searchable catalog models, Meshy 3D PBR asset admission, built-in Rapier 3D physics, Recast crowd navigation, 28+ `effects.*` post-processing and atmospheric builders, and fail-closed deployment checks.
21
-
22
- See the full architectural breakdown in [`docs/aura3d-vs-threejs.md`](docs/aura3d-vs-threejs.md).
23
-
24
- ### 10-Way Architectural Comparison: `Aura3D 4.0.1` vs. `Raw Three.js`
25
-
26
- | Architectural Layer | Raw Three.js (`three@0.185.1` + DIY Stack) | Aura3D 4.0.1 (`@aura3d/engine@4.0.1`) |
27
- | --- | --- | --- |
28
- | **1. Scene & Render Loop** | Manual `requestAnimationFrame`, window resize listeners, `devicePixelRatio` clamping, and manual GPU geometry/material/texture disposal. | Zero-boilerplate `createAuraApp` / `createGameApp` with automatic resource lifecycle, resize handling, and deterministic `stepAsync`. |
29
- | **2. Asset Pipeline & Type Safety** | Untyped string URLs (`"/foo.glb"`) that fail silently at runtime; manual bounding-box scale and pivot guessing. | Compile-time typed `assets.heroModel` with SHA-256 hash verification, auto-normalized `scaleMode: "fit"`, and built-in Meshy 3D + catalog CLI. |
30
- | **3. Physics & Gameplay Kits** | None built-in; requires stitching external Rapier, Ammo, or Cannon WASM glue and writing custom character movement loops. | Built-in deterministic Rapier 3D physics (`game.collisionWorld`), CCD, character controllers, and genre kits for racing, platformers, fighters, and falling-blocks. |
31
- | **4. Skeletal Animation & IK** | Manual `THREE.AnimationMixer` update loops, manual root-motion math, and no built-in foot-planting IK. | Declarative `animation.clip()`, crossfade state machines, root-motion extraction, spring-bone secondary dynamics, and automatic terrain foot-planting IK. |
32
- | **5. Post-Processing & Lighting** | Separate `EffectComposer` packages, shader chunk version conflicts, and manual HDRI `PMREMGenerator` setup. | First-class `effects.bloom()`, `ambientOcclusion()`, `screenSpaceReflections()`, temporal AA, volumetric fog, and 1-line HDRI studio presets. |
33
- | **6. Production Verification** | Zero built-in visual or asset verification; broken asset paths or shader errors cause silent black screens in prod. | Built-in `aura3d check-deploy`, route-health probes, and automated GPU visual & gameplay evidence gates. |
34
- | **7. Navigation & Crowd AI** | No pathfinding or navmesh runtime; requires custom Recast/Detour WASM bindings and manual agent steering loops. | Built-in Recast/Detour navmesh generation, pathfinding queries, and multi-agent local-avoidance crowd simulation (`@aura3d/navigation`). |
35
- | **8. Spatial Audio & Voice Sync** | Basic WebAudio wrapper nodes; no procedural game synth cues, audio stem manifests, or lip-sync viseme tracks. | Integrated spatial WebAudio buses, procedural synth cues, and AuraVoice viseme/caption synchronization (`createAuraVoiceBridgePackage`). |
36
- | **9. AI Coding Agent Ergonomics** | Imperative mutation soup where LLMs hallucinate removed APIs, invent missing `.glb` URLs, or leak GPU memory on reload. | Declarative nouns & verbs, `llms.txt` agent context, 800,000+ searchable catalog assets (`aura3d assets resolve`), and fail-closed diagnostics. |
37
- | **10. Ecosystem & Migration** | Fragmented third-party libraries that break across `three` minor releases. | Single `@aura3d/engine@4.0.1` entrypoint across 24 version-locked npm packages, plus the `aura3d migrate three` codemod. |
38
-
39
- ### Side-by-Side Code Comparison: ~120 Lines of Fragile Three.js Boilerplate vs. 18 Lines of `@aura3d/engine@4.0.1`
40
-
41
- Shipping a lit, post-processed, animated 3D hero scene with orbit controls and clean teardown in **raw Three.js** requires ~120 lines of manual imperative plumbing across multiple packages:
8
+ **A TypeScript SDK for agent-written browser 3D apps and games.** You describe a scene with typed, declarative nodes; the toolchain brings typed assets, checks and deploy gates. The current version is in [`CHANGELOG.md`](./CHANGELOG.md).
42
9
 
43
10
  ```ts
44
- // ❌ Raw Three.js (~120 lines of manual boilerplate & external glue)
45
- import * as THREE from "three";
46
- import { OrbitControls } from "three/addons/controls/OrbitControls.js";
47
- import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
48
- import { DRACOLoader } from "three/addons/loaders/DRACOLoader.js";
49
- import { RGBELoader } from "three/addons/loaders/RGBELoader.js";
50
- import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
51
- import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
52
- import { UnrealBloomPass } from "three/addons/postprocessing/UnrealBloomPass.js";
53
-
54
- const container = document.querySelector<HTMLElement>("#app")!;
55
- const scene = new THREE.Scene();
56
- scene.background = new THREE.Color("#07080a");
57
- scene.fog = new THREE.FogExp2("#07080a", 0.025);
58
-
59
- const camera = new THREE.PerspectiveCamera(45, container.clientWidth / container.clientHeight, 0.1, 200);
60
- camera.position.set(0, 1.8, 4.2);
61
-
62
- const renderer = new THREE.WebGLRenderer({ antialias: false, powerPreference: "high-performance" });
63
- renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
64
- renderer.setSize(container.clientWidth, container.clientHeight);
65
- renderer.toneMapping = THREE.ACESFilmicToneMapping;
66
- renderer.toneMappingExposure = 1.05;
67
- renderer.shadowMap.enabled = true;
68
- renderer.shadowMap.type = THREE.PCFSoftShadowMap;
69
- container.appendChild(renderer.domElement);
70
-
71
- const pmrem = new THREE.PMREMGenerator(renderer);
72
- pmrem.compileEquirectangularShader();
73
- new RGBELoader().load("/envs/studio_small.hdr", (hdr) => {
74
- scene.environment = pmrem.fromEquirectangular(hdr).texture;
75
- hdr.dispose();
76
- pmrem.dispose();
77
- });
78
-
79
- const keyLight = new THREE.DirectionalLight(0xffffff, 2.4);
80
- keyLight.position.set(4, 8, 5);
81
- keyLight.castShadow = true;
82
- keyLight.shadow.mapSize.set(2048, 2048);
83
- scene.add(keyLight, new THREE.AmbientLight(0x404060, 0.7));
84
-
85
- const controls = new OrbitControls(camera, renderer.domElement);
86
- controls.enableDamping = true;
87
- controls.target.set(0, 0.9, 0);
88
-
89
- const composer = new EffectComposer(renderer);
90
- composer.addPass(new RenderPass(scene, camera));
91
- composer.addPass(
92
- new UnrealBloomPass(new THREE.Vector2(container.clientWidth, container.clientHeight), 0.32, 0.4, 0.72)
93
- );
94
-
95
- const draco = new DRACOLoader();
96
- draco.setDecoderPath("/draco/");
97
- const loader = new GLTFLoader();
98
- loader.setDRACOLoader(draco);
99
-
100
- let mixer: THREE.AnimationMixer | undefined;
101
- // Untyped URL string: no compile-time check, no SHA-256 verification, manual scale guessing
102
- loader.load("/models/hero-mech.glb", (gltf) => {
103
- const root = gltf.scene;
104
- const box = new THREE.Box3().setFromObject(root);
105
- const size = box.getSize(new THREE.Vector3());
106
- const scale = 2.0 / Math.max(size.x, size.y, size.z, 0.001);
107
- root.scale.setScalar(scale);
108
- root.traverse((node) => {
109
- if ((node as THREE.Mesh).isMesh) {
110
- node.castShadow = true;
111
- node.receiveShadow = true;
112
- }
113
- });
114
- scene.add(root);
115
- if (gltf.animations[0]) {
116
- mixer = new THREE.AnimationMixer(root);
117
- mixer.clipAction(gltf.animations[0]).play();
118
- }
119
- });
120
-
121
- const clock = new THREE.Clock();
122
- let rafId = 0;
123
- function onResize() {
124
- camera.aspect = container.clientWidth / container.clientHeight;
125
- camera.updateProjectionMatrix();
126
- renderer.setSize(container.clientWidth, container.clientHeight);
127
- composer.setSize(container.clientWidth, container.clientHeight);
128
- }
129
- window.addEventListener("resize", onResize);
130
- function animate() {
131
- rafId = requestAnimationFrame(animate);
132
- const dt = Math.min(clock.getDelta(), 0.1);
133
- mixer?.update(dt);
134
- controls.update();
135
- composer.render();
136
- }
137
- animate();
138
- // Plus 25+ lines of manual geometry/material/texture/RT disposal to avoid GPU memory leaks...
139
- ```
140
-
141
- In **Aura3D 4.0.1**, the entire scene—with SHA-256 verified typed assets, auto-normalized scale, studio IBL + cascaded shadows, skeletal animation playback, HDR bloom + ambient occlusion, orbit camera, and automatic lifecycle cleanup—is **18 lines of declarative TypeScript**:
142
-
143
- ```ts
144
- // ✅ Aura3D 4.0.1 (18 lines — declarative, type-safe, verified)
145
- import { camera, createAuraApp, effects, environments, lights, model, scene, shadows } from "@aura3d/engine";
11
+ import { createAuraApp, looks, model, scene } from "@aura3d/engine";
146
12
  import { assets } from "./aura-assets";
147
13
 
148
14
  createAuraApp("#app", {
149
- scene: scene({ background: "#07080a" })
150
- .add(model(assets.heroMech, { scaleMode: "fit", targetSize: 2.0, clip: "Idle" }))
151
- .add(environments.studio({ intensity: 1.15 }))
152
- .add(lights.studio())
153
- .add(shadows.cascaded({ cascades: 3, mapSize: 2048, contactHardening: true }))
154
- .camera(camera.orbit({ distance: 4.2, target: [0, 0.9, 0], damping: true }))
155
- .add(effects.bloom({ intensity: 0.32, threshold: 0.72, radius: 0.4, antiBlowout: true }))
156
- .add(effects.ambientOcclusion({ intensity: 0.45, radius: 0.7 }))
157
- .add(effects.volumetricFog({ density: 0.018, color: "#07080a" }))
15
+ scene: scene().add(looks.preset("product-studio")).add(model(assets.robot)),
16
+ ...looks.appOptions("product-studio")
158
17
  });
159
18
  ```
160
19
 
161
- ---
162
-
163
- ## Start In One Command
164
-
165
- Scaffold a new Aura3D 4.0.1 project using `npm create aura3d@4.0.0` or `npx create-aura3d`:
166
-
167
- ```bash
168
- npm create aura3d@4.0.0 my-product -- --template product-viewer
169
- npx create-aura3d@latest my-product --template product-viewer
170
- cd my-product
171
- npm run dev
172
- ```
20
+ A `looks.preset` supplies image-based light, a shadow-casting key, fog, background and a post grade as one unit. `model(assets.robot)` is a typed asset generated by the CLI, never a raw URL.
173
21
 
174
- Resolve an asset from the 800,000+ model catalog or add a local GLB and keep it typed:
22
+ ## Start in five commands
175
23
 
176
24
  ```bash
177
- npx @aura3d/cli@4.0.1 assets resolve "battle-worn knight helmet" --name sneaker
178
- npx @aura3d/cli@4.0.1 assets add ./assets/sneaker.glb --name sneaker
179
- npx @aura3d/cli@latest assets add ./assets/sneaker.glb --name sneaker
25
+ npx create-aura3d@latest my-scene --template mini-game # also writes llms.txt and the Aura3D agent skills
26
+ cd my-scene && npm install
27
+ npm run dev # Vite on 127.0.0.1
28
+ npx @aura3d/cli@latest assets resolve "robot" --name robot # assets add also works for local GLBs; then model(assets.robot)
29
+ npm run build && npx @aura3d/cli@latest check-deploy --dist dist
180
30
  ```
181
31
 
182
- Render it from normal TypeScript:
32
+ Templates: `product-viewer` (default), `cinematic-scene`, `mini-game`, `racing-starter`, `falling-blocks-starter`, `fighting-game`, `character-controller`, `arena-shooter` and more (`npx create-aura3d@latest --help`). Known issue: a stock `vite build` of 4.1.2 fails on a Node-only import in the engine graph; the fix ships in 4.1.3.
183
33
 
184
- ```ts
185
- import { createAuraApp, environments, model, scene } from "@aura3d/engine";
186
- import { assets } from "./aura-assets";
34
+ ## If you are an AI agent
187
35
 
188
- createAuraApp("#app", {
189
- scene: scene().add(model(assets.sneaker)).add(environments.studio())
190
- });
191
- ```
36
+ Read [`llms.txt`](./llms.txt) (one screen, the fast path), then [`docs/agents/agent-quickstart.md`](./docs/agents/agent-quickstart.md) and [`docs/agents/claims-and-boundaries.md`](./docs/agents/claims-and-boundaries.md). The index of every agent doc is [`docs/agents/README.md`](./docs/agents/README.md); skills live in [`packages/aura3d-cli/skills/`](./packages/aura3d-cli/skills/). `npx create-aura3d@latest` and `npx @aura3d/cli@latest init --agent all` write the instruction files into your project.
192
37
 
193
- Verify static deployment output before shipping:
38
+ ## What you get
194
39
 
195
- ```bash
196
- npx @aura3d/cli@4.0.1 check-deploy --dist dist
197
- ```
40
+ - **Typed scene API.** `scene`, `model`, `looks`, `lights`, `camera`, `effects`, `interactions`, `primitives`, `instances` and the `game.*` genre kits through one entry, `@aura3d/engine`.
41
+ - **Typed, provenance-checked assets.** `assets search`, `assets resolve`, `assets add`, `assets import-meshy`, `assets optimize`, `assets validate`. In production a model needs a same-origin URL, a sha256 and provenance, otherwise it draws nothing. Meshy generation goes through the CLI with admission records.
42
+ - **Game kit.** `@aura3d/engine/game` (`createGame`: lifecycle, pause, results, DOM HUD, touch, juice, sound), `createFixedStepLoop`, `installQaHooks` and seeded replay, `createCueBank` audio synth, `defineModelAssets`, racket-sports and other genre kits.
43
+ - **Safety net.** `installSafetyNet` from `@aura3d/debug`: `?diag=1` panel, quality switches and black-frame self-heal. Custom shader failures are reported, not silent.
44
+ - **Checks.** `aura3d doctor`, `aura3d check-deploy`, route-health and screenshot evidence, the look-dev loop (`aura3d look capture`, `aura3d look lint`).
45
+ - **Migration.** `aura3d migrate three` is a codemod that records each approximation. It is not a drop-in claim.
198
46
 
199
- ## Why Developers Install It
47
+ Kit documentation: [`docs/api/game-kit.md`](./docs/api/game-kit.md), [`qa-kit.md`](./docs/api/qa-kit.md), [`safety-net.md`](./docs/api/safety-net.md), [`audio-synth.md`](./docs/api/audio-synth.md), [`model-loader.md`](./docs/api/model-loader.md), [`glsl-chunks.md`](./docs/api/glsl-chunks.md), [`scatter-merge.md`](./docs/api/scatter-merge.md), [`cli-asset-tools.md`](./docs/api/cli-asset-tools.md), [`toon.md`](./docs/api/toon.md).
200
48
 
201
- - **Prompt-to-code, not prompt-to-mystery.** Aura3D turns AI-generated 3D work into editable TypeScript projects you can inspect, test, and ship.
202
- - **Real assets by default.** The CLI tracks GLB/glTF source, license, metadata, SHA-256 hashes, and generated `assets.name` imports.
203
- - **Templates that start as apps.** Scaffolds include `product-viewer`, `cinematic-scene`, `mini-game`, `fighting-game`, `racing-starter`, `falling-blocks-starter`, `prompt-animation-channel`, `animation-studio`, `character-controller`, and specialized showcase patterns such as `portal-worlds` and `gaussian-splat-viewer`.
204
- - **Built-in proof.** Route-health checks, screenshots, package smoke tests, and deploy checks (`npx @aura3d/cli@4.0.1 check-deploy`) are part of the workflow instead of an afterthought.
205
- - **Designed for coding agents.** Codex, Claude, Cursor, and other agents get a stable API, typed assets, and guardrails that keep generated scenes in real source code.
49
+ ## Built with it
206
50
 
207
- ## What You Can Build
51
+ The [showcase index](https://aura3d.auraone.ai/apps/showcase-index/) has 26 playable games across racing, sports, action, platformers and arcade, including Aura Slam 3D (tennis, with a deterministic replay gate), Apex Overdrive (racing), Glint Courier (maze chase) and Craterline GP (bike racing). Each page states its limits; the games are independent work, not affiliated with any other game or studio. Games are checked on software WebGL2 in remote runs; real-GPU confirmation is partial and tracked in [`evidence/`](./evidence/).
208
52
 
209
- ```bash
210
- npx create-aura3d@latest shoe-launch --template product-viewer
211
- npx create-aura3d@latest launch-film --template cinematic-scene
212
- npx create-aura3d@latest arcade-run --template mini-game
213
- npx create-aura3d@latest arena --template fighting-game
214
- npx create-aura3d@latest episode --template prompt-animation-channel
215
- npx create-aura3d@latest studio --template animation-studio
216
- ```
53
+ ## Compared with three.js
217
54
 
218
- Aura3D is especially useful when the output needs to be more than a demo: typed assets, browser tests, screenshots, deploy checks, and source code that a developer can keep owning after the AI has written the first pass.
55
+ Aura3D wraps a three.js-compatible renderer lineage and adds the authoring, asset, game and check layers above it. A measured comparison exists, with limits: five small scenes, one author, software WebGL2 (not a GPU), three.js 0.185.1 against Aura3D 4.1.2. In it, Aura3D scene source was shorter in four of five scenes and needed one import instead of up to eight; three.js had the smaller bundle (about 7.7 times smaller for a one-cube app), the faster first frame in four of five scenes, lower frame cost, and a stock build that worked without configuration. Full tables, failure modes and caveats: [`evidence/vs-threejs/RESULTS.md`](./evidence/vs-threejs/RESULTS.md); plan to close the gaps: [`docs/workflows/aura3d-vs-threejs-analysis-and-plan.md`](./docs/workflows/aura3d-vs-threejs-analysis-and-plan.md). Choose three.js when you need WebGPU-first rendering, the widest loader and post-processing set, or its ecosystem.
219
56
 
220
57
  ## Packages
221
58
 
222
- - `@aura3d/engine`: public TypeScript runtime for browser 3D scenes and apps (4.0.0 removed the `@aura3d/lean` compatibility package; its `.` entry now serves the same core path through code-split internals).
223
- - `create-aura3d`: one-command Vite scaffolds for Aura3D projects (`npm create aura3d@4.0.0`).
224
- - `@aura3d/cli`: typed GLB/glTF asset workflow (`npx @aura3d/cli@4.0.1 assets resolve`, `npx @aura3d/cli@4.0.1 assets add`), catalog search, look presets and the look-dev loop (`aura3d look capture`), validation, diagnostics, and deploy checks (`npx @aura3d/cli@4.0.1 check-deploy`).
225
- - Package modules for animation, rendering, scene, physics, materials, React, product-studio, workflows, controls, environments, and Three.js migration.
59
+ Public packages (all at the same version; `@aura3d/engine` is the root of this repository):
226
60
 
227
- ## Proof-Oriented By Design
61
+ | Package | Purpose |
62
+ | --- | --- |
63
+ | `@aura3d/engine` | Public runtime: `createAuraApp`, scene nodes, looks, effects, game kits, subpaths such as `/game` and `/audio` |
64
+ | `@aura3d/cli` | Typed asset workflow, asset search across open public sources, Meshy admission, look-dev, `check-deploy`, `init`, `migrate three` |
65
+ | `create-aura3d` | Vite project scaffolder with agent skills and `llms.txt` |
66
+ | `@aura3d/core`, `@aura3d/math`, `@aura3d/scene` | Lifecycle and deterministic stepping, math, scene graph |
67
+ | `@aura3d/rendering` | Render device, WebGL2 backend, materials, passes |
68
+ | `@aura3d/assets`, `@aura3d/asset-index` | Asset loading and caching; asset search across public sources |
69
+ | `@aura3d/animation`, `@aura3d/audio`, `@aura3d/input`, `@aura3d/controls` | Clips and state machines, audio buses, input, camera controls |
70
+ | `@aura3d/physics`, `@aura3d/physics-rapier`, `@aura3d/navigation-recast` | Deterministic physics and optional adapters |
71
+ | `@aura3d/ecs`, `@aura3d/scripting` | ECS and behaviour graphs |
72
+ | `@aura3d/debug` | Diagnostics and the runtime safety net |
73
+ | `@aura3d/product-studio`, `@aura3d/apps`, `@aura3d/workflows`, `@aura3d/react`, `@aura3d/editor-runtime` | Product viewers, app presets, workflows, React host, editor runtime |
228
74
 
229
- Aura3D is built for public, inspectable software. Generated projects keep their TypeScript source, asset manifest, tests, screenshots, and deploy checks in the repo. The claim-boundary and release evidence docs live under `docs/` for teams that need strict publication review, but the developer path starts here: create an app, add typed assets, run it, test it, deploy it.
75
+ `@aura3d/engine/production-runtime`, `/advanced-runtime`, `/rendering` and `/contracts` are deprecated subpaths; new code uses the root.
230
76
 
231
- ## Current Release 4.0.0
77
+ ## Claims and verification
232
78
 
233
- Aura3D 4.0.1 is published across all **24 active public packages** on npm (all pre-4.0 versions `< 4.0.0` and the 5 retired pre-4.0 compatibility packages `@aura3d/lean`, `@aura3d/three-compat`, `@aura3d/materials`, `@aura3d/environments`, and `@aura3d/editor` are deprecated in full on npm in favor of `@aura3d/engine@4.0.1`). See the [GitHub release](https://github.com/auraoneai/aura3d/releases/tag/v4.0.1) for release assets and package details, and [`docs/migration-4.0.md`](docs/migration-4.0.md) for the 4.0 consolidation guide.
234
-
235
- Aura3D 4.0.1 is the consolidated browser 3D engine release for the agent era — prompt it, prove it, ship it. It unifies the public runtime surface on `@aura3d/engine@4.0.1`, upgrades all 19 browser 3D games and showcases with custom Meshy PBR GLB assets and interactive gameplay loops, ships the full post-processing, atmospheric, particle, weather, ribbon, and game-feel effects suite (`effects.*`), and exports the resident WebGPU compute particle pipeline alongside the WebGL2 runtime. Claims remain scoped to the public API and evidence described in the release documentation.
236
-
237
- ### What ships in 4.0.0
238
-
239
- - **Single Public Entrypoint (`@aura3d/engine@4.0.1`).** Consolidated public runtime surface (`createAuraApp`, `model(assets.x)`, `scene`, `camera`, `lights`, `effects`, `atmosphere`, `environments`, `shadows`, `game.*`, `sceneKits.*`, `prefabs.*`, `primitives.*`, `animation`, `createPhysicsRuntime`) with pre-4.0 versions (`< 4.0.0`) and retired compatibility packages (`@aura3d/lean`, `@aura3d/three-compat`, `@aura3d/materials`, `@aura3d/environments`, `@aura3d/editor`) deprecated in full on npm.
240
- - **Complete Effects, Post-Processing, Atmospherics & VFX Suite (`effects.*`).** Built-in scene-graph effect builders covering HDR bloom (`effects.bloom`, `effects.neonBloom`, `effects.cinematicBloom`), screen-space & contact occlusion (`effects.ambientOcclusion`, `effects.contactOcclusion`, `effects.contactShadows`), screen-space reflections (`effects.screenSpaceReflections`), physical depth of field (`effects.depthOfField`), camera/object motion blur (`effects.motionBlur`), ACES/AgX color grading & finishing (`effects.colorGrade`, `effects.vignette`, `effects.filmGrain`, `effects.chromaticAberration`, `effects.antiAlias`, `effects.outline`), volumetric & height fog (`effects.fog`, `effects.depthFog`, `effects.volumetricFog`, `effects.fogVolume`, `effects.lightCone`, `effects.auroraRibbon`), GPU & CPU particle/weather systems (`effects.particles`, `effects.meshParticles`, `effects.rain`, `effects.snow`, `effects.flipbook`, `effects.trail`), physical sky/wetness (`atmosphere.setSky`, `atmosphere.setWetness`), resident WebGPU compute particles (`ResidentGPUParticleRenderer`), and combat game-feel triggers (`game.feel` / `app.feel`).
241
- - **Aura3D 3D Browser Games & Interactive Showcases.** Upgraded with custom Meshy 3D PBR GLB hero models, architectural setpieces, and responsive user-controlled gameplay loops (`Aura Clash Arena` development showcase, `Neon Corridor Strike`, `Blockfall Reactor`, `Siege Golf`, `Bank Shot`, `Vault Breakers`, and `Mech Hangar`, alongside `Product Configurator`, `Smart City Control`, `Cinematic Architecture`, and `Digital Twin Operations`), backed by same-origin fixture and asset delivery.
242
- - **WebGPU Compute + WebGL2 Runtime.** Resident GPU compute particle simulation (`ResidentGPUParticleRenderer`), physical materials (sheen, anisotropy, iridescence, plus clearcoat and transmission with route-scoped evidence), HDR/IBL environment lighting, and deterministic fixed-step game simulation.
243
- - **Agent-First Authoring & Typed Asset Pipeline.** `npm create aura3d@4.0.0`, `npx @aura3d/cli@4.0.1 assets resolve`, `npx @aura3d/cli@4.0.1 assets add`, `import-meshy`, `validate`, `typegen`, and `npx @aura3d/cli@4.0.1 check-deploy`.
244
-
245
- ### 2.0.4 history & 3.0.1 release lineage
246
-
247
- Earlier milestones (`### 2.0.4 history` for the Meshy CLI candidate asset pipeline and `## Current Release 3.0.1` for the r185 baseline verification) are preserved in [`CHANGELOG.md`](CHANGELOG.md) and consolidated into `@aura3d/engine@4.0.1`.
248
-
249
- ## Effects, Post-Processing, Atmospherics & VFX (`effects.*`)
250
-
251
- Aura3D 4.0.1 ships a unified, declarative `effects.*` builder surface in `@aura3d/engine` that attaches directly to `scene()` alongside `atmosphere.*`, `environments.*`, `shadows.*`, and runtime `game.feel` triggers:
252
-
253
- ```ts
254
- import {
255
- atmosphere,
256
- createAuraApp,
257
- effects,
258
- environments,
259
- lights,
260
- model,
261
- scene,
262
- shadows
263
- } from "@aura3d/engine";
264
- import { assets } from "./aura-assets";
265
-
266
- const app = createAuraApp("#app", {
267
- scene: scene()
268
- .add(model(assets.heroCar))
269
- .add(environments.night({ intensity: 1.15 }))
270
- .add(lights.studio())
271
- .add(shadows.cascaded({ cascades: 3, mapSize: 2048, contactHardening: true }))
272
- // Post-processing & camera lens pipeline
273
- .add(effects.bloom({ intensity: 0.32, threshold: 0.72, radius: 0.4, antiBlowout: true }))
274
- .add(effects.ambientOcclusion({ intensity: 0.45, radius: 0.7, falloff: 0.6, multiBounce: true }))
275
- .add(effects.contactShadows({ length: 0.25, thickness: 0.05, steps: 16, intensity: 0.9 }))
276
- .add(effects.screenSpaceReflections({ intensity: 0.65, maxDistance: 18, roughnessCutoff: 0.45 }))
277
- .add(effects.depthOfField({ focusDistance: 6.5, fStop: 2.8, focalLength: 50, maxBlur: 0.015 }))
278
- .add(effects.motionBlur({ intensity: 0.35, shutter: 0.5, samples: 12 }))
279
- .add(effects.colorGrade({ exposure: 1.05, contrast: 1.08, saturation: 1.12 }))
280
- .add(effects.vignette({ intensity: 0.28, smoothness: 0.65, roundness: 0.8 }))
281
- .add(effects.chromaticAberration({ intensity: 0.0012 }))
282
- .add(effects.filmGrain({ intensity: 0.035, size: 1.2, luminanceResponse: 0.8 }))
283
- .add(effects.antiAlias({ mode: "taa", intensity: 1 }))
284
- // Atmospherics & volumetric lighting
285
- .add(effects.volumetricFog({ density: 0.018, color: "#0f172a", heightFalloff: 0.22, inscatterIntensity: 0.65 }))
286
- .add(effects.fogVolume({ center: [0, 0.8, -4], size: [12, 2.4, 12], density: 0.35, color: "#38bdf8", scatteringAnisotropy: 0.4 }))
287
- .add(effects.lightCone({ position: [0, 5.5, 0], direction: [0, -1, 0], length: 6, radius: 2.4, color: "#38bdf8", intensity: 0.75 }))
288
- .add(effects.auroraRibbon({ position: [0, 18, -32], width: 48, height: 10, color: "#22d3ee", secondaryColor: "#a855f7", sway: 0.6, shimmer: 0.8 }))
289
- // Weather, particles, trails & flipbooks
290
- .add(effects.rain({ count: 1400, area: 24, speed: 16, streakLength: 0.65, splashes: true, mist: true }))
291
- .add(effects.particles({
292
- preset: "sparks",
293
- count: 240,
294
- color: "#38bdf8",
295
- lifetimeColorRamp: ["#ffffff", "#38bdf8", "#a855f7"],
296
- sizeOverLife: [1, 0.6, 0],
297
- turbulence: 0.45,
298
- groundCollision: true,
299
- groundY: 0,
300
- groundBounce: 0.45,
301
- blendMode: "additive",
302
- softParticles: true
303
- }))
304
- .add(effects.meshParticles({
305
- mesh: "dodecahedron",
306
- count: 36,
307
- position: [0, 1.2, 0],
308
- spread: 2.5,
309
- gravity: -9.8,
310
- bounce: 0.45,
311
- groundY: 0,
312
- color: "#f59e0b",
313
- metalness: 0.75,
314
- roughness: 0.28
315
- }))
316
- .add(effects.trail({
317
- attachTo: "hero-car",
318
- width: 0.28,
319
- endWidth: 0.02,
320
- lifetime: 0.45,
321
- color: "#22d3ee",
322
- endColor: "#ec4899",
323
- blendMode: "additive"
324
- }))
325
- .add(effects.flipbook({
326
- atlasCols: 4,
327
- atlasRows: 4,
328
- frameCount: 16,
329
- fps: 24,
330
- position: [0, 1.4, -2],
331
- size: 1.8,
332
- color: "#fb923c",
333
- blendMode: "additive",
334
- softParticles: true
335
- }))
336
- });
337
-
338
- // Physical sky & wet surface response
339
- atmosphere.setSky(app, { mode: "preetham", turbidity: 2.4, rayleigh: 1.8, sunElevation: 14, sunAzimuth: 195 });
340
- atmosphere.setWetness(app, { wetness: 0.65, puddleCoverage: 0.45, puddleRoughness: 0.06, rippleIntensity: 0.5 });
341
- ```
342
-
343
- ### Complete Effects Reference (`@aura3d/engine@4.0.1`)
344
-
345
- | Category | Builder / API | Key Options & Capabilities |
346
- | --- | --- | --- |
347
- | **Bloom & Glare** | `effects.bloom(opts)` / `effects.neonBloom(opts)` / `effects.cinematicBloom(opts)` | Multi-mip HDR bloom with `intensity`, `threshold`, `radius`, `color`, `quality`, `softKnee`, `shoulder`, and `antiBlowout` / `maxIntensity` luminance clamping. |
348
- | **Ambient & Contact Occlusion** | `effects.ambientOcclusion(opts)` / `effects.contactOcclusion(opts)` / `effects.contactShadows(opts)` | Screen-space ambient occlusion (`intensity`, `radius`, `density`, `falloff`, `multiBounce`), micro-contact grounding, and ray-marched screen-space `contactShadows` (`length`, `thickness`, `steps`, `lights`). |
349
- | **Reflections & Lens Optics** | `effects.screenSpaceReflections(opts)` / `effects.depthOfField(opts)` / `effects.motionBlur(opts)` | Glossy PBR screen-space reflections (`maxDistance`, `thickness`, `roughnessCutoff`, `steps`), physical circle-of-confusion `depthOfField` (`focusDistance`, `fStop`, `focalLength`, `maxBlur`, `bokehScale`), and shutter `motionBlur` (`shutter`, `samples`, `tileSize`). |
350
- | **Color Grading & Finishing** | `effects.colorGrade(opts)` / `effects.vignette(opts)` / `effects.filmGrain(opts)` / `effects.chromaticAberration(opts)` / `effects.antiAlias(opts)` / `effects.outline(opts)` | Tonemapped grading (`exposure`, `contrast`, `saturation`, `shadows`, `highlights`, `lut`), display `vignette` (`smoothness`, `roundness`, `color`), luminance-weighted `filmGrain`, radial `chromaticAberration`, `antiAlias` (`"auto"`, `"taa"`, `"smaa"`, `"fxaa"`, `"msaa"`), and selection/edge `outline`. |
351
- | **Fog, Volumetrics & Sky** | `effects.fog(opts)` / `effects.depthFog(opts)` / `effects.volumetricFog(opts)` / `effects.fogVolume(opts)` / `effects.lightCone(opts)` / `effects.auroraRibbon(opts)` / `atmosphere.setSky(app, opts)` / `atmosphere.setWetness(app, opts)` | Distance & height-falloff fog, depth-aware volumetric inscatter, localized 3D `fogVolume` boxes with `scatteringAnisotropy`, spotlight `lightCone` shafts, animated shader `auroraRibbon` curtains, Preetham/gradient sky, and rain puddle wetness. |
352
- | **Particles, Weather & VFX** | `effects.particles(opts)` / `effects.meshParticles(opts)` / `effects.rain(opts)` / `effects.snow(opts)` / `effects.flipbook(opts)` / `effects.trail(opts)` / `effects.beam(opts)` / `ResidentGPUParticleRenderer` | Presets (`"fountain"`, `"swirl"`, `"ambient"`, `"additive-glow"`, `"soft-alpha"`, `"smoke"`, `"star"`, `"sparks"`, `"embers"`), `lifetimeColorRamp`, `sizeOverLife`, `alphaOverLife`, `turbulence`, `groundCollision`, instanced 3D debris (`meshParticles`), weather (`rain` with splashes/mist, `snow`), sprite-sheet `flipbook`, node/bone ribbon `trail`, energy `beam`, and WebGPU compute `ResidentGPUParticleRenderer`. |
353
- | **Game-Feel & Combat Juice** | `game.feel` / `gameFeel` / `app.feel` | Frame-accurate `hitStop`, `slowMo`, `damageFlash`, `speedLines`, `landingDust`, trauma-based camera shake, and combat impact triggers (`"hit-spark"`, `"impact-flash"`, `"dash-trail"`, `"ground-dust"`). |
354
-
355
- ## 24 Active Public Packages (`4.0.0`)
356
-
357
- All 24 active Aura3D packages are published at `4.0.0` on npm (with all `< 4.0.0` versions and the 5 retired pre-4.0 compatibility packages `@aura3d/lean`, `@aura3d/three-compat`, `@aura3d/materials`, `@aura3d/environments`, and `@aura3d/editor` deprecated in full on npm in favor of `@aura3d/engine@4.0.1`):
358
-
359
- | Package | Version | Role |
360
- | --- | --- | --- |
361
- | `@aura3d/engine` | `4.0.0` | Unified public TypeScript runtime: `createAuraApp`, `scene`, `model(assets.x)`, `camera`, `lights`, `effects.*`, `looks.*`, `atmosphere`, `environments`, `shadows`, `game.*`, `games.*`, `sceneKits.*`, `prefabs.*`, `primitives.*`, `animation`, `createPhysicsRuntime`, `ResidentGPUParticleRenderer`. |
362
- | `create-aura3d` | `4.0.0` | One-command Vite project scaffolder (`npm create aura3d@4.0.0` / `npx create-aura3d@4.0.1 <dir> --template <name>`). |
363
- | `@aura3d/cli` | `4.0.0` | Typed GLB/glTF asset workflow (`assets add`, `assets search`, `assets resolve`, `assets import-meshy`, `assets validate`, `assets typegen`), `look capture`, and `check-deploy`. |
364
- | `@aura3d/core` | `4.0.0` | Core math, transforms, colors, events, and lifecycle primitives. |
365
- | `@aura3d/scene` | `4.0.0` | Scene graph, spatial hierarchy, cameras, lights, and bounds. |
366
- | `@aura3d/rendering` | `4.0.0` | WebGL2 + WebGPU rendering backend, PBR materials, IBL, cascaded shadows, and multi-pass post-processing. |
367
- | `@aura3d/animation` | `4.0.0` | Skeletal clip playback, cross-fades, procedural locomotion, and AuraVoice viseme/caption synchronization. |
368
- | `@aura3d/physics` | `4.0.0` | Rigid-body, collider, raycast, and Rapier-backed deterministic simulation. |
369
- | `@aura3d/navigation` | `4.0.0` | NavMesh pathfinding, crowd steering, and Recast navigation helpers. |
370
- | `@aura3d/character` | `4.0.0` | Kinematic character controller, grounded step/slope response, and camera rigs. |
371
- | `@aura3d/ecs` | `4.0.0` | Entity-component-system queries, archetypes, and deterministic system scheduling. |
372
- | `@aura3d/scripting` | `4.0.0` | Runtime behavior graphs and node scripting catalog. |
373
- | `@aura3d/controls` | `4.0.0` | Orbit, trackball, fly, pointer-lock, and touch camera controls. |
374
- | `@aura3d/loaders` | `4.0.0` | GLB/glTF 2.0, KHR material variants, Draco/Meshopt, OBJ, and HDR environment loaders. |
375
- | `@aura3d/postprocessing` | `4.0.0` | Modular HDR bloom, SSAO, SSR, DOF, motion blur, outline, and tonemapping pass graph. |
376
- | `@aura3d/particles` | `4.0.0` | CPU & WebGPU compute particle emitters, weather, trails, and sprite-sheet flipbooks. |
377
- | `@aura3d/terrain` | `4.0.0` | Heightfield terrain generation, LOD tiling, and material splatting. |
378
- | `@aura3d/audio` | `4.0.0` | Spatial 3D WebAudio synthesis, cues, and procedural game soundscapes. |
379
- | `@aura3d/xr` | `4.0.0` | WebXR session management, controller rays, and hand/pose tracking. |
380
- | `@aura3d/devtools` | `4.0.0` | Frame-timing diagnostics, route-health telemetry, and debug overlays. |
381
- | `@aura3d/testing` | `4.0.0` | Deterministic frame stepping, input replay, and visual/evidence assertions. |
382
- | `@aura3d/react` | `4.0.0` | Declarative React host and hooks for `@aura3d/engine` apps. |
383
- | `@aura3d/product-studio` | `4.0.0` | Studio turntables, variant switchers, dimension callouts, and hero lighting rigs. |
384
- | `@aura3d/workflows` | `4.0.0` | Prompt-driven scene, game, and animation compilation pipelines. |
385
-
386
- Install the current 4.0.0 release:
387
-
388
- ```bash
389
- npm install @aura3d/engine@4.0.1
390
- # or scaffold a new app
391
- npx create-aura3d@4.0.1 my-product --template product-viewer
392
- ```
393
-
394
- ## Typed Asset Catalog & Meshy CLI (`4.0.0`)
395
-
396
- Aura3D 4.0.1 includes a catalog-first and Meshy-assisted asset workflow for AI coding agents. When a prompt names a real 3D object, vehicle, character, or architectural prop, search the catalog or import a validated Meshy GLB before writing scene code:
397
-
398
- ```bash
399
- npx @aura3d/cli@latest assets search "battle-worn knight helmet"
400
- npx @aura3d/cli@4.0.1 assets resolve "battle-worn knight helmet" --name helmet
401
- npx @aura3d/cli@latest assets resolve "battle-worn knight helmet" --name helmet
402
- ```
403
-
404
- The resolver pulls verified redistributable candidates into the typed asset pipeline (`aura.assets.json` + `src/aura-assets.ts`), and scene code uses `model(assets.helmet)`.
405
-
406
- For game characters and genre kits:
407
-
408
- ```bash
409
- npx @aura3d/cli@latest assets search "animated humanoid fighting character" --profile fighting-character --json
410
- npx @aura3d/cli@latest assets resolve "animated humanoid fighting character" --name fighter --profile fighting-character
411
- npx @aura3d/cli@latest assets validate-game --profile fighting-character --asset fighter --require-license
412
- ```
413
-
414
- When the catalog has no matching model, generate or refine a 3D PBR GLB with the Meshy workflow and admit it through `assets import-meshy` (see [`docs/meshy-cli.md`](docs/meshy-cli.md)).
415
-
416
- ## 30-Second Product Viewer
417
-
418
- ```ts
419
- import { createAuraApp, lights, model, scene } from "@aura3d/engine";
420
- import { assets } from "./aura-assets";
421
-
422
- createAuraApp("#app", {
423
- scene: scene()
424
- .add(model(assets.robot))
425
- .add(lights.studio()),
426
- diagnostics: { overlay: true }
427
- });
428
- ```
429
-
430
- The public API uses generated references such as `assets.robot`. Never pass raw string IDs or unvalidated paths to `model(...)`.
431
-
432
- ## Browser Game Runtime & Playable Showcases (`4.0.0`)
433
-
434
- Aura3D 4.0.1 ships a complete browser game runtime (`game.*`, `games.*`, `looks.*`, `effects.*`, `app.feel`) with first-class genre kits (`game.platformer`, `game.racing`, `game.arcadeKart`, `game.grandPrixRoad`, `game.carSoccer`, `game.carSoccerPitch`, `game.racketSports`, `game.fallingBlocks`, `game.fighting`) powering the 9 flagship playable 3D games and interactive showcases with custom Meshy PBR 3D characters, vehicles, and architectural props:
435
-
436
- - **Arena Combat & Knockout Action**: `Aura Clash Arena` (`apps/aura-clash-showcase` development showcase), `Bean Brawl Race` (`apps/showcase-bean-brawl-race`), `Neon Corridor Strike` (`examples/neon-corridor-strike`)
437
- - **Vehicular Soccer, Karting & Flight**: `Turbo Ball` (`apps/showcase-turbo-ball`, powered by `game.carSoccer` & `game.carSoccerPitch`), `Kart Havoc` (`apps/showcase-kart-havoc`, powered by `game.arcadeKart` & `game.grandPrixRoad`), `Aurora Lander` (`apps/showcase-aurora-lander`)
438
- - **Racket Sports, Billiards, Pinball & Puzzle**: `Top Tennis 3D` (`apps/showcase-top-tennis`, powered by `game.racketSports`), `Bank Shot Billiards` (`apps/showcase-bank-shot`), `Vault Breakers Pinball` (`apps/showcase-vault-breakers`), `Blockfall Reactor` (`apps/showcase-blockfall-reactor`, powered by `game.fallingBlocks`)
439
- - **Non-Game 4.0.0 Showcases & Engine Labs**: `Product Configurator Studio` (`apps/showcase-product-configurator`), `Smart City Control Room` (`apps/showcase-smart-city-control`), `Cinematic Architecture Tour` (`apps/showcase-cinematic-architecture`), `Digital Twin Operations Center` (`apps/showcase-digital-twin-ops`), `AI Data Galaxy Studio` (`apps/showcase-data-galaxy`), `Accelerated Particle Lab` (`apps/showcase-webgpu-particle-lab`), `Advanced Examples Gallery` (`apps/advanced-examples-gallery`), 9 focused engine evidence routes (`loader-gltf-variants`, `loader-obj`, `texture-anisotropy`, `postprocessing-depth-outline`, `controls-trackball`, `geometry-drawrange`, `interactive-picking`, `camera-multiple-views`, `webxr-interactions`), and 8 visual & asset labs (`wow-*`).
440
-
441
- Add typed assets before writing game code:
442
-
443
- ```bash
444
- npx @aura3d/cli@4.0.1 assets add ./assets/fighter.glb --name fighter
445
- npx @aura3d/cli@latest assets add ./assets/fighter.glb --name fighter
446
- npx @aura3d/cli@latest assets add ./assets/opponent.glb --name opponent
447
- ```
448
-
449
- Then use the public `game` and `games` facades:
450
-
451
- ```ts
452
- import {
453
- AnimationController,
454
- createAuraApp,
455
- game,
456
- games,
457
- lights,
458
- model,
459
- scene
460
- } from "@aura3d/engine";
461
- import { assets } from "./aura-assets";
462
-
463
- const stage = games.fighting.stagePreset("neon-dojo");
464
- const stageIssues = games.fighting.validateStage(stage);
465
-
466
- const fighting = game.fighting({
467
- playerId: "player",
468
- opponentId: "opponent",
469
- stage: { width: stage.combatBounds.maxX - stage.combatBounds.minX },
470
- autoListen: true
471
- });
472
-
473
- const app = createAuraApp("#app", {
474
- scene: stage.nodes
475
- .reduce((builder, node) => builder.add(node), scene())
476
- .add(model(assets.fighter).runtime(game.runtimeNode("player", { tags: ["fighter", "local"] })))
477
- .add(model(assets.opponent).runtime(game.runtimeNode("opponent", { tags: ["fighter", "ai"] })))
478
- .add(lights.studio())
479
- });
480
-
481
- const player = app.nodes.require("player");
482
- const opponent = app.nodes.require("opponent");
483
- const animation = new AnimationController({
484
- clipRegistry: assets.fighter,
485
- requiredClips: ["Idle", "Walk", "LightPunch"],
486
- suppressRootMotion: true
487
- });
488
-
489
- const touchLayout = game.touchControls({
490
- width: window.innerWidth,
491
- height: window.innerHeight,
492
- buttons: [
493
- { action: "jump", label: "Jump", binding: "TouchJump" },
494
- { action: "light", label: "Light", binding: "TouchLight" }
495
- ]
496
- });
497
-
498
- const jumpAssist = game.jumpAssist({ coyoteMs: 100, bufferMs: 120 });
499
- const hud = game.hud.bindings([
500
- game.hud.health({ actorId: "player", label: "Player health" }),
501
- game.hud.health({ actorId: "opponent", label: "Opponent health" }),
502
- game.hud.timer({ valuePath: "round.timeRemaining" }),
503
- game.hud.debugToggle({ action: "debug", statePath: "debug.visible" })
504
- ]);
505
- const accessibility = [
506
- game.accessibility.label({ targetId: "player-health", label: "Player health", live: true }),
507
- game.accessibility.pauseControls({ actions: ["pause", "Escape"], resumeActions: ["pause", "Enter"], menuId: "pause-menu" })
508
- ];
509
-
510
- app.onFrame(({ dt }) => {
511
- const snapshot = fighting.update(dt);
512
- animation.update(dt);
513
-
514
- jumpAssist.update(dt, {
515
- grounded: fighting.bodies.player.grounded,
516
- jumpPressed: fighting.input.pressed("jump")
517
- });
518
- if (jumpAssist.consume()) fighting.bodies.player.jump();
519
-
520
- if (fighting.input.pressed("light")) {
521
- animation.crossFade("LightPunch", 0.08, { restart: true });
522
- }
523
-
524
- player.setPosition(snapshot.player.position[0], snapshot.player.position[1], snapshot.player.position[2]);
525
- opponent.setPosition(snapshot.opponent.position[0], snapshot.opponent.position[1], snapshot.opponent.position[2]);
526
- });
527
-
528
- const replayPlan = game.inputReplay(fighting.input.recorded(), { fps: 60, label: "round-1" });
529
- const replayInput = game.input({
530
- actions: fighting.controls.actions,
531
- axes: fighting.controls.axes,
532
- autoListen: false
533
- });
534
- const replayDriver = game.inputReplayDriver(replayInput, replayPlan);
535
-
536
- const colliders = [
537
- game.collider.capsule({ id: "player-body", center: fighting.bodies.player.position, radius: 0.34, height: 1.7 }),
538
- game.collider.capsule({ id: "opponent-body", center: fighting.bodies.opponent.position, radius: 0.34, height: 1.7 })
539
- ];
540
- const overlay = game.debug.overlay({
541
- runtime: app.runtime,
542
- input: fighting.input,
543
- bodies: [fighting.bodies.player, fighting.bodies.opponent],
544
- combat: fighting.combat,
545
- effects: fighting.effects,
546
- camera: fighting.camera,
547
- colliders,
548
- warnings: stageIssues.map((issue) => issue.message)
549
- });
550
-
551
- const evidence = app.evidence({
552
- input: fighting.input,
553
- bodies: [fighting.bodies.player, fighting.bodies.opponent],
554
- combat: fighting.combat,
555
- effects: fighting.effects,
556
- camera: fighting.camera,
557
- hud,
558
- accessibility,
559
- stage: { id: stage.id, safeZones: true, bounds: stage.combatBounds, warnings: stageIssues.map((issue) => issue.message) }
560
- });
561
-
562
- console.log(touchLayout.controls.length, replayDriver.snapshot(), overlay.sections, evidence.systems);
563
- ```
564
-
565
- ## Animation Studio & AuraVoice Bridge (`4.0.0`)
566
-
567
- The **Animation Studio** turns a natural-language prompt into a deterministic, rendered animated short. Scene structure lives in a validated **EpisodeDocument** (cast, set, dialogue, blocking, camera) driven by your coding agent:
568
-
569
- ```bash
570
- npx create-aura3d@latest my-studio --template animation-studio
571
- cd my-studio && pnpm install
572
- pnpm scene new --prompt "two office workers arguing about a deadline" --full
573
- AURA_QUALITY=final pnpm episode:render-3d
574
- ```
575
-
576
- Aura3D emits the timed dialogue, caption, and viseme tracks while **AuraVoice** owns TTS narration and audio muxing:
577
-
578
- ```ts
579
- import {
580
- collectPromptAnimationEvidence,
581
- compilePromptEpisodePlan,
582
- createAudioStemManifest,
583
- createAuraApp,
584
- createAuraVoiceBridgePackage,
585
- createAuraVoiceVisemeTrack,
586
- createAnimationRenderOutputPackageMetadata,
587
- createGlbBlendshapeVisemeCue,
588
- createPrimitiveMouthVisemeCues,
589
- createShotPlaybackPlan,
590
- evaluatePromptAnimationPublishReadiness,
591
- game,
592
- installShotPlayback,
593
- lights,
594
- model,
595
- scene,
596
- sampleAuraVoiceBridgeAtTime,
597
- validateAuraVoiceBridgePackage
598
- } from "@aura3d/engine";
599
- import { assets } from "./aura-assets";
600
-
601
- const plan = compilePromptEpisodePlan({
602
- episodeId: "moon-garden",
603
- title: "Moon Garden Helpers",
604
- prompt: "Two robots clean a glowing moon garden.",
605
- language: "en",
606
- runtime: { duration: 30, frameRate: 30, resolution: { width: 1280, height: 720 }, maxTimingDriftFrames: 1 },
607
- characters: [
608
- { id: "miko", name: "Miko", role: "hero", asset: assets.miko },
609
- { id: "luma", name: "Luma", role: "sidekick", asset: assets.luma }
610
- ],
611
- locations: [{ id: "moon-garden", name: "Moon Garden", mood: "soft neon bedtime" }],
612
- beats: [
613
- {
614
- id: "beat-001",
615
- locationId: "moon-garden",
616
- summary: "Miko and Luma clean the glowing weeds.",
617
- visualIntent: "Two readable typed characters, safe captions, and gentle light.",
618
- duration: 8,
619
- characters: ["miko", "luma"],
620
- dialogue: [{ speakerId: "miko", text: "The moon garden is glowing again.", emotion: "curious" }]
621
- }
622
- ],
623
- route: "/episodes/moon-garden"
624
- });
625
-
626
- const visemes = createAuraVoiceVisemeTrack({
627
- episodeId: plan.episodePlan.episodeId,
628
- language: plan.episodePlan.language,
629
- frameRate: plan.shotTimeline.frameRate,
630
- cues: plan.dialogueTrack.lines.flatMap((line) =>
631
- createPrimitiveMouthVisemeCues({
632
- characterId: line.speakerId,
633
- speakerId: line.speakerId,
634
- lineId: line.lineId,
635
- startTime: line.startTime,
636
- endTime: line.endTime
637
- }).map((cue) => createGlbBlendshapeVisemeCue(cue))
638
- )
639
- });
640
-
641
- const audioStems = createAudioStemManifest({
642
- episodeId: plan.episodePlan.episodeId,
643
- duration: plan.dialogueTrack.duration,
644
- stems: plan.dialogueTrack.lines.map((line) => ({
645
- id: `audio:${line.lineId}`,
646
- role: "dialogue",
647
- path: line.audioFile ?? `assets/audio/${line.language}/${line.lineId}.wav`,
648
- startTime: line.startTime,
649
- duration: line.endTime - line.startTime,
650
- language: line.language
651
- }))
652
- });
653
-
654
- const renderOutputPackage = createAnimationRenderOutputPackageMetadata({
655
- episodePlan: plan.episodePlan,
656
- shotTimeline: plan.shotTimeline,
657
- renderQueue: plan.renderQueue
658
- });
659
-
660
- const bridge = createAuraVoiceBridgePackage({
661
- episodePlan: plan.episodePlan,
662
- storyboard: plan.storyboard,
663
- shotTimeline: plan.shotTimeline,
664
- dialogueTrack: plan.dialogueTrack,
665
- captionTrack: plan.captionTrack,
666
- visemes,
667
- audioStems,
668
- renderQueue: plan.renderQueue,
669
- renderOutputPackage
670
- });
671
- const bridgeIssues = validateAuraVoiceBridgePackage(bridge);
672
-
673
- const playback = createShotPlaybackPlan({
674
- timeline: plan.shotTimeline,
675
- performance: plan.performance,
676
- captions: plan.captionTrack,
677
- visemes,
678
- runtimeNodeByCharacterId: { miko: "miko", luma: "luma" },
679
- loop: true
680
- });
681
-
682
- const app = createAuraApp("#app", {
683
- scene: scene()
684
- .add(model(assets.miko).runtime(game.runtimeNode("miko", { tags: ["character"] })))
685
- .add(model(assets.luma).runtime(game.runtimeNode("luma", { tags: ["character"] })))
686
- .add(lights.studio())
687
- });
688
- installShotPlayback(app, playback);
689
-
690
- const sample = sampleAuraVoiceBridgeAtTime(bridge, 3);
691
- const evidence = collectPromptAnimationEvidence({
692
- bridgePackage: bridge,
693
- screenshots: [
694
- {
695
- id: "shot-001",
696
- time: sample.time,
697
- path: "artifacts/screenshots/shot-001.png",
698
- hash: "sha256:replace-with-rendered-screenshot-hash",
699
- width: 1280,
700
- height: 720
701
- }
702
- ],
703
- routeHealth: { status: "pass" }
704
- });
705
- const readiness = evaluatePromptAnimationPublishReadiness(evidence);
706
-
707
- console.log(bridgeIssues, evidence.publishReady, readiness.ready);
708
- ```
709
-
710
- ## Prompt-to-3D Scene Kits
711
-
712
- Use scene kits when an AI prompt asks for generated 3D systems alongside or instead of a supplied model:
713
-
714
- ```ts
715
- import { createAuraApp, sceneKits } from "@aura3d/engine";
716
-
717
- const kit = sceneKits.physicsPlayground();
718
- createAuraApp("#app", kit.toAppOptions());
719
- console.log(kit.diagnostics, kit.evidence);
720
- ```
721
-
722
- Maintained scene-kit families include physics playgrounds, particle fountains, solar systems, neon tunnels, 3D data visualizations, mini golf, material labs, city blocks, humanoid walks, and typed product viewers.
79
+ Every public claim follows [`docs/agents/claims-and-boundaries.md`](./docs/agents/claims-and-boundaries.md): label the capability, and claim only what a judged capture or retained evidence shows. Published gates include route health, typed provenance, public-API surface checks, package-size checks and `check-deploy`. Known gaps are listed per release in [`CHANGELOG.md`](./CHANGELOG.md) and in [`docs/workflows/threejs-parity-gaps.md`](./docs/workflows/threejs-parity-gaps.md).
723
80
 
724
81
  ## Documentation
725
82
 
726
- - **Documentation Hub:** [`docs/index.md`](docs/index.md)
727
- - **Quickstart Guide:** [`docs/quickstart.md`](docs/quickstart.md)
728
- - **Why Teams Choose Aura3D Over Raw Three.js:** [`docs/aura3d-vs-threejs.md`](docs/aura3d-vs-threejs.md)
729
- - **Starter Templates (`product-viewer`, `cinematic-scene`, `mini-game`, `portal-worlds`, `gaussian-splat-viewer`):** [`docs/templates.md`](docs/templates.md), [`docs/agents/templates.md`](docs/agents/templates.md)
730
- - **Typed Asset Pipeline:** [`docs/assets.md`](docs/assets.md), [`docs/agents/asset-workflow.md`](docs/agents/asset-workflow.md)
731
- - **Aura Clash Showcase Evidence:** [`docs/aura-clash-showcase.md`](docs/aura-clash-showcase.md), [`docs/examples/aura-clash.md`](docs/examples/aura-clash.md)
732
- - **Troubleshooting & Diagnostics:** [`docs/troubleshooting.md`](docs/troubleshooting.md), [`docs/agents/troubleshooting.md`](docs/agents/troubleshooting.md)
733
- - **4.0.0 Migration & Consolidation Guide:** [`docs/migration-4.0.md`](docs/migration-4.0.md)
734
- - **4.0.0 Release Notes:** [`docs/project/aura3d-400-release-notes.md`](docs/project/aura3d-400-release-notes.md)
735
- - **Build a Browser Game (End-to-End Guide):** [`docs/guides/build-a-browser-game.md`](docs/guides/build-a-browser-game.md)
736
- - **Public API Reference:** [`docs/api/public-api.md`](docs/api/public-api.md)
737
- - **Game Runtime API Reference:** [`docs/api/game-runtime.md`](docs/api/game-runtime.md)
738
- - **Believable-Motion Animation Runtime:** [`docs/animation/believable-motion.md`](docs/animation/believable-motion.md)
739
- - **Animation Studio Quickstart:** [`docs/animation-studio/quickstart.md`](docs/animation-studio/quickstart.md)
740
- - **AuraVoice Bridge Reference:** [`docs/api/auravoice-bridge.md`](docs/api/auravoice-bridge.md)
741
- - **Meshy CLI Asset Guide:** [`docs/meshy-cli.md`](docs/meshy-cli.md)
742
- - **Agent Manual & Quickstart:** [`docs/agents/README.md`](docs/agents/README.md), [`docs/agents/agent-quickstart.md`](docs/agents/agent-quickstart.md)
743
-
744
- ## Verification
745
-
746
- ```bash
747
- pnpm run check:release
748
- npx @aura3d/cli@latest assets validate-game
749
- npx @aura3d/cli@latest assets validate-animation
750
- npx @aura3d/cli@4.0.1 check-deploy --dist dist
751
- npx @aura3d/cli@latest check-deploy --dist dist
752
- ```
753
-
754
- ## What Is Still Not Resolved & Claim Boundaries
755
-
756
- Aura3D 4.0.1 is scoped to the 15 measured r185 comparison workloads and 50 live routes; this is not a universal parity claim across the entire Three.js ecosystem. Retained lab routes that remain bounded to diagnostic or readiness budgets (`custom-material-lab`, `neon-corridor-strike`, `raycast-ccd-lab`, `recast-crowd-lab`, and `rendering-large-scene`) are tracked separately in the route-health reports rather than promoted as unrestricted showcase launches.
83
+ - [`docs/index.md`](./docs/index.md): hub for humans and agents
84
+ - [`docs/agents/README.md`](./docs/agents/README.md): agent docs index
85
+ - [`docs/api/public-api.md`](./docs/api/public-api.md): public API
86
+ - [`docs/whats-new-4.1.md`](./docs/whats-new-4.1.md) and [`docs/migration/4.0-to-4.1.md`](./docs/migration/4.0-to-4.1.md): what changed in 4.1
87
+ - [`docs/workflows/game-conversion-playbook.md`](./docs/workflows/game-conversion-playbook.md): turning a browser game into an Aura3D game
88
+ - Site: https://aura3d.auraone.ai
757
89
 
758
90
  ## Contributing
759
91
 
760
- Star the repo if you build AI-native browser 3D software in TypeScript across WebGL2 and WebGPU. Open issues with the prompt, package version (`4.0.0`), asset source or license, commands run, route-health output, screenshots, and deploy context.
761
-
762
- ## SEO pass — 2026-10-20
763
-
764
- Fleet-standard SEO pass on the marketing/docs static site (`marketing/`, deployed surface = `marketing/dist` at the placeholder origin `https://aura3d.auraone.ai`):
765
-
766
- - **robots.txt**: regenerated with 14 named AI-crawler Allow groups (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, …) plus `*`, each repeating the real defensive disallows (`/node_modules/`, `/src/`, `/*.map$`); absolute Host + Sitemap; placeholder-domain swap-note. Generated identically for the marketing entry and the repo-root entry.
767
- - **sitemap.xml**: exact bijection of the committed 36-route public manifest (home + 13 docs + 20 active showcase apps + the 2 wow example apps) with per-route `lastmod` derived from real git history. The old hand-maintained sitemap was stale in both directions: retired showcase prototypes (`showcase-turbo-drift-circuit`, `showcase-skyline-runner`) were still listed; `/showcase/aura-clash/*` was listed although the builder now writes redirect stubs to `/apps/showcase-index/` for the retired Aura Clash showcase; 4 more `/showcase/aura-clash/*` subroutes and 6 `/apps/*` gallery/wow routes are not produced by the current build (owner follow-up if any should return as real content); and the 20 active showcase apps were missing. `docs/index.html` (301 → `/`) and the canonicalized duplicate `docs/aura-clash.html` are deliberately not listed.
768
- - **Generator + drift guard**: `marketing/scripts/gen-seo.mjs` (`npm run seo:gen` in `marketing/`) emits robots/sitemap/llms for both entries from one manifest; `--check` (wired into `npm run build`) fails the build if any manifest route loses its source file, the docs family drifts from `marketing/docs/*.html`, or a route is missing from `dist/` after the build.
769
- - **llms.txt**: now a standard LLM-crawler map — honest frozen summary, Facts block (release pinned to the repo manifest, the same source the version guard uses), every public route linked with its real title/description, git-derived Last updated, placeholder-domain swap-note — with the long-form agent guide preserved verbatim below a marker. The stale "Current release: 4.0.1" line was corrected to 4.0.7 (repo manifest).
770
- - **Per-page meta**: the brand pass `8ec1bf3` had already landed unique titles, absolute canonicals, and OG/Twitter brand renders across the home and all docs pages (verified; `docs/aura-clash.html` correctly canonicalizes onto `aura-clash-showcase.html`). This pass closed the remaining gaps: canonical + OG/Twitter brand renders wired into all 20 active showcase app sources (`apps/showcase-*/index.html`); three v1/v2 title collisions disambiguated (Aura Slam 3D, Apex Overdrive, THERMAL DRIFT) and the stale `Aura3D 4.0.1` tag in the teleoperator-v2 title corrected to 4.0.7; the two wow example apps' `og:image` fixed from a relative `/og/aura3d-og.png` that exists nowhere in the repo to the committed absolute brand render, plus twitter cards added.
92
+ Open issues with the prompt, package version, asset source and a screenshot or route-health output. Inside this monorepo, browsers, Playwright suites and heavy builds run on the remote runner (`tools/remote-acr/run.sh`), not on a laptop. Licensed under MIT.