@babylonjs/loaders 9.0.0 → 9.2.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 (181) hide show
  1. package/BVH/bvhFileLoader.d.ts +3 -3
  2. package/BVH/bvhFileLoader.js +1 -1
  3. package/BVH/bvhFileLoader.js.map +1 -1
  4. package/BVH/bvhFileLoader.metadata.js.map +1 -1
  5. package/BVH/bvhLoader.d.ts +4 -4
  6. package/BVH/bvhLoader.js.map +1 -1
  7. package/OBJ/mtlFileLoader.d.ts +3 -3
  8. package/OBJ/mtlFileLoader.js.map +1 -1
  9. package/OBJ/objFileLoader.d.ts +3 -3
  10. package/OBJ/objFileLoader.js +1 -1
  11. package/OBJ/objFileLoader.js.map +1 -1
  12. package/OBJ/objFileLoader.metadata.js.map +1 -1
  13. package/OBJ/objLoadingOptions.d.ts +1 -1
  14. package/OBJ/objLoadingOptions.js.map +1 -1
  15. package/OBJ/solidParser.d.ts +4 -4
  16. package/OBJ/solidParser.js.map +1 -1
  17. package/SPLAT/sog.d.ts +2 -2
  18. package/SPLAT/sog.js.map +1 -1
  19. package/SPLAT/splatFileLoader.d.ts +3 -3
  20. package/SPLAT/splatFileLoader.js +3 -1
  21. package/SPLAT/splatFileLoader.js.map +1 -1
  22. package/SPLAT/splatFileLoader.metadata.js.map +1 -1
  23. package/SPLAT/splatLoadingOptions.d.ts +1 -1
  24. package/SPLAT/splatLoadingOptions.js.map +1 -1
  25. package/SPLAT/spz.d.ts +3 -3
  26. package/SPLAT/spz.js.map +1 -1
  27. package/STL/stlFileLoader.d.ts +4 -4
  28. package/STL/stlFileLoader.js.map +1 -1
  29. package/STL/stlFileLoader.metadata.js.map +1 -1
  30. package/dynamic.js.map +1 -1
  31. package/glTF/1.0/glTFBinaryExtension.d.ts +3 -3
  32. package/glTF/1.0/glTFBinaryExtension.js.map +1 -1
  33. package/glTF/1.0/glTFLoader.d.ts +6 -6
  34. package/glTF/1.0/glTFLoader.js +2 -1
  35. package/glTF/1.0/glTFLoader.js.map +1 -1
  36. package/glTF/1.0/glTFLoaderInterfaces.d.ts +7 -7
  37. package/glTF/1.0/glTFLoaderInterfaces.js.map +1 -1
  38. package/glTF/1.0/glTFLoaderUtils.d.ts +3 -4
  39. package/glTF/1.0/glTFLoaderUtils.js +1 -1
  40. package/glTF/1.0/glTFLoaderUtils.js.map +1 -1
  41. package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +1 -1
  42. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +1 -1
  43. package/glTF/2.0/Extensions/EXT_lights_area.d.ts +4 -4
  44. package/glTF/2.0/Extensions/EXT_lights_area.js.map +1 -1
  45. package/glTF/2.0/Extensions/EXT_lights_ies.d.ts +4 -4
  46. package/glTF/2.0/Extensions/EXT_lights_ies.js.map +1 -1
  47. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +4 -4
  48. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
  49. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +4 -4
  50. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  51. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +3 -3
  52. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
  53. package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +4 -4
  54. package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
  55. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +4 -4
  56. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  57. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +8 -8
  58. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
  59. package/glTF/2.0/Extensions/KHR_animation_pointer.d.ts +6 -6
  60. package/glTF/2.0/Extensions/KHR_animation_pointer.data.js.map +1 -1
  61. package/glTF/2.0/Extensions/KHR_animation_pointer.js.map +1 -1
  62. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +5 -5
  63. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  64. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +4 -4
  65. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
  66. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.d.ts +5 -6
  67. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js.map +1 -1
  68. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +4 -4
  69. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
  70. package/glTF/2.0/Extensions/KHR_interactivity.d.ts +3 -3
  71. package/glTF/2.0/Extensions/KHR_interactivity.js.map +1 -1
  72. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +4 -4
  73. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  74. package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +4 -4
  75. package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
  76. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +4 -4
  77. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  78. package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +4 -4
  79. package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -1
  80. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +4 -4
  81. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -1
  82. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +4 -4
  83. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +2 -2
  84. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
  85. package/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +4 -4
  86. package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
  87. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +4 -4
  88. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  89. package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +4 -4
  90. package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -1
  91. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +4 -4
  92. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  93. package/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +4 -4
  94. package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
  95. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +4 -4
  96. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
  97. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +4 -4
  98. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  99. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +4 -4
  100. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  101. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +4 -4
  102. package/glTF/2.0/Extensions/KHR_materials_transmission.js +119 -24
  103. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  104. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +4 -4
  105. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  106. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +6 -6
  107. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
  108. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +4 -4
  109. package/glTF/2.0/Extensions/KHR_materials_volume.js +3 -6
  110. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  111. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +4 -4
  112. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js +25 -19
  113. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js.map +1 -1
  114. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +2 -2
  115. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
  116. package/glTF/2.0/Extensions/KHR_node_hoverability.d.ts +2 -2
  117. package/glTF/2.0/Extensions/KHR_node_hoverability.js.map +1 -1
  118. package/glTF/2.0/Extensions/KHR_node_selectability.d.ts +2 -2
  119. package/glTF/2.0/Extensions/KHR_node_selectability.js.map +1 -1
  120. package/glTF/2.0/Extensions/KHR_node_visibility.d.ts +2 -2
  121. package/glTF/2.0/Extensions/KHR_node_visibility.js.map +1 -1
  122. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +4 -4
  123. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  124. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +4 -4
  125. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  126. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +2 -2
  127. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
  128. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +5 -5
  129. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
  130. package/glTF/2.0/Extensions/MSFT_lod.d.ts +7 -7
  131. package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
  132. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +4 -4
  133. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  134. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +4 -4
  135. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
  136. package/glTF/2.0/Extensions/gltfPathToObjectConverter.d.ts +3 -3
  137. package/glTF/2.0/Extensions/gltfPathToObjectConverter.js.map +1 -1
  138. package/glTF/2.0/Extensions/objectModelMapping.d.ts +12 -14
  139. package/glTF/2.0/Extensions/objectModelMapping.js +2 -2
  140. package/glTF/2.0/Extensions/objectModelMapping.js.map +1 -1
  141. package/glTF/2.0/glTFLoader.d.ts +19 -19
  142. package/glTF/2.0/glTFLoader.js +10 -28
  143. package/glTF/2.0/glTFLoader.js.map +1 -1
  144. package/glTF/2.0/glTFLoaderAnimation.d.ts +2 -2
  145. package/glTF/2.0/glTFLoaderAnimation.js.map +1 -1
  146. package/glTF/2.0/glTFLoaderExtension.d.ts +15 -15
  147. package/glTF/2.0/glTFLoaderExtension.js.map +1 -1
  148. package/glTF/2.0/glTFLoaderExtensionRegistry.d.ts +2 -2
  149. package/glTF/2.0/glTFLoaderExtensionRegistry.js.map +1 -1
  150. package/glTF/2.0/glTFLoaderInterfaces.d.ts +9 -9
  151. package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
  152. package/glTF/2.0/materialLoadingAdapter.d.ts +25 -14
  153. package/glTF/2.0/materialLoadingAdapter.js.map +1 -1
  154. package/glTF/2.0/openpbrMaterialLoadingAdapter.d.ts +36 -22
  155. package/glTF/2.0/openpbrMaterialLoadingAdapter.js +106 -48
  156. package/glTF/2.0/openpbrMaterialLoadingAdapter.js.map +1 -1
  157. package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +23 -19
  158. package/glTF/2.0/pbrMaterialLoadingAdapter.js +26 -19
  159. package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -1
  160. package/glTF/glTFFileLoader.d.ts +12 -12
  161. package/glTF/glTFFileLoader.js +1 -1
  162. package/glTF/glTFFileLoader.js.map +1 -1
  163. package/glTF/glTFFileLoader.metadata.js.map +1 -1
  164. package/glTF/glTFValidation.d.ts +1 -1
  165. package/glTF/glTFValidation.js.map +1 -1
  166. package/legacy/legacy-bvhFileLoader.js.map +1 -1
  167. package/legacy/legacy-dynamic.js.map +1 -1
  168. package/legacy/legacy-glTF.js.map +1 -1
  169. package/legacy/legacy-glTF1.js.map +1 -1
  170. package/legacy/legacy-glTF1FileLoader.js +0 -1
  171. package/legacy/legacy-glTF1FileLoader.js.map +1 -1
  172. package/legacy/legacy-glTF2.js.map +1 -1
  173. package/legacy/legacy-glTF2FileLoader.js +0 -1
  174. package/legacy/legacy-glTF2FileLoader.js.map +1 -1
  175. package/legacy/legacy-glTFFileLoader.js +0 -1
  176. package/legacy/legacy-glTFFileLoader.js.map +1 -1
  177. package/legacy/legacy-objFileLoader.js.map +1 -1
  178. package/legacy/legacy-stlFileLoader.js.map +1 -1
  179. package/legacy/legacy.js +0 -1
  180. package/legacy/legacy.js.map +1 -1
  181. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_materials_volume.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_volume.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAI/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,OAAO,EAAE,6CAA+B;AAEjD,MAAM,IAAI,GAAG,sBAAsB,CAAC;AAapC;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,oBAAoB;IAkB7B;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,qHAAqH;YACrH,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACzC,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACzC,CAAC;QACA,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAsB,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC1H,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YACvG,0CAA0C;YAC1C,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,0BAA0B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB,EAAE,SAA8B;QAC9H,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAE1E,+EAA+E;QAC/E,2GAA2G;QAC3G,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,CAAC,IAAI,OAAO,CAAC,gBAAgB,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YACrG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,mBAAmB,GAAG,SAAS,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QAC3H,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,KAAK,SAAS,IAAI,SAAS,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5K,sEAAsE;QACtE,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,qBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QAEtD,OAAO,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;QAChD,OAAO,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAE7C,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,IAAI,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC5B,SAAS,CAAC,gBAAiC,CAAC,YAAY,GAAG,IAAI,CAAC;YACjE,0CAA0C;YAC1C,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,mBAAmB,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,OAAoB,EAAE,EAAE;gBAClH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,cAAc,CAAC;gBACrD,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC;YAC7C,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChD,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsVolume } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\n\r\nconst NAME = \"KHR_materials_volume\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_volume extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_volume\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_volume/README.md)\r\n * @since 5.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_volume implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 173;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n if (this.enabled) {\r\n // We need to disable instance usage because the attenuation factor depends on the node scale of each individual mesh\r\n this._loader._disableInstancedMesh++;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n if (this.enabled) {\r\n this._loader._disableInstancedMesh--;\r\n }\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsVolume>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadVolumePropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n // eslint-disable-next-line github/no-then\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadVolumePropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsVolume): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n // If transparency isn't enabled already, this extension shouldn't do anything.\r\n // i.e. it requires either the KHR_materials_transmission or KHR_materials_diffuse_transmission extensions.\r\n if ((adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) || !extension.thicknessFactor) {\r\n return Promise.resolve();\r\n }\r\n\r\n const attenuationDistance = extension.attenuationDistance !== undefined ? extension.attenuationDistance : Number.MAX_VALUE;\r\n const attenuationColor = extension.attenuationColor !== undefined && extension.attenuationColor.length == 3 ? Color3.FromArray(extension.attenuationColor) : Color3.White();\r\n // Calculate the attenuation coefficient (i.e. extinction coefficient)\r\n const extinctionCoefficient = new Vector3(-Math.log(attenuationColor.r), -Math.log(attenuationColor.g), -Math.log(attenuationColor.b));\r\n extinctionCoefficient.scaleInPlace(1 / Math.max(attenuationDistance, 0.001));\r\n adapter.extinctionCoefficient = extinctionCoefficient;\r\n\r\n adapter.transmissionDepth = attenuationDistance;\r\n adapter.transmissionColor = attenuationColor;\r\n\r\n adapter.volumeThickness = extension.thicknessFactor ?? 0;\r\n\r\n const promises = new Array<Promise<any>>();\r\n\r\n if (extension.thicknessTexture) {\r\n (extension.thicknessTexture as ITextureInfo).nonColorData = true;\r\n // eslint-disable-next-line github/no-then\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/thicknessTexture`, extension.thicknessTexture, (texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Thickness)`;\r\n adapter.volumeThicknessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_volume(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_materials_volume.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_volume.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type IMaterial, type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsVolume } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_volume\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_volume extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_volume\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_volume/README.md)\r\n * @since 5.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_volume implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 173;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n if (this.enabled) {\r\n // We need to disable instance usage because the attenuation factor depends on the node scale of each individual mesh\r\n this._loader._disableInstancedMesh++;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n if (this.enabled) {\r\n this._loader._disableInstancedMesh--;\r\n }\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsVolume>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadVolumePropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n // eslint-disable-next-line github/no-then\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadVolumePropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsVolume): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n // If transparency isn't enabled already, this extension shouldn't do anything.\r\n // i.e. it requires either the KHR_materials_transmission or KHR_materials_diffuse_transmission extensions.\r\n if ((adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) || !extension.thicknessFactor) {\r\n return Promise.resolve();\r\n }\r\n\r\n adapter.geometryThinWalled = false;\r\n const attenuationDistance = extension.attenuationDistance !== undefined ? extension.attenuationDistance : Number.MAX_VALUE;\r\n const attenuationColor = extension.attenuationColor !== undefined && extension.attenuationColor.length == 3 ? Color3.FromArray(extension.attenuationColor) : Color3.White();\r\n adapter.configureVolume();\r\n adapter.transmissionColor = attenuationColor;\r\n adapter.transmissionDepth = attenuationDistance;\r\n\r\n adapter.volumeThickness = extension.thicknessFactor ?? 0;\r\n\r\n const promises = new Array<Promise<any>>();\r\n\r\n if (extension.thicknessTexture) {\r\n (extension.thicknessTexture as ITextureInfo).nonColorData = true;\r\n // eslint-disable-next-line github/no-then\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/thicknessTexture`, extension.thicknessTexture, (texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Thickness)`;\r\n adapter.volumeThicknessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_volume(loader));\r\n"]}
