@babylonjs/loaders 9.13.0 → 9.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/BVH/bvhFileLoader.d.ts +4 -67
  2. package/BVH/bvhFileLoader.js +6 -130
  3. package/BVH/bvhFileLoader.js.map +1 -1
  4. package/BVH/bvhFileLoader.pure.d.ts +75 -0
  5. package/BVH/bvhFileLoader.pure.js +154 -0
  6. package/BVH/bvhFileLoader.pure.js.map +1 -0
  7. package/BVH/bvhFileLoader.types.d.ts +11 -0
  8. package/BVH/bvhFileLoader.types.js +2 -0
  9. package/BVH/bvhFileLoader.types.js.map +1 -0
  10. package/BVH/pure.d.ts +3 -0
  11. package/BVH/pure.js +5 -0
  12. package/BVH/pure.js.map +1 -0
  13. package/FBX/fbxFileLoader.d.ts +4 -192
  14. package/FBX/fbxFileLoader.js +6 -2437
  15. package/FBX/fbxFileLoader.js.map +1 -1
  16. package/FBX/fbxFileLoader.pure.d.ts +190 -0
  17. package/FBX/fbxFileLoader.pure.js +2451 -0
  18. package/FBX/fbxFileLoader.pure.js.map +1 -0
  19. package/FBX/fbxFileLoader.types.d.ts +11 -0
  20. package/FBX/fbxFileLoader.types.js +2 -0
  21. package/FBX/fbxFileLoader.types.js.map +1 -0
  22. package/FBX/pure.d.ts +3 -0
  23. package/FBX/pure.js +4 -0
  24. package/FBX/pure.js.map +1 -0
  25. package/OBJ/objFileLoader.d.ts +4 -134
  26. package/OBJ/objFileLoader.js +6 -315
  27. package/OBJ/objFileLoader.js.map +1 -1
  28. package/OBJ/objFileLoader.pure.d.ts +132 -0
  29. package/OBJ/objFileLoader.pure.js +329 -0
  30. package/OBJ/objFileLoader.pure.js.map +1 -0
  31. package/OBJ/objFileLoader.types.d.ts +11 -0
  32. package/OBJ/objFileLoader.types.js +2 -0
  33. package/OBJ/objFileLoader.types.js.map +1 -0
  34. package/OBJ/pure.d.ts +5 -0
  35. package/OBJ/pure.js +6 -0
  36. package/OBJ/pure.js.map +1 -0
  37. package/OBJ/solidParser.js +4 -3
  38. package/OBJ/solidParser.js.map +1 -1
  39. package/SPLAT/gaussianSplattingBlockAllocator.d.ts +137 -0
  40. package/SPLAT/gaussianSplattingBlockAllocator.js +555 -0
  41. package/SPLAT/gaussianSplattingBlockAllocator.js.map +1 -0
  42. package/SPLAT/gaussianSplattingDownloadManager.d.ts +109 -0
  43. package/SPLAT/gaussianSplattingDownloadManager.js +241 -0
  44. package/SPLAT/gaussianSplattingDownloadManager.js.map +1 -0
  45. package/SPLAT/gaussianSplattingResidencyController.d.ts +133 -0
  46. package/SPLAT/gaussianSplattingResidencyController.js +222 -0
  47. package/SPLAT/gaussianSplattingResidencyController.js.map +1 -0
  48. package/SPLAT/gaussianSplattingStream.d.ts +122 -4
  49. package/SPLAT/gaussianSplattingStream.js +413 -42
  50. package/SPLAT/gaussianSplattingStream.js.map +1 -1
  51. package/SPLAT/gaussianSplattingWorkBuffer.d.ts +36 -0
  52. package/SPLAT/gaussianSplattingWorkBuffer.js +125 -13
  53. package/SPLAT/gaussianSplattingWorkBuffer.js.map +1 -1
  54. package/SPLAT/gaussianSplattingWorkBufferShaders.d.ts +15 -0
  55. package/SPLAT/gaussianSplattingWorkBufferShaders.js +82 -0
  56. package/SPLAT/gaussianSplattingWorkBufferShaders.js.map +1 -1
  57. package/SPLAT/pure.d.ts +5 -0
  58. package/SPLAT/pure.js +7 -0
  59. package/SPLAT/pure.js.map +1 -0
  60. package/SPLAT/sog.d.ts +1 -97
  61. package/SPLAT/sog.js +1 -501
  62. package/SPLAT/sog.js.map +1 -1
  63. package/SPLAT/sog.pure.d.ts +102 -0
  64. package/SPLAT/sog.pure.js +514 -0
  65. package/SPLAT/sog.pure.js.map +1 -0
  66. package/SPLAT/splatFileLoader.d.ts +5 -106
  67. package/SPLAT/splatFileLoader.js +9 -636
  68. package/SPLAT/splatFileLoader.js.map +1 -1
  69. package/SPLAT/splatFileLoader.pure.d.ts +104 -0
  70. package/SPLAT/splatFileLoader.pure.js +650 -0
  71. package/SPLAT/splatFileLoader.pure.js.map +1 -0
  72. package/SPLAT/splatFileLoader.types.d.ts +11 -0
  73. package/SPLAT/splatFileLoader.types.js +2 -0
  74. package/SPLAT/splatFileLoader.types.js.map +1 -0
  75. package/STL/pure.d.ts +2 -0
  76. package/STL/pure.js +3 -0
  77. package/STL/pure.js.map +1 -0
  78. package/STL/stlFileLoader.d.ts +5 -76
  79. package/STL/stlFileLoader.js +7 -236
  80. package/STL/stlFileLoader.js.map +1 -1
  81. package/STL/stlFileLoader.pure.d.ts +73 -0
  82. package/STL/stlFileLoader.pure.js +249 -0
  83. package/STL/stlFileLoader.pure.js.map +1 -0
  84. package/STL/stlFileLoader.types.d.ts +10 -0
  85. package/STL/stlFileLoader.types.js +2 -0
  86. package/STL/stlFileLoader.types.js.map +1 -0
  87. package/glTF/1.0/pure.d.ts +3 -0
  88. package/glTF/1.0/pure.js +4 -0
  89. package/glTF/1.0/pure.js.map +1 -0
  90. package/glTF/2.0/Extensions/EXT_lights_area.d.ts +4 -39
  91. package/glTF/2.0/Extensions/EXT_lights_area.js +6 -91
  92. package/glTF/2.0/Extensions/EXT_lights_area.js.map +1 -1
  93. package/glTF/2.0/Extensions/EXT_lights_area.pure.d.ts +38 -0
  94. package/glTF/2.0/Extensions/EXT_lights_area.pure.js +106 -0
  95. package/glTF/2.0/Extensions/EXT_lights_area.pure.js.map +1 -0
  96. package/glTF/2.0/Extensions/EXT_lights_area.types.d.ts +9 -0
  97. package/glTF/2.0/Extensions/EXT_lights_area.types.js +2 -0
  98. package/glTF/2.0/Extensions/EXT_lights_area.types.js.map +1 -0
  99. package/glTF/2.0/Extensions/EXT_lights_ies.d.ts +4 -39
  100. package/glTF/2.0/Extensions/EXT_lights_ies.js +6 -81
  101. package/glTF/2.0/Extensions/EXT_lights_ies.js.map +1 -1
  102. package/glTF/2.0/Extensions/EXT_lights_ies.pure.d.ts +38 -0
  103. package/glTF/2.0/Extensions/EXT_lights_ies.pure.js +96 -0
  104. package/glTF/2.0/Extensions/EXT_lights_ies.pure.js.map +1 -0
  105. package/glTF/2.0/Extensions/EXT_lights_ies.types.d.ts +9 -0
  106. package/glTF/2.0/Extensions/EXT_lights_ies.types.js +2 -0
  107. package/glTF/2.0/Extensions/EXT_lights_ies.types.js.map +1 -0
  108. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +4 -46
  109. package/glTF/2.0/Extensions/EXT_lights_image_based.js +6 -113
  110. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
  111. package/glTF/2.0/Extensions/EXT_lights_image_based.pure.d.ts +37 -0
  112. package/glTF/2.0/Extensions/EXT_lights_image_based.pure.js +128 -0
  113. package/glTF/2.0/Extensions/EXT_lights_image_based.pure.js.map +1 -0
  114. package/glTF/2.0/Extensions/EXT_lights_image_based.types.d.ts +17 -0
  115. package/glTF/2.0/Extensions/EXT_lights_image_based.types.js +2 -0
  116. package/glTF/2.0/Extensions/EXT_lights_image_based.types.js.map +1 -0
  117. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +5 -37
  118. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +7 -92
  119. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  120. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.d.ts +35 -0
  121. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js +106 -0
  122. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js.map +1 -0
  123. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.types.d.ts +9 -0
  124. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.types.js +2 -0
  125. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.types.js.map +1 -0
  126. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +4 -37
  127. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +6 -48
  128. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
  129. package/glTF/2.0/Extensions/EXT_meshopt_compression.pure.d.ts +36 -0
  130. package/glTF/2.0/Extensions/EXT_meshopt_compression.pure.js +63 -0
  131. package/glTF/2.0/Extensions/EXT_meshopt_compression.pure.js.map +1 -0
  132. package/glTF/2.0/Extensions/EXT_meshopt_compression.types.d.ts +9 -0
  133. package/glTF/2.0/Extensions/EXT_meshopt_compression.types.js +2 -0
  134. package/glTF/2.0/Extensions/EXT_meshopt_compression.types.js.map +1 -0
  135. package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +4 -32
  136. package/glTF/2.0/Extensions/EXT_texture_avif.js +6 -36
  137. package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
  138. package/glTF/2.0/Extensions/EXT_texture_avif.pure.d.ts +31 -0
  139. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +51 -0
  140. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -0
  141. package/glTF/2.0/Extensions/EXT_texture_avif.types.d.ts +9 -0
  142. package/glTF/2.0/Extensions/EXT_texture_avif.types.js +2 -0
  143. package/glTF/2.0/Extensions/EXT_texture_avif.types.js.map +1 -0
  144. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +4 -31
  145. package/glTF/2.0/Extensions/EXT_texture_webp.js +6 -35
  146. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  147. package/glTF/2.0/Extensions/EXT_texture_webp.pure.d.ts +30 -0
  148. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +50 -0
  149. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -0
  150. package/glTF/2.0/Extensions/EXT_texture_webp.types.d.ts +9 -0
  151. package/glTF/2.0/Extensions/EXT_texture_webp.types.js +2 -0
  152. package/glTF/2.0/Extensions/EXT_texture_webp.types.js.map +1 -0
  153. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +4 -51
  154. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +6 -71
  155. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
  156. package/glTF/2.0/Extensions/ExtrasAsMetadata.pure.d.ts +50 -0
  157. package/glTF/2.0/Extensions/ExtrasAsMetadata.pure.js +85 -0
  158. package/glTF/2.0/Extensions/ExtrasAsMetadata.pure.js.map +1 -0
  159. package/glTF/2.0/Extensions/ExtrasAsMetadata.types.d.ts +9 -0
  160. package/glTF/2.0/Extensions/ExtrasAsMetadata.types.js +2 -0
  161. package/glTF/2.0/Extensions/ExtrasAsMetadata.types.js.map +1 -0
  162. package/glTF/2.0/Extensions/KHR_animation_pointer.d.ts +5 -45
  163. package/glTF/2.0/Extensions/KHR_animation_pointer.js +7 -75
  164. package/glTF/2.0/Extensions/KHR_animation_pointer.js.map +1 -1
  165. package/glTF/2.0/Extensions/KHR_animation_pointer.pure.d.ts +43 -0
  166. package/glTF/2.0/Extensions/KHR_animation_pointer.pure.js +89 -0
  167. package/glTF/2.0/Extensions/KHR_animation_pointer.pure.js.map +1 -0
  168. package/glTF/2.0/Extensions/KHR_animation_pointer.types.d.ts +9 -0
  169. package/glTF/2.0/Extensions/KHR_animation_pointer.types.js +2 -0
  170. package/glTF/2.0/Extensions/KHR_animation_pointer.types.js.map +1 -0
  171. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +4 -45
  172. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +6 -90
  173. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  174. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.d.ts +44 -0
  175. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js +105 -0
  176. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js.map +1 -0
  177. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.types.d.ts +9 -0
  178. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.types.js +2 -0
  179. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.types.js.map +1 -0
  180. package/glTF/2.0/Extensions/KHR_interactivity/pure.d.ts +4 -0
  181. package/glTF/2.0/Extensions/KHR_interactivity/pure.js +5 -0
  182. package/glTF/2.0/Extensions/KHR_interactivity/pure.js.map +1 -0
  183. package/glTF/2.0/Extensions/KHR_interactivity.d.ts +4 -36
  184. package/glTF/2.0/Extensions/KHR_interactivity.js +6 -148
  185. package/glTF/2.0/Extensions/KHR_interactivity.js.map +1 -1
  186. package/glTF/2.0/Extensions/KHR_interactivity.pure.d.ts +35 -0
  187. package/glTF/2.0/Extensions/KHR_interactivity.pure.js +163 -0
  188. package/glTF/2.0/Extensions/KHR_interactivity.pure.js.map +1 -0
  189. package/glTF/2.0/Extensions/KHR_interactivity.types.d.ts +9 -0
  190. package/glTF/2.0/Extensions/KHR_interactivity.types.js +2 -0
  191. package/glTF/2.0/Extensions/KHR_interactivity.types.js.map +1 -0
  192. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +4 -39
  193. package/glTF/2.0/Extensions/KHR_lights_punctual.js +6 -89
  194. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  195. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.d.ts +38 -0
  196. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js +104 -0
  197. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js.map +1 -0
  198. package/glTF/2.0/Extensions/KHR_lights_punctual.types.d.ts +9 -0
  199. package/glTF/2.0/Extensions/KHR_lights_punctual.types.js +2 -0
  200. package/glTF/2.0/Extensions/KHR_lights_punctual.types.js.map +1 -0
  201. package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +4 -40
  202. package/glTF/2.0/Extensions/KHR_materials_anisotropy.js +6 -63
  203. package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
  204. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.d.ts +39 -0
  205. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js +78 -0
  206. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js.map +1 -0
  207. package/glTF/2.0/Extensions/KHR_materials_anisotropy.types.d.ts +9 -0
  208. package/glTF/2.0/Extensions/KHR_materials_anisotropy.types.js +2 -0
  209. package/glTF/2.0/Extensions/KHR_materials_anisotropy.types.js.map +1 -0
  210. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +4 -41
  211. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +6 -77
  212. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  213. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.d.ts +40 -0
  214. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js +92 -0
  215. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js.map +1 -0
  216. package/glTF/2.0/Extensions/KHR_materials_clearcoat.types.d.ts +9 -0
  217. package/glTF/2.0/Extensions/KHR_materials_clearcoat.types.js +2 -0
  218. package/glTF/2.0/Extensions/KHR_materials_clearcoat.types.js.map +1 -0
  219. package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +4 -47
  220. package/glTF/2.0/Extensions/KHR_materials_coat.js +6 -117
  221. package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -1
  222. package/glTF/2.0/Extensions/KHR_materials_coat.pure.d.ts +46 -0
  223. package/glTF/2.0/Extensions/KHR_materials_coat.pure.js +132 -0
  224. package/glTF/2.0/Extensions/KHR_materials_coat.pure.js.map +1 -0
  225. package/glTF/2.0/Extensions/KHR_materials_coat.types.d.ts +9 -0
  226. package/glTF/2.0/Extensions/KHR_materials_coat.types.js +2 -0
  227. package/glTF/2.0/Extensions/KHR_materials_coat.types.js.map +1 -0
  228. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +4 -41
  229. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js +6 -56
  230. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -1
  231. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.d.ts +40 -0
  232. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js +71 -0
  233. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js.map +1 -0
  234. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.types.d.ts +9 -0
  235. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.types.js +2 -0
  236. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.types.js.map +1 -0
  237. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +4 -41
  238. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +6 -71
  239. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
  240. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.d.ts +40 -0
  241. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js +86 -0
  242. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js.map +1 -0
  243. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.types.d.ts +9 -0
  244. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.types.js +2 -0
  245. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.types.js.map +1 -0
  246. package/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +4 -41
  247. package/glTF/2.0/Extensions/KHR_materials_dispersion.js +6 -54
  248. package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
  249. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.d.ts +40 -0
  250. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js +69 -0
  251. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js.map +1 -0
  252. package/glTF/2.0/Extensions/KHR_materials_dispersion.types.d.ts +9 -0
  253. package/glTF/2.0/Extensions/KHR_materials_dispersion.types.js +2 -0
  254. package/glTF/2.0/Extensions/KHR_materials_dispersion.types.js.map +1 -0
  255. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +4 -40
  256. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +6 -45
  257. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  258. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.d.ts +39 -0
  259. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js +60 -0
  260. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js.map +1 -0
  261. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.types.d.ts +9 -0
  262. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.types.js +2 -0
  263. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.types.js.map +1 -0
  264. package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +4 -41
  265. package/glTF/2.0/Extensions/KHR_materials_fuzz.js +6 -75
  266. package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -1
  267. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.d.ts +40 -0
  268. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js +90 -0
  269. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js.map +1 -0
  270. package/glTF/2.0/Extensions/KHR_materials_fuzz.types.d.ts +9 -0
  271. package/glTF/2.0/Extensions/KHR_materials_fuzz.types.js +2 -0
  272. package/glTF/2.0/Extensions/KHR_materials_fuzz.types.js.map +1 -0
  273. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +4 -44
  274. package/glTF/2.0/Extensions/KHR_materials_ior.js +6 -52
  275. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  276. package/glTF/2.0/Extensions/KHR_materials_ior.pure.d.ts +43 -0
  277. package/glTF/2.0/Extensions/KHR_materials_ior.pure.js +67 -0
  278. package/glTF/2.0/Extensions/KHR_materials_ior.pure.js.map +1 -0
  279. package/glTF/2.0/Extensions/KHR_materials_ior.types.d.ts +9 -0
  280. package/glTF/2.0/Extensions/KHR_materials_ior.types.js +2 -0
  281. package/glTF/2.0/Extensions/KHR_materials_ior.types.js.map +1 -0
  282. package/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +4 -40
  283. package/glTF/2.0/Extensions/KHR_materials_iridescence.js +6 -66
  284. package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
  285. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.d.ts +39 -0
  286. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js +81 -0
  287. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js.map +1 -0
  288. package/glTF/2.0/Extensions/KHR_materials_iridescence.types.d.ts +9 -0
  289. package/glTF/2.0/Extensions/KHR_materials_iridescence.types.js +2 -0
  290. package/glTF/2.0/Extensions/KHR_materials_iridescence.types.js.map +1 -0
  291. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +4 -40
  292. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +6 -72
  293. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
  294. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.pure.d.ts +39 -0
  295. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.pure.js +87 -0
  296. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.pure.js.map +1 -0
  297. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.types.d.ts +9 -0
  298. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.types.js +2 -0
  299. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.types.js.map +1 -0
  300. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +4 -41
  301. package/glTF/2.0/Extensions/KHR_materials_sheen.js +6 -71
  302. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  303. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.d.ts +40 -0
  304. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js +86 -0
  305. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js.map +1 -0
  306. package/glTF/2.0/Extensions/KHR_materials_sheen.types.d.ts +9 -0
  307. package/glTF/2.0/Extensions/KHR_materials_sheen.types.js +2 -0
  308. package/glTF/2.0/Extensions/KHR_materials_sheen.types.js.map +1 -0
  309. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +4 -40
  310. package/glTF/2.0/Extensions/KHR_materials_specular.js +6 -74
  311. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  312. package/glTF/2.0/Extensions/KHR_materials_specular.pure.d.ts +39 -0
  313. package/glTF/2.0/Extensions/KHR_materials_specular.pure.js +89 -0
  314. package/glTF/2.0/Extensions/KHR_materials_specular.pure.js.map +1 -0
  315. package/glTF/2.0/Extensions/KHR_materials_specular.types.d.ts +9 -0
  316. package/glTF/2.0/Extensions/KHR_materials_specular.types.js +2 -0
  317. package/glTF/2.0/Extensions/KHR_materials_specular.types.js.map +1 -0
  318. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +4 -40
  319. package/glTF/2.0/Extensions/KHR_materials_transmission.js +6 -70
  320. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  321. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.d.ts +39 -0
  322. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js +85 -0
  323. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js.map +1 -0
  324. package/glTF/2.0/Extensions/KHR_materials_transmission.types.d.ts +9 -0
  325. package/glTF/2.0/Extensions/KHR_materials_transmission.types.js +2 -0
  326. package/glTF/2.0/Extensions/KHR_materials_transmission.types.js.map +1 -0
  327. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +4 -40
  328. package/glTF/2.0/Extensions/KHR_materials_unlit.js +6 -64
  329. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  330. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.d.ts +39 -0
  331. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js +79 -0
  332. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js.map +1 -0
  333. package/glTF/2.0/Extensions/KHR_materials_unlit.types.d.ts +9 -0
  334. package/glTF/2.0/Extensions/KHR_materials_unlit.types.js +2 -0
  335. package/glTF/2.0/Extensions/KHR_materials_unlit.types.js.map +1 -0
  336. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +4 -110
  337. package/glTF/2.0/Extensions/KHR_materials_variants.js +6 -260
  338. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
  339. package/glTF/2.0/Extensions/KHR_materials_variants.pure.d.ts +97 -0
  340. package/glTF/2.0/Extensions/KHR_materials_variants.pure.js +275 -0
  341. package/glTF/2.0/Extensions/KHR_materials_variants.pure.js.map +1 -0
  342. package/glTF/2.0/Extensions/KHR_materials_variants.types.d.ts +29 -0
  343. package/glTF/2.0/Extensions/KHR_materials_variants.types.js +2 -0
  344. package/glTF/2.0/Extensions/KHR_materials_variants.types.js.map +1 -0
  345. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +4 -41
  346. package/glTF/2.0/Extensions/KHR_materials_volume.js +6 -77
  347. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  348. package/glTF/2.0/Extensions/KHR_materials_volume.pure.d.ts +40 -0
  349. package/glTF/2.0/Extensions/KHR_materials_volume.pure.js +92 -0
  350. package/glTF/2.0/Extensions/KHR_materials_volume.pure.js.map +1 -0
  351. package/glTF/2.0/Extensions/KHR_materials_volume.types.d.ts +9 -0
  352. package/glTF/2.0/Extensions/KHR_materials_volume.types.js +2 -0
  353. package/glTF/2.0/Extensions/KHR_materials_volume.types.js.map +1 -0
  354. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +4 -43
  355. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js +6 -113
  356. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js.map +1 -1
  357. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.d.ts +42 -0
  358. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js +128 -0
  359. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js.map +1 -0
  360. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.types.d.ts +9 -0
  361. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.types.js +2 -0
  362. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.types.js.map +1 -0
  363. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +4 -27
  364. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +6 -20
  365. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
  366. package/glTF/2.0/Extensions/KHR_mesh_quantization.pure.d.ts +26 -0
  367. package/glTF/2.0/Extensions/KHR_mesh_quantization.pure.js +35 -0
  368. package/glTF/2.0/Extensions/KHR_mesh_quantization.pure.js.map +1 -0
  369. package/glTF/2.0/Extensions/KHR_mesh_quantization.types.d.ts +9 -0
  370. package/glTF/2.0/Extensions/KHR_mesh_quantization.types.js +2 -0
  371. package/glTF/2.0/Extensions/KHR_mesh_quantization.types.js.map +1 -0
  372. package/glTF/2.0/Extensions/KHR_node_hoverability.d.ts +4 -29
  373. package/glTF/2.0/Extensions/KHR_node_hoverability.js +6 -187
  374. package/glTF/2.0/Extensions/KHR_node_hoverability.js.map +1 -1
  375. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.d.ts +28 -0
  376. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js +202 -0
  377. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js.map +1 -0
  378. package/glTF/2.0/Extensions/KHR_node_hoverability.types.d.ts +9 -0
  379. package/glTF/2.0/Extensions/KHR_node_hoverability.types.js +2 -0
  380. package/glTF/2.0/Extensions/KHR_node_hoverability.types.js.map +1 -0
  381. package/glTF/2.0/Extensions/KHR_node_selectability.d.ts +4 -28
  382. package/glTF/2.0/Extensions/KHR_node_selectability.js +6 -121
  383. package/glTF/2.0/Extensions/KHR_node_selectability.js.map +1 -1
  384. package/glTF/2.0/Extensions/KHR_node_selectability.pure.d.ts +27 -0
  385. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js +136 -0
  386. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js.map +1 -0
  387. package/glTF/2.0/Extensions/KHR_node_selectability.types.d.ts +9 -0
  388. package/glTF/2.0/Extensions/KHR_node_selectability.types.js +2 -0
  389. package/glTF/2.0/Extensions/KHR_node_selectability.types.js.map +1 -0
  390. package/glTF/2.0/Extensions/KHR_node_visibility.d.ts +4 -28
  391. package/glTF/2.0/Extensions/KHR_node_visibility.js +6 -64
  392. package/glTF/2.0/Extensions/KHR_node_visibility.js.map +1 -1
  393. package/glTF/2.0/Extensions/KHR_node_visibility.pure.d.ts +27 -0
  394. package/glTF/2.0/Extensions/KHR_node_visibility.pure.js +79 -0
  395. package/glTF/2.0/Extensions/KHR_node_visibility.pure.js.map +1 -0
  396. package/glTF/2.0/Extensions/KHR_node_visibility.types.d.ts +9 -0
  397. package/glTF/2.0/Extensions/KHR_node_visibility.types.js +2 -0
  398. package/glTF/2.0/Extensions/KHR_node_visibility.types.js.map +1 -0
  399. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +4 -31
  400. package/glTF/2.0/Extensions/KHR_texture_basisu.js +6 -35
  401. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  402. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.d.ts +30 -0
  403. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +50 -0
  404. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -0
  405. package/glTF/2.0/Extensions/KHR_texture_basisu.types.d.ts +9 -0
  406. package/glTF/2.0/Extensions/KHR_texture_basisu.types.js +2 -0
  407. package/glTF/2.0/Extensions/KHR_texture_basisu.types.js.map +1 -0
  408. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +4 -35
  409. package/glTF/2.0/Extensions/KHR_texture_transform.js +6 -56
  410. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  411. package/glTF/2.0/Extensions/KHR_texture_transform.pure.d.ts +34 -0
  412. package/glTF/2.0/Extensions/KHR_texture_transform.pure.js +71 -0
  413. package/glTF/2.0/Extensions/KHR_texture_transform.pure.js.map +1 -0
  414. package/glTF/2.0/Extensions/KHR_texture_transform.types.d.ts +9 -0
  415. package/glTF/2.0/Extensions/KHR_texture_transform.types.js +2 -0
  416. package/glTF/2.0/Extensions/KHR_texture_transform.types.js.map +1 -0
  417. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +4 -37
  418. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +6 -45
  419. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
  420. package/glTF/2.0/Extensions/KHR_xmp_json_ld.pure.d.ts +36 -0
  421. package/glTF/2.0/Extensions/KHR_xmp_json_ld.pure.js +60 -0
  422. package/glTF/2.0/Extensions/KHR_xmp_json_ld.pure.js.map +1 -0
  423. package/glTF/2.0/Extensions/KHR_xmp_json_ld.types.d.ts +9 -0
  424. package/glTF/2.0/Extensions/KHR_xmp_json_ld.types.js +2 -0
  425. package/glTF/2.0/Extensions/KHR_xmp_json_ld.types.js.map +1 -0
  426. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +5 -54
  427. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +7 -226
  428. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
  429. package/glTF/2.0/Extensions/MSFT_audio_emitter.pure.d.ts +52 -0
  430. package/glTF/2.0/Extensions/MSFT_audio_emitter.pure.js +240 -0
  431. package/glTF/2.0/Extensions/MSFT_audio_emitter.pure.js.map +1 -0
  432. package/glTF/2.0/Extensions/MSFT_audio_emitter.types.d.ts +9 -0
  433. package/glTF/2.0/Extensions/MSFT_audio_emitter.types.js +2 -0
  434. package/glTF/2.0/Extensions/MSFT_audio_emitter.types.js.map +1 -0
  435. package/glTF/2.0/Extensions/MSFT_lod.d.ts +4 -102
  436. package/glTF/2.0/Extensions/MSFT_lod.js +6 -335
  437. package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
  438. package/glTF/2.0/Extensions/MSFT_lod.pure.d.ts +96 -0
  439. package/glTF/2.0/Extensions/MSFT_lod.pure.js +350 -0
  440. package/glTF/2.0/Extensions/MSFT_lod.pure.js.map +1 -0
  441. package/glTF/2.0/Extensions/MSFT_lod.types.d.ts +14 -0
  442. package/glTF/2.0/Extensions/MSFT_lod.types.js +2 -0
  443. package/glTF/2.0/Extensions/MSFT_lod.types.js.map +1 -0
  444. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +6 -27
  445. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +8 -40
  446. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  447. package/glTF/2.0/Extensions/MSFT_minecraftMesh.pure.d.ts +24 -0
  448. package/glTF/2.0/Extensions/MSFT_minecraftMesh.pure.js +53 -0
  449. package/glTF/2.0/Extensions/MSFT_minecraftMesh.pure.js.map +1 -0
  450. package/glTF/2.0/Extensions/MSFT_minecraftMesh.types.d.ts +9 -0
  451. package/glTF/2.0/Extensions/MSFT_minecraftMesh.types.js +2 -0
  452. package/glTF/2.0/Extensions/MSFT_minecraftMesh.types.js.map +1 -0
  453. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +6 -27
  454. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +8 -38
  455. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
  456. package/glTF/2.0/Extensions/MSFT_sRGBFactors.pure.d.ts +24 -0
  457. package/glTF/2.0/Extensions/MSFT_sRGBFactors.pure.js +51 -0
  458. package/glTF/2.0/Extensions/MSFT_sRGBFactors.pure.js.map +1 -0
  459. package/glTF/2.0/Extensions/MSFT_sRGBFactors.types.d.ts +9 -0
  460. package/glTF/2.0/Extensions/MSFT_sRGBFactors.types.js +2 -0
  461. package/glTF/2.0/Extensions/MSFT_sRGBFactors.types.js.map +1 -0
  462. package/glTF/2.0/Extensions/pure.d.ts +45 -0
  463. package/glTF/2.0/Extensions/pure.js +47 -0
  464. package/glTF/2.0/Extensions/pure.js.map +1 -0
  465. package/glTF/2.0/glTFLoader.d.ts +1 -471
  466. package/glTF/2.0/glTFLoader.js +3 -2539
  467. package/glTF/2.0/glTFLoader.js.map +1 -1
  468. package/glTF/2.0/glTFLoader.pure.d.ts +476 -0
  469. package/glTF/2.0/glTFLoader.pure.js +2563 -0
  470. package/glTF/2.0/glTFLoader.pure.js.map +1 -0
  471. package/glTF/2.0/pure.d.ts +8 -0
  472. package/glTF/2.0/pure.js +10 -0
  473. package/glTF/2.0/pure.js.map +1 -0
  474. package/glTF/glTFFileLoader.d.ts +5 -551
  475. package/glTF/glTFFileLoader.js +6 -996
  476. package/glTF/glTFFileLoader.js.map +1 -1
  477. package/glTF/glTFFileLoader.pure.d.ts +562 -0
  478. package/glTF/glTFFileLoader.pure.js +1024 -0
  479. package/glTF/glTFFileLoader.pure.js.map +1 -0
  480. package/glTF/glTFFileLoader.types.d.ts +11 -0
  481. package/glTF/glTFFileLoader.types.js +2 -0
  482. package/glTF/glTFFileLoader.types.js.map +1 -0
  483. package/glTF/pure.d.ts +6 -0
  484. package/glTF/pure.js +8 -0
  485. package/glTF/pure.js.map +1 -0
  486. package/package.json +56 -4
  487. package/pure.d.ts +8 -0
  488. package/pure.js +10 -0
  489. package/pure.js.map +1 -0
