@babylonjs/serializers 9.13.0 → 9.15.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 (187) hide show
  1. package/3MF/core/model/pure.d.ts +8 -0
  2. package/3MF/core/model/pure.js +9 -0
  3. package/3MF/core/model/pure.js.map +1 -0
  4. package/3MF/core/pure.d.ts +3 -0
  5. package/3MF/core/pure.js +5 -0
  6. package/3MF/core/pure.js.map +1 -0
  7. package/3MF/core/xml/pure.d.ts +7 -0
  8. package/3MF/core/xml/pure.js +8 -0
  9. package/3MF/core/xml/pure.js.map +1 -0
  10. package/3MF/pure.d.ts +4 -0
  11. package/3MF/pure.js +6 -0
  12. package/3MF/pure.js.map +1 -0
  13. package/BVH/pure.d.ts +2 -0
  14. package/BVH/pure.js +3 -0
  15. package/BVH/pure.js.map +1 -0
  16. package/OBJ/pure.d.ts +2 -0
  17. package/OBJ/pure.js +3 -0
  18. package/OBJ/pure.js.map +1 -0
  19. package/USDZ/pure.d.ts +2 -0
  20. package/USDZ/pure.js +4 -0
  21. package/USDZ/pure.js.map +1 -0
  22. package/glTF/2.0/Extensions/EXT_lights_area.d.ts +3 -37
  23. package/glTF/2.0/Extensions/EXT_lights_area.js +5 -130
  24. package/glTF/2.0/Extensions/EXT_lights_area.js.map +1 -1
  25. package/glTF/2.0/Extensions/EXT_lights_area.pure.d.ts +44 -0
  26. package/glTF/2.0/Extensions/EXT_lights_area.pure.js +145 -0
  27. package/glTF/2.0/Extensions/EXT_lights_area.pure.js.map +1 -0
  28. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +4 -38
  29. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +6 -138
  30. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  31. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.d.ts +44 -0
  32. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js +151 -0
  33. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js.map +1 -0
  34. package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +3 -15
  35. package/glTF/2.0/Extensions/EXT_texture_avif.js +5 -38
  36. package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
  37. package/glTF/2.0/Extensions/EXT_texture_avif.pure.d.ts +27 -0
  38. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +58 -0
  39. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -0
  40. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +3 -14
  41. package/glTF/2.0/Extensions/EXT_texture_webp.js +5 -37
  42. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  43. package/glTF/2.0/Extensions/EXT_texture_webp.pure.d.ts +26 -0
  44. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +57 -0
  45. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -0
  46. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +3 -30
  47. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +5 -128
  48. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  49. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.d.ts +37 -0
  50. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js +143 -0
  51. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js.map +1 -0
  52. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +3 -37
  53. package/glTF/2.0/Extensions/KHR_lights_punctual.js +5 -142
  54. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  55. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.d.ts +44 -0
  56. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js +157 -0
  57. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js.map +1 -0
  58. package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +3 -30
  59. package/glTF/2.0/Extensions/KHR_materials_anisotropy.js +5 -177
  60. package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
  61. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.d.ts +37 -0
  62. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js +192 -0
  63. package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js.map +1 -0
  64. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +3 -30
  65. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +5 -251
  66. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  67. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.d.ts +37 -0
  68. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js +266 -0
  69. package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js.map +1 -0
  70. package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +3 -30
  71. package/glTF/2.0/Extensions/KHR_materials_coat.js +5 -380
  72. package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -1
  73. package/glTF/2.0/Extensions/KHR_materials_coat.pure.d.ts +37 -0
  74. package/glTF/2.0/Extensions/KHR_materials_coat.pure.js +395 -0
  75. package/glTF/2.0/Extensions/KHR_materials_coat.pure.js.map +1 -0
  76. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +3 -22
  77. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js +5 -75
  78. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -1
  79. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.d.ts +29 -0
  80. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js +90 -0
  81. package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js.map +1 -0
  82. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +3 -38
  83. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +5 -115
  84. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
  85. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.d.ts +45 -0
  86. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js +130 -0
  87. package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js.map +1 -0
  88. package/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +3 -29
  89. package/glTF/2.0/Extensions/KHR_materials_dispersion.js +5 -60
  90. package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
  91. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.d.ts +36 -0
  92. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js +75 -0
  93. package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js.map +1 -0
  94. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +3 -25
  95. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +5 -54
  96. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  97. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.d.ts +32 -0
  98. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js +69 -0
  99. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js.map +1 -0
  100. package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +3 -30
  101. package/glTF/2.0/Extensions/KHR_materials_fuzz.js +5 -191
  102. package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -1
  103. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.d.ts +37 -0
  104. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js +206 -0
  105. package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js.map +1 -0
  106. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +3 -27
  107. package/glTF/2.0/Extensions/KHR_materials_ior.js +5 -67
  108. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  109. package/glTF/2.0/Extensions/KHR_materials_ior.pure.d.ts +34 -0
  110. package/glTF/2.0/Extensions/KHR_materials_ior.pure.js +81 -0
  111. package/glTF/2.0/Extensions/KHR_materials_ior.pure.js.map +1 -0
  112. package/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +3 -22
  113. package/glTF/2.0/Extensions/KHR_materials_iridescence.js +5 -100
  114. package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
  115. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.d.ts +29 -0
  116. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js +115 -0
  117. package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js.map +1 -0
  118. package/glTF/2.0/Extensions/KHR_materials_openpbr.d.ts +3 -25
  119. package/glTF/2.0/Extensions/KHR_materials_openpbr.js +5 -41
  120. package/glTF/2.0/Extensions/KHR_materials_openpbr.js.map +1 -1
  121. package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.d.ts +32 -0
  122. package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.js +56 -0
  123. package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.js.map +1 -0
  124. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +3 -22
  125. package/glTF/2.0/Extensions/KHR_materials_sheen.js +5 -63
  126. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  127. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.d.ts +29 -0
  128. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js +78 -0
  129. package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js.map +1 -0
  130. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +3 -39
  131. package/glTF/2.0/Extensions/KHR_materials_specular.js +5 -123
  132. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  133. package/glTF/2.0/Extensions/KHR_materials_specular.pure.d.ts +46 -0
  134. package/glTF/2.0/Extensions/KHR_materials_specular.pure.js +138 -0
  135. package/glTF/2.0/Extensions/KHR_materials_specular.pure.js.map +1 -0
  136. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +3 -38
  137. package/glTF/2.0/Extensions/KHR_materials_transmission.js +5 -145
  138. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  139. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.d.ts +45 -0
  140. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js +160 -0
  141. package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js.map +1 -0
  142. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +3 -18
  143. package/glTF/2.0/Extensions/KHR_materials_unlit.js +5 -43
  144. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  145. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.d.ts +25 -0
  146. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js +58 -0
  147. package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js.map +1 -0
  148. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +3 -38
  149. package/glTF/2.0/Extensions/KHR_materials_volume.js +5 -169
  150. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  151. package/glTF/2.0/Extensions/KHR_materials_volume.pure.d.ts +45 -0
  152. package/glTF/2.0/Extensions/KHR_materials_volume.pure.js +184 -0
  153. package/glTF/2.0/Extensions/KHR_materials_volume.pure.js.map +1 -0
  154. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +3 -38
  155. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js +5 -130
  156. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js.map +1 -1
  157. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.d.ts +45 -0
  158. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js +145 -0
  159. package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js.map +1 -0
  160. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +3 -14
  161. package/glTF/2.0/Extensions/KHR_texture_basisu.js +5 -37
  162. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  163. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.d.ts +26 -0
  164. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +57 -0
  165. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -0
  166. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +3 -19
  167. package/glTF/2.0/Extensions/KHR_texture_transform.js +5 -90
  168. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  169. package/glTF/2.0/Extensions/KHR_texture_transform.pure.d.ts +26 -0
  170. package/glTF/2.0/Extensions/KHR_texture_transform.pure.js +105 -0
  171. package/glTF/2.0/Extensions/KHR_texture_transform.pure.js.map +1 -0
  172. package/glTF/2.0/Extensions/pure.d.ts +26 -0
  173. package/glTF/2.0/Extensions/pure.js +27 -0
  174. package/glTF/2.0/Extensions/pure.js.map +1 -0
  175. package/glTF/2.0/pure.d.ts +5 -0
  176. package/glTF/2.0/pure.js +7 -0
  177. package/glTF/2.0/pure.js.map +1 -0
  178. package/glTF/pure.d.ts +3 -0
  179. package/glTF/pure.js +5 -0
  180. package/glTF/pure.js.map +1 -0
  181. package/package.json +30 -4
  182. package/pure.d.ts +7 -0
  183. package/pure.js +9 -0
  184. package/pure.js.map +1 -0
  185. package/stl/pure.d.ts +2 -0
  186. package/stl/pure.js +3 -0
  187. package/stl/pure.js.map +1 -0