@@ -1,7 +1,7 @@
1
- import type { Nullable } from "@babylonjs/core/types.js";
2
- import type { Material } from "@babylonjs/core/Materials/material.js";
3
- import type { IMaterial } from "../glTFLoaderInterfaces.js";
4
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type Nullable } from "@babylonjs/core/types.js";
2
+ import { type Material } from "@babylonjs/core/Materials/material.js";
3
+ import { type IMaterial } from "../glTFLoaderInterfaces.js";
4
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
5
5
  import { GLTFLoader } from "../glTFLoader.js";
6
6
  declare module "../../glTFFileLoader.js" {
7
7
  interface GLTFLoaderExtensionOptions {
@@ -6,8 +6,7 @@ const NAME = "KHR_materials_volume_scatter";
6
6
  function multiScatterToSingleScatterAlbedo(multiScatter) {
7
7
  const multiScatterAlbedo = new Vector3(multiScatter.r, multiScatter.g, multiScatter.b);
8
8
  const s = new Vector3(4.09712, 4.09712, 4.09712);
9
- s.multiplyInPlace(multiScatterAlbedo);
10
- s.addInPlace(new Vector3(4.20863, 4.20863, 4.20863));
9
+ s.addInPlace(new Vector3(4.20863, 4.20863, 4.20863).multiplyInPlace(multiScatterAlbedo));
11
10
  const p = new Vector3(9.59217, 9.59217, 9.59217);
12
11
  p.addInPlace(new Vector3(41.6808, 41.6808, 41.6808).multiplyInPlace(multiScatterAlbedo));
13
12
  p.addInPlace(new Vector3(17.7126, 17.7126, 17.7126).multiplyInPlace(multiScatterAlbedo.multiply(multiScatterAlbedo)));
@@ -66,43 +65,50 @@ export class KHR_materials_volume_scatter {
66
65
  const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
67
66
  // If transparency isn't enabled already, this extension shouldn't do anything.
68
67
  // i.e. it requires either the KHR_materials_transmission or KHR_materials_diffuse_transmission extensions.
69
- if (adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) {
68
+ // Additionally, this already needs to be a volumetric material to apply this extension.
69
+ if ((adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) || adapter.geometryThinWalled) {
70
70
  return Promise.resolve();
71
71
  }
72
- const scatterColor = extension.multiscatterColor !== undefined && extension.multiscatterColor.length == 3 ? Color3.FromArray(extension.multiscatterColor) : Color3.Black();
72
+ const scatterColor = extension.multiscatterColorFactor !== undefined && extension.multiscatterColorFactor.length == 3 ? Color3.FromArray(extension.multiscatterColorFactor) : Color3.Black();
73
73
  const scatterAnisotropy = extension.scatterAnisotropy !== undefined ? extension.scatterAnisotropy : 0;
74
+ // If diffuse_transmission, apply props to subsurface
75
+ // If transmission, apply props to transmission
76
+ // Load texture if present
77
+ let texturePromise = Promise.resolve(null);
78
+ if (extension.multiscatterColorTexture) {
79
+ extension.multiscatterColorTexture.nonColorData = true;
80
+ texturePromise = this._loader.loadTextureInfoAsync(`${context}/multiscatterColorTexture`, extension.multiscatterColorTexture, (texture) => {
81
+ texture.name = `${babylonMaterial.name} (Scatter Color)`;
82
+ if (adapter.transmissionWeight > 0) {
83
+ adapter.transmissionScatterTexture = texture;
84
+ }
85
+ if (adapter.subsurfaceWeight > 0) {
86
+ adapter.subsurfaceColorTexture = texture;
87
+ }
88
+ });
89
+ }
90
+ const extinctionCoefficient = new Vector3(-Math.log(adapter.transmissionColor.r), -Math.log(adapter.transmissionColor.g), -Math.log(adapter.transmissionColor.b));
91
+ extinctionCoefficient.scaleInPlace(1 / Math.max(adapter.transmissionDepth, 0.000001));
74
92
  // In glTF, both the translucency volume and subsurface volume use the same input parameters.
75
93
  // We'll apply them to both, as appropriate.
76
94
  if (adapter.transmissionWeight > 0) {
77
95
  const singleScatterAlbedo = multiScatterToSingleScatterAlbedo(scatterColor);
78
- const extinctionCoefficient = new Vector3(-Math.log(adapter.transmissionColor.r), -Math.log(adapter.transmissionColor.g), -Math.log(adapter.transmissionColor.b));
79
- extinctionCoefficient.scaleInPlace(1 / Math.max(adapter.transmissionDepth, 0.001));
80
96
  const scatteringCoefficient = extinctionCoefficient.multiply(singleScatterAlbedo);
81
97
  // The scattering coefficient in OpenPBR is defined as per unit distance, so we need to scale it back up by the depth.
82
98
  scatteringCoefficient.scaleInPlace(adapter.transmissionDepth);
83
99
  adapter.transmissionScatter.set(scatteringCoefficient.x, scatteringCoefficient.y, scatteringCoefficient.z);
84
- // Load texture if present
85
- let texturePromise = Promise.resolve(null);
86
- if (extension.multiscatterColorTexture) {
87
- extension.multiscatterColorTexture.nonColorData = true;
88
- texturePromise = this._loader.loadTextureInfoAsync(`${context}/multiscatterColorTexture`, extension.multiscatterColorTexture, (texture) => {
89
- texture.name = `${babylonMaterial.name} (Transmission)`;
90
- adapter.transmissionWeightTexture = texture;
91
- });
92
- }
93
100
  adapter.transmissionScatterAnisotropy = scatterAnisotropy;
94
- // eslint-disable-next-line github/no-then
95
- return texturePromise.then(() => { });
96
101
  }
97
102
  // Subsurface volume
98
103
  if (adapter.subsurfaceWeight > 0) {
99
104
  adapter.subsurfaceScatterAnisotropy = scatterAnisotropy;
100
105
  adapter.subsurfaceColor = scatterColor;
101
- const mfp = new Vector3(adapter.extinctionCoefficient.x !== 0 ? 1.0 / adapter.extinctionCoefficient.x : 1.0, adapter.extinctionCoefficient.y !== 0 ? 1.0 / adapter.extinctionCoefficient.y : 1.0, adapter.extinctionCoefficient.z !== 0 ? 1.0 / adapter.extinctionCoefficient.z : 1.0);
106
+ const mfp = new Vector3(extinctionCoefficient.x !== 0 ? 1.0 / extinctionCoefficient.x : 1.0, extinctionCoefficient.y !== 0 ? 1.0 / extinctionCoefficient.y : 1.0, extinctionCoefficient.z !== 0 ? 1.0 / extinctionCoefficient.z : 1.0);
102
107
  adapter.subsurfaceRadius = Math.max(mfp.x, mfp.y, mfp.z);
103
108
  adapter.subsurfaceRadiusScale = new Color3(mfp.x / adapter.subsurfaceRadius, mfp.y / adapter.subsurfaceRadius, mfp.z / adapter.subsurfaceRadius);
104
109
  }
105
- return Promise.resolve();
110
+ // eslint-disable-next-line github/no-then
111
+ return texturePromise.then(() => { });
106
112
  }
107
113
  }
108
114
  unregisterGLTFExtension(NAME);
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_materials_volume_scatter.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_volume_scatter.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsVolumeScatter } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_volume_scatter\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_volume_scatter extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_volume_scatter\"]: {};\r\n }\r\n}\r\n\r\nfunction multiScatterToSingleScatterAlbedo(multiScatter: Color3): Vector3 {\r\n const multiScatterAlbedo = new Vector3(multiScatter.r, multiScatter.g, multiScatter.b);\r\n const s: Vector3 = new Vector3(4.09712, 4.09712, 4.09712);\r\n s.multiplyInPlace(multiScatterAlbedo);\r\n s.addInPlace(new Vector3(4.20863, 4.20863, 4.20863));\r\n\r\n const p: Vector3 = new Vector3(9.59217, 9.59217, 9.59217);\r\n p.addInPlace(new Vector3(41.6808, 41.6808, 41.6808).multiplyInPlace(multiScatterAlbedo));\r\n p.addInPlace(new Vector3(17.7126, 17.7126, 17.7126).multiplyInPlace(multiScatterAlbedo.multiply(multiScatterAlbedo)));\r\n s.subtractInPlace(new Vector3(Math.sqrt(p.x), Math.sqrt(p.y), Math.sqrt(p.z)));\r\n return new Vector3(1.0, 1.0, 1.0).subtract(s.multiply(s));\r\n}\r\n\r\n/**\r\n * TODO: In-progress specification\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/7ea427ed55d44427e83c0a6d1c87068b1a4151c5/extensions/2.0/Khronos/KHR_materials_volume_scatter/README.md)\r\n * @experimental\r\n * @since 9.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_volume_scatter implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 172;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n if (this.enabled) {\r\n // We need to disable instance usage because the attenuation factor depends on the node scale of each individual mesh\r\n this._loader._disableInstancedMesh++;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n if (this.enabled) {\r\n this._loader._disableInstancedMesh--;\r\n }\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsVolumeScatter>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadVolumePropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n // eslint-disable-next-line github/no-then\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadVolumePropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsVolumeScatter): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n // If transparency isn't enabled already, this extension shouldn't do anything.\r\n // i.e. it requires either the KHR_materials_transmission or KHR_materials_diffuse_transmission extensions.\r\n if (adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) {\r\n return Promise.resolve();\r\n }\r\n\r\n const scatterColor = extension.multiscatterColor !== undefined && extension.multiscatterColor.length == 3 ? Color3.FromArray(extension.multiscatterColor) : Color3.Black();\r\n const scatterAnisotropy = extension.scatterAnisotropy !== undefined ? extension.scatterAnisotropy : 0;\r\n\r\n // In glTF, both the translucency volume and subsurface volume use the same input parameters.\r\n // We'll apply them to both, as appropriate.\r\n if (adapter.transmissionWeight > 0) {\r\n const singleScatterAlbedo = multiScatterToSingleScatterAlbedo(scatterColor);\r\n\r\n const extinctionCoefficient = new Vector3(-Math.log(adapter.transmissionColor.r), -Math.log(adapter.transmissionColor.g), -Math.log(adapter.transmissionColor.b));\r\n extinctionCoefficient.scaleInPlace(1 / Math.max(adapter.transmissionDepth, 0.001));\r\n\r\n const scatteringCoefficient = extinctionCoefficient.multiply(singleScatterAlbedo);\r\n\r\n // The scattering coefficient in OpenPBR is defined as per unit distance, so we need to scale it back up by the depth.\r\n scatteringCoefficient.scaleInPlace(adapter.transmissionDepth);\r\n adapter.transmissionScatter.set(scatteringCoefficient.x, scatteringCoefficient.y, scatteringCoefficient.z);\r\n\r\n // Load texture if present\r\n let texturePromise: Promise<Nullable<BaseTexture>> = Promise.resolve(null);\r\n if (extension.multiscatterColorTexture) {\r\n (extension.multiscatterColorTexture as ITextureInfo).nonColorData = true;\r\n texturePromise = this._loader.loadTextureInfoAsync(`${context}/multiscatterColorTexture`, extension.multiscatterColorTexture, (texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Transmission)`;\r\n adapter.transmissionWeightTexture = texture;\r\n });\r\n }\r\n adapter.transmissionScatterAnisotropy = scatterAnisotropy;\r\n // eslint-disable-next-line github/no-then\r\n return texturePromise.then(() => {});\r\n }\r\n // Subsurface volume\r\n if (adapter.subsurfaceWeight > 0) {\r\n adapter.subsurfaceScatterAnisotropy = scatterAnisotropy;\r\n adapter.subsurfaceColor = scatterColor;\r\n\r\n const mfp = new Vector3(\r\n adapter.extinctionCoefficient.x !== 0 ? 1.0 / adapter.extinctionCoefficient.x : 1.0,\r\n adapter.extinctionCoefficient.y !== 0 ? 1.0 / adapter.extinctionCoefficient.y : 1.0,\r\n adapter.extinctionCoefficient.z !== 0 ? 1.0 / adapter.extinctionCoefficient.z : 1.0\r\n );\r\n\r\n adapter.subsurfaceRadius = Math.max(mfp.x, mfp.y, mfp.z);\r\n adapter.subsurfaceRadiusScale = new Color3(mfp.x / adapter.subsurfaceRadius, mfp.y / adapter.subsurfaceRadius, mfp.z / adapter.subsurfaceRadius);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_volume_scatter(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_materials_volume_scatter.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_volume_scatter.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type IMaterial, type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsVolumeScatter } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_volume_scatter\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_volume_scatter extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_volume_scatter\"]: {};\r\n }\r\n}\r\n\r\nfunction multiScatterToSingleScatterAlbedo(multiScatter: Color3): Vector3 {\r\n const multiScatterAlbedo = new Vector3(multiScatter.r, multiScatter.g, multiScatter.b);\r\n const s: Vector3 = new Vector3(4.09712, 4.09712, 4.09712);\r\n s.addInPlace(new Vector3(4.20863, 4.20863, 4.20863).multiplyInPlace(multiScatterAlbedo));\r\n\r\n const p: Vector3 = new Vector3(9.59217, 9.59217, 9.59217);\r\n p.addInPlace(new Vector3(41.6808, 41.6808, 41.6808).multiplyInPlace(multiScatterAlbedo));\r\n p.addInPlace(new Vector3(17.7126, 17.7126, 17.7126).multiplyInPlace(multiScatterAlbedo.multiply(multiScatterAlbedo)));\r\n s.subtractInPlace(new Vector3(Math.sqrt(p.x), Math.sqrt(p.y), Math.sqrt(p.z)));\r\n return new Vector3(1.0, 1.0, 1.0).subtract(s.multiply(s));\r\n}\r\n\r\n/**\r\n * TODO: In-progress specification\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/7ea427ed55d44427e83c0a6d1c87068b1a4151c5/extensions/2.0/Khronos/KHR_materials_volume_scatter/README.md)\r\n * @experimental\r\n * @since 9.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_volume_scatter implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 172;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n if (this.enabled) {\r\n // We need to disable instance usage because the attenuation factor depends on the node scale of each individual mesh\r\n this._loader._disableInstancedMesh++;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n if (this.enabled) {\r\n this._loader._disableInstancedMesh--;\r\n }\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsVolumeScatter>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadVolumePropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n // eslint-disable-next-line github/no-then\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadVolumePropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsVolumeScatter): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n // If transparency isn't enabled already, this extension shouldn't do anything.\r\n // i.e. it requires either the KHR_materials_transmission or KHR_materials_diffuse_transmission extensions.\r\n // Additionally, this already needs to be a volumetric material to apply this extension.\r\n if ((adapter.transmissionWeight === 0 && adapter.subsurfaceWeight === 0) || adapter.geometryThinWalled) {\r\n return Promise.resolve();\r\n }\r\n\r\n const scatterColor =\r\n extension.multiscatterColorFactor !== undefined && extension.multiscatterColorFactor.length == 3 ? Color3.FromArray(extension.multiscatterColorFactor) : Color3.Black();\r\n const scatterAnisotropy = extension.scatterAnisotropy !== undefined ? extension.scatterAnisotropy : 0;\r\n\r\n // If diffuse_transmission, apply props to subsurface\r\n // If transmission, apply props to transmission\r\n // Load texture if present\r\n let texturePromise: Promise<Nullable<BaseTexture>> = Promise.resolve(null);\r\n if (extension.multiscatterColorTexture) {\r\n (extension.multiscatterColorTexture as ITextureInfo).nonColorData = true;\r\n texturePromise = this._loader.loadTextureInfoAsync(`${context}/multiscatterColorTexture`, extension.multiscatterColorTexture, (texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Scatter Color)`;\r\n if (adapter.transmissionWeight > 0) {\r\n adapter.transmissionScatterTexture = texture;\r\n }\r\n if (adapter.subsurfaceWeight > 0) {\r\n adapter.subsurfaceColorTexture = texture;\r\n }\r\n });\r\n }\r\n\r\n const extinctionCoefficient = new Vector3(-Math.log(adapter.transmissionColor.r), -Math.log(adapter.transmissionColor.g), -Math.log(adapter.transmissionColor.b));\r\n extinctionCoefficient.scaleInPlace(1 / Math.max(adapter.transmissionDepth, 0.000001));\r\n\r\n // In glTF, both the translucency volume and subsurface volume use the same input parameters.\r\n // We'll apply them to both, as appropriate.\r\n if (adapter.transmissionWeight > 0) {\r\n const singleScatterAlbedo = multiScatterToSingleScatterAlbedo(scatterColor);\r\n const scatteringCoefficient = extinctionCoefficient.multiply(singleScatterAlbedo);\r\n\r\n // The scattering coefficient in OpenPBR is defined as per unit distance, so we need to scale it back up by the depth.\r\n scatteringCoefficient.scaleInPlace(adapter.transmissionDepth);\r\n adapter.transmissionScatter.set(scatteringCoefficient.x, scatteringCoefficient.y, scatteringCoefficient.z);\r\n\r\n adapter.transmissionScatterAnisotropy = scatterAnisotropy;\r\n }\r\n // Subsurface volume\r\n if (adapter.subsurfaceWeight > 0) {\r\n adapter.subsurfaceScatterAnisotropy = scatterAnisotropy;\r\n adapter.subsurfaceColor = scatterColor;\r\n\r\n const mfp = new Vector3(\r\n extinctionCoefficient.x !== 0 ? 1.0 / extinctionCoefficient.x : 1.0,\r\n extinctionCoefficient.y !== 0 ? 1.0 / extinctionCoefficient.y : 1.0,\r\n extinctionCoefficient.z !== 0 ? 1.0 / extinctionCoefficient.z : 1.0\r\n );\r\n\r\n adapter.subsurfaceRadius = Math.max(mfp.x, mfp.y, mfp.z);\r\n adapter.subsurfaceRadiusScale = new Color3(mfp.x / adapter.subsurfaceRadius, mfp.y / adapter.subsurfaceRadius, mfp.z / adapter.subsurfaceRadius);\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return texturePromise.then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_volume_scatter(loader));\r\n"]}
@@ -1,5 +1,5 @@
1
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
2
- import type { GLTFLoader } from "../glTFLoader.js";
1
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
2
+ import { type GLTFLoader } from "../glTFLoader.js";
3
3
  declare module "../../glTFFileLoader.js" {
4
4
  interface GLTFLoaderExtensionOptions {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_mesh_quantization.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_mesh_quantization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAarC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAW9B;;OAEG;IACH,YAAY,MAAkB;QAb9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAWxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IACT,OAAO,KAAI,CAAC;CACtB;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport type { GLTFLoader } from \"../glTFLoader\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_mesh_quantization\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_mesh_quantization extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_mesh_quantization\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_mesh_quantization implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {}\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_mesh_quantization(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_mesh_quantization.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_mesh_quantization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAarC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAW9B;;OAEG;IACH,YAAY,MAAkB;QAb9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAWxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IACT,OAAO,KAAI,CAAC;CACtB;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { type GLTFLoader } from \"../glTFLoader\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_mesh_quantization\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_mesh_quantization extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_mesh_quantization\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_mesh_quantization implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {}\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_mesh_quantization(loader));\r\n"]}
