@aura3d/assets 1.0.6
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 +17 -0
- package/dist/AdvancedAssetCorpus.d.ts +124 -0
- package/dist/AdvancedAssetCorpus.d.ts.map +1 -0
- package/dist/AdvancedAssetCorpus.js +266 -0
- package/dist/AdvancedAssetCorpus.js.map +1 -0
- package/dist/AssetBundleCacheFixtures.d.ts +62 -0
- package/dist/AssetBundleCacheFixtures.d.ts.map +1 -0
- package/dist/AssetBundleCacheFixtures.js +222 -0
- package/dist/AssetBundleCacheFixtures.js.map +1 -0
- package/dist/AssetCache.d.ts +21 -0
- package/dist/AssetCache.d.ts.map +1 -0
- package/dist/AssetCache.js +54 -0
- package/dist/AssetCache.js.map +1 -0
- package/dist/AssetCompatibility.d.ts +54 -0
- package/dist/AssetCompatibility.d.ts.map +1 -0
- package/dist/AssetCompatibility.js +122 -0
- package/dist/AssetCompatibility.js.map +1 -0
- package/dist/AssetCorpus.d.ts +88 -0
- package/dist/AssetCorpus.d.ts.map +1 -0
- package/dist/AssetCorpus.js +215 -0
- package/dist/AssetCorpus.js.map +1 -0
- package/dist/AssetDependencyGraph.d.ts +12 -0
- package/dist/AssetDependencyGraph.d.ts.map +1 -0
- package/dist/AssetDependencyGraph.js +66 -0
- package/dist/AssetDependencyGraph.js.map +1 -0
- package/dist/AssetHandle.d.ts +26 -0
- package/dist/AssetHandle.d.ts.map +1 -0
- package/dist/AssetHandle.js +53 -0
- package/dist/AssetHandle.js.map +1 -0
- package/dist/AssetImportPreflight.d.ts +43 -0
- package/dist/AssetImportPreflight.d.ts.map +1 -0
- package/dist/AssetImportPreflight.js +117 -0
- package/dist/AssetImportPreflight.js.map +1 -0
- package/dist/AssetInspection.d.ts +183 -0
- package/dist/AssetInspection.d.ts.map +1 -0
- package/dist/AssetInspection.js +397 -0
- package/dist/AssetInspection.js.map +1 -0
- package/dist/AssetLoader.d.ts +26 -0
- package/dist/AssetLoader.d.ts.map +1 -0
- package/dist/AssetLoader.js +12 -0
- package/dist/AssetLoader.js.map +1 -0
- package/dist/AssetManager.d.ts +37 -0
- package/dist/AssetManager.d.ts.map +1 -0
- package/dist/AssetManager.js +161 -0
- package/dist/AssetManager.js.map +1 -0
- package/dist/AssetRegistry.d.ts +10 -0
- package/dist/AssetRegistry.d.ts.map +1 -0
- package/dist/AssetRegistry.js +34 -0
- package/dist/AssetRegistry.js.map +1 -0
- package/dist/AssetRenderDefaults.d.ts +13 -0
- package/dist/AssetRenderDefaults.d.ts.map +1 -0
- package/dist/AssetRenderDefaults.js +23 -0
- package/dist/AssetRenderDefaults.js.map +1 -0
- package/dist/AudioLoader.d.ts +17 -0
- package/dist/AudioLoader.d.ts.map +1 -0
- package/dist/AudioLoader.js +23 -0
- package/dist/AudioLoader.js.map +1 -0
- package/dist/BlenderExportValidation.d.ts +64 -0
- package/dist/BlenderExportValidation.d.ts.map +1 -0
- package/dist/BlenderExportValidation.js +143 -0
- package/dist/BlenderExportValidation.js.map +1 -0
- package/dist/CarConceptMaterialStability.d.ts +28 -0
- package/dist/CarConceptMaterialStability.d.ts.map +1 -0
- package/dist/CarConceptMaterialStability.js +1308 -0
- package/dist/CarConceptMaterialStability.js.map +1 -0
- package/dist/EXRLoader.d.ts +2 -0
- package/dist/EXRLoader.d.ts.map +1 -0
- package/dist/EXRLoader.js +2 -0
- package/dist/EXRLoader.js.map +1 -0
- package/dist/ExternalParityGLTFCorpus.d.ts +39 -0
- package/dist/ExternalParityGLTFCorpus.d.ts.map +1 -0
- package/dist/ExternalParityGLTFCorpus.js +32 -0
- package/dist/ExternalParityGLTFCorpus.js.map +1 -0
- package/dist/GLTFAnimationRuntime.d.ts +243 -0
- package/dist/GLTFAnimationRuntime.d.ts.map +1 -0
- package/dist/GLTFAnimationRuntime.js +954 -0
- package/dist/GLTFAnimationRuntime.js.map +1 -0
- package/dist/GLTFCompressionDecoders.d.ts +42 -0
- package/dist/GLTFCompressionDecoders.d.ts.map +1 -0
- package/dist/GLTFCompressionDecoders.js +99 -0
- package/dist/GLTFCompressionDecoders.js.map +1 -0
- package/dist/GLTFExtensionSupport.d.ts +33 -0
- package/dist/GLTFExtensionSupport.d.ts.map +1 -0
- package/dist/GLTFExtensionSupport.js +85 -0
- package/dist/GLTFExtensionSupport.js.map +1 -0
- package/dist/GLTFLoader.d.ts +361 -0
- package/dist/GLTFLoader.d.ts.map +1 -0
- package/dist/GLTFLoader.js +2735 -0
- package/dist/GLTFLoader.js.map +1 -0
- package/dist/GLTFRenderResources.d.ts +162 -0
- package/dist/GLTFRenderResources.d.ts.map +1 -0
- package/dist/GLTFRenderResources.js +1684 -0
- package/dist/GLTFRenderResources.js.map +1 -0
- package/dist/HDRLoader.d.ts +2 -0
- package/dist/HDRLoader.d.ts.map +1 -0
- package/dist/HDRLoader.js +2 -0
- package/dist/HDRLoader.js.map +1 -0
- package/dist/ImageLoader.d.ts +15 -0
- package/dist/ImageLoader.d.ts.map +1 -0
- package/dist/ImageLoader.js +36 -0
- package/dist/ImageLoader.js.map +1 -0
- package/dist/ImportPipeline.d.ts +39 -0
- package/dist/ImportPipeline.d.ts.map +1 -0
- package/dist/ImportPipeline.js +105 -0
- package/dist/ImportPipeline.js.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts +9 -0
- package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -0
- package/dist/KTX2BasisTextureTranscoder.js +178 -0
- package/dist/KTX2BasisTextureTranscoder.js.map +1 -0
- package/dist/LoadContext.d.ts +20 -0
- package/dist/LoadContext.d.ts.map +1 -0
- package/dist/LoadContext.js +42 -0
- package/dist/LoadContext.js.map +1 -0
- package/dist/MaterialLoader.d.ts +17 -0
- package/dist/MaterialLoader.d.ts.map +1 -0
- package/dist/MaterialLoader.js +138 -0
- package/dist/MaterialLoader.js.map +1 -0
- package/dist/MeshOptimization.d.ts +20 -0
- package/dist/MeshOptimization.d.ts.map +1 -0
- package/dist/MeshOptimization.js +65 -0
- package/dist/MeshOptimization.js.map +1 -0
- package/dist/OBJLoader.d.ts +13 -0
- package/dist/OBJLoader.d.ts.map +1 -0
- package/dist/OBJLoader.js +492 -0
- package/dist/OBJLoader.js.map +1 -0
- package/dist/SceneAnalysisFixtures.d.ts +100 -0
- package/dist/SceneAnalysisFixtures.d.ts.map +1 -0
- package/dist/SceneAnalysisFixtures.js +331 -0
- package/dist/SceneAnalysisFixtures.js.map +1 -0
- package/dist/SceneLoader.d.ts +27 -0
- package/dist/SceneLoader.d.ts.map +1 -0
- package/dist/SceneLoader.js +40 -0
- package/dist/SceneLoader.js.map +1 -0
- package/dist/ShaderLoader.d.ts +12 -0
- package/dist/ShaderLoader.d.ts.map +1 -0
- package/dist/ShaderLoader.js +18 -0
- package/dist/ShaderLoader.js.map +1 -0
- package/dist/TextureLoader.d.ts +16 -0
- package/dist/TextureLoader.d.ts.map +1 -0
- package/dist/TextureLoader.js +17 -0
- package/dist/TextureLoader.js.map +1 -0
- package/dist/TexturePipeline.d.ts +24 -0
- package/dist/TexturePipeline.d.ts.map +1 -0
- package/dist/TexturePipeline.js +64 -0
- package/dist/TexturePipeline.js.map +1 -0
- package/dist/TextureStreaming.d.ts +10 -0
- package/dist/TextureStreaming.d.ts.map +1 -0
- package/dist/TextureStreaming.js +11 -0
- package/dist/TextureStreaming.js.map +1 -0
- package/dist/WorkerAssetJobs.d.ts +18 -0
- package/dist/WorkerAssetJobs.d.ts.map +1 -0
- package/dist/WorkerAssetJobs.js +37 -0
- package/dist/WorkerAssetJobs.js.map +1 -0
- package/dist/advanced-gallery/index.d.ts +3 -0
- package/dist/advanced-gallery/index.d.ts.map +1 -0
- package/dist/advanced-gallery/index.js +2 -0
- package/dist/advanced-gallery/index.js.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts +3 -0
- package/dist/asset-corpus/GLTFSceneLoader.d.ts.map +1 -0
- package/dist/asset-corpus/GLTFSceneLoader.js +2 -0
- package/dist/asset-corpus/GLTFSceneLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts +89 -0
- package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js +116 -0
- package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js +3 -0
- package/dist/asset-corpus/ProductionAssetPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +65 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +110 -0
- package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts +8 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionHDRTextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionKTX2TextureLoader.js.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts +7 -0
- package/dist/asset-corpus/ProductionTextureLoader.d.ts.map +1 -0
- package/dist/asset-corpus/ProductionTextureLoader.js +2 -0
- package/dist/asset-corpus/ProductionTextureLoader.js.map +1 -0
- package/dist/asset-corpus/index.d.ts +10 -0
- package/dist/asset-corpus/index.d.ts.map +1 -0
- package/dist/asset-corpus/index.js +8 -0
- package/dist/asset-corpus/index.js.map +1 -0
- package/dist/browser-index.d.ts +48 -0
- package/dist/browser-index.d.ts.map +1 -0
- package/dist/browser-index.js +26 -0
- package/dist/browser-index.js.map +1 -0
- package/dist/createRenderableScene.d.ts +23 -0
- package/dist/createRenderableScene.d.ts.map +1 -0
- package/dist/createRenderableScene.js +94 -0
- package/dist/createRenderableScene.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loadRenderableAsset.d.ts +16 -0
- package/dist/loadRenderableAsset.d.ts.map +1 -0
- package/dist/loadRenderableAsset.js +50 -0
- package/dist/loadRenderableAsset.js.map +1 -0
- package/dist/loaders/CubeTextureLoader.d.ts +4 -0
- package/dist/loaders/CubeTextureLoader.d.ts.map +1 -0
- package/dist/loaders/CubeTextureLoader.js +9 -0
- package/dist/loaders/CubeTextureLoader.js.map +1 -0
- package/dist/loaders/EXRLoader.d.ts +4 -0
- package/dist/loaders/EXRLoader.d.ts.map +1 -0
- package/dist/loaders/EXRLoader.js +10 -0
- package/dist/loaders/EXRLoader.js.map +1 -0
- package/dist/loaders/HDRLoader.d.ts +4 -0
- package/dist/loaders/HDRLoader.d.ts.map +1 -0
- package/dist/loaders/HDRLoader.js +7 -0
- package/dist/loaders/HDRLoader.js.map +1 -0
- package/dist/loaders/KTX2Loader.d.ts +4 -0
- package/dist/loaders/KTX2Loader.d.ts.map +1 -0
- package/dist/loaders/KTX2Loader.js +7 -0
- package/dist/loaders/KTX2Loader.js.map +1 -0
- package/dist/loaders/LoaderDiagnostics.d.ts +18 -0
- package/dist/loaders/LoaderDiagnostics.d.ts.map +1 -0
- package/dist/loaders/LoaderDiagnostics.js +18 -0
- package/dist/loaders/LoaderDiagnostics.js.map +1 -0
- package/dist/loaders/MTLLoader.d.ts +10 -0
- package/dist/loaders/MTLLoader.d.ts.map +1 -0
- package/dist/loaders/MTLLoader.js +14 -0
- package/dist/loaders/MTLLoader.js.map +1 -0
- package/dist/loaders/OBJLoader.d.ts +12 -0
- package/dist/loaders/OBJLoader.d.ts.map +1 -0
- package/dist/loaders/OBJLoader.js +16 -0
- package/dist/loaders/OBJLoader.js.map +1 -0
- package/dist/loaders/TextureLoader.d.ts +6 -0
- package/dist/loaders/TextureLoader.d.ts.map +1 -0
- package/dist/loaders/TextureLoader.js +11 -0
- package/dist/loaders/TextureLoader.js.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts +10 -0
- package/dist/loaders/ThreeCompatGLTFLoader.d.ts.map +1 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js +13 -0
- package/dist/loaders/ThreeCompatGLTFLoader.js.map +1 -0
- package/dist/loaders/index.d.ts +15 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +10 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts +34 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js +16 -0
- package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts +29 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts.map +1 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js +33 -0
- package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js.map +1 -0
- package/dist/threejs-example-parity/index.d.ts +20 -0
- package/dist/threejs-example-parity/index.d.ts.map +1 -0
- package/dist/threejs-example-parity/index.js +218 -0
- package/dist/threejs-example-parity/index.js.map +1 -0
- package/package.json +23 -0
- package/src/AdvancedAssetCorpus.ts +454 -0
- package/src/AssetBundleCacheFixtures.ts +290 -0
- package/src/AssetCache.ts +76 -0
- package/src/AssetCompatibility.ts +224 -0
- package/src/AssetCorpus.ts +329 -0
- package/src/AssetDependencyGraph.ts +83 -0
- package/src/AssetHandle.ts +74 -0
- package/src/AssetImportPreflight.ts +179 -0
- package/src/AssetInspection.ts +706 -0
- package/src/AssetLoader.ts +36 -0
- package/src/AssetManager.ts +211 -0
- package/src/AssetRegistry.ts +44 -0
- package/src/AssetRenderDefaults.ts +36 -0
- package/src/AudioLoader.ts +41 -0
- package/src/BlenderExportValidation.ts +227 -0
- package/src/CarConceptMaterialStability.ts +1405 -0
- package/src/EXRLoader.ts +1 -0
- package/src/ExternalParityGLTFCorpus.ts +65 -0
- package/src/GLTFAnimationRuntime.ts +1221 -0
- package/src/GLTFCompressionDecoders.ts +190 -0
- package/src/GLTFExtensionSupport.ts +138 -0
- package/src/GLTFLoader.ts +4001 -0
- package/src/GLTFRenderResources.ts +2105 -0
- package/src/HDRLoader.ts +1 -0
- package/src/ImageLoader.ts +52 -0
- package/src/ImportPipeline.ts +148 -0
- package/src/KTX2BasisTextureTranscoder.ts +224 -0
- package/src/LoadContext.ts +60 -0
- package/src/MaterialLoader.ts +166 -0
- package/src/MeshOptimization.ts +93 -0
- package/src/OBJLoader.ts +551 -0
- package/src/SceneAnalysisFixtures.ts +438 -0
- package/src/SceneLoader.ts +62 -0
- package/src/ShaderLoader.ts +30 -0
- package/src/TextureLoader.ts +30 -0
- package/src/TexturePipeline.ts +96 -0
- package/src/TextureStreaming.ts +20 -0
- package/src/WorkerAssetJobs.ts +56 -0
- package/src/advanced-gallery/index.ts +18 -0
- package/src/asset-corpus/GLTFSceneLoader.ts +9 -0
- package/src/asset-corpus/ProductionAssetCorpus.ts +230 -0
- package/src/asset-corpus/ProductionAssetPipeline.ts +5 -0
- package/src/asset-corpus/ProductionGLTFRenderPipeline.ts +182 -0
- package/src/asset-corpus/ProductionHDRTextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionKTX2TextureLoader.ts +2 -0
- package/src/asset-corpus/ProductionTextureLoader.ts +2 -0
- package/src/asset-corpus/index.ts +29 -0
- package/src/browser-index.ts +224 -0
- package/src/createRenderableScene.ts +128 -0
- package/src/index.ts +317 -0
- package/src/loadRenderableAsset.ts +67 -0
- package/src/loaders/CubeTextureLoader.ts +8 -0
- package/src/loaders/EXRLoader.ts +10 -0
- package/src/loaders/HDRLoader.ts +7 -0
- package/src/loaders/KTX2Loader.ts +7 -0
- package/src/loaders/LoaderDiagnostics.ts +36 -0
- package/src/loaders/MTLLoader.ts +20 -0
- package/src/loaders/OBJLoader.ts +24 -0
- package/src/loaders/TextureLoader.ts +14 -0
- package/src/loaders/ThreeCompatGLTFLoader.ts +19 -0
- package/src/loaders/index.ts +14 -0
- package/src/threejs-compatibility/ThreeCompatAssetProvenance.ts +51 -0
- package/src/threejs-compatibility/ThreeCompatAssetRegistry.ts +61 -0
- package/src/threejs-example-parity/index.ts +262 -0
- package/tests/assets.test.ts +311 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
export function createGLTFSceneAnalysisEvidence(options) {
|
|
2
|
+
const maskWidth = normalizeDimension(options.maskWidth ?? 48, "maskWidth");
|
|
3
|
+
const maskHeight = normalizeDimension(options.maskHeight ?? 32, "maskHeight");
|
|
4
|
+
const minCoverage = Math.max(0, options.minCoverage ?? 0.5);
|
|
5
|
+
const topCategories = Math.max(1, Math.trunc(options.topCategories ?? 5));
|
|
6
|
+
const assetId = normalizeAssetId(options.asset.url || options.url || options.asset.meshes[0]?.name || "gltf-scene");
|
|
7
|
+
const accumulators = collectSegments(options.asset);
|
|
8
|
+
const totalWeight = Math.max(1, [...accumulators.values()].reduce((sum, segment) => sum + segment.weight, 0));
|
|
9
|
+
const segments = [...accumulators.values()]
|
|
10
|
+
.map((segment) => ({
|
|
11
|
+
label: segment.label,
|
|
12
|
+
classIndex: segment.classIndex,
|
|
13
|
+
pixelCount: Math.max(1, Math.round((segment.weight / totalWeight) * maskWidth * maskHeight)),
|
|
14
|
+
coverage: Number(((segment.weight / totalWeight) * 100).toFixed(3)),
|
|
15
|
+
confidence: Number((segment.confidenceSum / Math.max(1, segment.confidenceSamples)).toFixed(4)),
|
|
16
|
+
source: segment.source
|
|
17
|
+
}))
|
|
18
|
+
.filter((segment) => segment.coverage >= minCoverage)
|
|
19
|
+
.sort((left, right) => right.coverage - left.coverage || left.classIndex - right.classIndex);
|
|
20
|
+
const mask = createMaskSummary(maskWidth, maskHeight, segments);
|
|
21
|
+
const sceneComplexity = summarizeComplexity(options.asset);
|
|
22
|
+
const objectDetections = createObjectDetections(options.asset);
|
|
23
|
+
const objectTracks = createObjectTracks(objectDetections);
|
|
24
|
+
const poses = createPoseEvidence(options.asset, objectDetections);
|
|
25
|
+
const core = {
|
|
26
|
+
assetId,
|
|
27
|
+
mask,
|
|
28
|
+
dominantCategories: segments.slice(0, topCategories).map((segment) => segment.label),
|
|
29
|
+
objectDetections,
|
|
30
|
+
objectTracks,
|
|
31
|
+
poses,
|
|
32
|
+
sceneComplexity
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
source: "origin-master-scene-analyzer-adapted",
|
|
36
|
+
analyzer: "deterministic-gltf-scene-analysis",
|
|
37
|
+
assetId,
|
|
38
|
+
mask,
|
|
39
|
+
segments,
|
|
40
|
+
dominantCategories: core.dominantCategories,
|
|
41
|
+
confidence: Number((segments.reduce((sum, segment) => sum + segment.confidence * segment.coverage, 0) / Math.max(1, segments.reduce((sum, segment) => sum + segment.coverage, 0))).toFixed(4)),
|
|
42
|
+
objectDetections,
|
|
43
|
+
objectTracks,
|
|
44
|
+
poses,
|
|
45
|
+
cvSystem: {
|
|
46
|
+
source: "gltf-metadata-not-camera",
|
|
47
|
+
classificationTelemetry: segments.length > 0,
|
|
48
|
+
detectionTelemetry: objectDetections.length > 0,
|
|
49
|
+
trackingTelemetry: objectTracks.length > 0,
|
|
50
|
+
poseTelemetry: poses.length > 0,
|
|
51
|
+
inferenceRuntime: "not-used",
|
|
52
|
+
modelLoading: "not-used"
|
|
53
|
+
},
|
|
54
|
+
sceneComplexity,
|
|
55
|
+
productionReadiness: {
|
|
56
|
+
semanticSegmentTelemetry: true,
|
|
57
|
+
deterministicMaskSummary: true,
|
|
58
|
+
deterministicObjectTelemetry: true,
|
|
59
|
+
deterministicTrackingTelemetry: true,
|
|
60
|
+
skeletalPoseTelemetry: poses.length > 0,
|
|
61
|
+
complexityBudgetTelemetry: true,
|
|
62
|
+
browserAssetViewerEvidence: true
|
|
63
|
+
},
|
|
64
|
+
blockedClaims: [
|
|
65
|
+
"neural semantic segmentation parity",
|
|
66
|
+
"pixel-accurate object detection parity",
|
|
67
|
+
"real camera/image computer-vision inference",
|
|
68
|
+
"Unity Sentis/Barracuda runtime parity",
|
|
69
|
+
"Unreal ML Deformer or computer-vision plugin parity"
|
|
70
|
+
],
|
|
71
|
+
claimBoundary: "This evidence ports the old branch SceneAnalyzer/ObjectDetector/ObjectTracker/PoseEstimator concepts into deterministic glTF scene telemetry: semantic buckets, object boxes, tracks, and skeleton pose keypoints are inferred from loaded asset metadata. It does not run neural segmentation, camera inference, YOLO/SORT/Posenet models, or pixel-accurate object detection, and it does not claim Unity or Unreal ML/CV parity.",
|
|
72
|
+
hash: stableHash(JSON.stringify(core))
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function collectSegments(asset) {
|
|
76
|
+
const segments = new Map();
|
|
77
|
+
for (const mesh of asset.meshes) {
|
|
78
|
+
const material = asset.materials[mesh.materialIndex ?? -1];
|
|
79
|
+
addSegment(segments, "mesh-geometry", 1, "geometry", Math.max(1, mesh.geometry.vertexCount / 128), 0.88);
|
|
80
|
+
addSegment(segments, lodGeometryLabel(mesh), 2, "geometry", Math.max(1, mesh.geometry.indexCount / 192), 0.82);
|
|
81
|
+
if (mesh.skinIndex !== undefined)
|
|
82
|
+
addSegment(segments, "skinned-character-geometry", 3, "geometry", 2.5, 0.9);
|
|
83
|
+
if (mesh.morphTargets.length > 0)
|
|
84
|
+
addSegment(segments, "morph-target-geometry", 4, "geometry", mesh.morphTargets.length * 1.8, 0.9);
|
|
85
|
+
if (mesh.materialVariants.length > 0)
|
|
86
|
+
addSegment(segments, "variant-material-region", 5, "material", mesh.materialVariants.length * 1.4, 0.84);
|
|
87
|
+
if (material)
|
|
88
|
+
collectMaterialSegments(segments, material);
|
|
89
|
+
}
|
|
90
|
+
if (asset.textures.length > 0)
|
|
91
|
+
addSegment(segments, "texture-backed-surface", 10, "texture", asset.textures.length * 1.6, 0.86);
|
|
92
|
+
if (asset.images.length > 0)
|
|
93
|
+
addSegment(segments, "image-resource-region", 11, "texture", asset.images.length * 1.1, 0.82);
|
|
94
|
+
if (asset.animations.length > 0)
|
|
95
|
+
addSegment(segments, "animated-scene-region", 12, "animation", asset.animations.length * 2.2, 0.87);
|
|
96
|
+
if (asset.skins.length > 0)
|
|
97
|
+
addSegment(segments, "skeleton-rig-region", 13, "animation", asset.skins.length * 2.4, 0.89);
|
|
98
|
+
if (asset.cameras.length > 0)
|
|
99
|
+
addSegment(segments, "camera-authored-scene", 14, "scene", asset.cameras.length, 0.8);
|
|
100
|
+
if (asset.lights.length > 0)
|
|
101
|
+
addSegment(segments, "punctual-light-scene", 15, "scene", asset.lights.length * 1.2, 0.82);
|
|
102
|
+
if (segments.size === 0)
|
|
103
|
+
addSegment(segments, "empty-gltf-scene", 0, "scene", 1, 0.25);
|
|
104
|
+
return segments;
|
|
105
|
+
}
|
|
106
|
+
function collectMaterialSegments(segments, material) {
|
|
107
|
+
addSegment(segments, material.unlit ? "unlit-material" : "pbr-material", 20, "material", material.unlit ? 1.1 : 2.8, material.unlit ? 0.76 : 0.9);
|
|
108
|
+
if (material.metallicFactor > 0.05)
|
|
109
|
+
addSegment(segments, "metallic-surface", 21, "material", 1 + material.metallicFactor * 2, 0.86);
|
|
110
|
+
if (material.roughnessFactor < 0.45)
|
|
111
|
+
addSegment(segments, "glossy-surface", 22, "material", 1 + (0.45 - material.roughnessFactor) * 2, 0.82);
|
|
112
|
+
if (material.normalTexture)
|
|
113
|
+
addSegment(segments, "normal-mapped-surface", 23, "texture", 1.5, 0.86);
|
|
114
|
+
if (material.baseColorTexture)
|
|
115
|
+
addSegment(segments, "albedo-textured-surface", 24, "texture", 1.7, 0.86);
|
|
116
|
+
if (material.metallicRoughnessTexture)
|
|
117
|
+
addSegment(segments, "metallic-roughness-textured-surface", 25, "texture", 1.5, 0.84);
|
|
118
|
+
if (material.emissiveTexture || material.emissiveStrength > 1 || material.emissiveFactor.some((value) => value > 0))
|
|
119
|
+
addSegment(segments, "emissive-surface", 26, "material", 1.2 + material.emissiveStrength * 0.2, 0.84);
|
|
120
|
+
if (material.alphaMode !== "OPAQUE")
|
|
121
|
+
addSegment(segments, "transparent-surface", 27, "material", material.alphaMode === "BLEND" ? 1.7 : 1.2, 0.83);
|
|
122
|
+
if (material.doubleSided)
|
|
123
|
+
addSegment(segments, "double-sided-surface", 28, "material", 1.1, 0.8);
|
|
124
|
+
if (material.clearcoat)
|
|
125
|
+
addSegment(segments, "clearcoat-surface", 29, "material", 1.5, 0.84);
|
|
126
|
+
if (material.transmission || material.diffuseTransmission || material.volume)
|
|
127
|
+
addSegment(segments, "transmissive-volume-surface", 30, "material", 1.8, 0.82);
|
|
128
|
+
if (material.sheen)
|
|
129
|
+
addSegment(segments, "sheen-fabric-surface", 31, "material", 1.4, 0.82);
|
|
130
|
+
if (material.anisotropy)
|
|
131
|
+
addSegment(segments, "anisotropic-surface", 32, "material", 1.4, 0.82);
|
|
132
|
+
if (material.iridescence)
|
|
133
|
+
addSegment(segments, "iridescent-surface", 33, "material", 1.4, 0.82);
|
|
134
|
+
}
|
|
135
|
+
function addSegment(segments, label, classIndex, source, weight, confidence) {
|
|
136
|
+
const existing = segments.get(label);
|
|
137
|
+
if (existing) {
|
|
138
|
+
existing.weight += Math.max(0, weight);
|
|
139
|
+
existing.confidenceSum += confidence;
|
|
140
|
+
existing.confidenceSamples += 1;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
segments.set(label, {
|
|
144
|
+
label,
|
|
145
|
+
classIndex,
|
|
146
|
+
source,
|
|
147
|
+
weight: Math.max(0, weight),
|
|
148
|
+
confidenceSum: confidence,
|
|
149
|
+
confidenceSamples: 1
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function createMaskSummary(width, height, segments) {
|
|
153
|
+
const totalPixels = width * height;
|
|
154
|
+
const mask = new Uint8Array(totalPixels);
|
|
155
|
+
let cursor = 0;
|
|
156
|
+
for (const segment of segments) {
|
|
157
|
+
const count = Math.min(totalPixels - cursor, Math.max(1, Math.round((segment.coverage / 100) * totalPixels)));
|
|
158
|
+
mask.fill(segment.classIndex, cursor, cursor + count);
|
|
159
|
+
cursor += count;
|
|
160
|
+
if (cursor >= totalPixels)
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
width,
|
|
165
|
+
height,
|
|
166
|
+
classCount: new Set(segments.map((segment) => segment.classIndex)).size,
|
|
167
|
+
hash: stableHash(String.fromCharCode(...mask)),
|
|
168
|
+
dominantClassIndex: segments[0]?.classIndex ?? 0
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function summarizeComplexity(asset) {
|
|
172
|
+
return {
|
|
173
|
+
meshCount: asset.meshes.length,
|
|
174
|
+
materialCount: asset.materials.length,
|
|
175
|
+
textureCount: asset.textures.length,
|
|
176
|
+
vertexCount: asset.meshes.reduce((sum, mesh) => sum + mesh.geometry.vertexCount, 0),
|
|
177
|
+
indexCount: asset.meshes.reduce((sum, mesh) => sum + mesh.geometry.indexCount, 0),
|
|
178
|
+
animationCount: asset.animations.length,
|
|
179
|
+
skinCount: asset.skins.length,
|
|
180
|
+
morphTargetCount: asset.meshes.reduce((sum, mesh) => sum + mesh.morphTargets.length, 0),
|
|
181
|
+
extensionCount: asset.loaderDiagnostics.extensionsUsed.length
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function createObjectDetections(asset) {
|
|
185
|
+
const bounds = globalBounds(asset.meshes);
|
|
186
|
+
return asset.meshes
|
|
187
|
+
.map((mesh, index) => {
|
|
188
|
+
const material = asset.materials[mesh.materialIndex ?? -1];
|
|
189
|
+
const bbox = normalizedBoundsBox(mesh, bounds);
|
|
190
|
+
const materialConfidence = material && !material.unlit ? 0.06 : 0;
|
|
191
|
+
const geometryConfidence = Math.min(0.12, mesh.geometry.vertexCount / 50_000);
|
|
192
|
+
return {
|
|
193
|
+
label: mesh.name || material?.name || `mesh-${index}`,
|
|
194
|
+
confidence: Number(Math.min(0.98, 0.74 + materialConfidence + geometryConfidence).toFixed(4)),
|
|
195
|
+
bbox,
|
|
196
|
+
classIndex: index + 1,
|
|
197
|
+
meshName: mesh.name || `mesh-${index}`,
|
|
198
|
+
materialName: material?.name ?? mesh.material
|
|
199
|
+
};
|
|
200
|
+
})
|
|
201
|
+
.sort((left, right) => right.confidence - left.confidence)
|
|
202
|
+
.slice(0, 24);
|
|
203
|
+
}
|
|
204
|
+
function createObjectTracks(detections) {
|
|
205
|
+
return detections.map((detection, index) => {
|
|
206
|
+
const velocityScale = (index + 1) * 0.001;
|
|
207
|
+
return {
|
|
208
|
+
id: index + 1,
|
|
209
|
+
label: detection.label,
|
|
210
|
+
bbox: detection.bbox,
|
|
211
|
+
confidence: detection.confidence,
|
|
212
|
+
age: 2,
|
|
213
|
+
timeSinceUpdate: 0,
|
|
214
|
+
velocity: [
|
|
215
|
+
Number((velocityScale * 0.8).toFixed(4)),
|
|
216
|
+
Number((velocityScale * -0.45).toFixed(4)),
|
|
217
|
+
0,
|
|
218
|
+
0
|
|
219
|
+
],
|
|
220
|
+
historyLength: 2
|
|
221
|
+
};
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
function createPoseEvidence(asset, detections) {
|
|
225
|
+
if (asset.skins.length === 0)
|
|
226
|
+
return [];
|
|
227
|
+
const target = detections[0];
|
|
228
|
+
const bbox = target?.bbox ?? [0.35, 0.18, 0.3, 0.64];
|
|
229
|
+
const [x, y, width, height] = bbox;
|
|
230
|
+
const keypointNames = [
|
|
231
|
+
"head",
|
|
232
|
+
"neck",
|
|
233
|
+
"left_shoulder",
|
|
234
|
+
"right_shoulder",
|
|
235
|
+
"left_elbow",
|
|
236
|
+
"right_elbow",
|
|
237
|
+
"left_wrist",
|
|
238
|
+
"right_wrist",
|
|
239
|
+
"spine",
|
|
240
|
+
"left_hip",
|
|
241
|
+
"right_hip",
|
|
242
|
+
"left_knee",
|
|
243
|
+
"right_knee",
|
|
244
|
+
"left_ankle",
|
|
245
|
+
"right_ankle"
|
|
246
|
+
];
|
|
247
|
+
const offsets = [
|
|
248
|
+
[0.5, 0.08],
|
|
249
|
+
[0.5, 0.2],
|
|
250
|
+
[0.28, 0.25],
|
|
251
|
+
[0.72, 0.25],
|
|
252
|
+
[0.18, 0.43],
|
|
253
|
+
[0.82, 0.43],
|
|
254
|
+
[0.12, 0.62],
|
|
255
|
+
[0.88, 0.62],
|
|
256
|
+
[0.5, 0.46],
|
|
257
|
+
[0.36, 0.62],
|
|
258
|
+
[0.64, 0.62],
|
|
259
|
+
[0.32, 0.78],
|
|
260
|
+
[0.68, 0.78],
|
|
261
|
+
[0.3, 0.96],
|
|
262
|
+
[0.7, 0.96]
|
|
263
|
+
];
|
|
264
|
+
const keypoints = keypointNames.map((name, index) => ({
|
|
265
|
+
name,
|
|
266
|
+
x: Number((x + width * (offsets[index]?.[0] ?? 0.5)).toFixed(4)),
|
|
267
|
+
y: Number((y + height * (offsets[index]?.[1] ?? 0.5)).toFixed(4)),
|
|
268
|
+
confidence: Number((0.74 + Math.min(0.2, asset.skins.length * 0.04) - index * 0.003).toFixed(4))
|
|
269
|
+
}));
|
|
270
|
+
return [{
|
|
271
|
+
label: asset.skins[0]?.name || "gltf-skeleton-pose",
|
|
272
|
+
confidence: Number((keypoints.reduce((sum, keypoint) => sum + keypoint.confidence, 0) / keypoints.length).toFixed(4)),
|
|
273
|
+
bbox,
|
|
274
|
+
keypoints
|
|
275
|
+
}];
|
|
276
|
+
}
|
|
277
|
+
function globalBounds(meshes) {
|
|
278
|
+
const min = [Infinity, Infinity, Infinity];
|
|
279
|
+
const max = [-Infinity, -Infinity, -Infinity];
|
|
280
|
+
for (const mesh of meshes) {
|
|
281
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
282
|
+
min[axis] = Math.min(min[axis] ?? Infinity, mesh.geometry.bounds.min[axis] ?? 0);
|
|
283
|
+
max[axis] = Math.max(max[axis] ?? -Infinity, mesh.geometry.bounds.max[axis] ?? 0);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!min.every(Number.isFinite) || !max.every(Number.isFinite))
|
|
287
|
+
return { min: [-1, -1, -1], max: [1, 1, 1] };
|
|
288
|
+
return { min, max };
|
|
289
|
+
}
|
|
290
|
+
function normalizedBoundsBox(mesh, bounds) {
|
|
291
|
+
const rangeX = Math.max(0.001, bounds.max[0] - bounds.min[0]);
|
|
292
|
+
const rangeY = Math.max(0.001, bounds.max[1] - bounds.min[1]);
|
|
293
|
+
const x = clamp01((mesh.geometry.bounds.min[0] - bounds.min[0]) / rangeX);
|
|
294
|
+
const y = clamp01((bounds.max[1] - mesh.geometry.bounds.max[1]) / rangeY);
|
|
295
|
+
const width = Math.max(0.02, clamp01((mesh.geometry.bounds.max[0] - mesh.geometry.bounds.min[0]) / rangeX));
|
|
296
|
+
const height = Math.max(0.02, clamp01((mesh.geometry.bounds.max[1] - mesh.geometry.bounds.min[1]) / rangeY));
|
|
297
|
+
return [
|
|
298
|
+
Number(x.toFixed(4)),
|
|
299
|
+
Number(y.toFixed(4)),
|
|
300
|
+
Number(Math.min(1 - x, width).toFixed(4)),
|
|
301
|
+
Number(Math.min(1 - y, height).toFixed(4))
|
|
302
|
+
];
|
|
303
|
+
}
|
|
304
|
+
function lodGeometryLabel(mesh) {
|
|
305
|
+
const vertices = mesh.geometry.vertexCount;
|
|
306
|
+
if (vertices >= 20_000)
|
|
307
|
+
return "high-density-geometry";
|
|
308
|
+
if (vertices >= 2_000)
|
|
309
|
+
return "medium-density-geometry";
|
|
310
|
+
return "low-density-geometry";
|
|
311
|
+
}
|
|
312
|
+
function clamp01(value) {
|
|
313
|
+
return Math.max(0, Math.min(1, value));
|
|
314
|
+
}
|
|
315
|
+
function normalizeDimension(value, name) {
|
|
316
|
+
if (!Number.isInteger(value) || value < 8 || value > 256)
|
|
317
|
+
throw new Error(`${name} must be an integer from 8 to 256.`);
|
|
318
|
+
return value;
|
|
319
|
+
}
|
|
320
|
+
function normalizeAssetId(id) {
|
|
321
|
+
return id.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "gltf-scene";
|
|
322
|
+
}
|
|
323
|
+
function stableHash(value) {
|
|
324
|
+
let hash = 2166136261;
|
|
325
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
326
|
+
hash ^= value.charCodeAt(index);
|
|
327
|
+
hash = Math.imul(hash, 16777619);
|
|
328
|
+
}
|
|
329
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=SceneAnalysisFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneAnalysisFixtures.js","sourceRoot":"","sources":["../../../../packages/assets/src/SceneAnalysisFixtures.ts"],"names":[],"mappings":"AAoHA,MAAM,UAAU,+BAA+B,CAAC,OAAiC;IAC/E,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;IACpH,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;SACxC,GAAG,CAAC,CAAC,OAAO,EAAuB,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;QAC5F,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnE,UAAU,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;SACpD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG;QACX,OAAO;QACP,IAAI;QACJ,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACpF,gBAAgB;QAChB,YAAY;QACZ,KAAK;QACL,eAAe;KAChB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,sCAAsC;QAC9C,QAAQ,EAAE,mCAAmC;QAC7C,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9L,gBAAgB;QAChB,YAAY;QACZ,KAAK;QACL,QAAQ,EAAE;YACR,MAAM,EAAE,0BAA0B;YAClC,uBAAuB,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC5C,kBAAkB,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC/C,iBAAiB,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;YAC1C,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YAC/B,gBAAgB,EAAE,UAAU;YAC5B,YAAY,EAAE,UAAU;SACzB;QACD,eAAe;QACf,mBAAmB,EAAE;YACnB,wBAAwB,EAAE,IAAI;YAC9B,wBAAwB,EAAE,IAAI;YAC9B,4BAA4B,EAAE,IAAI;YAClC,8BAA8B,EAAE,IAAI;YACpC,qBAAqB,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YACvC,yBAAyB,EAAE,IAAI;YAC/B,0BAA0B,EAAE,IAAI;SACjC;QACD,aAAa,EAAE;YACb,qCAAqC;YACrC,wCAAwC;YACxC,6CAA6C;YAC7C,uCAAuC;YACvC,qDAAqD;SACtD;QACD,aAAa,EAAE,qaAAqa;QACpb,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAgB;IACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACzG,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/G,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,UAAU,CAAC,QAAQ,EAAE,4BAA4B,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACpI,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,QAAQ,EAAE,yBAAyB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/I,IAAI,QAAQ;YAAE,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,wBAAwB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IAChI,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3H,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IACrI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IACzH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpH,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IACxH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACvF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAyC,EAAE,QAA2B;IACrG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClJ,IAAI,QAAQ,CAAC,cAAc,GAAG,IAAI;QAAE,UAAU,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACpI,IAAI,QAAQ,CAAC,eAAe,GAAG,IAAI;QAAE,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7I,IAAI,QAAQ,CAAC,aAAa;QAAE,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACpG,IAAI,QAAQ,CAAC,gBAAgB;QAAE,UAAU,CAAC,QAAQ,EAAE,yBAAyB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACzG,IAAI,QAAQ,CAAC,wBAAwB;QAAE,UAAU,CAAC,QAAQ,EAAE,qCAAqC,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7H,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,gBAAgB,GAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,UAAU,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,GAAG,QAAQ,CAAC,gBAAgB,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3N,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ;QAAE,UAAU,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnJ,IAAI,QAAQ,CAAC,WAAW;QAAE,UAAU,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjG,IAAI,QAAQ,CAAC,SAAS;QAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7F,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,mBAAmB,IAAI,QAAQ,CAAC,MAAM;QAAE,UAAU,CAAC,QAAQ,EAAE,6BAA6B,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7J,IAAI,QAAQ,CAAC,KAAK;QAAE,UAAU,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5F,IAAI,QAAQ,CAAC,UAAU;QAAE,UAAU,CAAC,QAAQ,EAAE,qBAAqB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChG,IAAI,QAAQ,CAAC,WAAW;QAAE,UAAU,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,UAAU,CACjB,QAAyC,EACzC,KAAa,EACb,UAAkB,EAClB,MAAqC,EACrC,MAAc,EACd,UAAkB;IAElB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvC,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC;QACrC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE;QAClB,KAAK;QACL,UAAU;QACV,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,EAAE,UAAU;QACzB,iBAAiB,EAAE,CAAC;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,MAAc,EAAE,QAAwC;IAChG,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC;QAChB,IAAI,MAAM,IAAI,WAAW;YAAE,MAAM;IACnC,CAAC;IACD,OAAO;QACL,KAAK;QACL,MAAM;QACN,UAAU,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACvE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9C,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAgB;IAC3C,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC9B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;QACrC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACjF,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;QACvC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QAC7B,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAgB;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAA+B,EAAE;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;QAC9E,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,QAAQ,KAAK,EAAE;YACrD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI;YACJ,UAAU,EAAE,KAAK,GAAG,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,EAAE;YACtC,YAAY,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ;SAC9C,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;SACzD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkD;IAC5E,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,aAAa,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAC1C,OAAO;YACL,EAAE,EAAE,KAAK,GAAG,CAAC;YACb,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,GAAG,EAAE,CAAC;YACN,eAAe,EAAE,CAAC;YAClB,QAAQ,EAAE;gBACR,MAAM,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBACD,CAAC;aACF;YACD,aAAa,EAAE,CAAC;SACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgB,EAAE,UAAkD;IAC9F,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAU,CAAC;IAC9D,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACnC,MAAM,aAAa,GAAG;QACpB,MAAM;QACN,MAAM;QACN,eAAe;QACf,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,aAAa;QACb,OAAO;QACP,UAAU;QACV,WAAW;QACX,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,aAAa;KACd,CAAC;IACF,MAAM,OAAO,GAA2C;QACtD,CAAC,GAAG,EAAE,IAAI,CAAC;QACX,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,GAAG,EAAE,IAAI,CAAC;QACX,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,IAAI,EAAE,IAAI,CAAC;QACZ,CAAC,GAAG,EAAE,IAAI,CAAC;QACX,CAAC,GAAG,EAAE,IAAI,CAAC;KACZ,CAAC;IACF,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAA4B,EAAE,CAAC,CAAC;QAC9E,IAAI;QACJ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjE,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACjG,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC;YACN,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,oBAAoB;YACnD,UAAU,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrH,IAAI;YACJ,SAAS;SACV,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAgC;IACpD,MAAM,GAAG,GAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,GAAG,GAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC7G,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAmB,EAAE,MAAuC;IACvF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC7G,OAAO;QACL,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC3C,IAAI,QAAQ,IAAI,MAAM;QAAE,OAAO,uBAAuB,CAAC;IACvD,IAAI,QAAQ,IAAI,KAAK;QAAE,OAAO,yBAAyB,CAAC;IACxD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY;IACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;IACvH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU;IAClC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC;AACrG,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AnimationClip } from "@aura3d/animation";
|
|
2
|
+
import { Scene } from "@aura3d/scene";
|
|
3
|
+
import type { AssetLoadRequest, AssetLoader } from "./AssetLoader";
|
|
4
|
+
import type { LoadContext } from "./LoadContext";
|
|
5
|
+
export interface NativeSceneNodeDescriptor {
|
|
6
|
+
readonly name?: string;
|
|
7
|
+
readonly translation?: readonly [number, number, number];
|
|
8
|
+
readonly rotation?: readonly [number, number, number, number];
|
|
9
|
+
readonly scale?: readonly [number, number, number];
|
|
10
|
+
readonly renderable?: {
|
|
11
|
+
readonly geometry: string;
|
|
12
|
+
readonly material: string;
|
|
13
|
+
readonly morphWeights?: readonly number[];
|
|
14
|
+
};
|
|
15
|
+
readonly children?: readonly NativeSceneNodeDescriptor[];
|
|
16
|
+
}
|
|
17
|
+
export interface NativeSceneAsset {
|
|
18
|
+
readonly url: string;
|
|
19
|
+
readonly scene: Scene;
|
|
20
|
+
readonly animations: readonly AnimationClip[];
|
|
21
|
+
}
|
|
22
|
+
export declare class SceneLoader implements AssetLoader<NativeSceneAsset> {
|
|
23
|
+
readonly type = "scene";
|
|
24
|
+
canLoad(request: AssetLoadRequest): boolean;
|
|
25
|
+
load(request: AssetLoadRequest, context: LoadContext): Promise<NativeSceneAsset>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=SceneLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneLoader.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/SceneLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAc,KAAK,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED,qBAAa,WAAY,YAAW,WAAW,CAAC,gBAAgB,CAAC;IAC/D,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAIrC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAoBvF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AnimationClip } from "@aura3d/animation";
|
|
2
|
+
import { Renderable, Scene } from "@aura3d/scene";
|
|
3
|
+
export class SceneLoader {
|
|
4
|
+
type = "scene";
|
|
5
|
+
canLoad(request) {
|
|
6
|
+
return /\.scene\.json(?:\?.*)?$/i.test(request.url);
|
|
7
|
+
}
|
|
8
|
+
async load(request, context) {
|
|
9
|
+
context.throwIfAborted(request.url);
|
|
10
|
+
if (typeof fetch !== "function") {
|
|
11
|
+
throw new Error("SceneLoader requires fetch");
|
|
12
|
+
}
|
|
13
|
+
const response = await fetch(request.url, { signal: request.signal });
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
throw new Error(`Scene request failed with ${response.status}`);
|
|
16
|
+
}
|
|
17
|
+
const descriptor = (await response.json());
|
|
18
|
+
const scene = new Scene();
|
|
19
|
+
for (const node of descriptor.nodes ?? []) {
|
|
20
|
+
scene.root.addChild(createNode(scene, node));
|
|
21
|
+
}
|
|
22
|
+
const animations = (descriptor.animations ?? []).map((animation) => AnimationClip.fromJSON(animation));
|
|
23
|
+
return { url: request.url, scene, animations };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function createNode(scene, descriptor) {
|
|
27
|
+
const node = scene.createNode(descriptor.name);
|
|
28
|
+
if (descriptor.translation)
|
|
29
|
+
node.transform.setPosition(descriptor.translation[0], descriptor.translation[1], descriptor.translation[2]);
|
|
30
|
+
if (descriptor.rotation)
|
|
31
|
+
node.transform.setRotation(descriptor.rotation[0], descriptor.rotation[1], descriptor.rotation[2], descriptor.rotation[3]);
|
|
32
|
+
if (descriptor.scale)
|
|
33
|
+
node.transform.setScale(descriptor.scale[0], descriptor.scale[1], descriptor.scale[2]);
|
|
34
|
+
if (descriptor.renderable)
|
|
35
|
+
scene.addRenderable(node, new Renderable(descriptor.renderable));
|
|
36
|
+
for (const child of descriptor.children ?? [])
|
|
37
|
+
node.addChild(createNode(scene, child));
|
|
38
|
+
return node;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=SceneLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneLoader.js","sourceRoot":"","sources":["../../../../packages/assets/src/SceneLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AssetLoadRequest, AssetLoader } from "./AssetLoader";
|
|
2
|
+
import type { LoadContext } from "./LoadContext";
|
|
3
|
+
export interface ShaderSourceAsset {
|
|
4
|
+
readonly url: string;
|
|
5
|
+
readonly source: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ShaderLoader implements AssetLoader<ShaderSourceAsset> {
|
|
8
|
+
readonly type = "shader";
|
|
9
|
+
canLoad(request: AssetLoadRequest): boolean;
|
|
10
|
+
load(request: AssetLoadRequest, context: LoadContext): Promise<ShaderSourceAsset>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ShaderLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShaderLoader.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/ShaderLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAa,YAAW,WAAW,CAAC,iBAAiB,CAAC;IACjE,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAIrC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAcxF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class ShaderLoader {
|
|
2
|
+
type = "shader";
|
|
3
|
+
canLoad(request) {
|
|
4
|
+
return /\.(?:wgsl|glsl|vert|frag)(?:\?.*)?$/i.test(request.url);
|
|
5
|
+
}
|
|
6
|
+
async load(request, context) {
|
|
7
|
+
context.throwIfAborted(request.url);
|
|
8
|
+
if (typeof fetch !== "function") {
|
|
9
|
+
throw new Error("ShaderLoader requires fetch");
|
|
10
|
+
}
|
|
11
|
+
const response = await fetch(request.url, { signal: request.signal });
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
throw new Error(`Shader request failed with ${response.status}`);
|
|
14
|
+
}
|
|
15
|
+
return { url: request.url, source: await response.text() };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ShaderLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShaderLoader.js","sourceRoot":"","sources":["../../../../packages/assets/src/ShaderLoader.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IAEzB,OAAO,CAAC,OAAyB;QAC/B,OAAO,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAyB,EAAE,OAAoB;QACxD,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AssetLoadRequest, AssetLoader } from "./AssetLoader";
|
|
2
|
+
import type { LoadContext } from "./LoadContext";
|
|
3
|
+
import type { ImageAsset } from "./ImageLoader";
|
|
4
|
+
export interface TextureDescriptorAsset {
|
|
5
|
+
readonly url: string;
|
|
6
|
+
readonly width: number;
|
|
7
|
+
readonly height: number;
|
|
8
|
+
readonly colorSpace: "srgb" | "linear";
|
|
9
|
+
readonly source: ImageAsset["source"];
|
|
10
|
+
}
|
|
11
|
+
export declare class TextureLoader implements AssetLoader<TextureDescriptorAsset> {
|
|
12
|
+
readonly type = "texture";
|
|
13
|
+
canLoad(request: AssetLoadRequest): boolean;
|
|
14
|
+
load(request: AssetLoadRequest, context: LoadContext): Promise<TextureDescriptorAsset>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=TextureLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextureLoader.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/TextureLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;CACvC;AAED,qBAAa,aAAc,YAAW,WAAW,CAAC,sBAAsB,CAAC;IACvE,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAIrC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAU7F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class TextureLoader {
|
|
2
|
+
type = "texture";
|
|
3
|
+
canLoad(request) {
|
|
4
|
+
return request.type === this.type && (/\.(?:png|jpg|jpeg|webp|avif)(?:\?.*)?$/i.test(request.url) || request.url.startsWith("data:image/"));
|
|
5
|
+
}
|
|
6
|
+
async load(request, context) {
|
|
7
|
+
const image = await context.loadDependency(request.url, "image");
|
|
8
|
+
return {
|
|
9
|
+
url: request.url,
|
|
10
|
+
width: image.value.width,
|
|
11
|
+
height: image.value.height,
|
|
12
|
+
colorSpace: "srgb",
|
|
13
|
+
source: image.value.source
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TextureLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextureLoader.js","sourceRoot":"","sources":["../../../../packages/assets/src/TextureLoader.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,SAAS,CAAC;IAE1B,OAAO,CAAC,OAAyB;QAC/B,OAAO,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9I,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAyB,EAAE,OAAoB;QACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,CAAa,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7E,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;YACxB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;SAC3B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ImportStage } from "./ImportPipeline";
|
|
2
|
+
export interface TextureMipGenerationInput {
|
|
3
|
+
readonly width: number;
|
|
4
|
+
readonly height: number;
|
|
5
|
+
readonly data: Uint8Array | Uint8ClampedArray;
|
|
6
|
+
readonly colorSpace?: "linear" | "srgb";
|
|
7
|
+
}
|
|
8
|
+
export interface TextureMipLevel {
|
|
9
|
+
readonly width: number;
|
|
10
|
+
readonly height: number;
|
|
11
|
+
readonly data: Uint8Array;
|
|
12
|
+
}
|
|
13
|
+
export interface TextureMipGenerationResult {
|
|
14
|
+
readonly width: number;
|
|
15
|
+
readonly height: number;
|
|
16
|
+
readonly colorSpace: "linear" | "srgb";
|
|
17
|
+
readonly levels: readonly TextureMipLevel[];
|
|
18
|
+
}
|
|
19
|
+
export interface TextureMipGenerationStageOptions {
|
|
20
|
+
readonly name?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function generateTextureMipChain(input: TextureMipGenerationInput): TextureMipGenerationResult;
|
|
23
|
+
export declare function createTextureMipGenerationStage(options?: TextureMipGenerationStageOptions): ImportStage<TextureMipGenerationInput, TextureMipGenerationResult>;
|
|
24
|
+
//# sourceMappingURL=TexturePipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TexturePipeline.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/TexturePipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,CAmBpG;AAED,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,gCAAqC,GAAG,WAAW,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CAKlK"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export function generateTextureMipChain(input) {
|
|
2
|
+
validateTextureMipInput(input);
|
|
3
|
+
const levels = [{
|
|
4
|
+
width: input.width,
|
|
5
|
+
height: input.height,
|
|
6
|
+
data: new Uint8Array(input.data)
|
|
7
|
+
}];
|
|
8
|
+
while (levels[levels.length - 1].width > 1 || levels[levels.length - 1].height > 1) {
|
|
9
|
+
levels.push(downsampleRGBA8(levels[levels.length - 1]));
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
width: input.width,
|
|
13
|
+
height: input.height,
|
|
14
|
+
colorSpace: input.colorSpace ?? "srgb",
|
|
15
|
+
levels
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function createTextureMipGenerationStage(options = {}) {
|
|
19
|
+
return {
|
|
20
|
+
name: options.name ?? "texture-mip-generation",
|
|
21
|
+
run: (input) => generateTextureMipChain(input)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function validateTextureMipInput(input) {
|
|
25
|
+
if (!Number.isInteger(input.width) || input.width <= 0) {
|
|
26
|
+
throw new Error("Texture mip generation width must be a positive integer");
|
|
27
|
+
}
|
|
28
|
+
if (!Number.isInteger(input.height) || input.height <= 0) {
|
|
29
|
+
throw new Error("Texture mip generation height must be a positive integer");
|
|
30
|
+
}
|
|
31
|
+
if (!(input.data instanceof Uint8Array) && !(input.data instanceof Uint8ClampedArray)) {
|
|
32
|
+
throw new Error("Texture mip generation requires RGBA8 byte data");
|
|
33
|
+
}
|
|
34
|
+
if (input.data.byteLength !== input.width * input.height * 4) {
|
|
35
|
+
throw new Error("Texture mip generation data must contain exactly width * height * 4 bytes");
|
|
36
|
+
}
|
|
37
|
+
if (input.colorSpace !== undefined && input.colorSpace !== "linear" && input.colorSpace !== "srgb") {
|
|
38
|
+
throw new Error("Texture mip generation colorSpace must be linear or srgb");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function downsampleRGBA8(source) {
|
|
42
|
+
const width = Math.max(1, Math.ceil(source.width / 2));
|
|
43
|
+
const height = Math.max(1, Math.ceil(source.height / 2));
|
|
44
|
+
const data = new Uint8Array(width * height * 4);
|
|
45
|
+
for (let y = 0; y < height; y += 1) {
|
|
46
|
+
for (let x = 0; x < width; x += 1) {
|
|
47
|
+
const samples = [];
|
|
48
|
+
for (let sy = y * 2; sy < Math.min(source.height, y * 2 + 2); sy += 1) {
|
|
49
|
+
for (let sx = x * 2; sx < Math.min(source.width, x * 2 + 2); sx += 1) {
|
|
50
|
+
samples.push((sy * source.width + sx) * 4);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const output = (y * width + x) * 4;
|
|
54
|
+
for (let component = 0; component < 4; component += 1) {
|
|
55
|
+
let total = 0;
|
|
56
|
+
for (const sample of samples)
|
|
57
|
+
total += source.data[sample + component] ?? 0;
|
|
58
|
+
data[output + component] = Math.round(total / samples.length);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { width, height, data };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=TexturePipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TexturePipeline.js","sourceRoot":"","sources":["../../../../packages/assets/src/TexturePipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface TextureStreamingBudget {
|
|
2
|
+
readonly maxTextureBytes: number;
|
|
3
|
+
readonly loadedTextureBytes: number;
|
|
4
|
+
}
|
|
5
|
+
export interface TextureStreamingDecision {
|
|
6
|
+
readonly canUpload: boolean;
|
|
7
|
+
readonly remainingBytes: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function evaluateTextureStreamingBudget(budget: TextureStreamingBudget): TextureStreamingDecision;
|
|
10
|
+
//# sourceMappingURL=TextureStreaming.d.ts.map
|