@@ -1,93 +1,8 @@
1
- import { Tools } from "@babylonjs/core/Misc/tools.js";
2
- import { GLTFExporter } from "../glTFExporter.js";
3
- const NAME = "KHR_texture_transform";
4
1
  /**
5
- * Computes the adjusted offset for a rotation centered about the origin.
6
- * @internal
2
+ * Re-exports the pure implementation and applies the runtime registration side effect.
3
+ * Import "./KHR_texture_transform.pure" for tree-shakeable, side-effect-free usage.
7
4
  */
8
- function AdjustOffsetForRotationCenter(babylonTexture) {
9
- const { uOffset, vOffset, uRotationCenter, vRotationCenter, uScale, vScale, wAng } = babylonTexture;
10
- const cosAngle = Math.cos(wAng);
11
- const sinAngle = Math.sin(wAng);
12
- const scaledURotationCenter = uRotationCenter * uScale;
13
- const scaledVRotationCenter = vRotationCenter * vScale;
14
- const deltaU = scaledURotationCenter * (1 - cosAngle) + scaledVRotationCenter * sinAngle;
15
- const deltaV = scaledVRotationCenter * (1 - cosAngle) - scaledURotationCenter * sinAngle;
16
- return [uOffset + deltaU, vOffset + deltaV];
17
- }
18
- /**
19
- * @internal
20
- */
21
- // eslint-disable-next-line @typescript-eslint/naming-convention
22
- export class KHR_texture_transform {
23
- constructor() {
24
- /** Name of this extension */
25
- this.name = NAME;
26
- /** Defines whether this extension is enabled */
27
- this.enabled = true;
28
- /** Defines whether this extension is required */
29
- this.required = false;
30
- /** Reference to the glTF exporter */
31
- this._wasUsed = false;
32
- }
33
- dispose() { }
34
- /** @internal */
35
- get wasUsed() {
36
- return this._wasUsed;
37
- }
38
- postExportTexture(context, textureInfo, babylonTexture) {
39
- const scene = babylonTexture.getScene();
40
- if (!scene) {
41
- Tools.Warn(`${context}: "scene" is not defined for Babylon texture ${babylonTexture.name}!`);
42
- }
43
- /*
44
- * The KHR_texture_transform schema only supports w rotation around the origin.
45
- * See https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform#gltf-schema-updates.
46
- */
47
- if (babylonTexture.uAng !== 0 || babylonTexture.vAng !== 0) {
48
- Tools.Warn(`${context}: Texture ${babylonTexture.name} with rotation in the u or v axis is not supported in glTF.`);
49
- // Usually, we'd always early return here if the texture uses an unsupported combination of transform properties,
50
- // but we're making an exception here to maintain backwards compatibility.
51
- if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {
52
- return;
53
- }
54
- }
55
- const textureTransform = {};
56
- let transformIsRequired = false;
57
- if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {
58
- textureTransform.offset = [babylonTexture.uOffset, babylonTexture.vOffset];
59
- transformIsRequired = true;
60
- }
61
- if (babylonTexture.uScale !== 1 || babylonTexture.vScale !== 1) {
62
- textureTransform.scale = [babylonTexture.uScale, babylonTexture.vScale];
63
- transformIsRequired = true;
64
- }
65
- if (babylonTexture.wAng !== 0) {
66
- if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {
67
- // See https://github.com/mrdoob/three.js/issues/15831 for more details.
68
- if (babylonTexture.homogeneousRotationInUVTransform && babylonTexture.uScale !== babylonTexture.vScale) {
69
- Tools.Warn(`${context}: Texture ${babylonTexture.name} with homogenousRotationInUVTransform, non-uniform scaling, and non-zero rotation cannot be exported with ${NAME}.`);
70
- return;
71
- }
72
- Tools.Warn(`${context}: Texture ${babylonTexture.name} with non-origin rotation center will be exported using an adjusted offset with ${NAME}.`);
73
- textureTransform.offset = AdjustOffsetForRotationCenter(babylonTexture);
74
- }
75
- textureTransform.rotation = -babylonTexture.wAng;
76
- transformIsRequired = true;
77
- }
78
- if (babylonTexture.coordinatesIndex !== 0) {
79
- textureTransform.texCoord = babylonTexture.coordinatesIndex;
80
- transformIsRequired = true;
81
- }
82
- if (!transformIsRequired) {
83
- return;
84
- }
85
- this._wasUsed = true;
86
- if (!textureInfo.extensions) {
87
- textureInfo.extensions = {};
88
- }
89
- textureInfo.extensions[NAME] = textureTransform;
90
- }
91
- }
92
- GLTFExporter.RegisterExtension(NAME, () => new KHR_texture_transform());
5
+ export * from "./KHR_texture_transform.pure.js";
6
+ import { RegisterKHR_texture_transform } from "./KHR_texture_transform.pure.js";
7
+ RegisterKHR_texture_transform();
93
8
  //# sourceMappingURL=KHR_texture_transform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_texture_transform.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_texture_transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ITextureInfo, type IKHRTextureTransform } from \"babylonjs-gltf2interface\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { type Texture } from \"core/Materials/Textures/texture\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\n\r\nconst NAME = \"KHR_texture_transform\";\r\n\r\n/**\r\n * Computes the adjusted offset for a rotation centered about the origin.\r\n * @internal\r\n */\r\nfunction AdjustOffsetForRotationCenter(babylonTexture: Texture): [number, number] {\r\n const { uOffset, vOffset, uRotationCenter, vRotationCenter, uScale, vScale, wAng } = babylonTexture;\r\n const cosAngle = Math.cos(wAng);\r\n const sinAngle = Math.sin(wAng);\r\n const scaledURotationCenter = uRotationCenter * uScale;\r\n const scaledVRotationCenter = vRotationCenter * vScale;\r\n const deltaU = scaledURotationCenter * (1 - cosAngle) + scaledVRotationCenter * sinAngle;\r\n const deltaV = scaledVRotationCenter * (1 - cosAngle) - scaledURotationCenter * sinAngle;\r\n return [uOffset + deltaU, vOffset + deltaV];\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_transform implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /** Reference to the glTF exporter */\r\n private _wasUsed = false;\r\n\r\n constructor() {}\r\n\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n public postExportTexture?(context: string, textureInfo: ITextureInfo, babylonTexture: Texture): void {\r\n const scene = babylonTexture.getScene();\r\n if (!scene) {\r\n Tools.Warn(`${context}: \"scene\" is not defined for Babylon texture ${babylonTexture.name}!`);\r\n }\r\n\r\n /*\r\n * The KHR_texture_transform schema only supports w rotation around the origin.\r\n * See https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform#gltf-schema-updates.\r\n */\r\n if (babylonTexture.uAng !== 0 || babylonTexture.vAng !== 0) {\r\n Tools.Warn(`${context}: Texture ${babylonTexture.name} with rotation in the u or v axis is not supported in glTF.`);\r\n // Usually, we'd always early return here if the texture uses an unsupported combination of transform properties,\r\n // but we're making an exception here to maintain backwards compatibility.\r\n if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {\r\n return;\r\n }\r\n }\r\n\r\n const textureTransform: IKHRTextureTransform = {};\r\n let transformIsRequired = false;\r\n\r\n if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {\r\n textureTransform.offset = [babylonTexture.uOffset, babylonTexture.vOffset];\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.uScale !== 1 || babylonTexture.vScale !== 1) {\r\n textureTransform.scale = [babylonTexture.uScale, babylonTexture.vScale];\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.wAng !== 0) {\r\n if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {\r\n // See https://github.com/mrdoob/three.js/issues/15831 for more details.\r\n if (babylonTexture.homogeneousRotationInUVTransform && babylonTexture.uScale !== babylonTexture.vScale) {\r\n Tools.Warn(\r\n `${context}: Texture ${babylonTexture.name} with homogenousRotationInUVTransform, non-uniform scaling, and non-zero rotation cannot be exported with ${NAME}.`\r\n );\r\n return;\r\n }\r\n Tools.Warn(`${context}: Texture ${babylonTexture.name} with non-origin rotation center will be exported using an adjusted offset with ${NAME}.`);\r\n textureTransform.offset = AdjustOffsetForRotationCenter(babylonTexture);\r\n }\r\n textureTransform.rotation = -babylonTexture.wAng;\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.coordinatesIndex !== 0) {\r\n textureTransform.texCoord = babylonTexture.coordinatesIndex;\r\n transformIsRequired = true;\r\n }\r\n\r\n if (!transformIsRequired) {\r\n return;\r\n }\r\n\r\n this._wasUsed = true;\r\n if (!textureInfo.extensions) {\r\n textureInfo.extensions = {};\r\n }\r\n textureInfo.extensions[NAME] = textureTransform;\r\n }\r\n}\r\n\r\nGLTFExporter.RegisterExtension(NAME, () => new KHR_texture_transform());\r\n"]}