@@ -1,5 +1,5 @@
1
- import type { GLTFLoader } from "../glTFLoader.js";
2
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type GLTFLoader } from "../glTFLoader.js";
2
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
3
3
  declare module "../../glTFFileLoader.js" {
4
4
  interface GLTFLoaderExtensionOptions {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_node_hoverability.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_hoverability.ts"],"names":[],"mappings":"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","sourcesContent":["import { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport type { GLTFLoader } from \"../glTFLoader\";\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\nimport type { INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_hoverability\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_node_hoverability extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_hoverability\"]: {};\n }\n}\n\n// interactivity\nconst MeshPointerOverPrefix = \"targetMeshPointerOver_\";\naddNewInteractivityFlowGraphMapping(\"event/onHoverIn\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.PointerOverEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return MeshPointerOverPrefix + data;\n },\n },\n },\n outputs: {\n values: {\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"targetMesh\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"meshUnderPointer\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n // find the listener nodeIndex value\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = MeshPointerOverPrefix + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\nconst MeshPointerOutPrefix = \"targetMeshPointerOut_\";\naddNewInteractivityFlowGraphMapping(\"event/onHoverOut\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.PointerOutEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return MeshPointerOutPrefix + data;\n },\n },\n },\n outputs: {\n values: {\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"targetMesh\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"meshOutOfPointer\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = MeshPointerOutPrefix + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_hoverability/hoverable\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.pointerOverDisableMeshTesting !== undefined) {\n return tn.pointerOverDisableMeshTesting;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.pointerOverDisableMeshTesting = !value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"pointerOverDisableMeshTesting\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_node_hoverability\n * @see https://github.com/KhronosGroup/glTF/pull/2426\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_hoverability implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\n public async onReady(): Promise<void> {\n this._loader.gltf.nodes?.forEach((node) => {\n // default is true, so only apply if false\n if (node.extensions?.KHR_node_hoverability && node.extensions?.KHR_node_hoverability.hoverable === false) {\n node._babylonTransformNode?.getChildMeshes().forEach((mesh) => {\n mesh.pointerOverDisableMeshTesting = true;\n });\n }\n });\n }\n\n public dispose() {\n (this._loader as any) = null;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_hoverability(loader));\n"]}
1
+ {"version":3,"file":"KHR_node_hoverability.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_hoverability.ts"],"names":[],"mappings":"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","sourcesContent":["import { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { type GLTFLoader } from \"../glTFLoader\";\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\nimport { type INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_hoverability\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_node_hoverability extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_hoverability\"]: {};\n }\n}\n\n// interactivity\nconst MeshPointerOverPrefix = \"targetMeshPointerOver_\";\naddNewInteractivityFlowGraphMapping(\"event/onHoverIn\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.PointerOverEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return MeshPointerOverPrefix + data;\n },\n },\n },\n outputs: {\n values: {\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"targetMesh\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"meshUnderPointer\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n // find the listener nodeIndex value\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = MeshPointerOverPrefix + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\nconst MeshPointerOutPrefix = \"targetMeshPointerOut_\";\naddNewInteractivityFlowGraphMapping(\"event/onHoverOut\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.PointerOutEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return MeshPointerOutPrefix + data;\n },\n },\n },\n outputs: {\n values: {\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"targetMesh\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"meshOutOfPointer\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = MeshPointerOutPrefix + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_hoverability/hoverable\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.pointerOverDisableMeshTesting !== undefined) {\n return tn.pointerOverDisableMeshTesting;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.pointerOverDisableMeshTesting = !value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"pointerOverDisableMeshTesting\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_node_hoverability\n * @see https://github.com/KhronosGroup/glTF/pull/2426\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_hoverability implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\n public async onReady(): Promise<void> {\n this._loader.gltf.nodes?.forEach((node) => {\n // default is true, so only apply if false\n if (node.extensions?.KHR_node_hoverability && node.extensions?.KHR_node_hoverability.hoverable === false) {\n node._babylonTransformNode?.getChildMeshes().forEach((mesh) => {\n mesh.pointerOverDisableMeshTesting = true;\n });\n }\n });\n }\n\n public dispose() {\n (this._loader as any) = null;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_hoverability(loader));\n"]}
@@ -1,5 +1,5 @@
1
- import type { GLTFLoader } from "../glTFLoader.js";
2
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type GLTFLoader } from "../glTFLoader.js";
2
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
3
3
  declare module "../../glTFFileLoader.js" {
4
4
  interface GLTFLoaderExtensionOptions {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_node_selectability.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_selectability.ts"],"names":[],"mappings":"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","sourcesContent":["import { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport type { GLTFLoader } from \"../glTFLoader\";\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\nimport type { INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_selectability\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_selectability extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_selectability\"]: {};\n }\n}\n\n// add the interactivity mapping for the onSelect event\naddNewInteractivityFlowGraphMapping(\"event/onSelect\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.MeshPickEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return \"pickedMesh_\" + data;\n },\n },\n },\n outputs: {\n values: {\n selectedNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n selectionPoint: { name: \"pickedPoint\" },\n selectionRayOrigin: { name: \"pickOrigin\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"asset\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"pickedMesh\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n // find the listener nodeIndex value\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = \"pickedMesh_\" + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\n// object model extension for selectable\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_selectability/selectable\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.isPickable !== undefined) {\n return tn.isPickable;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.isPickable = value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"isPickable\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_selectability\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_selectability implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\n public async onReady(): Promise<void> {\n this._loader.gltf.nodes?.forEach((node) => {\n if (node.extensions?.KHR_node_selectability && node.extensions?.KHR_node_selectability.selectable === false) {\n node._babylonTransformNode?.getChildMeshes().forEach((mesh) => {\n mesh.isPickable = false;\n });\n }\n });\n }\n\n public dispose() {\n (this._loader as any) = null;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_selectability(loader));\n"]}
1
+ {"version":3,"file":"KHR_node_selectability.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_selectability.ts"],"names":[],"mappings":"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","sourcesContent":["import { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\nimport { type GLTFLoader } from \"../glTFLoader\";\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\nimport { type INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_selectability\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_selectability extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_selectability\"]: {};\n }\n}\n\n// add the interactivity mapping for the onSelect event\naddNewInteractivityFlowGraphMapping(\"event/onSelect\", NAME, {\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\n blocks: [FlowGraphBlockNames.MeshPickEvent, FlowGraphBlockNames.GetVariable, FlowGraphBlockNames.IndexOf, \"KHR_interactivity/FlowGraphGLTFDataProvider\"],\n configuration: {\n stopPropagation: { name: \"stopPropagation\" },\n nodeIndex: {\n name: \"variable\",\n toBlock: FlowGraphBlockNames.GetVariable,\n dataTransformer(data) {\n return \"pickedMesh_\" + data;\n },\n },\n },\n outputs: {\n values: {\n selectedNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\n controllerIndex: { name: \"pointerId\" },\n selectionPoint: { name: \"pickedPoint\" },\n selectionRayOrigin: { name: \"pickOrigin\" },\n },\n flows: {\n out: { name: \"done\" },\n },\n },\n interBlockConnectors: [\n {\n input: \"asset\",\n output: \"value\",\n inputBlockIndex: 0,\n outputBlockIndex: 1,\n isVariable: true,\n },\n {\n input: \"array\",\n output: \"nodes\",\n inputBlockIndex: 2,\n outputBlockIndex: 3,\n isVariable: true,\n },\n {\n input: \"object\",\n output: \"pickedMesh\",\n inputBlockIndex: 2,\n outputBlockIndex: 0,\n isVariable: true,\n },\n ],\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\n // add the glTF to the configuration of the last serialized object\n const serializedObject = serializedObjects[serializedObjects.length - 1];\n serializedObject.config = serializedObject.config || {};\n serializedObject.config.glTF = globalGLTF;\n // find the listener nodeIndex value\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\n if (nodeIndex === undefined || typeof nodeIndex !== \"number\") {\n throw new Error(\"nodeIndex not found in configuration\");\n }\n const variableName = \"pickedMesh_\" + nodeIndex;\n // find the nodeIndex value\n serializedObjects[1].config.variable = variableName;\n context._userVariables[variableName] = {\n className: \"Mesh\",\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\n };\n return serializedObjects;\n },\n});\n\n// object model extension for selectable\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_selectability/selectable\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.isPickable !== undefined) {\n return tn.isPickable;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.isPickable = value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"isPickable\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_selectability\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_selectability implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\n public async onReady(): Promise<void> {\n this._loader.gltf.nodes?.forEach((node) => {\n if (node.extensions?.KHR_node_selectability && node.extensions?.KHR_node_selectability.selectable === false) {\n node._babylonTransformNode?.getChildMeshes().forEach((mesh) => {\n mesh.isPickable = false;\n });\n }\n });\n }\n\n public dispose() {\n (this._loader as any) = null;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_selectability(loader));\n"]}
@@ -1,5 +1,5 @@
1
- import type { GLTFLoader } from "../glTFLoader.js";
2
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type GLTFLoader } from "../glTFLoader.js";
2
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
3
3
  declare module "../../glTFFileLoader.js" {
4
4
  interface GLTFLoaderExtensionOptions {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_node_visibility.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAanC,wCAAwC;AACxC,sBAAsB,CAAC,kDAAkD,EAAE;IACvE,GAAG,EAAE,CAAC,IAAW,EAAE,EAAE;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,qBAA4B,CAAC;QAC7C,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC,SAAS,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,GAAG,EAAE,CAAC,KAAc,EAAE,IAAW,EAAE,EAAE;QACjC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAsC,CAAC,SAAS,GAAG,KAAK,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IACD,SAAS,EAAE,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB;IACtD,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;IACpC,IAAI,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,mBAAmB;IAa5B;;OAEG;IACH,YAAY,MAAkB;QAf9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAaxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBACxD,IAAI,oBAAoB,EAAE,CAAC;oBACvB,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBAClH,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC3C,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { AbstractMesh } from \"core/Meshes/abstractMesh\";\nimport type { GLTFLoader } from \"../glTFLoader\";\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport type { INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_visibility\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_node_visibility extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_visibility\"]: {};\n }\n}\n\n// object model extension for visibility\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_visibility/visible\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.isVisible !== undefined) {\n return tn.isVisible;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.inheritVisibility = true;\n });\n if (node._babylonTransformNode) {\n (node._babylonTransformNode as AbstractMesh).isVisible = value;\n }\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.isVisible = value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"isVisible\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_node_visibility\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_visibility implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader?: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n public onReady(): void {\n if (!this._loader) {\n return;\n }\n\n const nodes = this._loader.gltf.nodes;\n if (nodes) {\n for (const node of nodes) {\n const babylonTransformNode = node._babylonTransformNode;\n if (babylonTransformNode) {\n babylonTransformNode.inheritVisibility = true;\n if (node.extensions && node.extensions.KHR_node_visibility && node.extensions.KHR_node_visibility.visible === false) {\n babylonTransformNode.isVisible = false;\n }\n }\n }\n }\n }\n\n public dispose() {\n delete this._loader;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_visibility(loader));\n"]}
1
+ {"version":3,"file":"KHR_node_visibility.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_visibility.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAanC,wCAAwC;AACxC,sBAAsB,CAAC,kDAAkD,EAAE;IACvE,GAAG,EAAE,CAAC,IAAW,EAAE,EAAE;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,qBAA4B,CAAC;QAC7C,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC,SAAS,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,GAAG,EAAE,CAAC,KAAc,EAAE,IAAW,EAAE,EAAE;QACjC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAsC,CAAC,SAAS,GAAG,KAAK,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IACD,SAAS,EAAE,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB;IACtD,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;IACpC,IAAI,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,mBAAmB;IAa5B;;OAEG;IACH,YAAY,MAAkB;QAf9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAaxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBACxD,IAAI,oBAAoB,EAAE,CAAC;oBACvB,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBAClH,oBAAoB,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC3C,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type AbstractMesh } from \"core/Meshes/abstractMesh\";\nimport { type GLTFLoader } from \"../glTFLoader\";\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport { type INode } from \"../glTFLoaderInterfaces\";\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\n\nconst NAME = \"KHR_node_visibility\";\n\ndeclare module \"../../glTFFileLoader\" {\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\n export interface GLTFLoaderExtensionOptions {\n /**\n * Defines options for the KHR_node_visibility extension.\n */\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\n [\"KHR_node_visibility\"]: {};\n }\n}\n\n// object model extension for visibility\nAddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_visibility/visible\", {\n get: (node: INode) => {\n const tn = node._babylonTransformNode as any;\n if (tn && tn.isVisible !== undefined) {\n return tn.isVisible;\n }\n return true;\n },\n set: (value: boolean, node: INode) => {\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.inheritVisibility = true;\n });\n if (node._babylonTransformNode) {\n (node._babylonTransformNode as AbstractMesh).isVisible = value;\n }\n node._primitiveBabylonMeshes?.forEach((mesh) => {\n mesh.isVisible = value;\n });\n },\n getTarget: (node: INode) => node._babylonTransformNode,\n getPropertyName: [() => \"isVisible\"],\n type: \"boolean\",\n});\n\n/**\n * Loader extension for KHR_node_visibility\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_node_visibility implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader?: GLTFLoader;\n\n /**\n * @internal\n */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n\n public onReady(): void {\n if (!this._loader) {\n return;\n }\n\n const nodes = this._loader.gltf.nodes;\n if (nodes) {\n for (const node of nodes) {\n const babylonTransformNode = node._babylonTransformNode;\n if (babylonTransformNode) {\n babylonTransformNode.inheritVisibility = true;\n if (node.extensions && node.extensions.KHR_node_visibility && node.extensions.KHR_node_visibility.visible === false) {\n babylonTransformNode.isVisible = false;\n }\n }\n }\n }\n }\n\n public dispose() {\n delete this._loader;\n }\n}\n\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_node_visibility(loader));\n"]}
@@ -1,8 +1,8 @@
1
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
2
2
  import { GLTFLoader } from "../glTFLoader.js";
3
- import type { ITexture } from "../glTFLoaderInterfaces.js";
4
- import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
5
- import type { Nullable } from "@babylonjs/core/types.js";
3
+ import { type ITexture } from "../glTFLoaderInterfaces.js";
4
+ import { type BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
5
+ import { type Nullable } from "@babylonjs/core/types.js";
6
6
  declare module "../../glTFFileLoader.js" {
7
7
  interface GLTFLoaderExtensionOptions {
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_texture_basisu.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_texture_basisu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKtD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAalC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,kBAAkB;IAS3B;;OAEG;IACH,YAAY,MAAkB;QAX9B,kCAAkC;QAClB,SAAI,GAAG,IAAI,CAAC;QAWxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,iBAAiB,CAAC,OAAe,EAAE,OAAiB,EAAE,MAA6C;QACtG,OAAO,UAAU,CAAC,kBAAkB,CAAiC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACpI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5J,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YACtG,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CACzC,OAAO,EACP,OAAO,EACP,KAAK,EACL,CAAC,cAAc,EAAE,EAAE;gBACf,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3B,CAAC,EACD,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qCAAqC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/F,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CACrC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\nimport type { ITexture } from \"../glTFLoaderInterfaces\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { IKHRTextureBasisU } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_texture_basisu\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_texture_basisu extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_texture_basisu\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_basisu implements IGLTFLoaderExtension {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRTextureBasisU, BaseTexture>(context, texture, this.name, async (extensionContext, extension) => {\r\n const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler);\r\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\r\n return await this._loader._createTextureAsync(\r\n context,\r\n sampler,\r\n image,\r\n (babylonTexture) => {\r\n assign(babylonTexture);\r\n },\r\n texture._textureInfo.nonColorData ? { useRGBAIfASTCBC7NotAvailableWhenUASTC: true } : undefined,\r\n !texture._textureInfo.nonColorData\r\n );\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_basisu(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_texture_basisu.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_texture_basisu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKtD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAalC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,kBAAkB;IAS3B;;OAEG;IACH,YAAY,MAAkB;QAX9B,kCAAkC;QAClB,SAAI,GAAG,IAAI,CAAC;QAWxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,iBAAiB,CAAC,OAAe,EAAE,OAAiB,EAAE,MAA6C;QACtG,OAAO,UAAU,CAAC,kBAAkB,CAAiC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACpI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5J,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YACtG,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CACzC,OAAO,EACP,OAAO,EACP,KAAK,EACL,CAAC,cAAc,EAAE,EAAE;gBACf,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3B,CAAC,EACD,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qCAAqC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/F,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CACrC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\nimport { type ITexture } from \"../glTFLoaderInterfaces\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type IKHRTextureBasisU } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_texture_basisu\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_texture_basisu extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_texture_basisu\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_basisu implements IGLTFLoaderExtension {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRTextureBasisU, BaseTexture>(context, texture, this.name, async (extensionContext, extension) => {\r\n const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler);\r\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\r\n return await this._loader._createTextureAsync(\r\n context,\r\n sampler,\r\n image,\r\n (babylonTexture) => {\r\n assign(babylonTexture);\r\n },\r\n texture._textureInfo.nonColorData ? { useRGBAIfASTCBC7NotAvailableWhenUASTC: true } : undefined,\r\n !texture._textureInfo.nonColorData\r\n );\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_basisu(loader));\r\n"]}
@@ -1,7 +1,7 @@
1
- import type { Nullable } from "@babylonjs/core/types.js";
2
- import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
3
- import type { ITextureInfo } from "../glTFLoaderInterfaces.js";
4
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type Nullable } from "@babylonjs/core/types.js";
2
+ import { type BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
3
+ import { type ITextureInfo } from "../glTFLoaderInterfaces.js";
4
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
5
5
  import { GLTFLoader } from "../glTFLoader.js";
6
6
  declare module "../../glTFFileLoader.js" {
7
7
  interface GLTFLoaderExtensionOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_texture_transform.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_texture_transform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,sDAAwC;AAI1D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAarC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAa9B;;OAEG;IACH,YAAY,MAAkB;QAf9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAaxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,oBAAoB,CAAC,OAAe,EAAE,WAAyB,EAAE,MAA6C;QACjH,OAAO,UAAU,CAAC,kBAAkB,CAAoC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC3I,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,EAAE;gBACpF,IAAI,CAAC,CAAC,cAAc,YAAY,OAAO,CAAC,EAAE,CAAC;oBACvC,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,8BAA8B,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnB,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7C,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;gBAED,mCAAmC;gBACnC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;gBACnC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;gBAEnC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACrB,cAAc,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC9C,CAAC;gBAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;oBAClC,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACzD,CAAC;gBAED,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\nimport type { ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRTextureTransform } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_texture_transform\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_texture_transform extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_texture_transform\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_transform/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_transform implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRTextureTransform, BaseTexture>(context, textureInfo, this.name, async (extensionContext, extension) => {\r\n return await this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {\r\n if (!(babylonTexture instanceof Texture)) {\r\n throw new Error(`${extensionContext}: Texture type not supported`);\r\n }\r\n\r\n if (extension.offset) {\r\n babylonTexture.uOffset = extension.offset[0];\r\n babylonTexture.vOffset = extension.offset[1];\r\n }\r\n\r\n // Always rotate around the origin.\r\n babylonTexture.uRotationCenter = 0;\r\n babylonTexture.vRotationCenter = 0;\r\n\r\n if (extension.rotation) {\r\n babylonTexture.wAng = -extension.rotation;\r\n }\r\n\r\n if (extension.scale) {\r\n babylonTexture.uScale = extension.scale[0];\r\n babylonTexture.vScale = extension.scale[1];\r\n }\r\n\r\n if (extension.texCoord != undefined) {\r\n babylonTexture.coordinatesIndex = extension.texCoord;\r\n }\r\n\r\n assign(babylonTexture);\r\n });\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_transform(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_texture_transform.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_texture_transform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAI1D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAarC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAa9B;;OAEG;IACH,YAAY,MAAkB;QAf9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAaxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,oBAAoB,CAAC,OAAe,EAAE,WAAyB,EAAE,MAA6C;QACjH,OAAO,UAAU,CAAC,kBAAkB,CAAoC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC3I,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,EAAE;gBACpF,IAAI,CAAC,CAAC,cAAc,YAAY,OAAO,CAAC,EAAE,CAAC;oBACvC,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,8BAA8B,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACnB,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7C,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;gBAED,mCAAmC;gBACnC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;gBACnC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;gBAEnC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACrB,cAAc,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC9C,CAAC;gBAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;oBAClC,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACzD,CAAC;gBAED,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\n\r\nimport { type ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRTextureTransform } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_texture_transform\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_texture_transform extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_texture_transform\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_transform/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_transform implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRTextureTransform, BaseTexture>(context, textureInfo, this.name, async (extensionContext, extension) => {\r\n return await this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {\r\n if (!(babylonTexture instanceof Texture)) {\r\n throw new Error(`${extensionContext}: Texture type not supported`);\r\n }\r\n\r\n if (extension.offset) {\r\n babylonTexture.uOffset = extension.offset[0];\r\n babylonTexture.vOffset = extension.offset[1];\r\n }\r\n\r\n // Always rotate around the origin.\r\n babylonTexture.uRotationCenter = 0;\r\n babylonTexture.vRotationCenter = 0;\r\n\r\n if (extension.rotation) {\r\n babylonTexture.wAng = -extension.rotation;\r\n }\r\n\r\n if (extension.scale) {\r\n babylonTexture.uScale = extension.scale[0];\r\n babylonTexture.vScale = extension.scale[1];\r\n }\r\n\r\n if (extension.texCoord != undefined) {\r\n babylonTexture.coordinatesIndex = extension.texCoord;\r\n }\r\n\r\n assign(babylonTexture);\r\n });\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_transform(loader));\r\n"]}
@@ -1,5 +1,5 @@
1
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
2
- import type { GLTFLoader } from "../glTFLoader.js";
1
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
2
+ import { type GLTFLoader } from "../glTFLoader.js";
3
3
  declare module "../../glTFFileLoader.js" {
4
4
  interface GLTFLoaderExtensionOptions {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_xmp_json_ld.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_xmp_json_ld.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAa/B;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,eAAe;IAkBxB;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,eAAqC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,eAAqC,CAAC;QAC3F,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACpF,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport type { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRXmpJsonLd_Gltf, IKHRXmpJsonLd_Node } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_xmp_json_ld\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_xmp_json_ld extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_xmp_json_ld\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/README.md)\r\n * @since 5.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_xmp_json_ld implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 100;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * Called after the loader state changes to LOADING.\r\n */\r\n public onLoading(): void {\r\n if (this._loader.rootBabylonMesh === null) {\r\n return;\r\n }\r\n\r\n const xmpGltf = this._loader.gltf.extensions?.KHR_xmp_json_ld as IKHRXmpJsonLd_Gltf;\r\n const xmpNode = this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld as IKHRXmpJsonLd_Node;\r\n if (xmpGltf && xmpNode) {\r\n const packet = +xmpNode.packet;\r\n if (xmpGltf.packets && packet < xmpGltf.packets.length) {\r\n this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || {};\r\n this._loader.rootBabylonMesh.metadata.xmp = xmpGltf.packets[packet];\r\n }\r\n }\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_xmp_json_ld(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_xmp_json_ld.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_xmp_json_ld.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAa/B;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,eAAe;IAkBxB;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,eAAqC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,eAAqC,CAAC;QAC3F,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/B,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACpF,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { type GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRXmpJsonLd_Gltf, type IKHRXmpJsonLd_Node } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_xmp_json_ld\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_xmp_json_ld extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_xmp_json_ld\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/README.md)\r\n * @since 5.0.0\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_xmp_json_ld implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 100;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * Called after the loader state changes to LOADING.\r\n */\r\n public onLoading(): void {\r\n if (this._loader.rootBabylonMesh === null) {\r\n return;\r\n }\r\n\r\n const xmpGltf = this._loader.gltf.extensions?.KHR_xmp_json_ld as IKHRXmpJsonLd_Gltf;\r\n const xmpNode = this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld as IKHRXmpJsonLd_Node;\r\n if (xmpGltf && xmpNode) {\r\n const packet = +xmpNode.packet;\r\n if (xmpGltf.packets && packet < xmpGltf.packets.length) {\r\n this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || {};\r\n this._loader.rootBabylonMesh.metadata.xmp = xmpGltf.packets[packet];\r\n }\r\n }\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_xmp_json_ld(loader));\r\n"]}
@@ -1,8 +1,8 @@
1
- import type { Nullable } from "@babylonjs/core/types.js";
2
- import type { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
3
- import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
4
- import type { IScene, INode, IAnimation } from "../glTFLoaderInterfaces.js";
5
- import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
1
+ import { type Nullable } from "@babylonjs/core/types.js";
2
+ import { type AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
3
+ import { type TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
4
+ import { type IScene, type INode, type IAnimation } from "../glTFLoaderInterfaces.js";
5
+ import { type IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
6
6
  import { GLTFLoader } from "../glTFLoader.js";
7
7
  import "@babylonjs/core/Audio/audioSceneComponent.js";
8
8
  declare module "../../glTFFileLoader.js" {