@babylonjs/loaders 5.0.0-rc.7 → 5.0.1

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 (169) hide show
  1. package/OBJ/index.d.ts +4 -4
  2. package/OBJ/index.js +4 -4
  3. package/OBJ/mtlFileLoader.d.ts +41 -41
  4. package/OBJ/mtlFileLoader.js +232 -232
  5. package/OBJ/mtlFileLoader.js.map +1 -1
  6. package/OBJ/objFileLoader.d.ts +126 -126
  7. package/OBJ/objFileLoader.js +296 -296
  8. package/OBJ/objFileLoader.js.map +1 -1
  9. package/OBJ/objLoadingOptions.d.ts +43 -43
  10. package/OBJ/objLoadingOptions.js +1 -1
  11. package/OBJ/objLoadingOptions.js.map +1 -1
  12. package/OBJ/solidParser.d.ts +154 -154
  13. package/OBJ/solidParser.js +693 -693
  14. package/OBJ/solidParser.js.map +1 -1
  15. package/STL/index.d.ts +1 -1
  16. package/STL/index.js +1 -1
  17. package/STL/stlFileLoader.d.ts +64 -64
  18. package/STL/stlFileLoader.js +233 -233
  19. package/STL/stlFileLoader.js.map +1 -1
  20. package/glTF/1.0/glTFBinaryExtension.d.ts +13 -13
  21. package/glTF/1.0/glTFBinaryExtension.js +60 -60
  22. package/glTF/1.0/glTFBinaryExtension.js.map +1 -1
  23. package/glTF/1.0/glTFLoader.d.ts +136 -136
  24. package/glTF/1.0/glTFLoader.js +1814 -1815
  25. package/glTF/1.0/glTFLoader.js.map +1 -1
  26. package/glTF/1.0/glTFLoaderInterfaces.d.ts +412 -412
  27. package/glTF/1.0/glTFLoaderInterfaces.js +95 -95
  28. package/glTF/1.0/glTFLoaderInterfaces.js.map +1 -1
  29. package/glTF/1.0/glTFLoaderUtils.d.ts +63 -62
  30. package/glTF/1.0/glTFLoaderUtils.js +250 -250
  31. package/glTF/1.0/glTFLoaderUtils.js.map +1 -1
  32. package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +10 -10
  33. package/glTF/1.0/glTFMaterialsCommonExtension.js +129 -129
  34. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +1 -1
  35. package/glTF/1.0/index.d.ts +5 -5
  36. package/glTF/1.0/index.js +5 -5
  37. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +43 -43
  38. package/glTF/2.0/Extensions/EXT_lights_image_based.js +117 -117
  39. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
  40. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +36 -36
  41. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +88 -88
  42. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  43. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +34 -34
  44. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +49 -49
  45. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
  46. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +29 -29
  47. package/glTF/2.0/Extensions/EXT_texture_webp.js +40 -40
  48. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  49. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +50 -50
  50. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +73 -73
  51. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
  52. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +39 -39
  53. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +112 -112
  54. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  55. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +36 -36
  56. package/glTF/2.0/Extensions/KHR_lights_punctual.js +89 -89
  57. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  58. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +39 -39
  59. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +94 -94
  60. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  61. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +38 -38
  62. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +53 -53
  63. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  64. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +42 -42
  65. package/glTF/2.0/Extensions/KHR_materials_ior.js +62 -62
  66. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  67. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +38 -38
  68. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +80 -80
  69. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
  70. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +39 -39
  71. package/glTF/2.0/Extensions/KHR_materials_sheen.js +84 -84
  72. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  73. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +38 -38
  74. package/glTF/2.0/Extensions/KHR_materials_specular.js +74 -74
  75. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  76. package/glTF/2.0/Extensions/KHR_materials_translucency.d.ts +39 -39
  77. package/glTF/2.0/Extensions/KHR_materials_translucency.js +83 -83
  78. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +1 -1
  79. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +38 -38
  80. package/glTF/2.0/Extensions/KHR_materials_transmission.js +288 -288
  81. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  82. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +38 -38
  83. package/glTF/2.0/Extensions/KHR_materials_unlit.js +73 -73
  84. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  85. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +87 -87
  86. package/glTF/2.0/Extensions/KHR_materials_variants.js +254 -254
  87. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
  88. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +39 -39
  89. package/glTF/2.0/Extensions/KHR_materials_volume.js +85 -85
  90. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  91. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +22 -22
  92. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +23 -23
  93. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
  94. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +29 -29
  95. package/glTF/2.0/Extensions/KHR_texture_basisu.js +40 -40
  96. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  97. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +33 -33
  98. package/glTF/2.0/Extensions/KHR_texture_transform.js +61 -61
  99. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  100. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +32 -32
  101. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +49 -49
  102. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
  103. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +54 -54
  104. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +240 -240
  105. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
  106. package/glTF/2.0/Extensions/MSFT_lod.d.ts +109 -109
  107. package/glTF/2.0/Extensions/MSFT_lod.js +369 -369
  108. package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
  109. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +14 -14
  110. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +36 -36
  111. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  112. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +14 -14
  113. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +36 -36
  114. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
  115. package/glTF/2.0/Extensions/index.d.ts +26 -26
  116. package/glTF/2.0/Extensions/index.js +26 -26
  117. package/glTF/2.0/glTFLoader.d.ts +406 -405
  118. package/glTF/2.0/glTFLoader.js +2366 -2366
  119. package/glTF/2.0/glTFLoader.js.map +1 -1
  120. package/glTF/2.0/glTFLoaderExtension.d.ts +152 -152
  121. package/glTF/2.0/glTFLoaderExtension.js +1 -1
  122. package/glTF/2.0/glTFLoaderExtension.js.map +1 -1
  123. package/glTF/2.0/glTFLoaderInterfaces.d.ts +211 -211
  124. package/glTF/2.0/glTFLoaderInterfaces.js +1 -1
  125. package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
  126. package/glTF/2.0/index.d.ts +4 -4
  127. package/glTF/2.0/index.js +5 -4
  128. package/glTF/2.0/index.js.map +1 -1
  129. package/glTF/glTFFileLoader.d.ts +433 -433
  130. package/glTF/glTFFileLoader.js +927 -927
  131. package/glTF/glTFFileLoader.js.map +1 -1
  132. package/glTF/glTFValidation.d.ts +29 -29
  133. package/glTF/glTFValidation.js +123 -123
  134. package/glTF/glTFValidation.js.map +1 -1
  135. package/glTF/index.d.ts +5 -5
  136. package/glTF/index.js +6 -5
  137. package/glTF/index.js.map +1 -1
  138. package/index.d.ts +3 -3
  139. package/index.js +4 -3
  140. package/index.js.map +1 -1
  141. package/legacy/legacy-glTF.d.ts +2 -2
  142. package/legacy/legacy-glTF.js +18 -18
  143. package/legacy/legacy-glTF.js.map +1 -1
  144. package/legacy/legacy-glTF1.d.ts +2 -2
  145. package/legacy/legacy-glTF1.js +15 -14
  146. package/legacy/legacy-glTF1.js.map +1 -1
  147. package/legacy/legacy-glTF1FileLoader.d.ts +2 -2
  148. package/legacy/legacy-glTF1FileLoader.js +3 -3
  149. package/legacy/legacy-glTF1FileLoader.js.map +1 -1
  150. package/legacy/legacy-glTF2.d.ts +2 -2
  151. package/legacy/legacy-glTF2.js +33 -32
  152. package/legacy/legacy-glTF2.js.map +1 -1
  153. package/legacy/legacy-glTF2FileLoader.d.ts +2 -2
  154. package/legacy/legacy-glTF2FileLoader.js +3 -3
  155. package/legacy/legacy-glTF2FileLoader.js.map +1 -1
  156. package/legacy/legacy-glTFFileLoader.d.ts +3 -3
  157. package/legacy/legacy-glTFFileLoader.js +4 -4
  158. package/legacy/legacy-glTFFileLoader.js.map +1 -1
  159. package/legacy/legacy-objFileLoader.d.ts +1 -1
  160. package/legacy/legacy-objFileLoader.js +13 -12
  161. package/legacy/legacy-objFileLoader.js.map +1 -1
  162. package/legacy/legacy-stlFileLoader.d.ts +1 -1
  163. package/legacy/legacy-stlFileLoader.js +13 -12
  164. package/legacy/legacy-stlFileLoader.js.map +1 -1
  165. package/legacy/legacy.d.ts +6 -6
  166. package/legacy/legacy.js +8 -7
  167. package/legacy/legacy.js.map +1 -1
  168. package/license.md +71 -0
  169. package/package.json +25 -6