package/SPLAT/sog.d.ts CHANGED
@@ -1,98 +1,2 @@
1
- import { type Scene } from "@babylonjs/core/scene.js";
2
- import { type IParsedSplat } from "./splatDefs.js";
1
+ export * from "./sog.pure.js";
3
2
  import "@babylonjs/core/Engines/Extensions/engine.dynamicTexture.js";
4
- /**
5
- * Definition of a SOG data file
6
- */
7
- export interface SOGDataFile {
8
- /**
9
- * index 0 is number of splats index 1 is number of components per splat (3 for vec3, 4 for vec4, etc.)
10
- */
11
- shape: number[];
12
- /**
13
- * type of components
14
- */
15
- dtype: string;
16
- /**
17
- * min range of data
18
- */
19
- mins?: number | number[];
20
- /**
21
- * max range of data
22
- */
23
- maxs?: number | number[];
24
- /**
25
- * palette for indexed data (quantized)
26
- */
27
- codebook?: number[];
28
- /**
29
- * type of encoding
30
- */
31
- encoding?: string;
32
- /**
33
- * number of bits for quantization (if any)
34
- */
35
- quantization?: number;
36
- /**
37
- * webp file names
38
- */
39
- files: string[];
40
- /**
41
- * SH band count (if applicable)
42
- */
43
- bands?: number;
44
- }
45
- /**
46
- * Definition of the root SOG data file
47
- */
48
- export interface SOGRootData {
49
- /**
50
- * version of the SOG format
51
- */
52
- version?: number;
53
- /**
54
- * mean positions of the splats
55
- */
56
- means: SOGDataFile;
57
- /**
58
- * scales of the splats
59
- */
60
- scales: SOGDataFile;
61
- /**
62
- * quaternions of the splats
63
- */
64
- quats: SOGDataFile;
65
- /**
66
- * SH0 coefficients of the splats (base color)
67
- */
68
- sh0: SOGDataFile;
69
- /**
70
- * Optional higher order SH coefficients of the splats (lighting information)
71
- */
72
- shN?: SOGDataFile;
73
- /**
74
- * number of splats (optional, can be inferred from means.shape[0])
75
- */
76
- count?: number;
77
- }
78
- /**
79
- * Parse SOG data from either a SOGRootData object (with webp files loaded from rootUrl) or from a Map of filenames to Uint8Array file data (including meta.json)
80
- * @param dataOrFiles Either the SOGRootData or a Map of filenames to Uint8Array file data (including meta.json)
81
- * @param rootUrl Base URL to load webp files from (if dataOrFiles is SOGRootData)
82
- * @param scene The Babylon.js scene
83
- * @returns Parsed data
84
- */
85
- export declare function ParseSogMeta(dataOrFiles: SOGRootData | Map<string, Uint8Array>, rootUrl: string, scene: Scene): Promise<IParsedSplat>;
86
- /**
87
- * Parse SOG data and produce a set of GPU textures + dequantization parameters.
88
- * The shader will sample these raw RGBA8 textures and reconstruct positions/scales/rotations/colors/SH on the GPU.
89
- * @param dataOrFiles Either the SOGRootData or a Map of filenames to Uint8Array file data (including meta.json)
90
- * @param rootUrl Base URL to load webp files from (if dataOrFiles is SOGRootData)
91
- * @param scene The Babylon.js scene
92
- * @param computeCpuPositions When true (default), means_l/means_u are read back on the CPU and `pack.positions`
93
- * is decoded for the sort worker / bounding box. Pass false when the caller will instead read the decoded
94
- * centers back from the GPU work buffer — then every attribute (including means) uses the fast direct
95
- * ImageBitmap upload (no `getImageData` readback) and `pack.positions` is left empty.
96
- * @returns Parsed splat info with `sogTextures` populated.
97
- */
98
- export declare function ParseSogMetaAsTextures(dataOrFiles: SOGRootData | Map<string, Uint8Array>, rootUrl: string, scene: Scene, computeCpuPositions?: boolean): Promise<IParsedSplat>;
package/SPLAT/sog.js CHANGED
@@ -1,505 +1,5 @@
1
- import { AllocateShBuffers } from "@babylonjs/core/Meshes/GaussianSplatting/gaussianSplattingMeshBase.js";
2
- import { Scalar } from "@babylonjs/core/Maths/math.scalar.js";
3
- import { RawTexture } from "@babylonjs/core/Materials/Textures/rawTexture.js";
4
- import { Constants } from "@babylonjs/core/Engines/constants.js";
5
- import { Tools } from "@babylonjs/core/Misc/tools.js";
1
+ export * from "./sog.pure.js";
6
2
  // updateDynamicTexture is a prototype-augmented engine extension; import its side effect so the ImageBitmap
