@aura3d/apps 1.3.3 → 1.4.1
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 +34 -0
- package/package.json +37 -5
- package/src/index.ts +0 -162
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @aura3d/apps
|
|
2
|
+
|
|
3
|
+
`@aura3d/apps` owns high-level Aura3D app workflow presets for asset viewers,
|
|
4
|
+
product configurators, material studios, scene showcases, and interactive
|
|
5
|
+
scenes.
|
|
6
|
+
|
|
7
|
+
## Public API
|
|
8
|
+
|
|
9
|
+
- `createA3DApp`: creates an app shell with an Aura3D `Engine`, optional
|
|
10
|
+
renderer, quality presets, workflow execution, diagnostics, and disposal.
|
|
11
|
+
- `A3D_APP_WORKFLOW_PRESETS`: the supported workflow preset IDs.
|
|
12
|
+
- `resolveA3DAppQualityPreset`: resolves draft, balanced, and production-sized
|
|
13
|
+
app quality settings.
|
|
14
|
+
- `renderWorkflow(...)`: runs one of the package workflow presets and renders it
|
|
15
|
+
when the app owns a canvas-backed renderer.
|
|
16
|
+
|
|
17
|
+
## Workflow Presets
|
|
18
|
+
|
|
19
|
+
- `asset-viewer`
|
|
20
|
+
- `product-configurator`
|
|
21
|
+
- `material-studio`
|
|
22
|
+
- `scene-showcase`
|
|
23
|
+
- `interactive-scene`
|
|
24
|
+
|
|
25
|
+
This package composes `@aura3d/core`, `@aura3d/rendering`, and
|
|
26
|
+
`@aura3d/workflows`. It is a workflow/app shell package, not the root
|
|
27
|
+
agent-authored `createAuraApp` safe API.
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
|
|
31
|
+
Use the package through its exported workflow/app APIs and keep public examples
|
|
32
|
+
bounded to the evidence for the workflow being rendered. Root public examples
|
|
33
|
+
should still import from `@aura3d/engine` unless the task explicitly targets
|
|
34
|
+
workflow internals.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/apps",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -11,9 +11,41 @@
|
|
|
11
11
|
"main": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@aura3d/
|
|
15
|
-
"@aura3d/
|
|
16
|
-
"@aura3d/
|
|
14
|
+
"@aura3d/core": "1.4.1",
|
|
15
|
+
"@aura3d/rendering": "1.4.1",
|
|
16
|
+
"@aura3d/workflows": "1.4.1"
|
|
17
17
|
},
|
|
18
|
-
"sideEffects": false
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"description": "High-level Aura3D app workflow presets for asset viewers, product configurators, material studios, scene showcases, and interactive scenes.",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"aura3d",
|
|
22
|
+
"3d",
|
|
23
|
+
"browser-3d",
|
|
24
|
+
"web-3d",
|
|
25
|
+
"typescript",
|
|
26
|
+
"3d-apps",
|
|
27
|
+
"app-workflows",
|
|
28
|
+
"asset-viewer",
|
|
29
|
+
"product-configurator",
|
|
30
|
+
"material-studio",
|
|
31
|
+
"scene-showcase",
|
|
32
|
+
"interactive-3d"
|
|
33
|
+
],
|
|
34
|
+
"homepage": "https://aura3d.auraone.ai",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/auraoneai/aura3d.git",
|
|
38
|
+
"directory": "packages/apps"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/auraoneai/aura3d/issues"
|
|
42
|
+
},
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"README.md",
|
|
49
|
+
"dist"
|
|
50
|
+
]
|
|
19
51
|
}
|
package/src/index.ts
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { Engine, type DiagnosticsSnapshot } from "@aura3d/core";
|
|
2
|
-
import { Renderer, type RenderDeviceDiagnostics, type RendererOptions } from "@aura3d/rendering";
|
|
3
|
-
import {
|
|
4
|
-
createAssetViewerWorkflow,
|
|
5
|
-
createInteractiveSceneWorkflow,
|
|
6
|
-
createMaterialStudioWorkflow,
|
|
7
|
-
createProductConfiguratorWorkflow,
|
|
8
|
-
createSceneShowcaseWorkflow,
|
|
9
|
-
type AssetViewerWorkflowOptions,
|
|
10
|
-
type A3DWorkflowResult,
|
|
11
|
-
type InteractiveSceneWorkflowOptions,
|
|
12
|
-
type MaterialStudioWorkflowOptions,
|
|
13
|
-
type ProductConfiguratorWorkflowOptions,
|
|
14
|
-
type SceneShowcaseWorkflowOptions
|
|
15
|
-
} from "@aura3d/workflows";
|
|
16
|
-
|
|
17
|
-
export type A3DAppQualityPreset = "draft" | "balanced" | "production";
|
|
18
|
-
export type A3DAppWorkflowPreset = "asset-viewer" | "product-configurator" | "material-studio" | "scene-showcase" | "interactive-scene";
|
|
19
|
-
|
|
20
|
-
export interface A3DAppQualitySettings {
|
|
21
|
-
readonly preset: A3DAppQualityPreset;
|
|
22
|
-
readonly width: number;
|
|
23
|
-
readonly height: number;
|
|
24
|
-
readonly antialias: boolean;
|
|
25
|
-
readonly preserveDrawingBuffer: boolean;
|
|
26
|
-
readonly targetFormat: "rgba8" | "rgba16f";
|
|
27
|
-
readonly diagnostics: readonly string[];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface A3DAppOptions {
|
|
31
|
-
readonly canvas?: HTMLCanvasElement | OffscreenCanvas;
|
|
32
|
-
readonly quality?: A3DAppQualityPreset;
|
|
33
|
-
readonly width?: number;
|
|
34
|
-
readonly height?: number;
|
|
35
|
-
readonly rendererFactory?: (options: RendererOptions) => Promise<A3DAppRendererLike>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface A3DAppRendererLike {
|
|
39
|
-
render(source: A3DWorkflowResult["source"], camera?: A3DWorkflowResult["camera"]): RenderDeviceDiagnostics;
|
|
40
|
-
dispose?(): void;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface A3DAppDiagnostics {
|
|
44
|
-
readonly appState: "ready" | "disposed";
|
|
45
|
-
readonly quality: A3DAppQualitySettings;
|
|
46
|
-
readonly workflowRuns: number;
|
|
47
|
-
readonly lastWorkflow?: A3DAppWorkflowPreset;
|
|
48
|
-
readonly lastRender?: RenderDeviceDiagnostics;
|
|
49
|
-
readonly engine: DiagnosticsSnapshot;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface A3DApp {
|
|
53
|
-
readonly engine: Engine;
|
|
54
|
-
readonly renderer?: A3DAppRendererLike;
|
|
55
|
-
readonly quality: A3DAppQualitySettings;
|
|
56
|
-
renderWorkflow(preset: "asset-viewer", options: AssetViewerWorkflowOptions): Promise<A3DWorkflowResult>;
|
|
57
|
-
renderWorkflow(preset: "product-configurator", options: ProductConfiguratorWorkflowOptions): Promise<A3DWorkflowResult>;
|
|
58
|
-
renderWorkflow(preset: "material-studio", options?: MaterialStudioWorkflowOptions): Promise<A3DWorkflowResult>;
|
|
59
|
-
renderWorkflow(preset: "scene-showcase", options?: SceneShowcaseWorkflowOptions): Promise<A3DWorkflowResult>;
|
|
60
|
-
renderWorkflow(preset: "interactive-scene", options?: InteractiveSceneWorkflowOptions): Promise<A3DWorkflowResult>;
|
|
61
|
-
renderWorkflow(preset: A3DAppWorkflowPreset, options?: unknown): Promise<A3DWorkflowResult>;
|
|
62
|
-
diagnostics(): A3DAppDiagnostics;
|
|
63
|
-
dispose(): Promise<void>;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export const A3D_APP_WORKFLOW_PRESETS: readonly A3DAppWorkflowPreset[] = [
|
|
67
|
-
"asset-viewer",
|
|
68
|
-
"product-configurator",
|
|
69
|
-
"material-studio",
|
|
70
|
-
"scene-showcase",
|
|
71
|
-
"interactive-scene"
|
|
72
|
-
] as const;
|
|
73
|
-
|
|
74
|
-
export function resolveA3DAppQualityPreset(preset: A3DAppQualityPreset = "balanced", overrides: Pick<A3DAppOptions, "width" | "height"> = {}): A3DAppQualitySettings {
|
|
75
|
-
const base = preset === "production"
|
|
76
|
-
? { width: 1600, height: 1000, antialias: true, preserveDrawingBuffer: true, targetFormat: "rgba16f" as const }
|
|
77
|
-
: preset === "draft"
|
|
78
|
-
? { width: 960, height: 540, antialias: false, preserveDrawingBuffer: false, targetFormat: "rgba8" as const }
|
|
79
|
-
: { width: 1280, height: 720, antialias: true, preserveDrawingBuffer: true, targetFormat: "rgba16f" as const };
|
|
80
|
-
return {
|
|
81
|
-
preset,
|
|
82
|
-
...base,
|
|
83
|
-
width: overrides.width ?? base.width,
|
|
84
|
-
height: overrides.height ?? base.height,
|
|
85
|
-
diagnostics: [
|
|
86
|
-
"quality-preset",
|
|
87
|
-
"workflow-presets",
|
|
88
|
-
"renderer-diagnostics",
|
|
89
|
-
"engine-diagnostics"
|
|
90
|
-
]
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export async function createA3DApp(options: A3DAppOptions = {}): Promise<A3DApp> {
|
|
95
|
-
const quality = resolveA3DAppQualityPreset(options.quality, options);
|
|
96
|
-
const engine = new Engine({ autoStart: false });
|
|
97
|
-
await engine.init();
|
|
98
|
-
const renderer = options.canvas
|
|
99
|
-
? await (options.rendererFactory ?? Renderer.create)({
|
|
100
|
-
backend: "webgl2",
|
|
101
|
-
canvas: options.canvas,
|
|
102
|
-
width: quality.width,
|
|
103
|
-
height: quality.height,
|
|
104
|
-
antialias: quality.antialias,
|
|
105
|
-
preserveDrawingBuffer: quality.preserveDrawingBuffer,
|
|
106
|
-
clearColor: [0.018, 0.02, 0.024, 1]
|
|
107
|
-
})
|
|
108
|
-
: undefined;
|
|
109
|
-
let disposed = false;
|
|
110
|
-
let workflowRuns = 0;
|
|
111
|
-
let lastWorkflow: A3DAppWorkflowPreset | undefined;
|
|
112
|
-
let lastRender: RenderDeviceDiagnostics | undefined;
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
engine,
|
|
116
|
-
renderer,
|
|
117
|
-
quality,
|
|
118
|
-
async renderWorkflow(preset: A3DAppWorkflowPreset, workflowOptions?: unknown): Promise<A3DWorkflowResult> {
|
|
119
|
-
if (disposed) throw new Error("A3D app has been disposed.");
|
|
120
|
-
const workflow = await createWorkflow(preset, workflowOptions);
|
|
121
|
-
workflowRuns += 1;
|
|
122
|
-
lastWorkflow = preset;
|
|
123
|
-
engine.diagnostics.increment(`workflow.${preset}.runs`);
|
|
124
|
-
if (renderer) {
|
|
125
|
-
lastRender = renderer.render(workflow.source, workflow.camera);
|
|
126
|
-
engine.diagnostics.gauge("renderer.drawCalls", lastRender.drawCalls);
|
|
127
|
-
}
|
|
128
|
-
return workflow;
|
|
129
|
-
},
|
|
130
|
-
diagnostics(): A3DAppDiagnostics {
|
|
131
|
-
return {
|
|
132
|
-
appState: disposed ? "disposed" : "ready",
|
|
133
|
-
quality,
|
|
134
|
-
workflowRuns,
|
|
135
|
-
...(lastWorkflow ? { lastWorkflow } : {}),
|
|
136
|
-
...(lastRender ? { lastRender } : {}),
|
|
137
|
-
engine: engine.diagnostics.snapshot()
|
|
138
|
-
};
|
|
139
|
-
},
|
|
140
|
-
async dispose(): Promise<void> {
|
|
141
|
-
if (disposed) return;
|
|
142
|
-
disposed = true;
|
|
143
|
-
renderer?.dispose?.();
|
|
144
|
-
await engine.dispose();
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
async function createWorkflow(preset: A3DAppWorkflowPreset, options: unknown): Promise<A3DWorkflowResult> {
|
|
150
|
-
switch (preset) {
|
|
151
|
-
case "asset-viewer":
|
|
152
|
-
return createAssetViewerWorkflow(options as AssetViewerWorkflowOptions);
|
|
153
|
-
case "product-configurator":
|
|
154
|
-
return createProductConfiguratorWorkflow(options as ProductConfiguratorWorkflowOptions);
|
|
155
|
-
case "material-studio":
|
|
156
|
-
return createMaterialStudioWorkflow(options as MaterialStudioWorkflowOptions | undefined);
|
|
157
|
-
case "scene-showcase":
|
|
158
|
-
return createSceneShowcaseWorkflow(options as SceneShowcaseWorkflowOptions | undefined);
|
|
159
|
-
case "interactive-scene":
|
|
160
|
-
return createInteractiveSceneWorkflow(options as InteractiveSceneWorkflowOptions | undefined);
|
|
161
|
-
}
|
|
162
|
-
}
|