1
+ {"version":3,"file":"KHR_texture_transform.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_texture_transform.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,8BAA8B,CAAC;AAE7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,6BAA6B,EAAE,CAAC","sourcesContent":["/**\r\n * Re-exports the pure implementation and applies the runtime registration side effect.\r\n * Import \"./KHR_texture_transform.pure\" for tree-shakeable, side-effect-free usage.\r\n */\r\nexport * from \"./KHR_texture_transform.pure\";\r\n\r\nimport { RegisterKHR_texture_transform } from \"./KHR_texture_transform.pure\";\r\nRegisterKHR_texture_transform();\r\n"]}
@@ -0,0 +1,26 @@
1
+ import { type ITextureInfo } from "babylonjs-gltf2interface";
2
+ import { type Texture } from "@babylonjs/core/Materials/Textures/texture.pure.js";
3
+ import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
4
+ /**
5
+ * @internal
6
+ */
7
+ export declare class KHR_texture_transform implements IGLTFExporterExtensionV2 {
8
+ /** Name of this extension */
9
+ readonly name = "KHR_texture_transform";
10
+ /** Defines whether this extension is enabled */
11
+ enabled: boolean;
12
+ /** Defines whether this extension is required */
13
+ required: boolean;
14
+ /** Reference to the glTF exporter */
15
+ private _wasUsed;
16
+ constructor();
17
+ dispose(): void;
18
+ /** @internal */
19
+ get wasUsed(): boolean;
20
+ postExportTexture?(context: string, textureInfo: ITextureInfo, babylonTexture: Texture): void;
21
+ }
22
+ /**
23
+ * Registers the KHR_texture_transform glTF serializer extension with the {@link GLTFExporter}.
24
+ * Safe to call multiple times; only the first call has an effect.
25
+ */
26
+ export declare function RegisterKHR_texture_transform(): void;
@@ -0,0 +1,105 @@
1
+ import { Tools } from "@babylonjs/core/Misc/tools.pure.js";
2
+ import { GLTFExporter } from "../glTFExporter.js";
3
+ const NAME = "KHR_texture_transform";
4
+ /**
5
+ * Computes the adjusted offset for a rotation centered about the origin.
6
+ * @internal
7
+ */
8
+ function AdjustOffsetForRotationCenter(babylonTexture) {
9
+ const { uOffset, vOffset, uRotationCenter, vRotationCenter, uScale, vScale, wAng } = babylonTexture;
10
+ const cosAngle = Math.cos(wAng);
11
+ const sinAngle = Math.sin(wAng);
12
+ const scaledURotationCenter = uRotationCenter * uScale;
13
+ const scaledVRotationCenter = vRotationCenter * vScale;
14
+ const deltaU = scaledURotationCenter * (1 - cosAngle) + scaledVRotationCenter * sinAngle;
15
+ const deltaV = scaledVRotationCenter * (1 - cosAngle) - scaledURotationCenter * sinAngle;
16
+ return [uOffset + deltaU, vOffset + deltaV];
17
+ }
18
+ /**
19
+ * @internal
20
+ */
21
+ // eslint-disable-next-line @typescript-eslint/naming-convention
22
+ export class KHR_texture_transform {
23
+ constructor() {
24
+ /** Name of this extension */
25
+ this.name = NAME;
26
+ /** Defines whether this extension is enabled */
27
+ this.enabled = true;
28
+ /** Defines whether this extension is required */
29
+ this.required = false;
30
+ /** Reference to the glTF exporter */
31
+ this._wasUsed = false;
32
+ }
33
+ dispose() { }
34
+ /** @internal */
35
+ get wasUsed() {
36
+ return this._wasUsed;
37
+ }
38
+ postExportTexture(context, textureInfo, babylonTexture) {
39
+ const scene = babylonTexture.getScene();
40
+ if (!scene) {
41
+ Tools.Warn(`${context}: "scene" is not defined for Babylon texture ${babylonTexture.name}!`);
42
+ }
43
+ /*
44
+ * The KHR_texture_transform schema only supports w rotation around the origin.
45
+ * See https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform#gltf-schema-updates.
46
+ */
47
+ if (babylonTexture.uAng !== 0 || babylonTexture.vAng !== 0) {
48
+ Tools.Warn(`${context}: Texture ${babylonTexture.name} with rotation in the u or v axis is not supported in glTF.`);
49
+ // Usually, we'd always early return here if the texture uses an unsupported combination of transform properties,
50
+ // but we're making an exception here to maintain backwards compatibility.
51
+ if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {
52
+ return;
53
+ }
54
+ }
55
+ const textureTransform = {};
56
+ let transformIsRequired = false;
57
+ if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {
58
+ textureTransform.offset = [babylonTexture.uOffset, babylonTexture.vOffset];
59
+ transformIsRequired = true;
60
+ }
61
+ if (babylonTexture.uScale !== 1 || babylonTexture.vScale !== 1) {
62
+ textureTransform.scale = [babylonTexture.uScale, babylonTexture.vScale];
63
+ transformIsRequired = true;
64
+ }
65
+ if (babylonTexture.wAng !== 0) {
66
+ if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {
67
+ // See https://github.com/mrdoob/three.js/issues/15831 for more details.
68
+ if (babylonTexture.homogeneousRotationInUVTransform && babylonTexture.uScale !== babylonTexture.vScale) {
69
+ Tools.Warn(`${context}: Texture ${babylonTexture.name} with homogenousRotationInUVTransform, non-uniform scaling, and non-zero rotation cannot be exported with ${NAME}.`);
70
+ return;
71
+ }
72
+ Tools.Warn(`${context}: Texture ${babylonTexture.name} with non-origin rotation center will be exported using an adjusted offset with ${NAME}.`);
73
+ textureTransform.offset = AdjustOffsetForRotationCenter(babylonTexture);
74
+ }
75
+ textureTransform.rotation = -babylonTexture.wAng;
76
+ transformIsRequired = true;
77
+ }
78
+ if (babylonTexture.coordinatesIndex !== 0) {
79
+ textureTransform.texCoord = babylonTexture.coordinatesIndex;
80
+ transformIsRequired = true;
81
+ }
82
+ if (!transformIsRequired) {
83
+ return;
84
+ }
85
+ this._wasUsed = true;
86
+ if (!textureInfo.extensions) {
87
+ textureInfo.extensions = {};
88
+ }
89
+ textureInfo.extensions[NAME] = textureTransform;
90
+ }
91
+ }
92
+ let _Registered = false;
93
+ /**
94
+ * Registers the KHR_texture_transform glTF serializer extension with the {@link GLTFExporter}.
95
+ * Safe to call multiple times; only the first call has an effect.
96
+ */
97
+ // eslint-disable-next-line @typescript-eslint/naming-convention
98
+ export function RegisterKHR_texture_transform() {
99
+ if (_Registered) {
100
+ return;
101
+ }
102
+ _Registered = true;
103
+ GLTFExporter.RegisterExtension(NAME, () => new KHR_texture_transform());
104
+ }
105
+ //# sourceMappingURL=KHR_texture_transform.pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KHR_texture_transform.pure.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_texture_transform.pure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAErC;;;GAGG;AACH,SAAS,6BAA6B,CAAC,cAAuB;IAC1D,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,qBAAqB,GAAG,eAAe,GAAG,MAAM,CAAC;IACvD,MAAM,qBAAqB,GAAG,eAAe,GAAG,MAAM,CAAC;IACvD,MAAM,MAAM,GAAG,qBAAqB,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,qBAAqB,GAAG,QAAQ,CAAC;IACzF,MAAM,MAAM,GAAG,qBAAqB,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,qBAAqB,GAAG,QAAQ,CAAC;IACzF,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAa9B;QAZA,6BAA6B;QACb,SAAI,GAAG,IAAI,CAAC;QAE5B,gDAAgD;QACzC,YAAO,GAAG,IAAI,CAAC;QAEtB,iDAAiD;QAC1C,aAAQ,GAAG,KAAK,CAAC;QAExB,qCAAqC;QAC7B,aAAQ,GAAG,KAAK,CAAC;IAEV,CAAC;IAET,OAAO,KAAI,CAAC;IAEnB,gBAAgB;IAChB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAE,OAAe,EAAE,WAAyB,EAAE,cAAuB;QACzF,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,gDAAgD,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;QACjG,CAAC;QAED;;;WAGG;QACH,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,aAAa,cAAc,CAAC,IAAI,6DAA6D,CAAC,CAAC;YACpH,iHAAiH;YACjH,0EAA0E;YAC1E,IAAI,cAAc,CAAC,eAAe,KAAK,CAAC,IAAI,cAAc,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;gBAC/E,OAAO;YACX,CAAC;QACL,CAAC;QAED,MAAM,gBAAgB,GAAyB,EAAE,CAAC;QAClD,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC/D,gBAAgB,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3E,mBAAmB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,gBAAgB,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACxE,mBAAmB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,cAAc,CAAC,eAAe,KAAK,CAAC,IAAI,cAAc,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;gBAC/E,wEAAwE;gBACxE,IAAI,cAAc,CAAC,gCAAgC,IAAI,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;oBACrG,KAAK,CAAC,IAAI,CACN,GAAG,OAAO,aAAa,cAAc,CAAC,IAAI,6GAA6G,IAAI,GAAG,CACjK,CAAC;oBACF,OAAO;gBACX,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,aAAa,cAAc,CAAC,IAAI,mFAAmF,IAAI,GAAG,CAAC,CAAC;gBACjJ,gBAAgB,CAAC,MAAM,GAAG,6BAA6B,CAAC,cAAc,CAAC,CAAC;YAC5E,CAAC;YACD,gBAAgB,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC;YACjD,mBAAmB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;YACxC,gBAAgB,CAAC,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC;YAC5D,mBAAmB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC1B,WAAW,CAAC,UAAU,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;IACpD,CAAC;CACJ;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,6BAA6B;IACzC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { type ITextureInfo, type IKHRTextureTransform } from \"babylonjs-gltf2interface\";\r\nimport { Tools } from \"core/Misc/tools.pure\";\r\nimport { type Texture } from \"core/Materials/Textures/texture.pure\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\n\r\nconst NAME = \"KHR_texture_transform\";\r\n\r\n/**\r\n * Computes the adjusted offset for a rotation centered about the origin.\r\n * @internal\r\n */\r\nfunction AdjustOffsetForRotationCenter(babylonTexture: Texture): [number, number] {\r\n const { uOffset, vOffset, uRotationCenter, vRotationCenter, uScale, vScale, wAng } = babylonTexture;\r\n const cosAngle = Math.cos(wAng);\r\n const sinAngle = Math.sin(wAng);\r\n const scaledURotationCenter = uRotationCenter * uScale;\r\n const scaledVRotationCenter = vRotationCenter * vScale;\r\n const deltaU = scaledURotationCenter * (1 - cosAngle) + scaledVRotationCenter * sinAngle;\r\n const deltaV = scaledVRotationCenter * (1 - cosAngle) - scaledURotationCenter * sinAngle;\r\n return [uOffset + deltaU, vOffset + deltaV];\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_texture_transform implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n /** Reference to the glTF exporter */\r\n private _wasUsed = false;\r\n\r\n constructor() {}\r\n\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n public postExportTexture?(context: string, textureInfo: ITextureInfo, babylonTexture: Texture): void {\r\n const scene = babylonTexture.getScene();\r\n if (!scene) {\r\n Tools.Warn(`${context}: \"scene\" is not defined for Babylon texture ${babylonTexture.name}!`);\r\n }\r\n\r\n /*\r\n * The KHR_texture_transform schema only supports w rotation around the origin.\r\n * See https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_texture_transform#gltf-schema-updates.\r\n */\r\n if (babylonTexture.uAng !== 0 || babylonTexture.vAng !== 0) {\r\n Tools.Warn(`${context}: Texture ${babylonTexture.name} with rotation in the u or v axis is not supported in glTF.`);\r\n // Usually, we'd always early return here if the texture uses an unsupported combination of transform properties,\r\n // but we're making an exception here to maintain backwards compatibility.\r\n if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {\r\n return;\r\n }\r\n }\r\n\r\n const textureTransform: IKHRTextureTransform = {};\r\n let transformIsRequired = false;\r\n\r\n if (babylonTexture.uOffset !== 0 || babylonTexture.vOffset !== 0) {\r\n textureTransform.offset = [babylonTexture.uOffset, babylonTexture.vOffset];\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.uScale !== 1 || babylonTexture.vScale !== 1) {\r\n textureTransform.scale = [babylonTexture.uScale, babylonTexture.vScale];\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.wAng !== 0) {\r\n if (babylonTexture.uRotationCenter !== 0 || babylonTexture.vRotationCenter !== 0) {\r\n // See https://github.com/mrdoob/three.js/issues/15831 for more details.\r\n if (babylonTexture.homogeneousRotationInUVTransform && babylonTexture.uScale !== babylonTexture.vScale) {\r\n Tools.Warn(\r\n `${context}: Texture ${babylonTexture.name} with homogenousRotationInUVTransform, non-uniform scaling, and non-zero rotation cannot be exported with ${NAME}.`\r\n );\r\n return;\r\n }\r\n Tools.Warn(`${context}: Texture ${babylonTexture.name} with non-origin rotation center will be exported using an adjusted offset with ${NAME}.`);\r\n textureTransform.offset = AdjustOffsetForRotationCenter(babylonTexture);\r\n }\r\n textureTransform.rotation = -babylonTexture.wAng;\r\n transformIsRequired = true;\r\n }\r\n\r\n if (babylonTexture.coordinatesIndex !== 0) {\r\n textureTransform.texCoord = babylonTexture.coordinatesIndex;\r\n transformIsRequired = true;\r\n }\r\n\r\n if (!transformIsRequired) {\r\n return;\r\n }\r\n\r\n this._wasUsed = true;\r\n if (!textureInfo.extensions) {\r\n textureInfo.extensions = {};\r\n }\r\n textureInfo.extensions[NAME] = textureTransform;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_texture_transform glTF serializer extension with the {@link GLTFExporter}.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_texture_transform(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n GLTFExporter.RegisterExtension(NAME, () => new KHR_texture_transform());\r\n}\r\n"]}
@@ -0,0 +1,26 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./EXT_mesh_gpu_instancing.pure.js";
3
+ export * from "./KHR_draco_mesh_compression.pure.js";
4
+ export * from "./KHR_lights_punctual.pure.js";
5
+ export * from "./EXT_lights_area.pure.js";
6
+ export * from "./KHR_materials_anisotropy.pure.js";
7
+ export * from "./KHR_materials_clearcoat.pure.js";
8
+ export * from "./KHR_materials_coat.pure.js";
9
+ export * from "./KHR_materials_diffuse_transmission.pure.js";
10
+ export * from "./KHR_materials_dispersion.pure.js";
11
+ export * from "./KHR_materials_emissive_strength.pure.js";
12
+ export * from "./KHR_materials_ior.pure.js";
13
+ export * from "./KHR_materials_iridescence.pure.js";
14
+ export * from "./KHR_materials_sheen.pure.js";
15
+ export * from "./KHR_materials_fuzz.pure.js";
16
+ export * from "./KHR_materials_specular.pure.js";
17
+ export * from "./KHR_materials_transmission.pure.js";
18
+ export * from "./KHR_materials_unlit.pure.js";
19
+ export * from "./KHR_materials_volume.pure.js";
20
+ export * from "./KHR_materials_volume_scatter.pure.js";
21
+ export * from "./KHR_materials_diffuse_roughness.pure.js";
22
+ export * from "./KHR_materials_openpbr.pure.js";
23
+ export * from "./KHR_texture_transform.pure.js";
24
+ export * from "./KHR_texture_basisu.pure.js";
25
+ export * from "./EXT_texture_webp.pure.js";
26
+ export * from "./EXT_texture_avif.pure.js";
@@ -0,0 +1,27 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./EXT_mesh_gpu_instancing.pure.js";
3
+ export * from "./KHR_draco_mesh_compression.pure.js";
4
+ export * from "./KHR_lights_punctual.pure.js";
5
+ export * from "./EXT_lights_area.pure.js";
6
+ export * from "./KHR_materials_anisotropy.pure.js";
7
+ export * from "./KHR_materials_clearcoat.pure.js";
8
+ export * from "./KHR_materials_coat.pure.js";
9
+ export * from "./KHR_materials_diffuse_transmission.pure.js";
10
+ export * from "./KHR_materials_dispersion.pure.js";
11
+ export * from "./KHR_materials_emissive_strength.pure.js";
12
+ export * from "./KHR_materials_ior.pure.js";
13
+ export * from "./KHR_materials_iridescence.pure.js";
14
+ export * from "./KHR_materials_sheen.pure.js";
15
+ export * from "./KHR_materials_fuzz.pure.js";
16
+ export * from "./KHR_materials_specular.pure.js";
17
+ export * from "./KHR_materials_transmission.pure.js";
18
+ export * from "./KHR_materials_unlit.pure.js";
19
+ export * from "./KHR_materials_volume.pure.js";
20
+ export * from "./KHR_materials_volume_scatter.pure.js";
21
+ export * from "./KHR_materials_diffuse_roughness.pure.js";
22
+ export * from "./KHR_materials_openpbr.pure.js";
23
+ export * from "./KHR_texture_transform.pure.js";
24
+ export * from "./KHR_texture_basisu.pure.js";
25
+ export * from "./EXT_texture_webp.pure.js";
26
+ export * from "./EXT_texture_avif.pure.js";
27
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./EXT_mesh_gpu_instancing.pure\";\nexport * from \"./KHR_draco_mesh_compression.pure\";\nexport * from \"./KHR_lights_punctual.pure\";\nexport * from \"./EXT_lights_area.pure\";\nexport * from \"./KHR_materials_anisotropy.pure\";\nexport * from \"./KHR_materials_clearcoat.pure\";\nexport * from \"./KHR_materials_coat.pure\";\nexport * from \"./KHR_materials_diffuse_transmission.pure\";\nexport * from \"./KHR_materials_dispersion.pure\";\nexport * from \"./KHR_materials_emissive_strength.pure\";\nexport * from \"./KHR_materials_ior.pure\";\nexport * from \"./KHR_materials_iridescence.pure\";\nexport * from \"./KHR_materials_sheen.pure\";\nexport * from \"./KHR_materials_fuzz.pure\";\nexport * from \"./KHR_materials_specular.pure\";\nexport * from \"./KHR_materials_transmission.pure\";\nexport * from \"./KHR_materials_unlit.pure\";\nexport * from \"./KHR_materials_volume.pure\";\nexport * from \"./KHR_materials_volume_scatter.pure\";\nexport * from \"./KHR_materials_diffuse_roughness.pure\";\nexport * from \"./KHR_materials_openpbr.pure\";\nexport * from \"./KHR_texture_transform.pure\";\nexport * from \"./KHR_texture_basisu.pure\";\nexport * from \"./EXT_texture_webp.pure\";\nexport * from \"./EXT_texture_avif.pure\";\n"]}
@@ -0,0 +1,5 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./glTFData.js";
3
+ export * from "./glTFSerializer.js";
4
+ export { _SolveMetallic, _ConvertToGLTFPBRMetallicRoughness } from "./glTFMaterialExporter.js";
5
+ export * from "./Extensions/pure.js";
@@ -0,0 +1,7 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ /* eslint-disable @typescript-eslint/no-restricted-imports */
3
+ export * from "./glTFData.js";
4
+ export * from "./glTFSerializer.js";
5
+ export { _SolveMetallic, _ConvertToGLTFPBRMetallicRoughness } from "./glTFMaterialExporter.js";
6
+ export * from "./Extensions/pure.js";
7
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../../dev/serializers/src/glTF/2.0/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AAC5F,cAAc,mBAAmB,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./glTFData\";\nexport * from \"./glTFSerializer\";\nexport { _SolveMetallic, _ConvertToGLTFPBRMetallicRoughness } from \"./glTFMaterialExporter\";\nexport * from \"./Extensions/pure\";\n"]}
package/glTF/pure.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./glTFFileExporter.js";
3
+ export * from "./2.0/pure.js";
package/glTF/pure.js ADDED
@@ -0,0 +1,5 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ /* eslint-disable @typescript-eslint/no-restricted-imports */
3
+ export * from "./glTFFileExporter.js";
4
+ export * from "./2.0/pure.js";
5
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../dev/serializers/src/glTF/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./glTFFileExporter\";\nexport * from \"./2.0/pure\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/serializers",
3
- "version": "9.13.0",
3
+ "version": "9.15.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
@@ -18,10 +18,10 @@
18
18
  "postcompile": "build-tools -c add-js-to-es6"