7
3
  // fast path in LoadSogTextureDirectAsync doesn't hit an undefined method under tree-shaken/pure engine builds.
8
4
  import "@babylonjs/core/Engines/Extensions/engine.dynamicTexture.js";
9
- const SH_C0 = 0.28209479177387814;
10
- async function LoadWebpImageData(rootUrlOrData, filename, engine) {
11
- const promise = new Promise((resolve, reject) => {
12
- const image = engine.createCanvasImage();
13
- if (!image) {
14
- throw new Error("Failed to create ImageBitmap");
15
- }
16
- image.onload = () => {
17
- try {
18
- // Draw to canvas
19
- const canvas = engine.createCanvas(image.width, image.height);
20
- if (!canvas) {
21
- throw new Error("Failed to create canvas");
22
- }
23
- const ctx = canvas.getContext("2d");
24
- if (!ctx) {
25
- throw new Error("Failed to get 2D context");
26
- }
27
- ctx.drawImage(image, 0, 0);
28
- // Extract pixel data (RGBA per pixel)
29
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
30
- resolve({ bits: new Uint8Array(imageData.data.buffer), width: imageData.width, height: imageData.height });
31
- }
32
- catch (error) {
33
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
34
- reject(`Error loading image ${image.src} with exception: ${error}`);
35
- }
36
- };
37
- image.onerror = (error) => {
38
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
39
- reject(`Error loading image ${image.src} with exception: ${error}`);
40
- };
41
- image.crossOrigin = "anonymous"; // To avoid CORS issues
42
- let objectUrl;
43
- if (typeof rootUrlOrData === "string") {
44
- // old behavior: URL + filename
45
- if (!filename) {
46
- throw new Error("filename is required when using a URL");
47
- }
48
- image.src = rootUrlOrData + filename;
49
- }
50
- else {
51
- // new behavior: Uint8Array
52
- const blob = new Blob([rootUrlOrData], { type: "image/webp" });
53
- objectUrl = URL.createObjectURL(blob);
54
- image.src = objectUrl;
55
- }
56
- });
57
- return await promise;
58
- }
59
- async function ParseSogDatas(data, imageDataArrays, scene) {
60
- const splatCount = data.count ? data.count : data.means.shape[0];
61
- const rowOutputLength = 3 * 4 + 3 * 4 + 4 + 4; // 32
62
- const buffer = new ArrayBuffer(rowOutputLength * splatCount);
63
- const position = new Float32Array(buffer);
64
- const scale = new Float32Array(buffer);
65
- const rgba = new Uint8ClampedArray(buffer);
66
- const rot = new Uint8ClampedArray(buffer);
67
- // Undo the symmetric log transform used at encode time:
68
- const unlog = (n) => Math.sign(n) * (Math.exp(Math.abs(n)) - 1);
69
- const meansl = imageDataArrays[0].bits;
70
- const meansu = imageDataArrays[1].bits;
71
- // Check that data.means.mins is an array
72
- if (!Array.isArray(data.means.mins) || !Array.isArray(data.means.maxs)) {
73
- throw new Error("Missing arrays in SOG data.");
74
- }
75
- // --- Positions
76
- for (let i = 0; i < splatCount; i++) {
77
- const index = i * 4;
78
- for (let j = 0; j < 3; j++) {
79
- const meansMin = data.means.mins[j];
80
- const meansMax = data.means.maxs[j];
81
- const meansup = meansu[index + j];
82
- const meanslow = meansl[index + j];
83
- const q = (meansup << 8) | meanslow;
84
- const n = Scalar.Lerp(meansMin, meansMax, q / 65535);
85
- position[i * 8 + j] = unlog(n);
86
- }
87
- }
88
- // --- Scales
89
- const scales = imageDataArrays[2].bits;
90
- if (data.version === 2) {
91
- if (!data.scales.codebook) {
92
- throw new Error("Missing codebook in SOG version 2 scales data.");
93
- }
94
- for (let i = 0; i < splatCount; i++) {
95
- const index = i * 4;
96
- for (let j = 0; j < 3; j++) {
97
- const sc = data.scales.codebook[scales[index + j]];
98
- const sce = Math.exp(sc);
99
- scale[i * 8 + 3 + j] = sce;
100
- }
101
- }
102
- }
103
- else {
104
- if (!Array.isArray(data.scales.mins) || !Array.isArray(data.scales.maxs)) {
105
- throw new Error("Missing arrays in SOG scales data.");
106
- }
107
- for (let i = 0; i < splatCount; i++) {
108
- const index = i * 4;
109
- for (let j = 0; j < 3; j++) {
110
- const sc = scales[index + j];
111
- const lsc = Scalar.Lerp(data.scales.mins[j], data.scales.maxs[j], sc / 255);
112
- const lsce = Math.exp(lsc);
113
- scale[i * 8 + 3 + j] = lsce;
114
- }
115
- }
116
- }
117
- // --- Colors/SH0
118
- const colors = imageDataArrays[4].bits;
119
- if (data.version === 2) {
120
- if (!data.sh0.codebook) {
121
- throw new Error("Missing codebook in SOG version 2 sh0 data.");
122
- }
123
- for (let i = 0; i < splatCount; i++) {
124
- const index = i * 4;
125
- for (let j = 0; j < 3; j++) {
126
- const component = 0.5 + data.sh0.codebook[colors[index + j]] * SH_C0;
127
- rgba[i * 32 + 24 + j] = Math.max(0, Math.min(255, Math.round(255 * component)));
128
- }
129
- rgba[i * 32 + 24 + 3] = colors[index + 3];
130
- }
131
- }
132
- else {
133
- if (!Array.isArray(data.sh0.mins) || !Array.isArray(data.sh0.maxs)) {
134
- throw new Error("Missing arrays in SOG sh0 data.");
135
- }
136
- for (let i = 0; i < splatCount; i++) {
137
- const index = i * 4;
138
- for (let j = 0; j < 4; j++) {
139
- const colorsMin = data.sh0.mins[j];
140
- const colorsMax = data.sh0.maxs[j];
141
- const colort = colors[index + j];
142
- const c = Scalar.Lerp(colorsMin, colorsMax, colort / 255);
143
- let csh;
144
- if (j < 3) {
145
- csh = 0.5 + c * SH_C0;
146
- }
147
- else {
148
- csh = 1.0 / (1.0 + Math.exp(-c));
149
- }
150
- rgba[i * 32 + 24 + j] = Math.max(0, Math.min(255, Math.round(255 * csh)));
151
- }
152
- }
153
- }
154
- // --- Rotations
155
- // Dequantize the stored three components:
156
- const toComp = (c) => ((c / 255 - 0.5) * 2.0) / Math.SQRT2;
157
- const quatArray = imageDataArrays[3].bits;
158
- for (let i = 0; i < splatCount; i++) {
159
- const quatsr = quatArray[i * 4 + 0];
160
- const quatsg = quatArray[i * 4 + 1];
161
- const quatsb = quatArray[i * 4 + 2];
162
- const quatsa = quatArray[i * 4 + 3];
163
- const a = toComp(quatsr);
164
- const b = toComp(quatsg);
165
- const c = toComp(quatsb);
166
- const mode = quatsa - 252; // 0..3 (R,G,B,A is one of the four components)
167
- // Reconstruct the omitted component so that ||q|| = 1 and w.l.o.g. the omitted one is non-negative
168
- const t = a * a + b * b + c * c;
169
- const d = Math.sqrt(Math.max(0, 1 - t));
170
- // Place components according to mode
171
- let q;
172
- switch (mode) {
173
- case 0:
174
- q = [d, a, b, c];
175
- break; // omitted = x
176
- case 1:
177
- q = [a, d, b, c];
178
- break; // omitted = y
179
- case 2:
180
- q = [a, b, d, c];
181
- break; // omitted = z
182
- case 3:
183
- q = [a, b, c, d];
184
- break; // omitted = w
185
- default:
186
- throw new Error("Invalid quaternion mode");
187
- }
188
- rot[i * 32 + 28 + 0] = q[0] * 127.5 + 127.5;
189
- rot[i * 32 + 28 + 1] = q[1] * 127.5 + 127.5;
190
- rot[i * 32 + 28 + 2] = q[2] * 127.5 + 127.5;
191
- rot[i * 32 + 28 + 3] = q[3] * 127.5 + 127.5;
192
- }
193
- // --- SH
194
- if (data.shN) {
195
- const coeffs = data.shN.bands ? (data.shN.bands + 1) ** 2 - 1 : data.shN.shape[1] / 3; // 3 components per coeff
196
- const shDegree = data.shN.bands !== undefined && data.shN.bands !== null ? data.shN.bands : Math.round(Math.sqrt(coeffs + 1) - 1);
197
- const shCentroids = imageDataArrays[5].bits;
198
- const shLabelsData = imageDataArrays[6].bits;
199
- const shCentroidsWidth = imageDataArrays[5].width;
200
- const shComponentCount = coeffs * 3;
201
- const textureCount = Math.ceil(shComponentCount / 16); // 4 components can be stored per texture, 4 sh per component
202
- //let shIndexRead = byteOffset;
203
- const engine = scene.getEngine();
204
- const width = engine.getCaps().maxTextureSize;
205
- const height = Math.ceil(splatCount / width);
206
- // sh is an array of uint8array that will be used to create sh textures
207
- const sh = AllocateShBuffers(textureCount, height * width * 4 * 4);
208
- if (data.version === 2) {
209
- if (!data.shN.codebook) {
210
- throw new Error("Missing codebook in SOG version 2 shN data.");
211
- }
212
- for (let i = 0; i < splatCount; i++) {
213
- const n = shLabelsData[i * 4 + 0] + (shLabelsData[i * 4 + 1] << 8);
214
- const u = (n % 64) * coeffs;
215
- const v = Math.floor(n / 64);
216
- for (let k = 0; k < coeffs; k++) {
217
- for (let j = 0; j < 3; j++) {
218
- const shIndexWrite = k * 3 + j;
219
- const textureIndex = Math.floor(shIndexWrite / 16);
220
- const shArray = sh[textureIndex];
221
- const byteIndexInTexture = shIndexWrite % 16; // [0..15]
222
- const offsetPerSplat = i * 16; // 16 sh values per texture per splat.
223
- const shValue = data.shN.codebook[shCentroids[(u + k) * 4 + j + v * shCentroidsWidth * 4]] * 127.5 + 127.5;
224
- shArray[byteIndexInTexture + offsetPerSplat] = Math.max(0, Math.min(255, shValue));
225
- }
226
- }
227
- }
228
- }
229
- else {
230
- for (let i = 0; i < splatCount; i++) {
231
- const n = shLabelsData[i * 4 + 0] + (shLabelsData[i * 4 + 1] << 8);
232
- const u = (n % 64) * coeffs;
233
- const v = Math.floor(n / 64);
234
- const shMin = data.shN.mins;
235
- const shMax = data.shN.maxs;
236
- for (let j = 0; j < 3; j++) {
237
- for (let k = 0; k < coeffs / 3; k++) {
238
- const shIndexWrite = k * 3 + j;
239
- const textureIndex = Math.floor(shIndexWrite / 16);
240
- const shArray = sh[textureIndex];
241
- const byteIndexInTexture = shIndexWrite % 16; // [0..15]
242
- const offsetPerSplat = i * 16; // 16 sh values per texture per splat.
243
- const shValue = Scalar.Lerp(shMin, shMax, shCentroids[(u + k) * 4 + j + v * shCentroidsWidth * 4] / 255) * 127.5 + 127.5;
244
- shArray[byteIndexInTexture + offsetPerSplat] = Math.max(0, Math.min(255, shValue));
245
- }
246
- }
247
- }
248
- }
249
- return await new Promise((resolve) => {
250
- resolve({ mode: 0 /* Mode.Splat */, data: buffer, hasVertexColors: false, sh: sh, shDegree: shDegree });
251
- });
252
- }
253
- return await new Promise((resolve) => {
254
- resolve({ mode: 0 /* Mode.Splat */, data: buffer, hasVertexColors: false });
255
- });
256
- }
257
- /**
258
- * Parse SOG data from either a SOGRootData object (with webp files loaded from rootUrl) or from a Map of filenames to Uint8Array file data (including meta.json)
259
- * @param dataOrFiles Either the SOGRootData or a Map of filenames to Uint8Array file data (including meta.json)
260
- * @param rootUrl Base URL to load webp files from (if dataOrFiles is SOGRootData)
261
- * @param scene The Babylon.js scene
262
- * @returns Parsed data
263
- */
264
- export async function ParseSogMeta(dataOrFiles, rootUrl, scene) {
265
- let data;
266
- let files;
267
- if (dataOrFiles instanceof Map) {
268
- files = dataOrFiles;
269
- const metaFile = files.get("meta.json");
270
- if (!metaFile) {
271
- throw new Error("meta.json not found in files Map");
272
- }
273
- data = JSON.parse(new TextDecoder().decode(metaFile));
274
- }
275
- else {
276
- data = dataOrFiles;
277
- }
278
- // Collect all file names
279
- const urls = [...data.means.files, ...data.scales.files, ...data.quats.files, ...data.sh0.files];
280
- if (data.shN) {
281
- urls.push(...data.shN.files);
282
- }
283
- // Load webp images in parallel
284
- const imageDataArrays = await Promise.all(urls.map(async (fileName) => {
285
- if (files && files.has(fileName)) {
286
- // load from in-memory Uint8Array
287
- const fileData = files.get(fileName);
288
- return await LoadWebpImageData(fileData, fileName, scene.getEngine());
289
- }
290
- else {
291
- // fallback: load from URL
292
- return await LoadWebpImageData(rootUrl, fileName, scene.getEngine());
293
- }
294
- }));
295
- return await ParseSogDatas(data, imageDataArrays, scene);
296
- }
297
- function CreateSogTexture(scene, bits, width, height) {
298
- const tex = new RawTexture(bits, width, height, Constants.TEXTUREFORMAT_RGBA, scene, false, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE, Constants.TEXTURETYPE_UNSIGNED_BYTE);
299
- tex.wrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;
300
- tex.wrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;
301
- return tex;
302
- }
303
- function CreateSogTextureFromImage(scene, image) {
304
- return CreateSogTexture(scene, image.bits, image.width, image.height);
305
- }
306
- /**
307
- * Loads a SOG attribute image straight onto a GPU texture using `createImageBitmap` (decoded off the main
308
- * thread, with `premultiplyAlpha`/`colorSpaceConversion` set to "none" so the raw data bytes are preserved)
309
- * and a direct `texImage2D` upload — avoiding the `<img>` + 2D-canvas `getImageData` readback that stalls the
310
- * frame. Falls back to the canvas path when `createImageBitmap` is unavailable or fails. Use only for textures
311
- * whose pixels are never read back on the CPU (scales, quats, sh0, shN); means_l/means_u still go through the
312
- * readback path because their bytes are needed to decode positions for the sort worker.
313
- * @param rootUrlOrData base URL (string) or the raw file bytes (Uint8Array)
314
- * @param filename file name (used only with a URL)
315
- * @param scene hosting scene
316
- * @returns a GPU texture holding the raw image bytes
317
- */
318
- async function LoadSogTextureDirectAsync(rootUrlOrData, filename, scene) {
319
- const engine = scene.getEngine();
320
- if (typeof createImageBitmap === "function") {
321
- try {
322
- // A typed blob is required: createImageBitmap can fail to decode a typeless blob (and the
323
- // content-type is lost when loading via LoadFileAsync), which would force the slow canvas fallback.
324
- const mimeType = filename.toLowerCase().endsWith(".png") ? "image/png" : "image/webp";
325
- let blob;
326
- if (typeof rootUrlOrData === "string") {
327
- const buffer = (await Tools.LoadFileAsync(rootUrlOrData + filename, true));
328
- blob = new Blob([buffer], { type: mimeType });
329
- }
330
- else {
331
- blob = new Blob([rootUrlOrData], { type: mimeType });
332
- }
333
- const bitmap = await createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" });
334
- try {
335
- const tex = new RawTexture(null, bitmap.width, bitmap.height, Constants.TEXTUREFORMAT_RGBA, scene, false, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE, Constants.TEXTURETYPE_UNSIGNED_BYTE);
336
- tex.wrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;
337
- tex.wrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;
338
- const internal = tex.getInternalTexture();
339
- if (internal) {
340
- // invertY=false / premulAlpha=false keep the byte layout identical to the canvas path.
341
- engine.updateDynamicTexture(internal, bitmap, false, false);
342
- }
343
- return tex;
344
- }
345
- finally {
346
- bitmap.close();
347
- }
348
- }
349
- catch {
350
- // Fall through to the canvas readback path below.
351
- }
352
- }
353
- const image = await LoadWebpImageData(rootUrlOrData, filename, engine);
354
- return CreateSogTextureFromImage(scene, image);
355
- }
356
- function DecodeSogPositions(data, meansl, meansu, splatCount) {
357
- const unlog = (n) => Math.sign(n) * (Math.exp(Math.abs(n)) - 1);
358
- if (!Array.isArray(data.means.mins) || !Array.isArray(data.means.maxs)) {
359
- throw new Error("Missing arrays in SOG data.");
360
- }
361
- // Stride-4 layout (x,y,z,w) expected by the depth-sort worker and the centers texture.
362
- const positions = new Float32Array(splatCount * 4);
363
- for (let i = 0; i < splatCount; i++) {
364
- const index = i * 4;
365
- for (let j = 0; j < 3; j++) {
366
- const q = (meansu[index + j] << 8) | meansl[index + j];
367
- const n = Scalar.Lerp(data.means.mins[j], data.means.maxs[j], q / 65535);
368
- positions[i * 4 + j] = unlog(n);
369
- }
370
- positions[i * 4 + 3] = 1.0;
371
- }
372
- return positions;
373
- }
374
- /**
375
- * Parse SOG data and produce a set of GPU textures + dequantization parameters.
376
- * The shader will sample these raw RGBA8 textures and reconstruct positions/scales/rotations/colors/SH on the GPU.
377
- * @param dataOrFiles Either the SOGRootData or a Map of filenames to Uint8Array file data (including meta.json)
378
- * @param rootUrl Base URL to load webp files from (if dataOrFiles is SOGRootData)
379
- * @param scene The Babylon.js scene
380
- * @param computeCpuPositions When true (default), means_l/means_u are read back on the CPU and `pack.positions`
381
- * is decoded for the sort worker / bounding box. Pass false when the caller will instead read the decoded
382
- * centers back from the GPU work buffer — then every attribute (including means) uses the fast direct
383
- * ImageBitmap upload (no `getImageData` readback) and `pack.positions` is left empty.
384
- * @returns Parsed splat info with `sogTextures` populated.
385
- */
386
- // eslint-disable-next-line @typescript-eslint/no-restricted-types
387
- export async function ParseSogMetaAsTextures(dataOrFiles, rootUrl, scene, computeCpuPositions = true) {
388
- let data;
389
- let files;
390
- if (dataOrFiles instanceof Map) {
391
- files = dataOrFiles;
392
- const metaFile = files.get("meta.json");
393
- if (!metaFile) {
394
- throw new Error("meta.json not found in files Map");
395
- }
396
- data = JSON.parse(new TextDecoder().decode(metaFile));
397
- }
398
- else {
399
- data = dataOrFiles;
400
- }
401
- // Attribute textures (scales/quats/sh0/shN) are only sampled on the GPU, so they always upload straight
402
- // from a decoded ImageBitmap (no getImageData readback). means_l/means_u additionally need their CPU bytes
403
- // when computeCpuPositions is set (to decode positions for the sort worker) — those go through the
404
- // <img>+canvas path; otherwise means also use the fast direct upload. All loads run in parallel.
405
- const loadMeansImageAsync = async (fileName) => {
406
- if (files && files.has(fileName)) {
407
- return await LoadWebpImageData(files.get(fileName), fileName, scene.getEngine());
408
- }
409
- return await LoadWebpImageData(rootUrl, fileName, scene.getEngine());
410
- };
411
- const loadGpuTextureAsync = async (fileName) => {
412
- if (files && files.has(fileName)) {
413
- return await LoadSogTextureDirectAsync(files.get(fileName), fileName, scene);
414
- }
415
- return await LoadSogTextureDirectAsync(rootUrl, fileName, scene);
416
- };
417
- const gpuFiles = [...data.scales.files, ...data.quats.files, ...data.sh0.files, ...(data.shN?.files ?? [])];
418
- let meansL;
419
- let meansU;
420
- let meansWidth;
421
- let meansHeight;
422
- let meansImages = null;
423
- let gpuTextures;
424
- if (computeCpuPositions) {
425
- const [images, gpu] = await Promise.all([Promise.all(data.means.files.map(loadMeansImageAsync)), Promise.all(gpuFiles.map(loadGpuTextureAsync))]);
426
- meansImages = [images[0], images[1]];
427
- gpuTextures = gpu;
428
- meansL = CreateSogTextureFromImage(scene, images[0]);
429
- meansU = CreateSogTextureFromImage(scene, images[1]);
430
- meansWidth = images[0].width;
431
- meansHeight = images[0].height;
432
- }
433
- else {
434
- const [meansTex, gpu] = await Promise.all([Promise.all(data.means.files.map(loadGpuTextureAsync)), Promise.all(gpuFiles.map(loadGpuTextureAsync))]);
435
- gpuTextures = gpu;
436
- meansL = meansTex[0];
437
- meansU = meansTex[1];
438
- const size = meansL.getSize();
439
- meansWidth = size.width;
440
- meansHeight = size.height;
441
- }
442
- const splatCount = data.count ?? data.means.shape[0];
443
- const splatTexelCount = meansWidth * meansHeight;
444
- if (splatTexelCount < splatCount) {
445
- throw new Error(`SOG texture contains ${splatTexelCount} texels, but metadata references ${splatCount} splats.`);
446
- }
447
- const scales = gpuTextures[0];
448
- const quats = gpuTextures[1];
449
- const sh0 = gpuTextures[2];
450
- let shCentroids;
451
- let shLabels;
452
- let shCoeffCount = 0;
453
- let shDegree = 0;
454
- if (data.shN && gpuTextures.length >= 5) {
455
- shCentroids = gpuTextures[3];
456
- shLabels = gpuTextures[4];
457
- shCoeffCount = data.shN.bands ? (data.shN.bands + 1) ** 2 - 1 : data.shN.shape[1] / 3;
458
- shDegree = data.shN.bands ?? Math.round(Math.sqrt(shCoeffCount + 1) - 1);
459
- }
460
- // Optional codebook packed into a 1D R32F texture: [scales(256) | sh0(256) | shN(256)]
461
- let codebookTexture;
462
- if (data.version === 2) {
463
- const codebookSize = 256;
464
- const packed = new Float32Array(codebookSize * 3);
465
- if (data.scales.codebook) {
466
- packed.set(data.scales.codebook.slice(0, codebookSize), 0);
467
- }
468
- if (data.sh0.codebook) {
469
- packed.set(data.sh0.codebook.slice(0, codebookSize), codebookSize);
470
- }
471
- if (data.shN?.codebook) {
472
- packed.set(data.shN.codebook.slice(0, codebookSize), codebookSize * 2);
473
- }
474
- codebookTexture = new RawTexture(packed, codebookSize * 3, 1, Constants.TEXTUREFORMAT_R, scene, false, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE, Constants.TEXTURETYPE_FLOAT);
475
- codebookTexture.wrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;
476
- codebookTexture.wrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;
477
- }
478
- const meansMins = data.means.mins;
479
- const meansMaxs = data.means.maxs;
480
- const pack = {
481
- version: (data.version === 2 ? 2 : 1),
482
- splatCount,
483
- shDegree,
484
- meansTextureL: meansL,
485
- meansTextureU: meansU,
486
- scalesTexture: scales,
487
- quatsTexture: quats,
488
- sh0Texture: sh0,
489
- shCentroidsTexture: shCentroids,
490
- shLabelsTexture: shLabels,
491
- codebookTexture,
492
- meansMin: [meansMins[0], meansMins[1], meansMins[2]],
493
- meansMax: [meansMaxs[0], meansMaxs[1], meansMaxs[2]],
494
- scalesMin: Array.isArray(data.scales.mins) ? [data.scales.mins[0], data.scales.mins[1], data.scales.mins[2]] : undefined,
495
- scalesMax: Array.isArray(data.scales.maxs) ? [data.scales.maxs[0], data.scales.maxs[1], data.scales.maxs[2]] : undefined,
496
- sh0Min: Array.isArray(data.sh0.mins) ? [data.sh0.mins[0], data.sh0.mins[1], data.sh0.mins[2], data.sh0.mins[3]] : undefined,
497
- sh0Max: Array.isArray(data.sh0.maxs) ? [data.sh0.maxs[0], data.sh0.maxs[1], data.sh0.maxs[2], data.sh0.maxs[3]] : undefined,
498
- shnMin: typeof data.shN?.mins === "number" ? data.shN.mins : undefined,
499
- shnMax: typeof data.shN?.maxs === "number" ? data.shN.maxs : undefined,
500
- shCoeffCount,
501
- positions: meansImages ? DecodeSogPositions(data, meansImages[0].bits, meansImages[1].bits, splatCount) : new Float32Array(0),
502
- };
503
- return { mode: 0 /* Mode.Splat */, data: new ArrayBuffer(0), hasVertexColors: false, shDegree, sogTextures: pack };
504
- }
505
5
  //# sourceMappingURL=sog.js.map