@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.
Files changed (324) hide show
  1. package/README.md +17 -0
  2. package/dist/AdvancedAssetCorpus.d.ts +124 -0
  3. package/dist/AdvancedAssetCorpus.d.ts.map +1 -0
  4. package/dist/AdvancedAssetCorpus.js +266 -0
  5. package/dist/AdvancedAssetCorpus.js.map +1 -0
  6. package/dist/AssetBundleCacheFixtures.d.ts +62 -0
  7. package/dist/AssetBundleCacheFixtures.d.ts.map +1 -0
  8. package/dist/AssetBundleCacheFixtures.js +222 -0
  9. package/dist/AssetBundleCacheFixtures.js.map +1 -0
  10. package/dist/AssetCache.d.ts +21 -0
  11. package/dist/AssetCache.d.ts.map +1 -0
  12. package/dist/AssetCache.js +54 -0
  13. package/dist/AssetCache.js.map +1 -0
  14. package/dist/AssetCompatibility.d.ts +54 -0
  15. package/dist/AssetCompatibility.d.ts.map +1 -0
  16. package/dist/AssetCompatibility.js +122 -0
  17. package/dist/AssetCompatibility.js.map +1 -0
  18. package/dist/AssetCorpus.d.ts +88 -0
  19. package/dist/AssetCorpus.d.ts.map +1 -0
  20. package/dist/AssetCorpus.js +215 -0
  21. package/dist/AssetCorpus.js.map +1 -0
  22. package/dist/AssetDependencyGraph.d.ts +12 -0
  23. package/dist/AssetDependencyGraph.d.ts.map +1 -0
  24. package/dist/AssetDependencyGraph.js +66 -0
  25. package/dist/AssetDependencyGraph.js.map +1 -0
  26. package/dist/AssetHandle.d.ts +26 -0
  27. package/dist/AssetHandle.d.ts.map +1 -0
  28. package/dist/AssetHandle.js +53 -0
  29. package/dist/AssetHandle.js.map +1 -0
  30. package/dist/AssetImportPreflight.d.ts +43 -0
  31. package/dist/AssetImportPreflight.d.ts.map +1 -0
  32. package/dist/AssetImportPreflight.js +117 -0
  33. package/dist/AssetImportPreflight.js.map +1 -0
  34. package/dist/AssetInspection.d.ts +183 -0
  35. package/dist/AssetInspection.d.ts.map +1 -0
  36. package/dist/AssetInspection.js +397 -0
  37. package/dist/AssetInspection.js.map +1 -0
  38. package/dist/AssetLoader.d.ts +26 -0
  39. package/dist/AssetLoader.d.ts.map +1 -0
  40. package/dist/AssetLoader.js +12 -0
  41. package/dist/AssetLoader.js.map +1 -0
  42. package/dist/AssetManager.d.ts +37 -0
  43. package/dist/AssetManager.d.ts.map +1 -0
  44. package/dist/AssetManager.js +161 -0
  45. package/dist/AssetManager.js.map +1 -0
  46. package/dist/AssetRegistry.d.ts +10 -0
  47. package/dist/AssetRegistry.d.ts.map +1 -0
  48. package/dist/AssetRegistry.js +34 -0
  49. package/dist/AssetRegistry.js.map +1 -0
  50. package/dist/AssetRenderDefaults.d.ts +13 -0
  51. package/dist/AssetRenderDefaults.d.ts.map +1 -0
  52. package/dist/AssetRenderDefaults.js +23 -0
  53. package/dist/AssetRenderDefaults.js.map +1 -0
  54. package/dist/AudioLoader.d.ts +17 -0
  55. package/dist/AudioLoader.d.ts.map +1 -0
  56. package/dist/AudioLoader.js +23 -0
  57. package/dist/AudioLoader.js.map +1 -0
  58. package/dist/BlenderExportValidation.d.ts +64 -0
  59. package/dist/BlenderExportValidation.d.ts.map +1 -0
  60. package/dist/BlenderExportValidation.js +143 -0
  61. package/dist/BlenderExportValidation.js.map +1 -0
  62. package/dist/CarConceptMaterialStability.d.ts +28 -0
  63. package/dist/CarConceptMaterialStability.d.ts.map +1 -0
  64. package/dist/CarConceptMaterialStability.js +1308 -0
  65. package/dist/CarConceptMaterialStability.js.map +1 -0
  66. package/dist/EXRLoader.d.ts +2 -0
  67. package/dist/EXRLoader.d.ts.map +1 -0
  68. package/dist/EXRLoader.js +2 -0
  69. package/dist/EXRLoader.js.map +1 -0
  70. package/dist/ExternalParityGLTFCorpus.d.ts +39 -0
  71. package/dist/ExternalParityGLTFCorpus.d.ts.map +1 -0
  72. package/dist/ExternalParityGLTFCorpus.js +32 -0
  73. package/dist/ExternalParityGLTFCorpus.js.map +1 -0
  74. package/dist/GLTFAnimationRuntime.d.ts +243 -0
  75. package/dist/GLTFAnimationRuntime.d.ts.map +1 -0
  76. package/dist/GLTFAnimationRuntime.js +954 -0
  77. package/dist/GLTFAnimationRuntime.js.map +1 -0
  78. package/dist/GLTFCompressionDecoders.d.ts +42 -0
  79. package/dist/GLTFCompressionDecoders.d.ts.map +1 -0
  80. package/dist/GLTFCompressionDecoders.js +99 -0
  81. package/dist/GLTFCompressionDecoders.js.map +1 -0
  82. package/dist/GLTFExtensionSupport.d.ts +33 -0
  83. package/dist/GLTFExtensionSupport.d.ts.map +1 -0
  84. package/dist/GLTFExtensionSupport.js +85 -0
  85. package/dist/GLTFExtensionSupport.js.map +1 -0
  86. package/dist/GLTFLoader.d.ts +361 -0
  87. package/dist/GLTFLoader.d.ts.map +1 -0
  88. package/dist/GLTFLoader.js +2735 -0
  89. package/dist/GLTFLoader.js.map +1 -0
  90. package/dist/GLTFRenderResources.d.ts +162 -0
  91. package/dist/GLTFRenderResources.d.ts.map +1 -0
  92. package/dist/GLTFRenderResources.js +1684 -0
  93. package/dist/GLTFRenderResources.js.map +1 -0
  94. package/dist/HDRLoader.d.ts +2 -0
  95. package/dist/HDRLoader.d.ts.map +1 -0
  96. package/dist/HDRLoader.js +2 -0
  97. package/dist/HDRLoader.js.map +1 -0
  98. package/dist/ImageLoader.d.ts +15 -0
  99. package/dist/ImageLoader.d.ts.map +1 -0
  100. package/dist/ImageLoader.js +36 -0
  101. package/dist/ImageLoader.js.map +1 -0
  102. package/dist/ImportPipeline.d.ts +39 -0
  103. package/dist/ImportPipeline.d.ts.map +1 -0
  104. package/dist/ImportPipeline.js +105 -0
  105. package/dist/ImportPipeline.js.map +1 -0
  106. package/dist/KTX2BasisTextureTranscoder.d.ts +9 -0
  107. package/dist/KTX2BasisTextureTranscoder.d.ts.map +1 -0
  108. package/dist/KTX2BasisTextureTranscoder.js +178 -0
  109. package/dist/KTX2BasisTextureTranscoder.js.map +1 -0
  110. package/dist/LoadContext.d.ts +20 -0
  111. package/dist/LoadContext.d.ts.map +1 -0
  112. package/dist/LoadContext.js +42 -0
  113. package/dist/LoadContext.js.map +1 -0
  114. package/dist/MaterialLoader.d.ts +17 -0
  115. package/dist/MaterialLoader.d.ts.map +1 -0
  116. package/dist/MaterialLoader.js +138 -0
  117. package/dist/MaterialLoader.js.map +1 -0
  118. package/dist/MeshOptimization.d.ts +20 -0
  119. package/dist/MeshOptimization.d.ts.map +1 -0
  120. package/dist/MeshOptimization.js +65 -0
  121. package/dist/MeshOptimization.js.map +1 -0
  122. package/dist/OBJLoader.d.ts +13 -0
  123. package/dist/OBJLoader.d.ts.map +1 -0
  124. package/dist/OBJLoader.js +492 -0
  125. package/dist/OBJLoader.js.map +1 -0
  126. package/dist/SceneAnalysisFixtures.d.ts +100 -0
  127. package/dist/SceneAnalysisFixtures.d.ts.map +1 -0
  128. package/dist/SceneAnalysisFixtures.js +331 -0
  129. package/dist/SceneAnalysisFixtures.js.map +1 -0
  130. package/dist/SceneLoader.d.ts +27 -0
  131. package/dist/SceneLoader.d.ts.map +1 -0
  132. package/dist/SceneLoader.js +40 -0
  133. package/dist/SceneLoader.js.map +1 -0
  134. package/dist/ShaderLoader.d.ts +12 -0
  135. package/dist/ShaderLoader.d.ts.map +1 -0
  136. package/dist/ShaderLoader.js +18 -0
  137. package/dist/ShaderLoader.js.map +1 -0
  138. package/dist/TextureLoader.d.ts +16 -0
  139. package/dist/TextureLoader.d.ts.map +1 -0
  140. package/dist/TextureLoader.js +17 -0
  141. package/dist/TextureLoader.js.map +1 -0
  142. package/dist/TexturePipeline.d.ts +24 -0
  143. package/dist/TexturePipeline.d.ts.map +1 -0
  144. package/dist/TexturePipeline.js +64 -0
  145. package/dist/TexturePipeline.js.map +1 -0
  146. package/dist/TextureStreaming.d.ts +10 -0
  147. package/dist/TextureStreaming.d.ts.map +1 -0
  148. package/dist/TextureStreaming.js +11 -0
  149. package/dist/TextureStreaming.js.map +1 -0
  150. package/dist/WorkerAssetJobs.d.ts +18 -0
  151. package/dist/WorkerAssetJobs.d.ts.map +1 -0
  152. package/dist/WorkerAssetJobs.js +37 -0
  153. package/dist/WorkerAssetJobs.js.map +1 -0
  154. package/dist/advanced-gallery/index.d.ts +3 -0
  155. package/dist/advanced-gallery/index.d.ts.map +1 -0
  156. package/dist/advanced-gallery/index.js +2 -0
  157. package/dist/advanced-gallery/index.js.map +1 -0
  158. package/dist/asset-corpus/GLTFSceneLoader.d.ts +3 -0
  159. package/dist/asset-corpus/GLTFSceneLoader.d.ts.map +1 -0
  160. package/dist/asset-corpus/GLTFSceneLoader.js +2 -0
  161. package/dist/asset-corpus/GLTFSceneLoader.js.map +1 -0
  162. package/dist/asset-corpus/ProductionAssetCorpus.d.ts +89 -0
  163. package/dist/asset-corpus/ProductionAssetCorpus.d.ts.map +1 -0
  164. package/dist/asset-corpus/ProductionAssetCorpus.js +116 -0
  165. package/dist/asset-corpus/ProductionAssetCorpus.js.map +1 -0
  166. package/dist/asset-corpus/ProductionAssetPipeline.d.ts +3 -0
  167. package/dist/asset-corpus/ProductionAssetPipeline.d.ts.map +1 -0
  168. package/dist/asset-corpus/ProductionAssetPipeline.js +3 -0
  169. package/dist/asset-corpus/ProductionAssetPipeline.js.map +1 -0
  170. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts +65 -0
  171. package/dist/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -0
  172. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js +110 -0
  173. package/dist/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -0
  174. package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts +8 -0
  175. package/dist/asset-corpus/ProductionHDRTextureLoader.d.ts.map +1 -0
  176. package/dist/asset-corpus/ProductionHDRTextureLoader.js +2 -0
  177. package/dist/asset-corpus/ProductionHDRTextureLoader.js.map +1 -0
  178. package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts +7 -0
  179. package/dist/asset-corpus/ProductionKTX2TextureLoader.d.ts.map +1 -0
  180. package/dist/asset-corpus/ProductionKTX2TextureLoader.js +2 -0
  181. package/dist/asset-corpus/ProductionKTX2TextureLoader.js.map +1 -0
  182. package/dist/asset-corpus/ProductionTextureLoader.d.ts +7 -0
  183. package/dist/asset-corpus/ProductionTextureLoader.d.ts.map +1 -0
  184. package/dist/asset-corpus/ProductionTextureLoader.js +2 -0
  185. package/dist/asset-corpus/ProductionTextureLoader.js.map +1 -0
  186. package/dist/asset-corpus/index.d.ts +10 -0
  187. package/dist/asset-corpus/index.d.ts.map +1 -0
  188. package/dist/asset-corpus/index.js +8 -0
  189. package/dist/asset-corpus/index.js.map +1 -0
  190. package/dist/browser-index.d.ts +48 -0
  191. package/dist/browser-index.d.ts.map +1 -0
  192. package/dist/browser-index.js +26 -0
  193. package/dist/browser-index.js.map +1 -0
  194. package/dist/createRenderableScene.d.ts +23 -0
  195. package/dist/createRenderableScene.d.ts.map +1 -0
  196. package/dist/createRenderableScene.js +94 -0
  197. package/dist/createRenderableScene.js.map +1 -0
  198. package/dist/index.d.ts +82 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +45 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/loadRenderableAsset.d.ts +16 -0
  203. package/dist/loadRenderableAsset.d.ts.map +1 -0
  204. package/dist/loadRenderableAsset.js +50 -0
  205. package/dist/loadRenderableAsset.js.map +1 -0
  206. package/dist/loaders/CubeTextureLoader.d.ts +4 -0
  207. package/dist/loaders/CubeTextureLoader.d.ts.map +1 -0
  208. package/dist/loaders/CubeTextureLoader.js +9 -0
  209. package/dist/loaders/CubeTextureLoader.js.map +1 -0
  210. package/dist/loaders/EXRLoader.d.ts +4 -0
  211. package/dist/loaders/EXRLoader.d.ts.map +1 -0
  212. package/dist/loaders/EXRLoader.js +10 -0
  213. package/dist/loaders/EXRLoader.js.map +1 -0
  214. package/dist/loaders/HDRLoader.d.ts +4 -0
  215. package/dist/loaders/HDRLoader.d.ts.map +1 -0
  216. package/dist/loaders/HDRLoader.js +7 -0
  217. package/dist/loaders/HDRLoader.js.map +1 -0
  218. package/dist/loaders/KTX2Loader.d.ts +4 -0
  219. package/dist/loaders/KTX2Loader.d.ts.map +1 -0
  220. package/dist/loaders/KTX2Loader.js +7 -0
  221. package/dist/loaders/KTX2Loader.js.map +1 -0
  222. package/dist/loaders/LoaderDiagnostics.d.ts +18 -0
  223. package/dist/loaders/LoaderDiagnostics.d.ts.map +1 -0
  224. package/dist/loaders/LoaderDiagnostics.js +18 -0
  225. package/dist/loaders/LoaderDiagnostics.js.map +1 -0
  226. package/dist/loaders/MTLLoader.d.ts +10 -0
  227. package/dist/loaders/MTLLoader.d.ts.map +1 -0
  228. package/dist/loaders/MTLLoader.js +14 -0
  229. package/dist/loaders/MTLLoader.js.map +1 -0
  230. package/dist/loaders/OBJLoader.d.ts +12 -0
  231. package/dist/loaders/OBJLoader.d.ts.map +1 -0
  232. package/dist/loaders/OBJLoader.js +16 -0
  233. package/dist/loaders/OBJLoader.js.map +1 -0
  234. package/dist/loaders/TextureLoader.d.ts +6 -0
  235. package/dist/loaders/TextureLoader.d.ts.map +1 -0
  236. package/dist/loaders/TextureLoader.js +11 -0
  237. package/dist/loaders/TextureLoader.js.map +1 -0
  238. package/dist/loaders/ThreeCompatGLTFLoader.d.ts +10 -0
  239. package/dist/loaders/ThreeCompatGLTFLoader.d.ts.map +1 -0
  240. package/dist/loaders/ThreeCompatGLTFLoader.js +13 -0
  241. package/dist/loaders/ThreeCompatGLTFLoader.js.map +1 -0
  242. package/dist/loaders/index.d.ts +15 -0
  243. package/dist/loaders/index.d.ts.map +1 -0
  244. package/dist/loaders/index.js +10 -0
  245. package/dist/loaders/index.js.map +1 -0
  246. package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts +34 -0
  247. package/dist/threejs-compatibility/ThreeCompatAssetProvenance.d.ts.map +1 -0
  248. package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js +16 -0
  249. package/dist/threejs-compatibility/ThreeCompatAssetProvenance.js.map +1 -0
  250. package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts +29 -0
  251. package/dist/threejs-compatibility/ThreeCompatAssetRegistry.d.ts.map +1 -0
  252. package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js +33 -0
  253. package/dist/threejs-compatibility/ThreeCompatAssetRegistry.js.map +1 -0
  254. package/dist/threejs-example-parity/index.d.ts +20 -0
  255. package/dist/threejs-example-parity/index.d.ts.map +1 -0
  256. package/dist/threejs-example-parity/index.js +218 -0
  257. package/dist/threejs-example-parity/index.js.map +1 -0
  258. package/package.json +23 -0
  259. package/src/AdvancedAssetCorpus.ts +454 -0
  260. package/src/AssetBundleCacheFixtures.ts +290 -0
  261. package/src/AssetCache.ts +76 -0
  262. package/src/AssetCompatibility.ts +224 -0
  263. package/src/AssetCorpus.ts +329 -0
  264. package/src/AssetDependencyGraph.ts +83 -0
  265. package/src/AssetHandle.ts +74 -0
  266. package/src/AssetImportPreflight.ts +179 -0
  267. package/src/AssetInspection.ts +706 -0
  268. package/src/AssetLoader.ts +36 -0
  269. package/src/AssetManager.ts +211 -0
  270. package/src/AssetRegistry.ts +44 -0
  271. package/src/AssetRenderDefaults.ts +36 -0
  272. package/src/AudioLoader.ts +41 -0
  273. package/src/BlenderExportValidation.ts +227 -0
  274. package/src/CarConceptMaterialStability.ts +1405 -0
  275. package/src/EXRLoader.ts +1 -0
  276. package/src/ExternalParityGLTFCorpus.ts +65 -0
  277. package/src/GLTFAnimationRuntime.ts +1221 -0
  278. package/src/GLTFCompressionDecoders.ts +190 -0
  279. package/src/GLTFExtensionSupport.ts +138 -0
  280. package/src/GLTFLoader.ts +4001 -0
  281. package/src/GLTFRenderResources.ts +2105 -0
  282. package/src/HDRLoader.ts +1 -0
  283. package/src/ImageLoader.ts +52 -0
  284. package/src/ImportPipeline.ts +148 -0
  285. package/src/KTX2BasisTextureTranscoder.ts +224 -0
  286. package/src/LoadContext.ts +60 -0
  287. package/src/MaterialLoader.ts +166 -0
  288. package/src/MeshOptimization.ts +93 -0
  289. package/src/OBJLoader.ts +551 -0
  290. package/src/SceneAnalysisFixtures.ts +438 -0
  291. package/src/SceneLoader.ts +62 -0
  292. package/src/ShaderLoader.ts +30 -0
  293. package/src/TextureLoader.ts +30 -0
  294. package/src/TexturePipeline.ts +96 -0
  295. package/src/TextureStreaming.ts +20 -0
  296. package/src/WorkerAssetJobs.ts +56 -0
  297. package/src/advanced-gallery/index.ts +18 -0
  298. package/src/asset-corpus/GLTFSceneLoader.ts +9 -0
  299. package/src/asset-corpus/ProductionAssetCorpus.ts +230 -0
  300. package/src/asset-corpus/ProductionAssetPipeline.ts +5 -0
  301. package/src/asset-corpus/ProductionGLTFRenderPipeline.ts +182 -0
  302. package/src/asset-corpus/ProductionHDRTextureLoader.ts +2 -0
  303. package/src/asset-corpus/ProductionKTX2TextureLoader.ts +2 -0
  304. package/src/asset-corpus/ProductionTextureLoader.ts +2 -0
  305. package/src/asset-corpus/index.ts +29 -0
  306. package/src/browser-index.ts +224 -0
  307. package/src/createRenderableScene.ts +128 -0
  308. package/src/index.ts +317 -0
  309. package/src/loadRenderableAsset.ts +67 -0
  310. package/src/loaders/CubeTextureLoader.ts +8 -0
  311. package/src/loaders/EXRLoader.ts +10 -0
  312. package/src/loaders/HDRLoader.ts +7 -0
  313. package/src/loaders/KTX2Loader.ts +7 -0
  314. package/src/loaders/LoaderDiagnostics.ts +36 -0
  315. package/src/loaders/MTLLoader.ts +20 -0
  316. package/src/loaders/OBJLoader.ts +24 -0
  317. package/src/loaders/TextureLoader.ts +14 -0
  318. package/src/loaders/ThreeCompatGLTFLoader.ts +19 -0
  319. package/src/loaders/index.ts +14 -0
  320. package/src/threejs-compatibility/ThreeCompatAssetProvenance.ts +51 -0
  321. package/src/threejs-compatibility/ThreeCompatAssetRegistry.ts +61 -0
  322. package/src/threejs-example-parity/index.ts +262 -0
  323. package/tests/assets.test.ts +311 -0
  324. 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":"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"}
@@ -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