@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.
- package/README.md +52 -730
- package/dist/audio/synth/SynthCueBank.d.ts.map +1 -1
- package/dist/audio/synth/SynthCueBank.js +11 -2
- package/dist/audio/synth/SynthCueBank.js.map +1 -1
- package/dist/audio/synth/types.d.ts +4 -0
- package/dist/audio/synth/types.d.ts.map +1 -1
- package/dist/aura3d-cli/cli.d.ts.map +1 -1
- package/dist/aura3d-cli/cli.js +49 -17
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/commands/evidence/index.d.ts +3 -0
- package/dist/aura3d-cli/commands/evidence/index.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/index.js +12 -0
- package/dist/aura3d-cli/commands/evidence/index.js.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judge.d.ts +18 -0
- package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judge.js +194 -0
- package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts +84 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.js +178 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.js.map +1 -0
- package/dist/aura3d-cli/commands/registry.d.ts +1 -0
- package/dist/aura3d-cli/commands/registry.d.ts.map +1 -1
- package/dist/aura3d-cli/commands/registry.js +1 -0
- package/dist/aura3d-cli/commands/registry.js.map +1 -1
- package/dist/aura3d-cli/look/capture.d.ts +15 -7
- package/dist/aura3d-cli/look/capture.d.ts.map +1 -1
- package/dist/aura3d-cli/look/capture.js +85 -13
- package/dist/aura3d-cli/look/capture.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
- package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
- package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
- package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.js +7 -1
- package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.js +1 -1
- package/dist/aura3d-cli/pull-bridge.js.map +1 -1
- package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
- package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
- package/dist/aura3d-cli/resolve-ladder.js +410 -0
- package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
- package/dist/create-aura3d/index.js +1 -1
- package/dist/debug/index.d.ts +2 -2
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +1 -1
- package/dist/debug/index.js.map +1 -1
- package/dist/debug/safety/frameBoundary.d.ts +33 -0
- package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
- package/dist/debug/safety/frameBoundary.js +40 -0
- package/dist/debug/safety/frameBoundary.js.map +1 -0
- package/dist/debug/safety/index.d.ts +1 -0
- package/dist/debug/safety/index.d.ts.map +1 -1
- package/dist/debug/safety/index.js +1 -0
- package/dist/debug/safety/index.js.map +1 -1
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
- package/dist/engine/agent-api/app/canvas.d.ts +16 -0
- package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
- package/dist/engine/agent-api/app/canvas.js +15 -0
- package/dist/engine/agent-api/app/canvas.js.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.js +21 -3
- package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.js +21 -3
- package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
- package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
- package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
- package/dist/engine/agent-api/app/mountFailure.js +9 -0
- package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
- package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
- package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
- package/dist/engine/agent-api/app/parentFit.js +36 -0
- package/dist/engine/agent-api/app/parentFit.js.map +1 -0
- package/dist/engine/agent-api/compiler/customMaterial.js +3 -2
- package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.d.ts +13 -0
- package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.js +30 -3
- package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.d.ts +1 -2
- package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.js +21 -4
- package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
- package/dist/engine/agent-api/index.d.ts +4 -0
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +1 -0
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
- package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/batched.js +7 -5
- package/dist/engine/agent-api/nodes/batched.js.map +1 -1
- package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
- package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/builder.js +7 -3
- package/dist/engine/agent-api/nodes/builder.js.map +1 -1
- package/dist/engine/agent-api/nodes/cameras.d.ts +7 -0
- package/dist/engine/agent-api/nodes/cameras.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/cameras.js +7 -0
- package/dist/engine/agent-api/nodes/cameras.js.map +1 -1
- package/dist/engine/agent-api/nodes/chaseCamera.d.ts +122 -0
- package/dist/engine/agent-api/nodes/chaseCamera.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/chaseCamera.js +130 -0
- package/dist/engine/agent-api/nodes/chaseCamera.js.map +1 -0
- package/dist/engine/agent-api/nodes/effects.composite.d.ts +1 -0
- package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/effects.composite.js +2 -0
- package/dist/engine/agent-api/nodes/effects.composite.js.map +1 -1
- package/dist/engine/agent-api/nodes/effects.toon.d.ts +26 -0
- package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/effects.toon.js +70 -0
- package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -0
- package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
- package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
- package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/index.d.ts +3 -0
- package/dist/engine/agent-api/nodes/prefabs/index.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/index.js +3 -0
- package/dist/engine/agent-api/nodes/prefabs/index.js.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts +32 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js +77 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js.map +1 -0
- package/dist/engine/lanes/prd06.d.ts.map +1 -1
- package/dist/engine/lanes/prd06.js +1 -16
- package/dist/engine/lanes/prd06.js.map +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.js +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
- package/dist/engine/public/index.d.ts +52 -67
- package/dist/engine/public/index.d.ts.map +1 -1
- package/dist/engine/public/index.js +59 -56
- package/dist/engine/public/index.js.map +1 -1
- package/dist/engine/qa/countedRng.d.ts +2 -0
- package/dist/engine/qa/countedRng.d.ts.map +1 -1
- package/dist/engine/qa/countedRng.js +3 -0
- package/dist/engine/qa/countedRng.js.map +1 -1
- package/dist/engine/qa/fixedStepLoop.d.ts +4 -0
- package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
- package/dist/engine/qa/fixedStepLoop.js +6 -0
- package/dist/engine/qa/fixedStepLoop.js.map +1 -1
- package/dist/engine/qa/hooks.js +1 -1
- package/dist/engine/qa/hooks.js.map +1 -1
- package/dist/game/evidence/beacon.d.ts +16 -6
- package/dist/game/evidence/beacon.d.ts.map +1 -1
- package/dist/game/evidence/beacon.js +32 -14
- package/dist/game/evidence/beacon.js.map +1 -1
- package/dist/game/evidence/textureStatus.d.ts +24 -0
- package/dist/game/evidence/textureStatus.d.ts.map +1 -0
- package/dist/game/evidence/textureStatus.js +27 -0
- package/dist/game/evidence/textureStatus.js.map +1 -0
- package/dist/game/hud/canvasMinimap.d.ts +60 -0
- package/dist/game/hud/canvasMinimap.d.ts.map +1 -0
- package/dist/game/hud/canvasMinimap.js +62 -0
- package/dist/game/hud/canvasMinimap.js.map +1 -0
- package/dist/game/hud/compass.d.ts +16 -0
- package/dist/game/hud/compass.d.ts.map +1 -0
- package/dist/game/hud/compass.js +15 -0
- package/dist/game/hud/compass.js.map +1 -0
- package/dist/game/index.d.ts +9 -0
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +5 -0
- package/dist/game/index.js.map +1 -1
- package/dist/game/motion/boneAttach.d.ts +42 -0
- package/dist/game/motion/boneAttach.d.ts.map +1 -0
- package/dist/game/motion/boneAttach.js +166 -0
- package/dist/game/motion/boneAttach.js.map +1 -0
- package/dist/game/motion/cameraClear.d.ts +35 -0
- package/dist/game/motion/cameraClear.d.ts.map +1 -0
- package/dist/game/motion/cameraClear.js +64 -0
- package/dist/game/motion/cameraClear.js.map +1 -0
- package/dist/game/motion/doubleFrame.d.ts +37 -0
- package/dist/game/motion/doubleFrame.d.ts.map +1 -0
- package/dist/game/motion/doubleFrame.js +59 -0
- package/dist/game/motion/doubleFrame.js.map +1 -0
- package/dist/game/motion/footSlide.d.ts +32 -0
- package/dist/game/motion/footSlide.d.ts.map +1 -0
- package/dist/game/motion/footSlide.js +59 -0
- package/dist/game/motion/footSlide.js.map +1 -0
- package/dist/game/motion/impact.d.ts +113 -0
- package/dist/game/motion/impact.d.ts.map +1 -0
- package/dist/game/motion/impact.js +233 -0
- package/dist/game/motion/impact.js.map +1 -0
- package/dist/game/motion/index.d.ts +19 -0
- package/dist/game/motion/index.d.ts.map +1 -0
- package/dist/game/motion/index.js +10 -0
- package/dist/game/motion/index.js.map +1 -0
- package/dist/game/motion/locomotion.d.ts +55 -0
- package/dist/game/motion/locomotion.d.ts.map +1 -0
- package/dist/game/motion/locomotion.js +107 -0
- package/dist/game/motion/locomotion.js.map +1 -0
- package/dist/game/motion/motionGate.d.ts +41 -0
- package/dist/game/motion/motionGate.d.ts.map +1 -0
- package/dist/game/motion/motionGate.js +71 -0
- package/dist/game/motion/motionGate.js.map +1 -0
- package/dist/game/motion/presenter.d.ts +37 -0
- package/dist/game/motion/presenter.d.ts.map +1 -0
- package/dist/game/motion/presenter.js +72 -0
- package/dist/game/motion/presenter.js.map +1 -0
- package/dist/game/motion/smoothing.d.ts +34 -0
- package/dist/game/motion/smoothing.d.ts.map +1 -0
- package/dist/game/motion/smoothing.js +92 -0
- package/dist/game/motion/smoothing.js.map +1 -0
- package/dist/game/session/warmPrograms.d.ts +58 -0
- package/dist/game/session/warmPrograms.d.ts.map +1 -0
- package/dist/game/session/warmPrograms.js +63 -0
- package/dist/game/session/warmPrograms.js.map +1 -0
- package/dist/math/Random.d.ts +3 -0
- package/dist/math/Random.d.ts.map +1 -1
- package/dist/math/Random.js +7 -0
- package/dist/math/Random.js.map +1 -1
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +3 -4
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/rendering/environment/EnvironmentCache.js +6 -1
- package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
- package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
- package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
- package/dist/rendering/environment/neutralEmbedded.js +1118 -0
- package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
- package/dist/rendering/geometry/Primitives.d.ts +4 -1
- package/dist/rendering/geometry/Primitives.d.ts.map +1 -1
- package/dist/rendering/geometry/Primitives.js +5 -1
- package/dist/rendering/geometry/Primitives.js.map +1 -1
- package/dist/rendering/renderer/CullingBatching.d.ts.map +1 -1
- package/dist/rendering/renderer/CullingBatching.js +3 -7
- package/dist/rendering/renderer/CullingBatching.js.map +1 -1
- package/dist/rendering/renderer/InstanceBounds.d.ts +18 -0
- package/dist/rendering/renderer/InstanceBounds.d.ts.map +1 -0
- package/dist/rendering/renderer/InstanceBounds.js +68 -0
- package/dist/rendering/renderer/InstanceBounds.js.map +1 -0
- package/dist/rendering/renderer/RenderShared.d.ts.map +1 -1
- package/dist/rendering/renderer/RenderShared.js +3 -7
- package/dist/rendering/renderer/RenderShared.js.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.js +19 -10
- package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +24 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.js +233 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts +5 -3
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +23 -191
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +25 -25
- package/templates/cinematic-scene/package.json +4 -3
- package/templates/mini-game/index.html +3 -1
- package/templates/mini-game/package.json +4 -3
- package/templates/mini-game/public/fonts/graphik/Graphik-Medium-Web.woff2 +0 -0
- package/templates/mini-game/public/fonts/graphik/Graphik-Regular-Web.woff2 +0 -0
- package/templates/mini-game/src/main.ts +1 -1
- package/templates/product-viewer/package.json +4 -3
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- package/templates/production-product-viewer/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,770 +1,92 @@
|
|
|
1
|
-
# Aura3D
|
|
1
|
+
# Aura3D
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@aura3d/engine)
|
|
4
4
|
[](https://www.npmjs.com/package/@aura3d/engine)
|
|
5
|
-
[](
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
|
|
8
|
-
**
|
|
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
|
-
|
|
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(
|
|
150
|
-
|
|
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
|
-
|
|
22
|
+
## Start in five commands
|
|
175
23
|
|
|
176
24
|
```bash
|
|
177
|
-
npx
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38
|
+
## What you get
|
|
194
39
|
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
75
|
+
`@aura3d/engine/production-runtime`, `/advanced-runtime`, `/rendering` and `/contracts` are deprecated subpaths; new code uses the root.
|
|
230
76
|
|
|
231
|
-
##
|
|
77
|
+
## Claims and verification
|
|
232
78
|
|
|
233
|
-
|
|
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
|
-
-
|
|
727
|
-
-
|
|
728
|
-
-
|
|
729
|
-
-
|
|
730
|
-
-
|
|
731
|
-
-
|
|
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
|
-
|
|
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.
|