19
19
  },
20
20
  "devDependencies": {
21
- "@babylonjs/core": "9.13.0",
21
+ "@babylonjs/core": "9.15.0",
22
22
  "@dev/build-tools": "^1.0.0",
23
23
  "@dev/serializers": "^1.0.0",
24
- "babylonjs-gltf2interface": "9.13.0"
24
+ "babylonjs-gltf2interface": "9.15.0"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "@babylonjs/core": "^9.0.0",
@@ -37,7 +37,33 @@
37
37
  "license": "Apache-2.0",
38
38
  "esnext": "index.js",
39
39
  "type": "module",
40
- "sideEffects": true,
40
+ "sideEffects": [
41
+ "**/index.js",
42
+ "**/*transmission.js",
43
+ "glTF/2.0/Extensions/*coat.js",
44
+ "glTF/2.0/Extensions/EXT_lights_area.js",
45
+ "glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js",
46
+ "glTF/2.0/Extensions/EXT_texture_avif.js",
47
+ "glTF/2.0/Extensions/EXT_texture_webp.js",
48
+ "glTF/2.0/Extensions/KHR_draco_mesh_compression.js",
49
+ "glTF/2.0/Extensions/KHR_lights_punctual.js",
50
+ "glTF/2.0/Extensions/KHR_materials_anisotropy.js",
51
+ "glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js",
52
+ "glTF/2.0/Extensions/KHR_materials_dispersion.js",
53
+ "glTF/2.0/Extensions/KHR_materials_emissive_strength.js",
54
+ "glTF/2.0/Extensions/KHR_materials_fuzz.js",
55
+ "glTF/2.0/Extensions/KHR_materials_ior.js",
56
+ "glTF/2.0/Extensions/KHR_materials_iridescence.js",
57
+ "glTF/2.0/Extensions/KHR_materials_openpbr.js",
58
+ "glTF/2.0/Extensions/KHR_materials_sheen.js",
59
+ "glTF/2.0/Extensions/KHR_materials_specular.js",
60
+ "glTF/2.0/Extensions/KHR_materials_unlit.js",
61
+ "glTF/2.0/Extensions/KHR_materials_volume.js",
62
+ "glTF/2.0/Extensions/KHR_materials_volume_scatter.js",
63
+ "glTF/2.0/Extensions/KHR_texture_basisu.js",
64
+ "glTF/2.0/Extensions/KHR_texture_transform.js",
65
+ "legacy/legacy.js"
66
+ ],
41
67
  "homepage": "https://www.babylonjs.com",
42
68
  "repository": {
43
69
  "type": "git",
package/pure.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./OBJ/pure.js";
3
+ export * from "./glTF/pure.js";
4
+ export * from "./stl/pure.js";
5
+ export * from "./USDZ/pure.js";
6
+ export * from "./BVH/pure.js";
7
+ export * from "./3MF/pure.js";
package/pure.js ADDED
@@ -0,0 +1,9 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ /* eslint-disable @typescript-eslint/no-restricted-imports */
3
+ export * from "./OBJ/pure.js";
4
+ export * from "./glTF/pure.js";
5
+ export * from "./stl/pure.js";
6
+ export * from "./USDZ/pure.js";
7
+ export * from "./BVH/pure.js";
8
+ export * from "./3MF/pure.js";
9
+ //# sourceMappingURL=pure.js.map
package/pure.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../dev/serializers/src/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,6DAA6D;AAC7D,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\n/* eslint-disable @typescript-eslint/no-restricted-imports */\nexport * from \"./OBJ/pure\";\nexport * from \"./glTF/pure\";\nexport * from \"./stl/pure\";\nexport * from \"./USDZ/pure\";\nexport * from \"./BVH/pure\";\nexport * from \"./3MF/pure\";\n"]}
package/stl/pure.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./stlSerializer.js";
package/stl/pure.js ADDED
@@ -0,0 +1,3 @@
1
+ /** Pure barrel — re-exports only side-effect-free modules */
2
+ export * from "./stlSerializer.js";
3
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../../../dev/serializers/src/stl/pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,iBAAiB,CAAC","sourcesContent":["/** Pure barrel — re-exports only side-effect-free modules */\nexport * from \"./stlSerializer\";\n"]}