@@ -1,289 +1,289 @@
1
- import { __assign } from "tslib";
2
- import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
3
- import { GLTFLoader } from "../glTFLoader.js";
4
- import { RenderTargetTexture } from "@babylonjs/core/Materials/Textures/renderTargetTexture.js";
5
- import { Observable } from "@babylonjs/core/Misc/observable.js";
6
- import { Constants } from "@babylonjs/core/Engines/constants.js";
7
- import { Tools } from "@babylonjs/core/Misc/tools.js";
8
- /**
9
- * A class to handle setting up the rendering of opaque objects to be shown through transmissive objects.
10
- */
11
- var TransmissionHelper = /** @class */ (function () {
12
- /**
13
- * constructor
14
- * @param options Defines the options we want to customize the helper
15
- * @param scene The scene to add the material to
16
- */
17
- function TransmissionHelper(options, scene) {
18
- var _this = this;
19
- this._opaqueRenderTarget = null;
20
- this._opaqueMeshesCache = [];
21
- this._transparentMeshesCache = [];
22
- this._materialObservers = {};
23
- this._options = __assign(__assign({}, TransmissionHelper._GetDefaultOptions()), options);
24
- this._scene = scene;
25
- this._scene._transmissionHelper = this;
26
- this.onErrorObservable = new Observable();
27
- this._scene.onDisposeObservable.addOnce(function () {
28
- _this.dispose();
29
- });
30
- this._parseScene();
31
- this._setupRenderTargets();
32
- }
33
- /**
34
- * Creates the default options for the helper.
35
- */
36
- TransmissionHelper._GetDefaultOptions = function () {
37
- return {
38
- renderSize: 1024,
39
- samples: 4,
40
- lodGenerationScale: 1,
41
- lodGenerationOffset: -4,
42
- renderTargetTextureType: Constants.TEXTURETYPE_HALF_FLOAT,
43
- generateMipmaps: true,
44
- };
45
- };
46
- /**
47
- * Updates the background according to the new options
48
- * @param options
49
- */
50
- TransmissionHelper.prototype.updateOptions = function (options) {
51
- var _this = this;
52
- // First check if any options are actually being changed. If not, exit.
53
- var newValues = Object.keys(options).filter(function (key) { return _this._options[key] !== options[key]; });
54
- if (!newValues.length) {
55
- return;
56
- }
57
- var newOptions = __assign(__assign({}, this._options), options);
58
- var oldOptions = this._options;
59
- this._options = newOptions;
60
- // If size changes, recreate everything
61
- if (newOptions.renderSize !== oldOptions.renderSize ||
62
- newOptions.renderTargetTextureType !== oldOptions.renderTargetTextureType ||
63
- newOptions.generateMipmaps !== oldOptions.generateMipmaps ||
64
- !this._opaqueRenderTarget) {
65
- this._setupRenderTargets();
66
- }
67
- else {
68
- this._opaqueRenderTarget.samples = newOptions.samples;
69
- this._opaqueRenderTarget.lodGenerationScale = newOptions.lodGenerationScale;
70
- this._opaqueRenderTarget.lodGenerationOffset = newOptions.lodGenerationOffset;
71
- }
72
- };
73
- TransmissionHelper.prototype.getOpaqueTarget = function () {
74
- return this._opaqueRenderTarget;
75
- };
76
- TransmissionHelper.prototype._shouldRenderAsTransmission = function (material) {
77
- if (!material) {
78
- return false;
79
- }
80
- if (material instanceof PBRMaterial && material.subSurface.isRefractionEnabled) {
81
- return true;
82
- }
83
- return false;
84
- };
85
- TransmissionHelper.prototype._addMesh = function (mesh) {
86
- var _this = this;
87
- this._materialObservers[mesh.uniqueId] = mesh.onMaterialChangedObservable.add(this._onMeshMaterialChanged.bind(this));
88
- // we need to defer the processing because _addMesh may be called as part as an instance mesh creation, in which case some
89
- // internal properties are not setup yet, like _sourceMesh (needed when doing mesh.material below)
90
- Tools.SetImmediate(function () {
91
- if (_this._shouldRenderAsTransmission(mesh.material)) {
92
- mesh.material.refractionTexture = _this._opaqueRenderTarget;
93
- _this._transparentMeshesCache.push(mesh);
94
- }
95
- else {
96
- _this._opaqueMeshesCache.push(mesh);
97
- }
98
- });
99
- };
100
- TransmissionHelper.prototype._removeMesh = function (mesh) {
101
- mesh.onMaterialChangedObservable.remove(this._materialObservers[mesh.uniqueId]);
102
- delete this._materialObservers[mesh.uniqueId];
103
- var idx = this._transparentMeshesCache.indexOf(mesh);
104
- if (idx !== -1) {
105
- this._transparentMeshesCache.splice(idx, 1);
106
- }
107
- idx = this._opaqueMeshesCache.indexOf(mesh);
108
- if (idx !== -1) {
109
- this._opaqueMeshesCache.splice(idx, 1);
110
- }
111
- };
112
- TransmissionHelper.prototype._parseScene = function () {
113
- this._scene.meshes.forEach(this._addMesh.bind(this));
114
- // Listen for when a mesh is added to the scene and add it to our cache lists.
115
- this._scene.onNewMeshAddedObservable.add(this._addMesh.bind(this));
116
- // Listen for when a mesh is removed from to the scene and remove it from our cache lists.
117
- this._scene.onMeshRemovedObservable.add(this._removeMesh.bind(this));
118
- };
119
- // When one of the meshes in the scene has its material changed, make sure that it's in the correct cache list.
120
- TransmissionHelper.prototype._onMeshMaterialChanged = function (mesh) {
121
- var transparentIdx = this._transparentMeshesCache.indexOf(mesh);
122
- var opaqueIdx = this._opaqueMeshesCache.indexOf(mesh);
123
- // If the material is transparent, make sure that it's added to the transparent list and removed from the opaque list
124
- var useTransmission = this._shouldRenderAsTransmission(mesh.material);
125
- if (useTransmission) {
126
- if (mesh.material instanceof PBRMaterial) {
127
- mesh.material.subSurface.refractionTexture = this._opaqueRenderTarget;
128
- }
129
- if (opaqueIdx !== -1) {
130
- this._opaqueMeshesCache.splice(opaqueIdx, 1);
131
- this._transparentMeshesCache.push(mesh);
132
- }
133
- else if (transparentIdx === -1) {
134
- this._transparentMeshesCache.push(mesh);
135
- }
136
- // If the material is opaque, make sure that it's added to the opaque list and removed from the transparent list
137
- }
138
- else {
139
- if (transparentIdx !== -1) {
140
- this._transparentMeshesCache.splice(transparentIdx, 1);
141
- this._opaqueMeshesCache.push(mesh);
142
- }
143
- else if (opaqueIdx === -1) {
144
- this._opaqueMeshesCache.push(mesh);
145
- }
146
- }
147
- };
148
- /**
149
- * Setup the render targets according to the specified options.
150
- */
151
- TransmissionHelper.prototype._setupRenderTargets = function () {
152
- var _this = this;
153
- var _a, _b;
154
- if (this._opaqueRenderTarget) {
155
- this._opaqueRenderTarget.dispose();
156
- }
157
- this._opaqueRenderTarget = new RenderTargetTexture("opaqueSceneTexture", this._options.renderSize, this._scene, this._options.generateMipmaps, undefined, this._options.renderTargetTextureType);
158
- this._opaqueRenderTarget.ignoreCameraViewport = true;
159
- this._opaqueRenderTarget.renderList = this._opaqueMeshesCache;
160
- this._opaqueRenderTarget.clearColor = (_b = (_a = this._options.clearColor) === null || _a === void 0 ? void 0 : _a.clone()) !== null && _b !== void 0 ? _b : this._scene.clearColor.clone();
161
- this._opaqueRenderTarget.gammaSpace = false;
162
- this._opaqueRenderTarget.lodGenerationScale = this._options.lodGenerationScale;
163
- this._opaqueRenderTarget.lodGenerationOffset = this._options.lodGenerationOffset;
164
- this._opaqueRenderTarget.samples = this._options.samples;
165
- var sceneImageProcessingapplyByPostProcess;
166
- var saveSceneEnvIntensity;
167
- this._opaqueRenderTarget.onBeforeBindObservable.add(function (opaqueRenderTarget) {
168
- saveSceneEnvIntensity = _this._scene.environmentIntensity;
169
- _this._scene.environmentIntensity = 1.0;
170
- sceneImageProcessingapplyByPostProcess = _this._scene.imageProcessingConfiguration.applyByPostProcess;
171
- if (!_this._options.clearColor) {
172
- _this._scene.clearColor.toLinearSpaceToRef(opaqueRenderTarget.clearColor);
173
- }
174
- else {
175
- opaqueRenderTarget.clearColor.copyFrom(_this._options.clearColor);
176
- }
177
- // we do not use the applyByPostProcess setter to avoid flagging all the materials as "image processing dirty"!
178
- _this._scene.imageProcessingConfiguration._applyByPostProcess = true;
179
- });
180
- this._opaqueRenderTarget.onAfterUnbindObservable.add(function () {
181
- _this._scene.environmentIntensity = saveSceneEnvIntensity;
182
- _this._scene.imageProcessingConfiguration._applyByPostProcess = sceneImageProcessingapplyByPostProcess;
183
- });
184
- this._transparentMeshesCache.forEach(function (mesh) {
185
- if (_this._shouldRenderAsTransmission(mesh.material)) {
186
- mesh.material.refractionTexture = _this._opaqueRenderTarget;
187
- }
188
- });
189
- };
190
- /**
191
- * Dispose all the elements created by the Helper.
192
- */
193
- TransmissionHelper.prototype.dispose = function () {
194
- this._scene._transmissionHelper = undefined;
195
- if (this._opaqueRenderTarget) {
196
- this._opaqueRenderTarget.dispose();
197
- this._opaqueRenderTarget = null;
198
- }
199
- this._transparentMeshesCache = [];
200
- this._opaqueMeshesCache = [];
201
- };
202
- return TransmissionHelper;
203
- }());
204
- var NAME = "KHR_materials_transmission";
205
- /**
206
- * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_transmission/README.md)
207
- */
208
- // eslint-disable-next-line @typescript-eslint/naming-convention
209
- var KHR_materials_transmission = /** @class */ (function () {
210
- /**
211
- * @param loader
212
- * @hidden
213
- */
214
- function KHR_materials_transmission(loader) {
215
- /**
216
- * The name of this extension.
217
- */
218
- this.name = NAME;
219
- /**
220
- * Defines a number that determines the order the extensions are applied.
221
- */
222
- this.order = 175;
223
- this._loader = loader;
224
- this.enabled = this._loader.isExtensionUsed(NAME);
225
- if (this.enabled) {
226
- loader.parent.transparencyAsCoverage = true;
227
- }
228
- }
229
- /** @hidden */
230
- KHR_materials_transmission.prototype.dispose = function () {
231
- this._loader = null;
232
- };
233
- /**
234
- * @param context
235
- * @param material
236
- * @param babylonMaterial
237
- * @hidden
238
- */
239
- KHR_materials_transmission.prototype.loadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
240
- var _this = this;
241
- return GLTFLoader.LoadExtensionAsync(context, material, this.name, function (extensionContext, extension) {
242
- var promises = new Array();
243
- promises.push(_this._loader.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
244
- promises.push(_this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
245
- promises.push(_this._loadTransparentPropertiesAsync(extensionContext, material, babylonMaterial, extension));
246
- return Promise.all(promises).then(function () { });
247
- });
248
- };
249
- KHR_materials_transmission.prototype._loadTransparentPropertiesAsync = function (context, material, babylonMaterial, extension) {
250
- if (!(babylonMaterial instanceof PBRMaterial)) {
251
- throw new Error("".concat(context, ": Material type not supported"));
252
- }
253
- var pbrMaterial = babylonMaterial;
254
- // Enables "refraction" texture which represents transmitted light.
255
- pbrMaterial.subSurface.isRefractionEnabled = true;
256
- // Since this extension models thin-surface transmission only, we must make IOR = 1.0
257
- pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;
258
- // Albedo colour will tint transmission.
259
- pbrMaterial.subSurface.useAlbedoToTintRefraction = true;
260
- if (extension.transmissionFactor !== undefined) {
261
- pbrMaterial.subSurface.refractionIntensity = extension.transmissionFactor;
262
- var scene = pbrMaterial.getScene();
263
- if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper) {
264
- new TransmissionHelper({}, pbrMaterial.getScene());
265
- }
266
- }
267
- else {
268
- pbrMaterial.subSurface.refractionIntensity = 0.0;
269
- pbrMaterial.subSurface.isRefractionEnabled = false;
270
- return Promise.resolve();
271
- }
272
- pbrMaterial.subSurface.minimumThickness = 0.0;
273
- pbrMaterial.subSurface.maximumThickness = 0.0;
274
- if (extension.transmissionTexture) {
275
- extension.transmissionTexture.nonColorData = true;
276
- return this._loader.loadTextureInfoAsync("".concat(context, "/transmissionTexture"), extension.transmissionTexture, undefined).then(function (texture) {
277
- pbrMaterial.subSurface.refractionIntensityTexture = texture;
278
- pbrMaterial.subSurface.useGltfStyleTextures = true;
279
- });
280
- }
281
- else {
282
- return Promise.resolve();
283
- }
284
- };
285
- return KHR_materials_transmission;
286
- }());
287
- export { KHR_materials_transmission };
288
- GLTFLoader.RegisterExtension(NAME, function (loader) { return new KHR_materials_transmission(loader); });
1
+ import { __assign } from "tslib";
2
+ import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
3
+ import { GLTFLoader } from "../glTFLoader.js";
4
+ import { RenderTargetTexture } from "@babylonjs/core/Materials/Textures/renderTargetTexture.js";
5
+ import { Observable } from "@babylonjs/core/Misc/observable.js";
6
+ import { Constants } from "@babylonjs/core/Engines/constants.js";
7
+ import { Tools } from "@babylonjs/core/Misc/tools.js";
8
+ /**
9
+ * A class to handle setting up the rendering of opaque objects to be shown through transmissive objects.
10
+ */
11
+ var TransmissionHelper = /** @class */ (function () {
12
+ /**
13
+ * constructor
14
+ * @param options Defines the options we want to customize the helper
15
+ * @param scene The scene to add the material to
16
+ */
17
+ function TransmissionHelper(options, scene) {
18
+ var _this = this;
19
+ this._opaqueRenderTarget = null;
20
+ this._opaqueMeshesCache = [];
21
+ this._transparentMeshesCache = [];
22
+ this._materialObservers = {};
23
+ this._options = __assign(__assign({}, TransmissionHelper._GetDefaultOptions()), options);
24
+ this._scene = scene;
25
+ this._scene._transmissionHelper = this;
26
+ this.onErrorObservable = new Observable();
27
+ this._scene.onDisposeObservable.addOnce(function () {
28
+ _this.dispose();
29
+ });
30
+ this._parseScene();
31
+ this._setupRenderTargets();
32
+ }
33
+ /**
34
+ * Creates the default options for the helper.
35
+ */
36
+ TransmissionHelper._GetDefaultOptions = function () {
37
+ return {
38
+ renderSize: 1024,
39
+ samples: 4,
40
+ lodGenerationScale: 1,
41
+ lodGenerationOffset: -4,
42
+ renderTargetTextureType: Constants.TEXTURETYPE_HALF_FLOAT,
43
+ generateMipmaps: true,
44
+ };
45
+ };
46
+ /**
47
+ * Updates the background according to the new options
48
+ * @param options
49
+ */
50
+ TransmissionHelper.prototype.updateOptions = function (options) {
51
+ var _this = this;
52
+ // First check if any options are actually being changed. If not, exit.
53
+ var newValues = Object.keys(options).filter(function (key) { return _this._options[key] !== options[key]; });
54
+ if (!newValues.length) {
55
+ return;
56
+ }
57
+ var newOptions = __assign(__assign({}, this._options), options);
58
+ var oldOptions = this._options;
59
+ this._options = newOptions;
60
+ // If size changes, recreate everything
61
+ if (newOptions.renderSize !== oldOptions.renderSize ||
62
+ newOptions.renderTargetTextureType !== oldOptions.renderTargetTextureType ||
63
+ newOptions.generateMipmaps !== oldOptions.generateMipmaps ||
64
+ !this._opaqueRenderTarget) {
65
+ this._setupRenderTargets();
66
+ }
67
+ else {
68
+ this._opaqueRenderTarget.samples = newOptions.samples;
69
+ this._opaqueRenderTarget.lodGenerationScale = newOptions.lodGenerationScale;
70
+ this._opaqueRenderTarget.lodGenerationOffset = newOptions.lodGenerationOffset;
71
+ }
72
+ };
73
+ TransmissionHelper.prototype.getOpaqueTarget = function () {
74
+ return this._opaqueRenderTarget;
75
+ };
76
+ TransmissionHelper.prototype._shouldRenderAsTransmission = function (material) {
77
+ if (!material) {
78
+ return false;
79
+ }
80
+ if (material instanceof PBRMaterial && material.subSurface.isRefractionEnabled) {
81
+ return true;
82
+ }
83
+ return false;
84
+ };
85
+ TransmissionHelper.prototype._addMesh = function (mesh) {
86
+ var _this = this;
87
+ this._materialObservers[mesh.uniqueId] = mesh.onMaterialChangedObservable.add(this._onMeshMaterialChanged.bind(this));
88
+ // we need to defer the processing because _addMesh may be called as part as an instance mesh creation, in which case some
89
+ // internal properties are not setup yet, like _sourceMesh (needed when doing mesh.material below)
90
+ Tools.SetImmediate(function () {
91
+ if (_this._shouldRenderAsTransmission(mesh.material)) {
92
+ mesh.material.refractionTexture = _this._opaqueRenderTarget;
93
+ _this._transparentMeshesCache.push(mesh);
94
+ }
95
+ else {
96
+ _this._opaqueMeshesCache.push(mesh);
97
+ }
98
+ });
99
+ };
100
+ TransmissionHelper.prototype._removeMesh = function (mesh) {
101
+ mesh.onMaterialChangedObservable.remove(this._materialObservers[mesh.uniqueId]);
102
+ delete this._materialObservers[mesh.uniqueId];
103
+ var idx = this._transparentMeshesCache.indexOf(mesh);
104
+ if (idx !== -1) {
105
+ this._transparentMeshesCache.splice(idx, 1);
106
+ }
107
+ idx = this._opaqueMeshesCache.indexOf(mesh);
108
+ if (idx !== -1) {
109
+ this._opaqueMeshesCache.splice(idx, 1);
110
+ }
111
+ };
112
+ TransmissionHelper.prototype._parseScene = function () {
113
+ this._scene.meshes.forEach(this._addMesh.bind(this));
114
+ // Listen for when a mesh is added to the scene and add it to our cache lists.
115
+ this._scene.onNewMeshAddedObservable.add(this._addMesh.bind(this));
116
+ // Listen for when a mesh is removed from to the scene and remove it from our cache lists.
117
+ this._scene.onMeshRemovedObservable.add(this._removeMesh.bind(this));
118
+ };
119
+ // When one of the meshes in the scene has its material changed, make sure that it's in the correct cache list.
120
+ TransmissionHelper.prototype._onMeshMaterialChanged = function (mesh) {
121
+ var transparentIdx = this._transparentMeshesCache.indexOf(mesh);
122
+ var opaqueIdx = this._opaqueMeshesCache.indexOf(mesh);
123
+ // If the material is transparent, make sure that it's added to the transparent list and removed from the opaque list
124
+ var useTransmission = this._shouldRenderAsTransmission(mesh.material);
125
+ if (useTransmission) {
126
+ if (mesh.material instanceof PBRMaterial) {
127
+ mesh.material.subSurface.refractionTexture = this._opaqueRenderTarget;
128
+ }
129
+ if (opaqueIdx !== -1) {
130
+ this._opaqueMeshesCache.splice(opaqueIdx, 1);
131
+ this._transparentMeshesCache.push(mesh);
132
+ }
133
+ else if (transparentIdx === -1) {
134
+ this._transparentMeshesCache.push(mesh);
135
+ }
136
+ // If the material is opaque, make sure that it's added to the opaque list and removed from the transparent list
137
+ }
138
+ else {
139
+ if (transparentIdx !== -1) {
140
+ this._transparentMeshesCache.splice(transparentIdx, 1);
141
+ this._opaqueMeshesCache.push(mesh);
142
+ }
143
+ else if (opaqueIdx === -1) {
144
+ this._opaqueMeshesCache.push(mesh);
145
+ }
146
+ }
147
+ };
148
+ /**
149
+ * Setup the render targets according to the specified options.
150
+ */
151
+ TransmissionHelper.prototype._setupRenderTargets = function () {
152
+ var _this = this;
153
+ var _a, _b;
154
+ if (this._opaqueRenderTarget) {
155
+ this._opaqueRenderTarget.dispose();
156
+ }
157
+ this._opaqueRenderTarget = new RenderTargetTexture("opaqueSceneTexture", this._options.renderSize, this._scene, this._options.generateMipmaps, undefined, this._options.renderTargetTextureType);
158
+ this._opaqueRenderTarget.ignoreCameraViewport = true;
159
+ this._opaqueRenderTarget.renderList = this._opaqueMeshesCache;
160
+ this._opaqueRenderTarget.clearColor = (_b = (_a = this._options.clearColor) === null || _a === void 0 ? void 0 : _a.clone()) !== null && _b !== void 0 ? _b : this._scene.clearColor.clone();
161
+ this._opaqueRenderTarget.gammaSpace = false;
162
+ this._opaqueRenderTarget.lodGenerationScale = this._options.lodGenerationScale;
163
+ this._opaqueRenderTarget.lodGenerationOffset = this._options.lodGenerationOffset;
164
+ this._opaqueRenderTarget.samples = this._options.samples;
165
+ var sceneImageProcessingapplyByPostProcess;
166
+ var saveSceneEnvIntensity;
167
+ this._opaqueRenderTarget.onBeforeBindObservable.add(function (opaqueRenderTarget) {
168
+ saveSceneEnvIntensity = _this._scene.environmentIntensity;
169
+ _this._scene.environmentIntensity = 1.0;
170
+ sceneImageProcessingapplyByPostProcess = _this._scene.imageProcessingConfiguration.applyByPostProcess;
171
+ if (!_this._options.clearColor) {
172
+ _this._scene.clearColor.toLinearSpaceToRef(opaqueRenderTarget.clearColor);
173
+ }
174
+ else {
175
+ opaqueRenderTarget.clearColor.copyFrom(_this._options.clearColor);
176
+ }
177
+ // we do not use the applyByPostProcess setter to avoid flagging all the materials as "image processing dirty"!
178
+ _this._scene.imageProcessingConfiguration._applyByPostProcess = true;
179
+ });
180
+ this._opaqueRenderTarget.onAfterUnbindObservable.add(function () {
181
+ _this._scene.environmentIntensity = saveSceneEnvIntensity;
182
+ _this._scene.imageProcessingConfiguration._applyByPostProcess = sceneImageProcessingapplyByPostProcess;
183
+ });
184
+ this._transparentMeshesCache.forEach(function (mesh) {
185
+ if (_this._shouldRenderAsTransmission(mesh.material)) {
186
+ mesh.material.refractionTexture = _this._opaqueRenderTarget;
187
+ }
188
+ });
189
+ };
190
+ /**
191
+ * Dispose all the elements created by the Helper.
192
+ */
193
+ TransmissionHelper.prototype.dispose = function () {
194
+ this._scene._transmissionHelper = undefined;
195
+ if (this._opaqueRenderTarget) {
196
+ this._opaqueRenderTarget.dispose();
197
+ this._opaqueRenderTarget = null;
198
+ }
199
+ this._transparentMeshesCache = [];
200
+ this._opaqueMeshesCache = [];
201
+ };
202
+ return TransmissionHelper;
203
+ }());
204
+ var NAME = "KHR_materials_transmission";
205
+ /**
206
+ * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_materials_transmission/README.md)
207
+ */
208
+ // eslint-disable-next-line @typescript-eslint/naming-convention
209
+ var KHR_materials_transmission = /** @class */ (function () {
210
+ /**
211
+ * @param loader
212
+ * @hidden
213
+ */
214
+ function KHR_materials_transmission(loader) {
215
+ /**
216
+ * The name of this extension.
217
+ */
218
+ this.name = NAME;
219
+ /**
220
+ * Defines a number that determines the order the extensions are applied.
221
+ */
222
+ this.order = 175;
223
+ this._loader = loader;
224
+ this.enabled = this._loader.isExtensionUsed(NAME);
225
+ if (this.enabled) {
226
+ loader.parent.transparencyAsCoverage = true;
227
+ }
228
+ }
229
+ /** @hidden */
230
+ KHR_materials_transmission.prototype.dispose = function () {
231
+ this._loader = null;
232
+ };
233
+ /**
234
+ * @param context
235
+ * @param material
236
+ * @param babylonMaterial
237
+ * @hidden
238
+ */
239
+ KHR_materials_transmission.prototype.loadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
240
+ var _this = this;
241
+ return GLTFLoader.LoadExtensionAsync(context, material, this.name, function (extensionContext, extension) {
242
+ var promises = new Array();
243
+ promises.push(_this._loader.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
244
+ promises.push(_this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
245
+ promises.push(_this._loadTransparentPropertiesAsync(extensionContext, material, babylonMaterial, extension));
246
+ return Promise.all(promises).then(function () { });
247
+ });
248
+ };
249
+ KHR_materials_transmission.prototype._loadTransparentPropertiesAsync = function (context, material, babylonMaterial, extension) {
250
+ if (!(babylonMaterial instanceof PBRMaterial)) {
251
+ throw new Error("".concat(context, ": Material type not supported"));
252
+ }
253
+ var pbrMaterial = babylonMaterial;
254
+ // Enables "refraction" texture which represents transmitted light.
255
+ pbrMaterial.subSurface.isRefractionEnabled = true;
256
+ // Since this extension models thin-surface transmission only, we must make IOR = 1.0
257
+ pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;
258
+ // Albedo colour will tint transmission.
259
+ pbrMaterial.subSurface.useAlbedoToTintRefraction = true;
260
+ if (extension.transmissionFactor !== undefined) {
261
+ pbrMaterial.subSurface.refractionIntensity = extension.transmissionFactor;
262
+ var scene = pbrMaterial.getScene();
263
+ if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper) {
264
+ new TransmissionHelper({}, pbrMaterial.getScene());
265
+ }
266
+ }
267
+ else {
268
+ pbrMaterial.subSurface.refractionIntensity = 0.0;
269
+ pbrMaterial.subSurface.isRefractionEnabled = false;
270
+ return Promise.resolve();
271
+ }
272
+ pbrMaterial.subSurface.minimumThickness = 0.0;
273
+ pbrMaterial.subSurface.maximumThickness = 0.0;
274
+ if (extension.transmissionTexture) {
275
+ extension.transmissionTexture.nonColorData = true;
276
+ return this._loader.loadTextureInfoAsync("".concat(context, "/transmissionTexture"), extension.transmissionTexture, undefined).then(function (texture) {
277
+ pbrMaterial.subSurface.refractionIntensityTexture = texture;
278
+ pbrMaterial.subSurface.useGltfStyleTextures = true;
279
+ });
280
+ }
281
+ else {
282
+ return Promise.resolve();
283
+ }
284
+ };
285
+ return KHR_materials_transmission;
286
+ }());
287
+ export { KHR_materials_transmission };
288
+ GLTFLoader.RegisterExtension(NAME, function (loader) { return new KHR_materials_transmission(loader); });
289
289
  //# sourceMappingURL=KHR_materials_transmission.js.map