@aura3d/cli 3.0.1 → 4.0.2
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 +16 -15
- package/dist/admission/artDirection.d.ts +28 -0
- package/dist/admission/artDirection.d.ts.map +1 -0
- package/dist/admission/artDirection.js +47 -0
- package/dist/admission/artDirection.js.map +1 -0
- package/dist/admission/audio.d.ts +19 -0
- package/dist/admission/audio.d.ts.map +1 -0
- package/dist/admission/audio.js +31 -0
- package/dist/admission/audio.js.map +1 -0
- package/dist/admission/builder-patterns.d.ts +25 -0
- package/dist/admission/builder-patterns.d.ts.map +1 -0
- package/dist/admission/builder-patterns.js +40 -0
- package/dist/admission/builder-patterns.js.map +1 -0
- package/dist/admission/gates.d.ts +136 -0
- package/dist/admission/gates.d.ts.map +1 -0
- package/dist/admission/gates.js +335 -0
- package/dist/admission/gates.js.map +1 -0
- package/dist/admission/glb.d.ts +64 -0
- package/dist/admission/glb.d.ts.map +1 -0
- package/dist/admission/glb.js +128 -0
- package/dist/admission/glb.js.map +1 -0
- package/dist/admission/index.d.ts +8 -0
- package/dist/admission/index.d.ts.map +1 -0
- package/dist/admission/index.js +8 -0
- package/dist/admission/index.js.map +1 -0
- package/dist/admission/profiles.d.ts +52 -0
- package/dist/admission/profiles.d.ts.map +1 -0
- package/dist/admission/profiles.js +91 -0
- package/dist/admission/profiles.js.map +1 -0
- package/dist/admission/qrFlags.d.ts +12 -0
- package/dist/admission/qrFlags.d.ts.map +1 -0
- package/dist/admission/qrFlags.js +48 -0
- package/dist/admission/qrFlags.js.map +1 -0
- package/dist/admission/routeGates.d.ts +36 -0
- package/dist/admission/routeGates.d.ts.map +1 -0
- package/dist/admission/routeGates.js +144 -0
- package/dist/admission/routeGates.js.map +1 -0
- package/dist/admission/texel.d.ts +50 -0
- package/dist/admission/texel.d.ts.map +1 -0
- package/dist/admission/texel.js +177 -0
- package/dist/admission/texel.js.map +1 -0
- package/dist/admission/textureStats.d.ts +45 -0
- package/dist/admission/textureStats.d.ts.map +1 -0
- package/dist/admission/textureStats.js +201 -0
- package/dist/admission/textureStats.js.map +1 -0
- package/dist/animation-asset-validator.d.ts +44 -0
- package/dist/animation-asset-validator.d.ts.map +1 -1
- package/dist/animation-asset-validator.js +80 -1
- package/dist/animation-asset-validator.js.map +1 -1
- package/dist/asset-core-types.d.ts +100 -4
- package/dist/asset-core-types.d.ts.map +1 -1
- package/dist/asset-inspection-types.d.ts +9 -0
- package/dist/asset-inspection-types.d.ts.map +1 -1
- package/dist/asset-manifest.d.ts +1 -0
- package/dist/asset-manifest.d.ts.map +1 -1
- package/dist/asset-manifest.js +17 -5
- package/dist/asset-manifest.js.map +1 -1
- package/dist/asset-route-typegen.d.ts +37 -0
- package/dist/asset-route-typegen.d.ts.map +1 -0
- package/dist/asset-route-typegen.js +179 -0
- package/dist/asset-route-typegen.js.map +1 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +9 -4
- package/dist/cli-help.js.map +1 -1
- package/dist/cli-options.d.ts +7 -0
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +33 -2
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +126 -11
- package/dist/cli.js.map +1 -1
- package/dist/codemods/engine-entry-imports.d.ts +22 -0
- package/dist/codemods/engine-entry-imports.d.ts.map +1 -0
- package/dist/codemods/engine-entry-imports.js +159 -0
- package/dist/codemods/engine-entry-imports.js.map +1 -0
- package/dist/codemods/lean-imports.d.ts +40 -0
- package/dist/codemods/lean-imports.d.ts.map +1 -0
- package/dist/codemods/lean-imports.js +175 -0
- package/dist/codemods/lean-imports.js.map +1 -0
- package/dist/codemods/renderer-imports.d.ts +36 -0
- package/dist/codemods/renderer-imports.d.ts.map +1 -0
- package/dist/codemods/renderer-imports.js +364 -0
- package/dist/codemods/renderer-imports.js.map +1 -0
- package/dist/codemods/renderer-mode.d.ts +38 -0
- package/dist/codemods/renderer-mode.d.ts.map +1 -0
- package/dist/codemods/renderer-mode.js +130 -0
- package/dist/codemods/renderer-mode.js.map +1 -0
- package/dist/commands/prd01/index.d.ts +8 -0
- package/dist/commands/prd01/index.d.ts.map +1 -0
- package/dist/commands/prd01/index.js +39 -0
- package/dist/commands/prd01/index.js.map +1 -0
- package/dist/commands/prd02/environmentsBake.d.ts +6 -0
- package/dist/commands/prd02/environmentsBake.d.ts.map +1 -0
- package/dist/commands/prd02/environmentsBake.js +174 -0
- package/dist/commands/prd02/environmentsBake.js.map +1 -0
- package/dist/commands/prd02/index.d.ts +2 -0
- package/dist/commands/prd02/index.d.ts.map +1 -0
- package/dist/commands/prd02/index.js +26 -0
- package/dist/commands/prd02/index.js.map +1 -0
- package/dist/commands/prd02/migrateLighting.d.ts +17 -0
- package/dist/commands/prd02/migrateLighting.d.ts.map +1 -0
- package/dist/commands/prd02/migrateLighting.js +86 -0
- package/dist/commands/prd02/migrateLighting.js.map +1 -0
- package/dist/commands/prd02/migrateLightingSweep.d.ts +20 -0
- package/dist/commands/prd02/migrateLightingSweep.d.ts.map +1 -0
- package/dist/commands/prd02/migrateLightingSweep.js +105 -0
- package/dist/commands/prd02/migrateLightingSweep.js.map +1 -0
- package/dist/commands/prd03/index.d.ts +7 -0
- package/dist/commands/prd03/index.d.ts.map +1 -0
- package/dist/commands/prd03/index.js +9 -0
- package/dist/commands/prd03/index.js.map +1 -0
- package/dist/commands/prd04/index.d.ts +10 -0
- package/dist/commands/prd04/index.d.ts.map +1 -0
- package/dist/commands/prd04/index.js +10 -0
- package/dist/commands/prd04/index.js.map +1 -0
- package/dist/commands/prd04/modelTintReport.d.ts +16 -0
- package/dist/commands/prd04/modelTintReport.d.ts.map +1 -0
- package/dist/commands/prd04/modelTintReport.js +114 -0
- package/dist/commands/prd04/modelTintReport.js.map +1 -0
- package/dist/commands/prd04/pinEmissiveDefaults.d.ts +3 -0
- package/dist/commands/prd04/pinEmissiveDefaults.d.ts.map +1 -0
- package/dist/commands/prd04/pinEmissiveDefaults.js +36 -0
- package/dist/commands/prd04/pinEmissiveDefaults.js.map +1 -0
- package/dist/commands/prd05/admit.d.ts +54 -0
- package/dist/commands/prd05/admit.d.ts.map +1 -0
- package/dist/commands/prd05/admit.js +153 -0
- package/dist/commands/prd05/admit.js.map +1 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.d.ts +3 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.d.ts.map +1 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.js +92 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.js.map +1 -0
- package/dist/commands/prd05/index.d.ts +9 -0
- package/dist/commands/prd05/index.d.ts.map +1 -0
- package/dist/commands/prd05/index.js +171 -0
- package/dist/commands/prd05/index.js.map +1 -0
- package/dist/commands/prd05/library.d.ts +23 -0
- package/dist/commands/prd05/library.d.ts.map +1 -0
- package/dist/commands/prd05/library.js +245 -0
- package/dist/commands/prd05/library.js.map +1 -0
- package/dist/commands/prd05/lookdev.d.ts +14 -0
- package/dist/commands/prd05/lookdev.d.ts.map +1 -0
- package/dist/commands/prd05/lookdev.js +68 -0
- package/dist/commands/prd05/lookdev.js.map +1 -0
- package/dist/commands/prd05/optimize.d.ts +16 -0
- package/dist/commands/prd05/optimize.d.ts.map +1 -0
- package/dist/commands/prd05/optimize.js +55 -0
- package/dist/commands/prd05/optimize.js.map +1 -0
- package/dist/commands/prd05/prune.d.ts +26 -0
- package/dist/commands/prd05/prune.d.ts.map +1 -0
- package/dist/commands/prd05/prune.js +104 -0
- package/dist/commands/prd05/prune.js.map +1 -0
- package/dist/commands/prd05/review.d.ts +24 -0
- package/dist/commands/prd05/review.d.ts.map +1 -0
- package/dist/commands/prd05/review.js +40 -0
- package/dist/commands/prd05/review.js.map +1 -0
- package/dist/commands/prd06/index.d.ts +6 -0
- package/dist/commands/prd06/index.d.ts.map +1 -0
- package/dist/commands/prd06/index.js +86 -0
- package/dist/commands/prd06/index.js.map +1 -0
- package/dist/commands/prd06/inspectAnimationClips.d.ts +86 -0
- package/dist/commands/prd06/inspectAnimationClips.d.ts.map +1 -0
- package/dist/commands/prd06/inspectAnimationClips.js +168 -0
- package/dist/commands/prd06/inspectAnimationClips.js.map +1 -0
- package/dist/commands/prd06/validateHero.d.ts +18 -0
- package/dist/commands/prd06/validateHero.d.ts.map +1 -0
- package/dist/commands/prd06/validateHero.js +91 -0
- package/dist/commands/prd06/validateHero.js.map +1 -0
- package/dist/commands/prd07/codemods.d.ts +28 -0
- package/dist/commands/prd07/codemods.d.ts.map +1 -0
- package/dist/commands/prd07/codemods.js +155 -0
- package/dist/commands/prd07/codemods.js.map +1 -0
- package/dist/commands/prd07/index.d.ts +2 -0
- package/dist/commands/prd07/index.d.ts.map +1 -0
- package/dist/commands/prd07/index.js +151 -0
- package/dist/commands/prd07/index.js.map +1 -0
- package/dist/commands/prd08/feelLint.d.ts +13 -0
- package/dist/commands/prd08/feelLint.d.ts.map +1 -0
- package/dist/commands/prd08/feelLint.js +32 -0
- package/dist/commands/prd08/feelLint.js.map +1 -0
- package/dist/commands/prd08/index.d.ts +2 -0
- package/dist/commands/prd08/index.d.ts.map +1 -0
- package/dist/commands/prd08/index.js +16 -0
- package/dist/commands/prd08/index.js.map +1 -0
- package/dist/commands/prd08/motionReport.d.ts +94 -0
- package/dist/commands/prd08/motionReport.d.ts.map +1 -0
- package/dist/commands/prd08/motionReport.js +197 -0
- package/dist/commands/prd08/motionReport.js.map +1 -0
- package/dist/commands/prd09/codemods/audio-wrapper.d.ts +9 -0
- package/dist/commands/prd09/codemods/audio-wrapper.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/audio-wrapper.js +30 -0
- package/dist/commands/prd09/codemods/audio-wrapper.js.map +1 -0
- package/dist/commands/prd09/codemods/capture-branches.d.ts +10 -0
- package/dist/commands/prd09/codemods/capture-branches.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/capture-branches.js +54 -0
- package/dist/commands/prd09/codemods/capture-branches.js.map +1 -0
- package/dist/commands/prd09/codemods/evidence-globals.d.ts +8 -0
- package/dist/commands/prd09/codemods/evidence-globals.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/evidence-globals.js +19 -0
- package/dist/commands/prd09/codemods/evidence-globals.js.map +1 -0
- package/dist/commands/prd09/codemods/perf-script.d.ts +8 -0
- package/dist/commands/prd09/codemods/perf-script.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/perf-script.js +24 -0
- package/dist/commands/prd09/codemods/perf-script.js.map +1 -0
- package/dist/commands/prd09/index.d.ts +8 -0
- package/dist/commands/prd09/index.d.ts.map +1 -0
- package/dist/commands/prd09/index.js +19 -0
- package/dist/commands/prd09/index.js.map +1 -0
- package/dist/commands/prd09/perf-report.d.ts +56 -0
- package/dist/commands/prd09/perf-report.d.ts.map +1 -0
- package/dist/commands/prd09/perf-report.js +118 -0
- package/dist/commands/prd09/perf-report.js.map +1 -0
- package/dist/commands/prd09/sfx-admit.d.ts +18 -0
- package/dist/commands/prd09/sfx-admit.d.ts.map +1 -0
- package/dist/commands/prd09/sfx-admit.js +120 -0
- package/dist/commands/prd09/sfx-admit.js.map +1 -0
- package/dist/commands/prd10/index.d.ts +2 -0
- package/dist/commands/prd10/index.d.ts.map +1 -0
- package/dist/commands/prd10/index.js +109 -0
- package/dist/commands/prd10/index.js.map +1 -0
- package/dist/commands/prd11/batchOptout.d.ts +35 -0
- package/dist/commands/prd11/batchOptout.d.ts.map +1 -0
- package/dist/commands/prd11/batchOptout.js +155 -0
- package/dist/commands/prd11/batchOptout.js.map +1 -0
- package/dist/commands/prd11/index.d.ts +2 -0
- package/dist/commands/prd11/index.d.ts.map +1 -0
- package/dist/commands/prd11/index.js +13 -0
- package/dist/commands/prd11/index.js.map +1 -0
- package/dist/commands/prd11/perfGate.d.ts +15 -0
- package/dist/commands/prd11/perfGate.d.ts.map +1 -0
- package/dist/commands/prd11/perfGate.js +98 -0
- package/dist/commands/prd11/perfGate.js.map +1 -0
- package/dist/commands/prd13/index.d.ts +15 -0
- package/dist/commands/prd13/index.d.ts.map +1 -0
- package/dist/commands/prd13/index.js +26 -0
- package/dist/commands/prd13/index.js.map +1 -0
- package/dist/commands/prd13/run.d.ts +10 -0
- package/dist/commands/prd13/run.d.ts.map +1 -0
- package/dist/commands/prd13/run.js +29 -0
- package/dist/commands/prd13/run.js.map +1 -0
- package/dist/commands/prd14/index.d.ts +6 -0
- package/dist/commands/prd14/index.d.ts.map +1 -0
- package/dist/commands/prd14/index.js +6 -0
- package/dist/commands/prd14/index.js.map +1 -0
- package/dist/commands/prd15/index.d.ts +8 -0
- package/dist/commands/prd15/index.d.ts.map +1 -0
- package/dist/commands/prd15/index.js +152 -0
- package/dist/commands/prd15/index.js.map +1 -0
- package/dist/commands/registry.d.ts +19 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +19 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/contracts/assetManifest.d.ts +80 -0
- package/dist/contracts/assetManifest.d.ts.map +1 -0
- package/dist/contracts/assetManifest.js +9 -0
- package/dist/contracts/assetManifest.js.map +1 -0
- package/dist/contracts/commands.d.ts +53 -0
- package/dist/contracts/commands.d.ts.map +1 -0
- package/dist/contracts/commands.js +37 -0
- package/dist/contracts/commands.js.map +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +297 -73
- package/dist/index.js.map +1 -1
- package/dist/library-manifest.d.ts +86 -0
- package/dist/library-manifest.d.ts.map +1 -0
- package/dist/library-manifest.js +95 -0
- package/dist/library-manifest.js.map +1 -0
- package/dist/look/capture.d.ts +51 -0
- package/dist/look/capture.d.ts.map +1 -0
- package/dist/look/capture.js +229 -0
- package/dist/look/capture.js.map +1 -0
- package/dist/look/judge.d.ts +24 -0
- package/dist/look/judge.d.ts.map +1 -0
- package/dist/look/judge.js +151 -0
- package/dist/look/judge.js.map +1 -0
- package/dist/look/lint-static.d.ts +45 -0
- package/dist/look/lint-static.d.ts.map +1 -0
- package/dist/look/lint-static.js +241 -0
- package/dist/look/lint-static.js.map +1 -0
- package/dist/look/rubric.d.ts +70 -0
- package/dist/look/rubric.d.ts.map +1 -0
- package/dist/look/rubric.js +169 -0
- package/dist/look/rubric.js.map +1 -0
- package/dist/meshy/admission.d.ts.map +1 -1
- package/dist/meshy/admission.js +32 -7
- package/dist/meshy/admission.js.map +1 -1
- package/dist/meshy/import.d.ts +7 -1
- package/dist/meshy/import.d.ts.map +1 -1
- package/dist/meshy/import.js +84 -6
- package/dist/meshy/import.js.map +1 -1
- package/dist/migrate-three/CompatibilityWarnings.d.ts +6 -0
- package/dist/migrate-three/CompatibilityWarnings.d.ts.map +1 -0
- package/dist/migrate-three/CompatibilityWarnings.js +24 -0
- package/dist/migrate-three/CompatibilityWarnings.js.map +1 -0
- package/dist/migrate-three/ImportMap.d.ts +19 -0
- package/dist/migrate-three/ImportMap.d.ts.map +1 -0
- package/dist/migrate-three/ImportMap.js +35 -0
- package/dist/migrate-three/ImportMap.js.map +1 -0
- package/dist/migrate-three/R3fMigration.d.ts +32 -0
- package/dist/migrate-three/R3fMigration.d.ts.map +1 -0
- package/dist/migrate-three/R3fMigration.js +70 -0
- package/dist/migrate-three/R3fMigration.js.map +1 -0
- package/dist/migrate-three/ThreeToA3DAdapter.d.ts +8 -0
- package/dist/migrate-three/ThreeToA3DAdapter.d.ts.map +1 -0
- package/dist/migrate-three/ThreeToA3DAdapter.js +20 -0
- package/dist/migrate-three/ThreeToA3DAdapter.js.map +1 -0
- package/dist/migrate-three/emit.d.ts +21 -0
- package/dist/migrate-three/emit.d.ts.map +1 -0
- package/dist/migrate-three/emit.js +117 -0
- package/dist/migrate-three/emit.js.map +1 -0
- package/dist/migrate-three/mappings.d.ts +21 -0
- package/dist/migrate-three/mappings.d.ts.map +1 -0
- package/dist/migrate-three/mappings.js +42 -0
- package/dist/migrate-three/mappings.js.map +1 -0
- package/dist/migrate-three/parse.d.ts +20 -0
- package/dist/migrate-three/parse.d.ts.map +1 -0
- package/dist/migrate-three/parse.js +56 -0
- package/dist/migrate-three/parse.js.map +1 -0
- package/dist/migrate-three/report.d.ts +18 -0
- package/dist/migrate-three/report.d.ts.map +1 -0
- package/dist/migrate-three/report.js +16 -0
- package/dist/migrate-three/report.js.map +1 -0
- package/dist/pull-bridge/adapters.d.ts +1 -1
- package/dist/pull-bridge/adapters.d.ts.map +1 -1
- package/dist/pull-bridge/adapters.js +17 -4
- package/dist/pull-bridge/adapters.js.map +1 -1
- package/dist/pull-bridge/provenance.d.ts.map +1 -1
- package/dist/pull-bridge/provenance.js +3 -2
- package/dist/pull-bridge/provenance.js.map +1 -1
- package/dist/pull-bridge/pullable.d.ts.map +1 -1
- package/dist/pull-bridge/pullable.js +14 -3
- package/dist/pull-bridge/pullable.js.map +1 -1
- package/dist/pull-bridge/scoring.d.ts +36 -8
- package/dist/pull-bridge/scoring.d.ts.map +1 -1
- package/dist/pull-bridge/scoring.js +143 -47
- package/dist/pull-bridge/scoring.js.map +1 -1
- package/dist/pull-bridge/search.d.ts +2 -0
- package/dist/pull-bridge/search.d.ts.map +1 -1
- package/dist/pull-bridge/search.js +17 -10
- package/dist/pull-bridge/search.js.map +1 -1
- package/dist/pull-bridge.d.ts +2 -2
- package/dist/pull-bridge.d.ts.map +1 -1
- package/dist/pull-bridge.js +24 -8
- package/dist/pull-bridge.js.map +1 -1
- package/package.json +6 -3
- package/skills/agent-files/AGENTS.md +3 -0
- package/skills/aura3d-animation-studio/SKILL.md +153 -0
- package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
- package/skills/aura3d-art-direction/SKILL.md +84 -0
- package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
- package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
- package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
- package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
- package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
- package/skills/aura3d-assets/SKILL.md +151 -0
- package/skills/aura3d-assets/references/preview-under-look.md +26 -0
- package/skills/aura3d-browser-game/SKILL.md +149 -0
- package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
- package/skills/aura3d-character-animation/SKILL.md +129 -0
- package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
- package/skills/aura3d-core/SKILL.md +143 -0
- package/skills/aura3d-core/references/boundaries.md +91 -0
- package/skills/aura3d-evidence-review/SKILL.md +106 -0
- package/skills/aura3d-game-art/SKILL.md +118 -0
- package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
- package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
- package/skills/aura3d-materials-environments/SKILL.md +139 -0
- package/skills/aura3d-performance/SKILL.md +97 -0
- package/skills/aura3d-retexture/SKILL.md +115 -0
- package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
- package/skills/aura3d-scene-authoring/SKILL.md +132 -0
- package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
- package/skills/aura3d-threejs-migration/SKILL.md +125 -0
- package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
- package/skills/llms.txt +147 -0
- package/skills/manifest.json +163 -0
- package/skills/meshy-cli/SKILL.md +148 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Look recipes — 13 genre rows
|
|
2
|
+
|
|
3
|
+
One row per genre. Use the row's look id verbatim, take its camera/framing/palette
|
|
4
|
+
as the starting point, then iterate in the look-dev loop. Palettes: 3 base tones +
|
|
5
|
+
1 accent, no pure primaries. Key = sun position `elevation°`/`azimuth°`. Subject %
|
|
6
|
+
is the subject's share of frame height.
|
|
7
|
+
|
|
8
|
+
| Genre | Look | Camera rig + fov | Subject % | Key | Palette | Atmosphere | Post | VFX | Reference frames |
|
|
9
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
10
|
+
| platformer | `outdoor-day` | `follow` (side-on), fov 50 | 18–25 | 48° / 35° (3/4 front) | saturated greens, sky blue, warm wood + coin gold | fog 0.0025 | `daylight-outdoor` | coin sparkle, land dust | `webgl_animation_skinning_blending` |
|
|
11
|
+
| racing | `golden-hour` | `chase`, fov 60 | 15–25 | 12° / 35° (low sun) | warm asphalt, burnt orange, charcoal + headlight amber | fog 30–180 m | `cinematic-film` | brake glow, speed dust | `webgl_materials_car` |
|
|
12
|
+
| fighting | `arena-fight` | `follow` (side-on), fov 45 | 20–30 (pair) | top spot 60° / 0° | arena dark, rope colour, crowd shadow + spotlight rim | haze cone | `arena-fight` | hit sparks, knockback flash | `webgl_animation_skinning_morph` |
|
|
13
|
+
| arena shooter | `space` | `orthographic` (top-down) 60°, fov 55 | 10–15 (field) | rim 70° / 210° | deep space blue, graphite, teal + laser magenta | none (space background exception) | `space` | model muzzle flash, shield segments | `webgl_shaders_sky` |
|
|
14
|
+
| sports/table | `interior-industrial` | broadcast `orthographic` (top-down) 70°, fov 40 | 25–40 (table) | flood 55° / 45° | turf green, line white, crowd dark + ball accent | indoor haze | `arena-fight` | scoreboard pulse | `webgl_materials_lightmap` |
|
|
15
|
+
| product | `product-studio` | `orbit` autoframe, fov 35 | 45–70 | softbox 45° / 30° | neutral grey, white, metal + one brand accent | none | `product-studio` | sweep highlight on turn | `webgl_materials_video` |
|
|
16
|
+
| character | `character-showcase` | `orbit`, fov 40 | 50–70 | 3-point 50° / 35° | costume-driven neutrals + rim pick | light room haze | `product-studio` | cloth/hair motion settle | `webgl_animation_skinning_blending` |
|
|
17
|
+
| outdoor environment | `overcast` | `establishing` wide, fov 55 | vista | 50° / 40° | muted green, slate, fog blue + wildflower accent | fog 0.004 | `daylight-outdoor` | wind grass, drifting cloud | `webgl_lights_physical` |
|
|
18
|
+
| interior | `interior-warm` | medium `orbit`, fov 45 | 30–50 (anchor) | window 35° / 60° | warm wood, cream wall, book spines + plant green | dust shafts | `cinematic-film` | window bounce | `webgl_lights_spotlight` |
|
|
19
|
+
| night city | `night-city` | low tele, fov 35 | 20–35 (street) | neon rim 25° / 120° | sodium orange, neon sign, dark asphalt + cyan accent | fog 15–90 m, wet street | `neon-night` | sign flicker, drizzle sheen | `webgl_lights_spotlights` |
|
|
20
|
+
| space | `space` | `orbit` wide, fov 60 | 30–50 (planet) | star key 30° / 180° | void blue, planet limb, star field + aurora accent | none (background exception) | `space` | engine trail, planet rotation | `webgl_shaders_sky` |
|
|
21
|
+
| underwater | `underwater` | `follow`, fov 50 | 20–40 (creature) | godray 70° / 10° | deep blue, teal, kelp green + coral accent | scatter 0.03, caustics | `underwater` | bubble stream, silt drift | `webgl_water` |
|
|
22
|
+
| cinematic | `polar-night` | `establishing` dolly, fov 35 | 25–40 | moon 20° / 300° | aurora green, snow blue, night + lantern amber | snow mist 0.006 | `cinematic-film` | aurora drift, breath fog | `webgl_animation_cloth` |
|
|
23
|
+
|
|
24
|
+
Notes:
|
|
25
|
+
|
|
26
|
+
- `orbit`/`follow`/`follow` (side-on)/`follow` (side-on)/`shoulder`/`orthographic` (top-down)/`chase`/`establishing`
|
|
27
|
+
are camera-rig names used by the template gate; wire them through the camera
|
|
28
|
+
rig spec API of the current engine version, never through evidence fields.
|
|
29
|
+
- "background exception" rows skip the sky-fill hard check; the look's own
|
|
30
|
+
background supplies the void.
|
|
31
|
+
- VFX rows name models/practicals; no CSS/DOM overlays and no primitive sprite
|
|
32
|
+
cards faking rain, reflections or splashes.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Quality bar — the 12-category look rubric
|
|
2
|
+
|
|
3
|
+
Score every captured PNG per category 0-10 in 0.5 steps. Anchors are written as
|
|
4
|
+
what you observe, not what the code does. A score < 7 needs an `observations`
|
|
5
|
+
entry naming the concrete thing seen on screen.
|
|
6
|
+
|
|
7
|
+
## lighting
|
|
8
|
+
|
|
9
|
+
- 2: one flat light everywhere; faces and props read equally bright
|
|
10
|
+
- 5: a key direction exists but the fill flattens it; mood is generic daylight
|
|
11
|
+
- 7: clear key + fill + rim separation; the mood matches the look brief
|
|
12
|
+
- 9: light feels motivated by the world (sun, sign, lamp); bounce and colour temperature vary by area
|
|
13
|
+
|
|
14
|
+
## shadows
|
|
15
|
+
|
|
16
|
+
- 2: no visible shadow; objects float
|
|
17
|
+
- 5: a shadow exists but is grey/soft with no contact darkening
|
|
18
|
+
- 7: dark contact shadows ground every object, soft falloff
|
|
19
|
+
- 9: cascaded and stable; contact + ambient occlusion match the reference
|
|
20
|
+
|
|
21
|
+
## ibl_reflections
|
|
22
|
+
|
|
23
|
+
- 2: surfaces uniform, no environment response
|
|
24
|
+
- 5: metals look like plastic; reflections faint or absent
|
|
25
|
+
- 7: environment visible in glossy surfaces; roughness varies by material
|
|
26
|
+
- 9: reflections pick up the actual sky/studio setup and track correctly
|
|
27
|
+
|
|
28
|
+
## environment_world
|
|
29
|
+
|
|
30
|
+
- 2: solid void background
|
|
31
|
+
- 5: a sky/ground exist but read as a backdrop, not a place
|
|
32
|
+
- 7: horizon, ground and props compose a believable space
|
|
33
|
+
- 9: parallax layers (far, mid, near) plus weather or time-of-day cues
|
|
34
|
+
|
|
35
|
+
## atmospheric_effects
|
|
36
|
+
|
|
37
|
+
- 2: air is empty; no depth between near and far
|
|
38
|
+
- 5: a fog exists but mismatches the light (wrong colour or distance)
|
|
39
|
+
- 7: fog/haze ties to the horizon colour and lifts the far field
|
|
40
|
+
- 9: volumetric cues (shafts, mist, drizzle) read at a glance
|
|
41
|
+
|
|
42
|
+
## material_quality
|
|
43
|
+
|
|
44
|
+
- 2: one flat colour per object, everything the same
|
|
45
|
+
- 5: some materials differ but most read as untextured plastic
|
|
46
|
+
- 7: wood/metal/fabric/skin read distinctly; normal/roughness respond to light
|
|
47
|
+
- 9: materials carry wear, edge highlights and texture at read distance
|
|
48
|
+
|
|
49
|
+
## modeling_assets
|
|
50
|
+
|
|
51
|
+
- 2: hero subject is a box/sphere primitive
|
|
52
|
+
- 5: typed models but scale mismatches or obvious gaps
|
|
53
|
+
- 7: real models at real scale, fitted to the world
|
|
54
|
+
- 9: asset variety, dressing and silhouette richness like the reference
|
|
55
|
+
|
|
56
|
+
## composition
|
|
57
|
+
|
|
58
|
+
- 2: subject centred and tiny, or clipping the frame edge
|
|
59
|
+
- 5: subject visible but dead-centre symmetry with wasted space
|
|
60
|
+
- 7: clear focal hierarchy; rule-of-thirds or genre framing used
|
|
61
|
+
- 9: leading lines and depth layers direct the eye through the shot
|
|
62
|
+
|
|
63
|
+
## camera
|
|
64
|
+
|
|
65
|
+
- 2: default angle; horizon level but arbitrary
|
|
66
|
+
- 5: a deliberate angle exists but fov/height flattens the subject
|
|
67
|
+
- 7: rig matches the genre row; subject inside its framing band
|
|
68
|
+
- 9: camera reads as a choice (dolly, chase, orbit) and moves with intent
|
|
69
|
+
|
|
70
|
+
## postprocessing
|
|
71
|
+
|
|
72
|
+
- 2: raw output; clipped brights or crushed blacks
|
|
73
|
+
- 5: a grade exists but fights the palette (muddy or oversaturated)
|
|
74
|
+
- 7: tone/grade holds the palette; AO grounds the mid-tones
|
|
75
|
+
- 9: grade + bloom + AO are tuned as one image pipeline
|
|
76
|
+
|
|
77
|
+
## animation_quality
|
|
78
|
+
|
|
79
|
+
- 2: hero subject static or sliding
|
|
80
|
+
- 5: animation exists but feet slide or loops stutter
|
|
81
|
+
- 7: locomotion matches travel direction; idle vs action states read
|
|
82
|
+
- 9: secondary motion and timing give the subject weight
|
|
83
|
+
|
|
84
|
+
## ui_hud
|
|
85
|
+
|
|
86
|
+
- 2: debug overlay or dev counters in the shipped frame
|
|
87
|
+
- 5: HUD exists but overlaps the subject or sits off-layout
|
|
88
|
+
- 7: HUD in DOM, readable, out of the subject's way
|
|
89
|
+
- 9: HUD styled to the game's palette and responsive at mobile width
|
|
90
|
+
|
|
91
|
+
## Hard checks (lint codes that must be clean)
|
|
92
|
+
|
|
93
|
+
`aura3d look lint` plus `app.diagnostics().look.lint` must report no
|
|
94
|
+
`error`-severity finding for:
|
|
95
|
+
|
|
96
|
+
- `look/no-lights`, `look/no-ibl` — the scene lights and reflects nothing
|
|
97
|
+
- `look/ambient-kills-ibl`, `look/ambient-flattens` — ambient used as the only fill
|
|
98
|
+
- `look/solid-void` — void background without a declared exception
|
|
99
|
+
- `look/low-dpr`, `look/double-aa` — renderer overrides or doubled AA
|
|
100
|
+
- `look/fake-effect-names`, `look/capture-branch` — fake effect primitives or
|
|
101
|
+
capture-only branches (except where the flagged lane allows capture branches)
|
|
102
|
+
- `look/primitive-subject`, `look/debug-overlay` — primitive hero or shipped debug HUD
|
|
103
|
+
- `look/multiple-looks`, `look/expansion-mismatch` — look conflicts
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Reference frames
|
|
2
|
+
|
|
3
|
+
Named three.js r185 examples (https://threejs.org/examples/) — the day-0 frame
|
|
4
|
+
set. When the C-30 v2 reference scenes and the licensed stills in
|
|
5
|
+
`benchmarks/quality-rebuild/refs/` land on main, they replace rows here. Every
|
|
6
|
+
frame carries "what you should see" so the file is complete without images.
|
|
7
|
+
|
|
8
|
+
## webgl_animation_skinning_blending
|
|
9
|
+
|
|
10
|
+
https://threejs.org/examples/#webgl_animation_skinning_blending
|
|
11
|
+
|
|
12
|
+
What you should see: a rigged character blending between locomotion clips under
|
|
13
|
+
a real key light with shadows that track the feet. Use for: platformer,
|
|
14
|
+
character — how a typed GLB hero should sit in a lit world.
|
|
15
|
+
|
|
16
|
+
## webgl_animation_skinning_morph
|
|
17
|
+
|
|
18
|
+
https://threejs.org/examples/#webgl_animation_skinning_morph
|
|
19
|
+
|
|
20
|
+
What you should see: a creature head deforming through morph targets with skin
|
|
21
|
+
and eye materials responding to environment light. Use for: fighting — facial
|
|
22
|
+
and secondary motion quality on real materials.
|
|
23
|
+
|
|
24
|
+
## webgl_animation_cloth
|
|
25
|
+
|
|
26
|
+
https://threejs.org/examples/#webgl_animation_cloth
|
|
27
|
+
|
|
28
|
+
What you should see: draped cloth catching directional light with soft,
|
|
29
|
+
contact-darkened shadows on the floor. Use for: cinematic — fabric motion plus
|
|
30
|
+
moody lighting discipline.
|
|
31
|
+
|
|
32
|
+
## webgl_materials_car
|
|
33
|
+
|
|
34
|
+
https://threejs.org/examples/#webgl_materials_car
|
|
35
|
+
|
|
36
|
+
What you should see: a car body with clearcoat reflections pulling the
|
|
37
|
+
environment into the paint, grounded by contact shadow. Use for: racing — how
|
|
38
|
+
glossy materials and IBL should look on a vehicle.
|
|
39
|
+
|
|
40
|
+
## webgl_materials_video
|
|
41
|
+
|
|
42
|
+
https://threejs.org/examples/#webgl_materials_video
|
|
43
|
+
|
|
44
|
+
What you should see: a product-like object under studio lighting with clean
|
|
45
|
+
softboxes and a controlled backdrop. Use for: product — framing and soft studio
|
|
46
|
+
key.
|
|
47
|
+
|
|
48
|
+
## webgl_materials_lightmap
|
|
49
|
+
|
|
50
|
+
https://threejs.org/examples/#webgl_materials_lightmap
|
|
51
|
+
|
|
52
|
+
What you should see: baked light/detail on an architectural interior with warm
|
|
53
|
+
bounce in corners. Use for: sports/table and interior — indoor light richness
|
|
54
|
+
without dynamic lights.
|
|
55
|
+
|
|
56
|
+
## webgl_lights_physical
|
|
57
|
+
|
|
58
|
+
https://threejs.org/examples/#webgl_lights_physical
|
|
59
|
+
|
|
60
|
+
What you should see: physically-motivated lamps in a simple room, falloff that
|
|
61
|
+
reads as real. Use for: outdoor environment, interior — key/fill discipline.
|
|
62
|
+
|
|
63
|
+
## webgl_lights_spotlights
|
|
64
|
+
|
|
65
|
+
https://threejs.org/examples/#webgl_lights_spotlights
|
|
66
|
+
|
|
67
|
+
What you should see: spot cones with visible falloff on a dark floor, haze
|
|
68
|
+
inside the beam. Use for: night city — motivated practical lighting after dark.
|
|
69
|
+
|
|
70
|
+
## webgl_shaders_sky
|
|
71
|
+
|
|
72
|
+
https://threejs.org/examples/#webgl_shaders_sky
|
|
73
|
+
|
|
74
|
+
What you should see: a full-bleed sky dome with sun, horizon gradient and haze —
|
|
75
|
+
never a void. Use for: space, arena shooter, outdoor — background treatment.
|
|
76
|
+
|
|
77
|
+
## webgl_water
|
|
78
|
+
|
|
79
|
+
https://threejs.org/examples/#webgl_water
|
|
80
|
+
|
|
81
|
+
What you should see: an animated water surface with normals, reflections and
|
|
82
|
+
shore interaction. Use for: underwater — surface/caustic atmosphere cues.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aura3d-assets
|
|
3
|
+
description: Finds, admits, inspects, validates, and types GLB/glTF, texture, environment, and audio assets through the Aura3D CLI so scenes use `model(assets.x)`. Use when a prompt names a real object, the user brings a GLB, or the task touches `assets search`, `assets resolve`, `assets add`, `assets inspect`, `assets validate`, `assets typegen`, `aura.assets.json`, or `src/aura-assets.ts`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Aura3D assets
|
|
7
|
+
|
|
8
|
+
The CLI is the only path from a file or catalog hit to a typed `assets.<key>`.
|
|
9
|
+
Shared rules (catalog-first, typed assets, paid generation) are in
|
|
10
|
+
[boundaries](../aura3d-core/references/boundaries.md).
|
|
11
|
+
|
|
12
|
+
## Look target
|
|
13
|
+
|
|
14
|
+
Preview candidates under the target look, not a neutral stage: a GLB that
|
|
15
|
+
reads clean under `product-studio` softboxes can disappear into `night-city`
|
|
16
|
+
shadow pools or bloom out under `neon-arcade`. The route's recipe row sets the
|
|
17
|
+
lighting you evaluate materials and silhouettes against.
|
|
18
|
+
|
|
19
|
+
## Establish the contract
|
|
20
|
+
|
|
21
|
+
1. Run `npx @aura3d/cli@latest --help` and `npx @aura3d/cli@latest assets add
|
|
22
|
+
--help`. Use only the flags they print; `--profile` values for search and
|
|
23
|
+
resolve come from the usage line, not memory.
|
|
24
|
+
2. Read `aura.assets.json` and `src/aura-assets.ts`. Reuse an existing key
|
|
25
|
+
before adding a duplicate.
|
|
26
|
+
3. Note each asset's role: `character`, `vehicle`, `world`, `environment`,
|
|
27
|
+
`track`, `product`, `weapon`, `prop`, `set-dressing`, `debug`, `abstract`,
|
|
28
|
+
or `unknown`. Role decides the evidence you need later.
|
|
29
|
+
|
|
30
|
+
## Procedure
|
|
31
|
+
|
|
32
|
+
1. User supplied a file: skip search and admit it with provenance.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx @aura3d/cli@latest assets add ./assets/robot.glb --name robot \
|
|
36
|
+
--type model --role character --quality candidate \
|
|
37
|
+
--license CC0-1.0 --license-url <url> --source-page <url> \
|
|
38
|
+
--author "<name>" --retrieved-at <ISO-8601>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Use `--type texture|environment|audio|navigation` for non-model files, and
|
|
42
|
+
`--public-path /cdn/aura-assets/` when assets are served from a CDN.
|
|
43
|
+
2. Prompt names a real object: search with a descriptive phrase.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx @aura3d/cli@latest assets search "battle-worn knight helmet" --json
|
|
47
|
+
npx @aura3d/cli@latest assets search "animated humanoid fighting character" \
|
|
48
|
+
--profile fighting-character --json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Narrow with `--license cc0|cc-by`, `--max-tris N`, or `--animated`.
|
|
52
|
+
3. Read the result. Only auto-pullable candidates may be pulled. Marketplace
|
|
53
|
+
deep-links and `manual license check required` rows are user-handled: hand
|
|
54
|
+
the link to the user and admit their download with `assets add`.
|
|
55
|
+
4. Pull the chosen candidate into a typed key.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx @aura3d/cli@latest assets resolve "battle-worn knight helmet" --name helmet
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Pick a non-top candidate with `--index N` or `--candidate-id ID`, and repeat
|
|
62
|
+
the same `--profile` you searched with.
|
|
63
|
+
5. Inspect before naming clips, joints, morphs, or materials in code.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx @aura3d/cli@latest assets inspect public/aura-assets/<file>.glb \
|
|
67
|
+
--animation --humanoid --skeleton --morphs --license
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Treat `"ok": false` warnings (for example missing orientation metadata) as
|
|
71
|
+
facts to record, not noise.
|
|
72
|
+
6. Regenerate types and validate the shipping set.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx @aura3d/cli@latest assets typegen
|
|
76
|
+
npx @aura3d/cli@latest assets validate --asset helmet --source
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`--source` scans `src` for raw ids, URLs, and loader code, and lists
|
|
80
|
+
`typedAssetUsages`. Add `--no-placeholders --require-license` for anything
|
|
81
|
+
public. Refresh stale manifest bounds by re-adding the file. Ensure every
|
|
82
|
+
admitted entry in `aura.assets.json` and `src/aura-assets.ts` carries a valid
|
|
83
|
+
64-character `sha256-...` `hash` and `public/aura-assets/...` path for clean
|
|
84
|
+
look and silhouette so `createAssetProvenance(node.asset).source === "typed-aura-assets-manifest"`
|
|
85
|
+
preserves PBR lighting, palette, contrast, and reflection in the production
|
|
86
|
+
glTF bridge. Never omit `hash` in custom `defineAuraAssets(...)` /
|
|
87
|
+
`defineAssets` declarations (keeps look and shadow intact) and never place
|
|
88
|
+
unhashed duplicate GLBs in route-local `apps/<route>/public/aura-assets/`
|
|
89
|
+
that collide with root `public/aura-assets/` (keeps composition readable).
|
|
90
|
+
7. Use the key as generated. Every character, athlete, enemy, vehicle, weapon,
|
|
91
|
+
tree, and landmark must mount a real 3D GLB via `model(assets.<name>,
|
|
92
|
+
{ targetMaxDimension, role })` for a readable silhouette — use `targetHeight`
|
|
93
|
+
only for upright humanoids and `targetMaxDimension` for vehicles, rackets,
|
|
94
|
+
paddles, weapons, and wide props so aspect ratios never stretch vertically;
|
|
95
|
+
drive rigged characters (`skins > 0`) with `handle.setAnimation({ clip,
|
|
96
|
+
loop: true, speed })` so limbs articulate under the key light and shadow; and
|
|
97
|
+
never build stick-figure humans or box cars from primitives.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { createAuraApp, groundedRenderedAssetPlacement, looks, model, scene } from "@aura3d/engine";
|
|
101
|
+
import { assets } from "./aura-assets";
|
|
102
|
+
|
|
103
|
+
const place = groundedRenderedAssetPlacement(assets.helmet, { targetMaxDimension: 1.2, floorY: 0 });
|
|
104
|
+
createAuraApp("#app", {
|
|
105
|
+
scene: scene()
|
|
106
|
+
.add(looks.preset("product-studio"))
|
|
107
|
+
.add(model(assets.helmet).position(...place.position).scale(place.scale)),
|
|
108
|
+
...looks.appOptions("product-studio")
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
8. Hand off: fighters and games to `aura3d-browser-game`
|
|
113
|
+
(`assets validate-game`), rigs and clips to `aura3d-character-animation`
|
|
114
|
+
(`assets validate-animation`), release checks to `aura3d-evidence-review`.
|
|
115
|
+
|
|
116
|
+
## Reject a candidate when
|
|
117
|
+
|
|
118
|
+
- license, source page, author, or acquisition time is missing or temp-only;
|
|
119
|
+
- no material or texture evidence exists where the role expects texture;
|
|
120
|
+
- a character route claims animation but inspection shows `skins === 0` or no
|
|
121
|
+
usable clips for skeletal look and silhouette motion;
|
|
122
|
+
- bounds are extreme, pivot is bad, or orientation is unknown and public APIs
|
|
123
|
+
cannot correct it;
|
|
124
|
+
- the hash duplicates another asset without an explanation;
|
|
125
|
+
- a generated Meshy GLB has not been decimated and compressed before admission
|
|
126
|
+
(`> 20,000` vertices, `> 2 MB`, 32-bit indices instead of 16-bit `Uint16Array`
|
|
127
|
+
with `byteStride === 0`, or `> 1024x1024` textures that stall glTF parsing and
|
|
128
|
+
exhaust GPU memory across the scene's look, lighting, and atmosphere);
|
|
129
|
+
- it is placeholder-like, or only a generated thumbnail proves it is readable.
|
|
130
|
+
|
|
131
|
+
## Stop and report
|
|
132
|
+
|
|
133
|
+
- Search returns no auto-pullable candidate, or every candidate fails the
|
|
134
|
+
reject list: stop, list the query, profile, and rejection reasons, and offer
|
|
135
|
+
two options: a user-supplied licensed file, or Meshy generation (load
|
|
136
|
+
`meshy-cli`, dry run first). Do not model the subject from primitives.
|
|
137
|
+
- Search prints a catalog fetch warning (for example an HTTP 404 from the
|
|
138
|
+
index): report it verbatim, label asset-dependent work `blocked`, and do not
|
|
139
|
+
treat fallback deep-links as auto-pullable.
|
|
140
|
+
- `assets validate --release` fails on provenance: keep the route `prototype`
|
|
141
|
+
until durable evidence is added; never weaken the check.
|
|
142
|
+
- A needed key is absent from `src/aura-assets.ts` after typegen: stop and fix
|
|
143
|
+
the admission.
|
|
144
|
+
|
|
145
|
+
## References
|
|
146
|
+
|
|
147
|
+
- [Boundaries](../aura3d-core/references/boundaries.md)
|
|
148
|
+
- [Asset workflow](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-workflow.md)
|
|
149
|
+
- [Asset selection](https://github.com/auraoneai/aura3d/blob/main/docs/agents/asset-selection.md)
|
|
150
|
+
- [Assets docs](https://aura3d.auraone.ai/docs/assets.html)
|
|
151
|
+
- [Previewing assets under a look](references/preview-under-look.md)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Previewing assets under a look
|
|
2
|
+
|
|
3
|
+
A GLB that survives a neutral viewer can still fail the real scene's lighting.
|
|
4
|
+
Evaluate candidates under the route's look preset.
|
|
5
|
+
|
|
6
|
+
| Look | What it exposes | Reject signal |
|
|
7
|
+
| --- | --- | --- |
|
|
8
|
+
| `product-studio` | material honesty, silhouette edge quality | faceted normals, muddy PBR, bad pivot on plinth |
|
|
9
|
+
| `golden-hour` | warm key + teal shadow separation | specular wash, albedo too dark to read at dusk |
|
|
10
|
+
| `night-city` | neon rim, wet reflections, dark pools | silhouette disappears into shadow, emissive bloom-out |
|
|
11
|
+
| `outdoor-day` | full daylight exposure, horizon fog | washed-out albedo, no AO at contact points |
|
|
12
|
+
| `interior-warm` | warm pools, wood/fabric pairing | cold grey materials fight the grade |
|
|
13
|
+
| `space` | single hard key, black void | anything mid-grey vanishes; no fill light forgiving |
|
|
14
|
+
| `underwater` | teal volume, caustic shimmer | high-contrast speculars shimmer to noise |
|
|
15
|
+
| `arena-fight` | top spot + rim, dark crowd | midtones crush to black outside the pool |
|
|
16
|
+
|
|
17
|
+
## Checks at preview time
|
|
18
|
+
|
|
19
|
+
1. Spin the model `orbit` once under the look — a silhouette that dies at
|
|
20
|
+
three-quarter back is a bad candidate.
|
|
21
|
+
2. Contact: feet/wheels/anchor inside the look's ground shadow, not beside it.
|
|
22
|
+
3. Emissive parts bloom only where the grade expects glow (pickups, signage);
|
|
23
|
+
an unbounded emissive channel reads as a bug.
|
|
24
|
+
4. Palette: the asset's dominant hue must sit inside the genre palette or be
|
|
25
|
+
the declared accent — clashing saturation reads as wrong-asset even when
|
|
26
|
+
the mesh is fine.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aura3d-browser-game
|
|
3
|
+
description: Builds a playable Aura3D browser game route on the public genre kits with typed assets, deterministic input, reset, an objective, and a genre look recipe driven through the look-dev loop. Use when working in the `mini-game`, `racing-starter`, `falling-blocks-starter`, `fighting-game`, or `character-controller` templates, calling `game.platformer`, `game.racing`, `game.fallingBlocks`, `game.fighting`, or `game.evidence`, or running `assets validate-game` or `assets certify-game-geometry`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Aura3D browser game
|
|
7
|
+
|
|
8
|
+
A route with a scene and a key listener is not a game — and a playable scene
|
|
9
|
+
with flat lighting is not a finished game. A public game proves input, reset,
|
|
10
|
+
an objective and a progression loop in the browser AND looks like its genre.
|
|
11
|
+
Shared rules (claim labels, forbidden patterns, typed assets, benchmark mode)
|
|
12
|
+
are in [boundaries](../aura3d-core/references/boundaries.md).
|
|
13
|
+
|
|
14
|
+
## Look target
|
|
15
|
+
|
|
16
|
+
Genre → recipe row (full table: `../aura3d-art-direction/references/look-recipes.md`):
|
|
17
|
+
|
|
18
|
+
| Template | Look | Camera | Frame mood |
|
|
19
|
+
| --- | --- | --- | --- |
|
|
20
|
+
| `mini-game` | `outdoor-day` | `follow` (side-on) fov 50 | saturated greens, sky blue, warm wood + coin gold; fog 0.0025; `daylight-outdoor` post; coin sparkle + land dust |
|
|
21
|
+
| `racing-starter` | `golden-hour` | `chase` fov 60 | warm asphalt, burnt orange, charcoal + headlight amber; low sun haze; `cinematic-film` post; brake glow |
|
|
22
|
+
| `falling-blocks-starter` | `neon-arcade` | `orthographic` (top-down) fov 45 | neon palette per piece colour, dark glossy board + accent rim; `neon-night` post; line-clear flash |
|
|
23
|
+
| `fighting-game` | `arena-fight` | `follow` (side-on) fov 45 | arena dark, rope colour, crowd shadow + spotlight rim; haze cone; `arena-fight` post; hit sparks |
|
|
24
|
+
| `character-controller` | `outdoor-day` | `shoulder` fov 55 | open world greens + cloth accent; fog to horizon; `daylight-outdoor` post |
|
|
25
|
+
|
|
26
|
+
## Establish the contract
|
|
27
|
+
|
|
28
|
+
1. Run `npx @aura3d/cli@latest --help`. Use only the commands and flags it
|
|
29
|
+
prints; `--category` accepts only `racing` or `platformer`.
|
|
30
|
+
2. Read `src/aura-assets.ts` and `aura.assets.json`. Player, vehicle, track,
|
|
31
|
+
and world must be typed keys with a role (`character`, `vehicle`, `track`,
|
|
32
|
+
`world`). Missing keys: load `aura3d-assets` first.
|
|
33
|
+
3. Read the template `package.json` so you know what `npm run test` runs.
|
|
34
|
+
4. Decide the mode. Benchmark mode: if `aura3d look capture` is available, run
|
|
35
|
+
the look-dev loop; otherwise build and stop, label `prototype`.
|
|
36
|
+
|
|
37
|
+
## Procedure
|
|
38
|
+
|
|
39
|
+
1. Scaffold the matching template, then add the genre look before any props:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { createAuraApp, game, looks, model, scene } from "@aura3d/engine";
|
|
43
|
+
import { assets } from "./aura-assets";
|
|
44
|
+
|
|
45
|
+
const app = createAuraApp("#app", {
|
|
46
|
+
scene: scene()
|
|
47
|
+
.add(looks.preset("outdoor-day"))
|
|
48
|
+
.add(model(assets.hero).runtime(game.runtimeNode("player", { tags: ["player"] }))),
|
|
49
|
+
...looks.appOptions("outdoor-day")
|
|
50
|
+
});
|
|
51
|
+
const player = app.nodes.require("player");
|
|
52
|
+
const input = app.input({
|
|
53
|
+
actions: { left: ["KeyA", "ArrowLeft"], right: ["KeyD", "ArrowRight"], jump: ["Space"], restart: ["KeyR"] },
|
|
54
|
+
axes: { moveX: { negative: "left", positive: "right" } },
|
|
55
|
+
bufferMs: 120
|
|
56
|
+
});
|
|
57
|
+
const level = game.platformer({
|
|
58
|
+
start: { x: 0, y: 0.35 },
|
|
59
|
+
finish: { x: 12, y: 0.35 },
|
|
60
|
+
platforms: [{ id: "ground", x: -1, y: 0, width: 14, height: 0.35 }]
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
app.onFrame(({ dt }) => {
|
|
64
|
+
input.update(dt);
|
|
65
|
+
const state = level.step(dt, { moveX: input.axis("moveX"), jumpPressed: input.buffered("jump") });
|
|
66
|
+
player.setPosition(state.player.x, state.player.y, 0);
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. The look supplies sky light, key shadow, fog, and grade — never stack extra
|
|
71
|
+
`lights.studio()` / `lights.directional()` on top, pass `{ fogDensityScale: 0,
|
|
72
|
+
exposureEv: -0.1 }` to `looks.preset(...)` and
|
|
73
|
+
`qualityRebuild: { flags: ["game", "-compiler", "-post", "-vfxFog"] }` on fast
|
|
74
|
+
arcade routes so contrast and frame pacing stay crisp, and never set
|
|
75
|
+
`emissive: "#ffffff"` on instanced pool materials (`instanceColors` multiply
|
|
76
|
+
`u_baseColor`, not `u_emissiveColor`).
|
|
77
|
+
3. Mount typed 3D GLBs for every character, athlete, enemy, vehicle, weapon,
|
|
78
|
+
tree, and landmark (`model(assets.<name>, { targetMaxDimension, role })`,
|
|
79
|
+
emissive 3–5 on pickups, and explicit `material: material.pbr({ color })` on
|
|
80
|
+
untextured preview GLBs); use `targetHeight` only for upright humanoids and
|
|
81
|
+
`targetMaxDimension` for vehicles, rackets, paddles, weapons, and wide props
|
|
82
|
+
so silhouettes never stretch vertically. Drive rigged characters (`skins > 0`)
|
|
83
|
+
with `handle.setAnimation({ clip, loop: true, speed })` synced to locomotion
|
|
84
|
+
(`idle`, `walk`, `run`, `attack`) for real pixel motion under the key shadow
|
|
85
|
+
instead of sliding rigid statues. Never build stick-figure humans or box cars
|
|
86
|
+
from primitives; ground `model()` actors (`minY = 0`) at `y + sy / 2` of
|
|
87
|
+
centered platforms; wind custom `primitives.mesh` triangles CCW from `+Y`; and
|
|
88
|
+
decimate/compress Meshy GLBs (`<= 20,000` vertices, `<= 2 MB`, 16-bit indices,
|
|
89
|
+
`<= 1024x1024` textures, valid 64-char `sha256-...` `hash` for clean look).
|
|
90
|
+
4. Camera state drives `app.camera` every frame — size `html, body, #app, canvas`
|
|
91
|
+
to `100vw × 100vh` (`position: fixed; inset: 0`), extend the 3D ground apron
|
|
92
|
+
deep in `+Z`/`-Z` so the bottom frame is never a black void, disable
|
|
93
|
+
`collision: true` on `camera.rigs.shoulder` when the hero has child nodes, and
|
|
94
|
+
enforce `>= 1.4m` fighter pushbox separation (`|x| >= 1.8m` at spawn).
|
|
95
|
+
5. Gate Frame 1 on `await app.ready()` before fading `#boot-gate` (`opacity: 0;
|
|
96
|
+
pointer-events: none` then remove) and starting simulation so lighting,
|
|
97
|
+
shadow, and GLB silhouettes never pop in. Default `autopilot` to `false`
|
|
98
|
+
(immediate manual control on Frame 1) unless `?autoplay=1` or `?demo=1` is in
|
|
99
|
+
the URL or the user clicks the HUD `Auto` toggle button (`button.blur()` so
|
|
100
|
+
`Space`/`Enter` never re-trigger focused HUD controls), and wire HUD/events
|
|
101
|
+
through `game.eventLog` and `game.hud.*` in a compact top bar.
|
|
102
|
+
6. Reset without tearing down the scene: mutate runtime node handles
|
|
103
|
+
(`app.nodes.require(...)`) instead of calling `app.setScene()` on same-stage
|
|
104
|
+
(`stageId` / `worldId`) restarts so shadow and postprocess grade never drop.
|
|
105
|
+
7. Genre gates (plan for 60 seconds of meaningful play):
|
|
106
|
+
|
|
107
|
+
| Genre | Must have |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| racing | throttle, brake, steer, ordered checkpoints, lap or finish, penalty or timeout |
|
|
110
|
+
| platformer | move, jump, fall, collision matching visible ledges, collectibles, hazards, camera keeps player visible |
|
|
111
|
+
| falling blocks | move, rotate, soft + hard drop, lock, line clear, scoring, levels, game over |
|
|
112
|
+
| fighting | strikes/blocks, hit reactions, round + KO state, both fighters readable |
|
|
113
|
+
| character controller | walk/run/jump clips playing, camera shoulder follow, locomotion direction matches travel |
|
|
114
|
+
|
|
115
|
+
8. `npx @aura3d/cli@latest assets validate --no-placeholders --require-license`
|
|
116
|
+
and `assets validate-game`; racing/platformer also
|
|
117
|
+
`assets certify-game-geometry --asset track --category racing`.
|
|
118
|
+
9. Runtime evidence: pause, step one frame, then `game.evidence` over input,
|
|
119
|
+
bodies, events, HUD, and look state — see `aura3d-evidence-review` (one link).
|
|
120
|
+
|
|
121
|
+
## Look-dev loop
|
|
122
|
+
|
|
123
|
+
Run the `aura3d look capture` → judge → iterate loop from
|
|
124
|
+
`aura3d-art-direction`: lint first (`aura3d look lint`), then the weakest
|
|
125
|
+
rubric category; one change per round until every category reads 7+, 6
|
|
126
|
+
rounds, or 2 flat rounds.
|
|
127
|
+
|
|
128
|
+
## Stop and report
|
|
129
|
+
|
|
130
|
+
- `assets certify-game-geometry` returns `"ok": false` or a blocker such as
|
|
131
|
+
`racing-road-mesh-not-found`: label `prototype`; never hide the gap with
|
|
132
|
+
primitive ledges or road strips.
|
|
133
|
+
- Manual input cannot complete the route while a proof replay can: `prototype`.
|
|
134
|
+
- The primary player, vehicle, or world is a primitive stand-in: `prototype`.
|
|
135
|
+
- `assets validate-game` crashes or fails: report the exact message, label
|
|
136
|
+
`blocked` for public claims.
|
|
137
|
+
- A kit is missing a needed rule (fail state, collision semantics, path
|
|
138
|
+
alignment): write it route-local, say so, file a library gap.
|
|
139
|
+
- Benchmark mode without `look capture`: build, stop, label `prototype`.
|
|
140
|
+
|
|
141
|
+
## References
|
|
142
|
+
|
|
143
|
+
- [Shared boundaries](../aura3d-core/references/boundaries.md)
|
|
144
|
+
- [Look recipes](../aura3d-art-direction/references/look-recipes.md)
|
|
145
|
+
- [Quality bar](../aura3d-art-direction/references/quality-bar.md)
|
|
146
|
+
- [Build a browser game](https://github.com/auraoneai/aura3d/blob/main/docs/guides/build-a-browser-game.md)
|
|
147
|
+
- [Game example standards](https://github.com/auraoneai/aura3d/blob/main/docs/agents/game-example-standards.md)
|
|
148
|
+
- [Game runtime API](https://github.com/auraoneai/aura3d/blob/main/docs/api/game-runtime.md)
|
|
149
|
+
- [Genre looks in the frame](references/genre-looks.md)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Genre looks in the frame
|
|
2
|
+
|
|
3
|
+
What each genre's look must visibly deliver, at capture time.
|
|
4
|
+
|
|
5
|
+
| Genre | The frame must show | Kills the look |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| platformer | blue sky with depth fog, long grass-edge shadows, warm key on the hero, gold pickups glowing | void background, ambient-only light, floating platforms |
|
|
8
|
+
| racing | low warm sun, orange rim on the car silhouette, asphalt reflection, fog band at the horizon | noon-flat light, grey void, no specular on bodywork |
|
|
9
|
+
| falling blocks | saturated piece hues against a dark glossy board, bloom on line-clear, rim on the stack edge | washed-out palette, flat board, no glow on clears |
|
|
10
|
+
| fighting | top spotlight cones, rim on both fighters, crowd silhouettes in shadow | both fighters evenly lit, empty void arena |
|
|
11
|
+
| character showcase | 3/4-front key, rim separating hair/shoulder from backdrop, ground contact shadow | flat fill, floating feet, void |
|
|
12
|
+
| night city | neon signage, wet-street reflections, sodium pools, window glow | pure black background, one uniform dark |
|
|
13
|
+
|
|
14
|
+
## Per-genre VFX palette
|
|
15
|
+
|
|
16
|
+
| Genre | Accents (emissive 3–5× bg) | Motion cue |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| platformer | coin gold, spring green, hazard red | land dust puff, jump trail |
|
|
19
|
+
| racing | brake amber, exhaust white, dial cyan | speed lines, tire smoke |
|
|
20
|
+
| falling blocks | per-piece neon hue, clear flash white | line-clear flash, lock click glow |
|
|
21
|
+
| fighting | impact spark orange, meter cyan | hit sparks, knockback flash |
|
|
22
|
+
| character | cloth accent, eye catchlight | footstep dust, hair/cloth sway |
|
|
23
|
+
| night city | sign neon, puddle rim | steam wisps, window flicker |
|
|
24
|
+
| sports/table | felt green, chalk white, spot warm | ball trail, score flash |
|
|
25
|
+
| interior | warm pool amber, accent object hue | dust motes, lamp flicker |
|
|
26
|
+
| underwater | caustic teal, biolume cyan | bubbles, particle drift |
|
|
27
|
+
| space | laser magenta, engine white | debris drift, shield ripple |
|
|
28
|
+
|
|
29
|
+
## HUD style
|
|
30
|
+
|
|
31
|
+
DOM HUD only. Type color follows the look: warm cream on golden-hour, neon
|
|
32
|
+
cyan on night-city, high-contrast white on product-studio. Pause/menu layers
|
|
33
|
+
inherit the grade (a blur + dark grade band reads as one scene, a raw solid
|
|
34
|
+
overlay reads as a bug).
|
|
35
|
+
|
|
36
|
+
## Lighting story per template
|
|
37
|
+
|
|
38
|
+
| Template | Key story | Shadow story | Depth cue |
|
|
39
|
+
| --- | --- | --- | --- |
|
|
40
|
+
| `mini-game` | warm afternoon key 40° | grass-edge shadows toward camera | fog band at far platforms |
|
|
41
|
+
| `racing-starter` | low sun behind the car | long streaks across asphalt | haze silhouettes the horizon |
|
|
42
|
+
| `falling-blocks-starter` | soft top key | piece self-shadow on stack | board gloss reflection |
|
|
43
|
+
| `fighting-game` | overhead spot cones | rim shadows under both fighters | crowd fades to black |
|
|
44
|
+
| `character-controller` | daylight key 3/4 front | contact shadow under feet | fog to horizon on the run |
|
|
45
|
+
|
|
46
|
+
## Mood one-liners
|
|
47
|
+
|
|
48
|
+
- platformer: cheerful daylight, saturated palette, motion reads as play.
|
|
49
|
+
- racing: speed sells through low sun, glare, and horizon haze.
|
|
50
|
+
- fighting: drama lives in the dark crowd and the spot's hard edge.
|
|
51
|
+
- blocks: rhythm is the palette — every piece hue distinct at a glance.
|
|
52
|
+
- character: the silhouette is the gameplay; rim keeps it readable.
|