create-aura3d 1.5.2 → 2.0.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 +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/showcase-spec-evidence.js +5 -1
- package/dist/showcase-spec-evidence.js.map +1 -1
- package/dist/showcase-spec-game-geometry-extractor.d.ts +8 -1
- package/dist/showcase-spec-game-geometry-extractor.d.ts.map +1 -1
- package/dist/showcase-spec-game-geometry-extractor.js +191 -31
- package/dist/showcase-spec-game-geometry-extractor.js.map +1 -1
- package/dist/showcase-spec-game-template-evidence.d.ts.map +1 -1
- package/dist/showcase-spec-game-template-evidence.js +7 -0
- package/dist/showcase-spec-game-template-evidence.js.map +1 -1
- package/dist/showcase-spec-parser.js +1 -1
- package/dist/showcase-spec-parser.js.map +1 -1
- package/dist/showcase-spec-types.d.ts +50 -0
- package/dist/showcase-spec-types.d.ts.map +1 -1
- package/package.json +2 -2
- package/templates/animation-channel/package.json +1 -1
- package/templates/animation-channel/src/experimental/README.md +1 -1
- package/templates/animation-channel/tests/storyboard-playback.spec.ts +2 -0
- package/templates/animation-studio/package.json +2 -5
- package/templates/animation-studio/scripts/asset-motion-probe.ts +1 -1
- package/templates/animation-studio/scripts/build-characters.ts +1 -1
- package/templates/animation-studio/scripts/motion-evidence.ts +1 -1
- package/templates/animation-studio/scripts/render-core.ts +4 -2
- package/templates/animation-studio/scripts/render-live.ts +3 -1
- package/templates/animation-studio/scripts/validate-characters.ts +0 -0
- package/templates/animation-studio/src/scene-player.ts +2 -2
- package/templates/character-controller/README.md +15 -2
- package/templates/character-controller/aura.assets.json +7 -0
- package/templates/character-controller/package.json +3 -3
- package/templates/character-controller/src/aura-assets.ts +3 -0
- package/templates/cinematic-scene/aura.assets.json +31 -0
- package/templates/cinematic-scene/package.json +1 -1
- package/templates/episode-builder/aura.assets.json +7 -0
- package/templates/episode-builder/package.json +1 -1
- package/templates/episode-builder/tests/route-health.spec.ts +2 -2
- package/templates/falling-blocks-starter/aura.assets.json +37 -0
- package/templates/falling-blocks-starter/package.json +2 -1
- package/templates/falling-blocks-starter/tests/playable.spec.ts +2 -3
- package/templates/falling-blocks-starter/tsconfig.json +1 -1
- package/templates/fighting-game/aura.assets.json +7 -0
- package/templates/fighting-game/package.json +1 -1
- package/templates/fighting-game/src/main.ts +5 -7
- package/templates/fighting-game/tests/gameplay-smoke.spec.ts +4 -1
- package/templates/fighting-game/tests/route-health.spec.ts +8 -2
- package/templates/mini-game/README.md +3 -2
- package/templates/mini-game/aura.assets.json +31 -0
- package/templates/mini-game/package.json +1 -1
- package/templates/mini-game/src/aura-assets.ts +1 -1
- package/templates/mini-game/src/main.ts +69 -141
- package/templates/product-viewer/README.md +7 -5
- package/templates/product-viewer/aura.assets.json +34 -0
- package/templates/product-viewer/index.html +1 -1
- package/templates/product-viewer/package.json +1 -1
- package/templates/product-viewer/src/aura-assets.ts +1 -1
- package/templates/product-viewer/src/main.ts +29 -23
- package/templates/product-viewer/tests/route-health.spec.ts +2 -2
- package/templates/product-viewer/tests/screenshot.spec.ts +2 -2
- package/templates/prompt-animation-channel/aura.assets.json +7 -0
- package/templates/prompt-animation-channel/package.json +1 -1
- package/templates/prompt-animation-channel/src/main.ts +4 -66
- package/templates/prompt-animation-channel/src/render-plan.ts +1 -1
- package/templates/prompt-animation-channel/tests/route-health.spec.ts +4 -2
- package/templates/prompt-animation-channel/tests/storyboard-playback.spec.ts +13 -2
- package/templates/racing-starter/aura.assets.json +64 -0
- package/templates/racing-starter/package.json +2 -1
- package/templates/racing-starter/src/main.ts +2 -2
- package/templates/racing-starter/tsconfig.json +1 -1
- package/templates/three-compat-architecture-interior/aura.assets.json +7 -0
- package/templates/three-compat-architecture-interior/package.json +1 -1
- package/templates/three-compat-architecture-interior/src/aura-assets.ts +3 -0
- package/templates/three-compat-asset-inspector/aura.assets.json +7 -0
- package/templates/three-compat-asset-inspector/package.json +1 -1
- package/templates/three-compat-asset-inspector/src/aura-assets.ts +3 -0
- package/templates/three-compat-character-viewer/aura.assets.json +7 -0
- package/templates/three-compat-character-viewer/package.json +1 -1
- package/templates/three-compat-character-viewer/src/aura-assets.ts +3 -0
- package/templates/three-compat-custom-threejs-migration/aura.assets.json +7 -0
- package/templates/three-compat-custom-threejs-migration/package.json +1 -1
- package/templates/three-compat-custom-threejs-migration/src/aura-assets.ts +3 -0
- package/templates/three-compat-large-scene/aura.assets.json +7 -0
- package/templates/three-compat-large-scene/package.json +1 -1
- package/templates/three-compat-large-scene/src/aura-assets.ts +3 -0
- package/templates/three-compat-material-authoring/aura.assets.json +7 -0
- package/templates/three-compat-material-authoring/package.json +1 -1
- package/templates/three-compat-material-authoring/src/aura-assets.ts +3 -0
- package/templates/three-compat-postprocess-scene/aura.assets.json +7 -0
- package/templates/three-compat-postprocess-scene/package.json +1 -1
- package/templates/three-compat-postprocess-scene/src/aura-assets.ts +3 -0
- package/templates/three-compat-premium-product-viewer/aura.assets.json +7 -0
- package/templates/three-compat-premium-product-viewer/package.json +1 -1
- package/templates/three-compat-premium-product-viewer/src/aura-assets.ts +3 -0
|
@@ -133,7 +133,7 @@ const app = createAuraApp("#app", {
|
|
|
133
133
|
)
|
|
134
134
|
.add(
|
|
135
135
|
primitives
|
|
136
|
-
.sphere({ name: "glow stones primitive fallback", material: material.emissive({ color: "#ffe18e",
|
|
136
|
+
.sphere({ name: "glow stones primitive fallback", material: material.emissive({ color: "#ffe18e", emissive: "#ffe18e", emissiveIntensity: 0.42 }) })
|
|
137
137
|
.position(0.18, 0.16, 0.28)
|
|
138
138
|
.scale([0.16, 0.08, 0.16])
|
|
139
139
|
)
|
|
@@ -143,73 +143,11 @@ const app = createAuraApp("#app", {
|
|
|
143
143
|
.position(-0.38, 0.2, 0.18)
|
|
144
144
|
.scale([0.12, 0.24, 0.04])
|
|
145
145
|
)
|
|
146
|
-
.add(labels.hud(
|
|
146
|
+
.add(labels.hud(firstCaption?.text ?? firstStoryboardShot?.storyBeat ?? "Aura3D animation channel"))
|
|
147
147
|
.add(lights.studio({ intensity: 1.2 }))
|
|
148
148
|
.add(effects.bloom({ intensity: 0.18, color: "#7de2ff" }))
|
|
149
149
|
.camera(camera.perspective({ position: [0, 1.4, 4.2], target: [0, 0.7, 0], fov: 42 })),
|
|
150
|
-
diagnostics: true
|
|
151
|
-
metadata: {
|
|
152
|
-
contractId: episodeContractId,
|
|
153
|
-
template: "prompt-animation-channel",
|
|
154
|
-
runtimePlayback: "app.onFrame updates runtime nodes; createAuraApp is called once",
|
|
155
|
-
renderQueueItems: renderPlan.items.length,
|
|
156
|
-
renderPackageId: renderOutputPackage.packageId,
|
|
157
|
-
storyBibleId: storyBible.episodeId,
|
|
158
|
-
storyBibleProps: storyBible.props.map((prop) => prop.id),
|
|
159
|
-
styleGuide: storyBible.styleGuide.visualStyle,
|
|
160
|
-
shotListCount: storyBible.shotList.length,
|
|
161
|
-
playbackProbeSamples: playbackProbeSamples.map((sample) => ({
|
|
162
|
-
time: sample.time,
|
|
163
|
-
frame: sample.frame,
|
|
164
|
-
shotId: sample.shotId,
|
|
165
|
-
captionId: sample.captionId,
|
|
166
|
-
nodeUpdateCount: sample.nodeUpdates.length
|
|
167
|
-
})),
|
|
168
|
-
thumbnailCaptureSceneStateId: thumbnailCapture.sourceSceneStateId,
|
|
169
|
-
thumbnailCaptureTime: thumbnailCapture.time,
|
|
170
|
-
thumbnailCaptionId: thumbnailCaption?.captionId,
|
|
171
|
-
deterministicCaptureItems: renderPlan.items.filter((item) => item.sourceSceneState).length,
|
|
172
|
-
deterministicScreenshotFixtures,
|
|
173
|
-
typedAssets: typedAnimationAssetSummary,
|
|
174
|
-
requiredTypedAssets: requiredAnimationCharacterAssets,
|
|
175
|
-
missingTypedAssets: missingAnimationCharacterAssets,
|
|
176
|
-
assetCommands: publicAnimationAssetInstructions,
|
|
177
|
-
bridgeIssueCount: bridgeIssues.length,
|
|
178
|
-
bridgeSampleAtThumbnail: {
|
|
179
|
-
time: bridgeSampleAtThumbnail.time,
|
|
180
|
-
frame: bridgeSampleAtThumbnail.frame,
|
|
181
|
-
shotId: bridgeSampleAtThumbnail.shot?.shotId,
|
|
182
|
-
dialogueLineId: bridgeSampleAtThumbnail.dialogue?.lineId
|
|
183
|
-
},
|
|
184
|
-
promptAnimationEvidence: {
|
|
185
|
-
publishReady: promptAnimationEvidence.publishReady,
|
|
186
|
-
assetStatus: promptAnimationEvidence.assetStatus,
|
|
187
|
-
captions: promptAnimationEvidence.captions,
|
|
188
|
-
visemes: promptAnimationEvidence.visemes,
|
|
189
|
-
audio: promptAnimationEvidence.audio,
|
|
190
|
-
deterministicCapture: promptAnimationEvidence.deterministicCapture,
|
|
191
|
-
routeHealth: promptAnimationEvidence.routeHealth
|
|
192
|
-
},
|
|
193
|
-
publishReadiness: {
|
|
194
|
-
ready: publishReadiness.ready,
|
|
195
|
-
issueCount: publishReadiness.issues.length
|
|
196
|
-
},
|
|
197
|
-
captionTimingProof: {
|
|
198
|
-
status: captionTimingProof.status,
|
|
199
|
-
maxDriftFrames: captionTimingProof.maxDriftFrames,
|
|
200
|
-
coveredLineIds: captionTimingProof.coveredLineIds
|
|
201
|
-
},
|
|
202
|
-
captionFrameSyncSourceProof,
|
|
203
|
-
visemeFrameSyncSourceProof,
|
|
204
|
-
sampleRenderSourceWorkflow,
|
|
205
|
-
accessibilityProof: {
|
|
206
|
-
captions: accessibilityProofMetadata?.captions.status,
|
|
207
|
-
reducedMotion: accessibilityProofMetadata?.reducedMotion.status,
|
|
208
|
-
highContrast: accessibilityProofMetadata?.highContrast.status
|
|
209
|
-
},
|
|
210
|
-
primitiveMouthRuntimeExample,
|
|
211
|
-
glbVisemeRuntimeExample
|
|
212
|
-
}
|
|
150
|
+
diagnostics: true
|
|
213
151
|
});
|
|
214
152
|
|
|
215
153
|
window.__AURA3D_ANIMATION_TEMPLATE__ = {
|
|
@@ -282,7 +220,7 @@ function createMouthCard(id: "miko:mouth" | "luma:mouth", name: string, position
|
|
|
282
220
|
return primitives
|
|
283
221
|
.box({
|
|
284
222
|
name: `${name} primitive mouth card`,
|
|
285
|
-
material: material.emissive({ color,
|
|
223
|
+
material: material.emissive({ color, emissive: color, emissiveIntensity: 0.32 })
|
|
286
224
|
})
|
|
287
225
|
.position(position[0], position[1], position[2])
|
|
288
226
|
.scale([0.22, 0.035, 0.025])
|
|
@@ -48,7 +48,7 @@ export const audioStemManifest = createAudioStemManifest({
|
|
|
48
48
|
stems: [
|
|
49
49
|
...episode.dialogueTrack.lines.map((line) => ({
|
|
50
50
|
id: `audio:${line.lineId}`,
|
|
51
|
-
role: "dialogue",
|
|
51
|
+
role: "dialogue" as const,
|
|
52
52
|
path: line.audioFile ?? `assets/audio/en/${line.lineId}.wav`,
|
|
53
53
|
startTime: line.startTime,
|
|
54
54
|
duration: line.endTime - line.startTime,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { expect, test } from "@playwright/test";
|
|
2
2
|
|
|
3
|
+
test.setTimeout(90_000);
|
|
4
|
+
|
|
3
5
|
test("animation channel route loads", async ({ page }) => {
|
|
4
6
|
await page.goto("/");
|
|
5
|
-
await
|
|
7
|
+
await page.waitForFunction(() => Boolean((window as any).__AURA3D_ANIMATION_TEMPLATE__));
|
|
8
|
+
await expect(page.locator("canvas")).toBeVisible();
|
|
6
9
|
});
|
|
7
|
-
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { expect, test } from "@playwright/test";
|
|
2
2
|
|
|
3
|
+
test.setTimeout(90_000);
|
|
4
|
+
|
|
3
5
|
test("animation channel storyboard caption renders", async ({ page }) => {
|
|
4
6
|
await page.goto("/");
|
|
5
|
-
await
|
|
7
|
+
await page.waitForFunction(() => Boolean((window as any).__AURA3D_ANIMATION_TEMPLATE__));
|
|
8
|
+
const caption = page.locator("#caption-overlay");
|
|
9
|
+
await expect(caption).toBeVisible();
|
|
10
|
+
await expect(caption).not.toHaveText("");
|
|
11
|
+
const captionIds = await page.evaluate(() => (window as any).__AURA3D_ANIMATION_TEMPLATE__?.captionIds ?? []);
|
|
12
|
+
expect(captionIds.length).toBeGreaterThan(0);
|
|
6
13
|
});
|
|
7
14
|
|
|
8
15
|
test("storyboard playback, character performance, caption timing, cuts, and nonblank animation frames are sourced", async ({
|
|
9
16
|
page
|
|
10
17
|
}) => {
|
|
11
18
|
await page.goto("/");
|
|
19
|
+
await page.waitForFunction(() => Boolean((window as any).__AURA3D_ANIMATION_TEMPLATE__));
|
|
12
20
|
|
|
13
21
|
const routeProof = (await page.evaluate(() => {
|
|
14
22
|
const template = (window as unknown as {
|
|
@@ -69,6 +77,9 @@ test("storyboard playback, character performance, caption timing, cuts, and nonb
|
|
|
69
77
|
expect(routeProof.bodyShotCount).toBe("3");
|
|
70
78
|
expect(routeProof.bodyCaptionCount).toBe("6");
|
|
71
79
|
|
|
72
|
-
const
|
|
80
|
+
const cdp = await page.context().newCDPSession(page);
|
|
81
|
+
const capture = await cdp.send("Page.captureScreenshot", { format: "png", fromSurface: true });
|
|
82
|
+
await cdp.detach();
|
|
83
|
+
const screenshot = Buffer.from(capture.data, "base64");
|
|
73
84
|
expect(screenshot.byteLength).toBeGreaterThan(2048);
|
|
74
85
|
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "aura3d.assets/1.0",
|
|
3
|
+
"assetBasePath": "/aura-assets/",
|
|
4
|
+
"outputDir": "public/aura-assets",
|
|
5
|
+
"typegen": "src/aura-assets.ts",
|
|
6
|
+
"assets": [
|
|
7
|
+
{
|
|
8
|
+
"id": "carModel",
|
|
9
|
+
"type": "model",
|
|
10
|
+
"format": "glb",
|
|
11
|
+
"source": "public/aura-assets/showcaseCleanSportsCar.1c69283f.glb",
|
|
12
|
+
"outputPath": "public/aura-assets/showcaseCleanSportsCar.1c69283f.glb",
|
|
13
|
+
"url": "/aura-assets/showcaseCleanSportsCar.1c69283f.glb",
|
|
14
|
+
"hash": "sha256-1c69283fa2b3fb96b3dc3418f2d0dede842e6984f1776a8ca00b099836fc9c14",
|
|
15
|
+
"sizeBytes": 357064,
|
|
16
|
+
"bounds": [
|
|
17
|
+
3.455,
|
|
18
|
+
3.428,
|
|
19
|
+
2.206
|
|
20
|
+
],
|
|
21
|
+
"materials": [
|
|
22
|
+
"Material.001",
|
|
23
|
+
"Material.002",
|
|
24
|
+
"Material.003",
|
|
25
|
+
"Material.004"
|
|
26
|
+
],
|
|
27
|
+
"animations": [],
|
|
28
|
+
"textures": [],
|
|
29
|
+
"thumbnailUrl": "/aura-assets/showcaseCleanSportsCar.thumb.svg",
|
|
30
|
+
"license": "CC-BY-4.0",
|
|
31
|
+
"author": "JUFF",
|
|
32
|
+
"sourcePage": "https://huggingface.co/datasets/allenai/objaverse/blob/main/glbs/000-008/23dfdeb55dc24970b36065afaab7a8a5.glb"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "trackModel",
|
|
36
|
+
"type": "model",
|
|
37
|
+
"format": "glb",
|
|
38
|
+
"source": "public/aura-assets/showcaseReadableKartCircuit.5cbb912e.glb",
|
|
39
|
+
"outputPath": "public/aura-assets/showcaseReadableKartCircuit.5cbb912e.glb",
|
|
40
|
+
"url": "/aura-assets/showcaseReadableKartCircuit.5cbb912e.glb",
|
|
41
|
+
"hash": "sha256-5cbb912e511e5e82363c347210096d59dd3007db12c363fd0c9f07919f5ebbd0",
|
|
42
|
+
"sizeBytes": 1641744,
|
|
43
|
+
"bounds": [
|
|
44
|
+
24.651,
|
|
45
|
+
24.647,
|
|
46
|
+
2.073
|
|
47
|
+
],
|
|
48
|
+
"materials": [
|
|
49
|
+
"LINEAS",
|
|
50
|
+
"gris",
|
|
51
|
+
"verde",
|
|
52
|
+
"rojo",
|
|
53
|
+
"azul",
|
|
54
|
+
"amarillo"
|
|
55
|
+
],
|
|
56
|
+
"animations": [],
|
|
57
|
+
"textures": [],
|
|
58
|
+
"thumbnailUrl": "/aura-assets/showcaseReadableKartCircuit.thumb.svg",
|
|
59
|
+
"license": "CC-BY-4.0",
|
|
60
|
+
"author": "Puendiz",
|
|
61
|
+
"sourcePage": "https://huggingface.co/datasets/allenai/objaverse/blob/main/glbs/000-034/2fc89fcd8c034bc9ba05eac24c9bf537.glb"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
"test": "playwright test tests/playable.spec.ts --workers=1"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@aura3d/engine": "
|
|
14
|
+
"@aura3d/engine": "2.0.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
+
"@types/node": "^22.15.30",
|
|
17
18
|
"@playwright/test": "^1.52.0",
|
|
18
19
|
"typescript": "^5.8.3",
|
|
19
20
|
"vite": "^7.3.2"
|
|
@@ -120,7 +120,7 @@ const raceEventLabels: string[] = [];
|
|
|
120
120
|
app.onFrame(({ dt }: { readonly dt: number }) => {
|
|
121
121
|
input.update(dt);
|
|
122
122
|
if (input.pressed("reset")) {
|
|
123
|
-
racing.reset(0
|
|
123
|
+
racing.reset(0);
|
|
124
124
|
routeEvents.push({ type: "reset", label: "reset" });
|
|
125
125
|
raceEventLabels.push("reset");
|
|
126
126
|
objective = "Clear six gates across a 3-lap typed-asset route.";
|
|
@@ -195,7 +195,7 @@ function buildScene() {
|
|
|
195
195
|
function routeRibbonNodes(): AuraNodeInput[] {
|
|
196
196
|
const asphalt = material.pbr({ color: "#5a6570", roughness: 0.78, metallic: 0.03 });
|
|
197
197
|
return routeRibbonSegments.map(([name, position, scale]) =>
|
|
198
|
-
primitives.box({ name, material: asphalt }).position(
|
|
198
|
+
primitives.box({ name, material: asphalt }).position(position[0], position[1], position[2]).scale(scale)
|
|
199
199
|
);
|
|
200
200
|
}
|
|
201
201
|
|