@babylonjs/loaders 8.29.0 → 8.29.2

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 (29) hide show
  1. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +3 -0
  2. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +74 -24
  3. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  4. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +1 -1
  5. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  6. package/glTF/2.0/Extensions/index.d.ts +0 -3
  7. package/glTF/2.0/Extensions/index.js +0 -3
  8. package/glTF/2.0/Extensions/index.js.map +1 -1
  9. package/glTF/2.0/glTFLoader.d.ts +5 -7
  10. package/glTF/2.0/glTFLoader.js +43 -42
  11. package/glTF/2.0/glTFLoader.js.map +1 -1
  12. package/glTF/2.0/materialLoadingAdapter.d.ts +4 -0
  13. package/glTF/2.0/materialLoadingAdapter.js.map +1 -1
  14. package/glTF/2.0/openPbrMaterialLoadingAdapter.d.ts +4 -0
  15. package/glTF/2.0/openPbrMaterialLoadingAdapter.js +6 -0
  16. package/glTF/2.0/openPbrMaterialLoadingAdapter.js.map +1 -1
  17. package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +4 -0
  18. package/glTF/2.0/pbrMaterialLoadingAdapter.js +6 -0
  19. package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -1
  20. package/package.json +3 -3
  21. package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.d.ts +0 -42
  22. package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.js +0 -66
  23. package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.js.map +0 -1
  24. package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.d.ts +0 -42
  25. package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.js +0 -62
  26. package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.js.map +0 -1
  27. package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.d.ts +0 -43
  28. package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.js +0 -62
  29. package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.js.map +0 -1
@@ -40,4 +40,7 @@ export declare class KHR_materials_clearcoat implements IGLTFLoaderExtension {
40
40
  */
41
41
  loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>>;
42
42
  private _loadClearCoatPropertiesAsync;
43
+ private _loadClearCoatDarkeningPropertiesAsync;
44
+ private _loadClearCoatColorPropertiesAsync;
45
+ private _loadClearCoatAnisotropyPropertiesAsync;
43
46
  }
@@ -1,5 +1,6 @@
1
1
  import { GLTFLoader } from "../glTFLoader.js";
2
- import { registeredGLTFExtensions, registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
2
+ import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
3
+ import { Color3 } from "@babylonjs/core/Maths/math.color.js";
3
4
  const NAME = "KHR_materials_clearcoat";
4
5
  /**
5
6
  * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md)
@@ -35,35 +36,26 @@ export class KHR_materials_clearcoat {
35
36
  const promises = new Array();
36
37
  promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
37
38
  promises.push(this._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));
39
+ const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
38
40
  if (extension.extensions && extension.extensions.KHR_materials_clearcoat_darkening) {
39
- let darkeningExtension = await registeredGLTFExtensions.get("KHR_materials_clearcoat_darkening")?.factory(this._loader);
40
- darkeningExtension = darkeningExtension;
41
- if (darkeningExtension && darkeningExtension.enabled && darkeningExtension.loadMaterialPropertiesAsync) {
42
- const promise = darkeningExtension.loadMaterialPropertiesAsync(extensionContext, extension, babylonMaterial);
43
- if (promise) {
44
- promises.push(promise);
45
- }
41
+ const darkeningExtension = extension.extensions.KHR_materials_clearcoat_darkening;
42
+ promises.push(this._loadClearCoatDarkeningPropertiesAsync(extensionContext, darkeningExtension, babylonMaterial));
43
+ }
44
+ if (extension.extensions && extension.extensions.KHR_materials_clearcoat_ior) {
45
+ const iorExtension = extension.extensions.KHR_materials_clearcoat_ior;
46
+ let ior = 1.5;
47
+ if (iorExtension.clearcoatIor !== undefined) {
48
+ ior = iorExtension.clearcoatIor;
46
49
  }
50
+ adapter.coatIor = ior;
47
51
  }
48
52
  if (extension.extensions && extension.extensions.KHR_materials_clearcoat_anisotropy) {
49
- let anisotropyExtension = await registeredGLTFExtensions.get("KHR_materials_clearcoat_anisotropy")?.factory(this._loader);
50
- anisotropyExtension = anisotropyExtension;
51
- if (anisotropyExtension && anisotropyExtension.enabled && anisotropyExtension.loadMaterialPropertiesAsync) {
52
- const promise = anisotropyExtension.loadMaterialPropertiesAsync(extensionContext, extension, babylonMaterial);
53
- if (promise) {
54
- promises.push(promise);
55
- }
56
- }
53
+ const anisotropyExtension = extension.extensions.KHR_materials_clearcoat_anisotropy;
54
+ promises.push(this._loadClearCoatAnisotropyPropertiesAsync(extensionContext, anisotropyExtension, babylonMaterial));
57
55
  }
58
56
  if (extension.extensions && extension.extensions.KHR_materials_clearcoat_color) {
59
- let colorExtension = await registeredGLTFExtensions.get("KHR_materials_clearcoat_color")?.factory(this._loader);
60
- colorExtension = colorExtension;
61
- if (colorExtension && colorExtension.enabled && colorExtension.loadMaterialPropertiesAsync) {
62
- const promise = colorExtension.loadMaterialPropertiesAsync(extensionContext, extension, babylonMaterial);
63
- if (promise) {
64
- promises.push(promise);
65
- }
66
- }
57
+ const colorExtension = extension.extensions.KHR_materials_clearcoat_color;
58
+ promises.push(this._loadClearCoatColorPropertiesAsync(extensionContext, colorExtension, babylonMaterial));
67
59
  }
68
60
  await Promise.all(promises);
69
61
  });
@@ -104,6 +96,64 @@ export class KHR_materials_clearcoat {
104
96
  // eslint-disable-next-line github/no-then
105
97
  return Promise.all(promises).then(() => { });
106
98
  }
99
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
100
+ _loadClearCoatDarkeningPropertiesAsync(context, properties, babylonMaterial) {
101
+ const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
102
+ const promises = new Array();
103
+ adapter.coatDarkening = properties.clearcoatDarkeningFactor !== undefined ? properties.clearcoatDarkeningFactor : 1;
104
+ if (properties.clearcoatDarkeningTexture) {
105
+ properties.clearcoatDarkeningTexture.nonColorData = true;
106
+ promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatDarkeningTexture`, properties.clearcoatDarkeningTexture, (texture) => {
107
+ texture.name = `${babylonMaterial.name} (ClearCoat Darkening)`;
108
+ adapter.coatDarkeningTexture = texture;
109
+ }));
110
+ }
111
+ // eslint-disable-next-line github/no-then
112
+ return Promise.all(promises).then(() => { });
113
+ }
114
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
115
+ _loadClearCoatColorPropertiesAsync(context, properties, babylonMaterial) {
116
+ const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
117
+ const promises = new Array();
118
+ const colorFactor = Color3.White();
119
+ if (properties.clearcoatColorFactor !== undefined) {
120
+ colorFactor.fromArray(properties.clearcoatColorFactor);
121
+ }
122
+ adapter.coatColor = colorFactor;
123
+ if (properties.clearcoatColorTexture) {
124
+ promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatColorTexture`, properties.clearcoatColorTexture, (texture) => {
125
+ texture.name = `${babylonMaterial.name} (ClearCoat Color)`;
126
+ adapter.coatColorTexture = texture;
127
+ }));
128
+ }
129
+ // eslint-disable-next-line github/no-then
130
+ return Promise.all(promises).then(() => { });
131
+ }
132
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
133
+ _loadClearCoatAnisotropyPropertiesAsync(context, properties, babylonMaterial) {
134
+ const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
135
+ const promises = new Array();
136
+ // Set non-texture properties immediately
137
+ const clearcoatAnisotropyWeight = properties.clearcoatAnisotropyStrength ?? 0;
138
+ const clearcoatAnisotropyAngle = properties.clearcoatAnisotropyRotation ?? 0;
139
+ adapter.coatRoughnessAnisotropy = clearcoatAnisotropyWeight;
140
+ adapter.geometryCoatTangentAngle = clearcoatAnisotropyAngle;
141
+ // Check if this is glTF-style anisotropy
142
+ const extensions = properties.extensions ?? {};
143
+ if (!extensions.EXT_materials_anisotropy_openpbr || !extensions.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled) {
144
+ adapter.configureGltfStyleAnisotropy(true);
145
+ }
146
+ // Load texture if present
147
+ if (properties.clearcoatAnisotropyTexture) {
148
+ properties.clearcoatAnisotropyTexture.nonColorData = true;
149
+ promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatAnisotropyTexture`, properties.clearcoatAnisotropyTexture, (texture) => {
150
+ texture.name = `${babylonMaterial.name} (Clearcoat Anisotropy)`;
151
+ adapter.geometryCoatTangentTexture = texture;
152
+ }));
153
+ }
154
+ // eslint-disable-next-line github/no-then
155
+ return Promise.all(promises).then(() => { });
156
+ }
107
157
  }
108
158
  unregisterGLTFExtension(NAME);
109
159
  registerGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat(loader));
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_materials_clearcoat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAK1H,MAAM,IAAI,GAAG,yBAAyB,CAAC;AAavC;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,uBAAuB;IAkBhC;;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;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAyB,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAC7H,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,6BAA6B,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YAChG,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC;gBACjF,IAAI,kBAAkB,GAAG,MAAM,wBAAwB,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxH,kBAAkB,GAAG,kBAAuD,CAAC;gBAC7E,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,OAAO,IAAI,kBAAkB,CAAC,2BAA2B,EAAE,CAAC;oBACrG,MAAM,OAAO,GAAG,kBAAkB,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,SAAgB,EAAE,eAAe,CAAC,CAAC;oBACpH,IAAI,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,kCAAkC,EAAE,CAAC;gBAClF,IAAI,mBAAmB,GAAG,MAAM,wBAAwB,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1H,mBAAmB,GAAG,mBAAyD,CAAC;gBAChF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,IAAI,mBAAmB,CAAC,2BAA2B,EAAE,CAAC;oBACxG,MAAM,OAAO,GAAG,mBAAmB,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,SAAgB,EAAE,eAAe,CAAC,CAAC;oBACrH,IAAI,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC;gBAC7E,IAAI,cAAc,GAAG,MAAM,wBAAwB,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChH,cAAc,GAAG,cAA+C,CAAC;gBACjE,IAAI,cAAc,IAAI,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,2BAA2B,EAAE,CAAC;oBACzF,MAAM,OAAO,GAAG,cAAc,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,SAAgB,EAAE,eAAe,CAAC,CAAC;oBAChH,IAAI,OAAO,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACL,CAAC;YACL,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,6BAA6B,CAAC,OAAe,EAAE,UAAkC,EAAE,eAAyB;QAChH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,yCAAyC;QACzC,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpH,gBAAgB;QAChB,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,mBAAmB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACtG,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,cAAc,CAAC;gBACrD,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACxC,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;YACtC,UAAU,CAAC,yBAA0C,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3E,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,4BAA4B,EAAE,UAAU,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,wBAAwB,CAAC;gBAC/D,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC;YAC3C,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC;YACnC,UAAU,CAAC,sBAAuC,CAAC,YAAY,GAAG,IAAI,CAAC;YACxE,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,yBAAyB,EAAE,UAAU,CAAC,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,qBAAqB,CAAC;gBAC5D,OAAO,CAAC,yBAAyB,GAAG,OAAO,CAAC;gBAC5C,IAAI,UAAU,CAAC,sBAAsB,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;oBACxD,OAAO,CAAC,8BAA8B,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBACrF,CAAC;YACL,CAAC,CAAC,CACL,CAAC;YACF,OAAO,CAAC,sBAAsB,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,CAAC;QACtI,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,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsClearcoat } from \"babylonjs-gltf2interface\";\r\nimport { registeredGLTFExtensions, registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport type { KHR_materials_clearcoat_darkening } from \"./KHR_materials_clearcoat_darkening\";\r\nimport type { KHR_materials_clearcoat_color } from \"./KHR_materials_clearcoat_color\";\r\nimport type { KHR_materials_clearcoat_anisotropy } from \"./KHR_materials_clearcoat_anisotropy\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat\";\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_clearcoat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md)\r\n * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat 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 = 190;\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 loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsClearcoat>(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._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_darkening) {\r\n let darkeningExtension = await registeredGLTFExtensions.get(\"KHR_materials_clearcoat_darkening\")?.factory(this._loader);\r\n darkeningExtension = darkeningExtension as KHR_materials_clearcoat_darkening;\r\n if (darkeningExtension && darkeningExtension.enabled && darkeningExtension.loadMaterialPropertiesAsync) {\r\n const promise = darkeningExtension.loadMaterialPropertiesAsync(extensionContext, extension as any, babylonMaterial);\r\n if (promise) {\r\n promises.push(promise);\r\n }\r\n }\r\n }\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_anisotropy) {\r\n let anisotropyExtension = await registeredGLTFExtensions.get(\"KHR_materials_clearcoat_anisotropy\")?.factory(this._loader);\r\n anisotropyExtension = anisotropyExtension as KHR_materials_clearcoat_anisotropy;\r\n if (anisotropyExtension && anisotropyExtension.enabled && anisotropyExtension.loadMaterialPropertiesAsync) {\r\n const promise = anisotropyExtension.loadMaterialPropertiesAsync(extensionContext, extension as any, babylonMaterial);\r\n if (promise) {\r\n promises.push(promise);\r\n }\r\n }\r\n }\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_color) {\r\n let colorExtension = await registeredGLTFExtensions.get(\"KHR_materials_clearcoat_color\")?.factory(this._loader);\r\n colorExtension = colorExtension as KHR_materials_clearcoat_color;\r\n if (colorExtension && colorExtension.enabled && colorExtension.loadMaterialPropertiesAsync) {\r\n const promise = colorExtension.loadMaterialPropertiesAsync(extensionContext, extension as any, babylonMaterial);\r\n if (promise) {\r\n promises.push(promise);\r\n }\r\n }\r\n }\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n adapter.configureCoat();\r\n adapter.coatWeight = properties.clearcoatFactor !== undefined ? properties.clearcoatFactor : 0;\r\n adapter.coatRoughness = properties.clearcoatRoughnessFactor !== undefined ? properties.clearcoatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.clearcoatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatTexture`, properties.clearcoatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatRoughnessTexture) {\r\n (properties.clearcoatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatRoughnessTexture`, properties.clearcoatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatNormalTexture) {\r\n (properties.clearcoatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatNormalTexture`, properties.clearcoatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.clearcoatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.clearcoatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\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_clearcoat(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_materials_clearcoat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type {\r\n IKHRMaterialsClearcoat,\r\n IKHRMaterialsClearcoatDarkening,\r\n IKHRMaterialsClearcoatIor,\r\n IKHRMaterialsClearcoatColor,\r\n IKHRMaterialsClearcoatAnisotropy,\r\n} from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat\";\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_clearcoat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md)\r\n * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat 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 = 190;\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 loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsClearcoat>(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._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_darkening) {\r\n const darkeningExtension = extension.extensions.KHR_materials_clearcoat_darkening as IKHRMaterialsClearcoatDarkening;\r\n promises.push(this._loadClearCoatDarkeningPropertiesAsync(extensionContext, darkeningExtension, babylonMaterial));\r\n }\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_ior) {\r\n const iorExtension = extension.extensions.KHR_materials_clearcoat_ior as IKHRMaterialsClearcoatIor;\r\n let ior = 1.5;\r\n if (iorExtension.clearcoatIor !== undefined) {\r\n ior = iorExtension.clearcoatIor;\r\n }\r\n adapter.coatIor = ior;\r\n }\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_anisotropy) {\r\n const anisotropyExtension = extension.extensions.KHR_materials_clearcoat_anisotropy as IKHRMaterialsClearcoatAnisotropy;\r\n promises.push(this._loadClearCoatAnisotropyPropertiesAsync(extensionContext, anisotropyExtension, babylonMaterial));\r\n }\r\n if (extension.extensions && extension.extensions.KHR_materials_clearcoat_color) {\r\n const colorExtension = extension.extensions.KHR_materials_clearcoat_color as IKHRMaterialsClearcoatColor;\r\n promises.push(this._loadClearCoatColorPropertiesAsync(extensionContext, colorExtension, babylonMaterial));\r\n }\r\n\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n adapter.configureCoat();\r\n adapter.coatWeight = properties.clearcoatFactor !== undefined ? properties.clearcoatFactor : 0;\r\n adapter.coatRoughness = properties.clearcoatRoughnessFactor !== undefined ? properties.clearcoatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.clearcoatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatTexture`, properties.clearcoatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatRoughnessTexture) {\r\n (properties.clearcoatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatRoughnessTexture`, properties.clearcoatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatNormalTexture) {\r\n (properties.clearcoatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatNormalTexture`, properties.clearcoatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.clearcoatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.clearcoatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\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 // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatDarkeningPropertiesAsync(context: string, properties: IKHRMaterialsClearcoatDarkening, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n adapter.coatDarkening = properties.clearcoatDarkeningFactor !== undefined ? properties.clearcoatDarkeningFactor : 1;\r\n\r\n if (properties.clearcoatDarkeningTexture) {\r\n (properties.clearcoatDarkeningTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatDarkeningTexture`, properties.clearcoatDarkeningTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Darkening)`;\r\n adapter.coatDarkeningTexture = 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 // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatColorPropertiesAsync(context: string, properties: IKHRMaterialsClearcoatColor, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n const colorFactor = Color3.White();\r\n if (properties.clearcoatColorFactor !== undefined) {\r\n colorFactor.fromArray(properties.clearcoatColorFactor);\r\n }\r\n\r\n adapter.coatColor = colorFactor;\r\n\r\n if (properties.clearcoatColorTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatColorTexture`, properties.clearcoatColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (ClearCoat Color)`;\r\n adapter.coatColorTexture = 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 // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadClearCoatAnisotropyPropertiesAsync(context: string, properties: IKHRMaterialsClearcoatAnisotropy, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n const promises = new Array<Promise<any>>();\r\n\r\n // Set non-texture properties immediately\r\n const clearcoatAnisotropyWeight = properties.clearcoatAnisotropyStrength ?? 0;\r\n const clearcoatAnisotropyAngle = properties.clearcoatAnisotropyRotation ?? 0;\r\n\r\n adapter.coatRoughnessAnisotropy = clearcoatAnisotropyWeight;\r\n adapter.geometryCoatTangentAngle = clearcoatAnisotropyAngle;\r\n\r\n // Check if this is glTF-style anisotropy\r\n const extensions = properties.extensions ?? {};\r\n if (!extensions.EXT_materials_anisotropy_openpbr || !extensions.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled) {\r\n adapter.configureGltfStyleAnisotropy(true);\r\n }\r\n\r\n // Load texture if present\r\n if (properties.clearcoatAnisotropyTexture) {\r\n (properties.clearcoatAnisotropyTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/clearcoatAnisotropyTexture`, properties.clearcoatAnisotropyTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Clearcoat Anisotropy)`;\r\n adapter.geometryCoatTangentTexture = 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\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat(loader));\r\n"]}
@@ -20,7 +20,7 @@ export class MSFT_minecraftMesh {
20
20
  loadMaterialPropertiesAsync(context, material, babylonMaterial) {
21
21
  return GLTFLoader.LoadExtraAsync(context, material, this.name, async (extraContext, extra) => {
22
22
  if (extra) {
23
- if (!this._loader._pbrMaterialClass) {
23
+ if (!this._loader._pbrMaterialImpl) {
24
24
  throw new Error(`${extraContext}: Material type not supported`);
25
25
  }
26
26
  const promise = this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);
@@ -1 +1 @@
1
- {"version":3,"file":"MSFT_minecraftMesh.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/MSFT_minecraftMesh.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAalC,gBAAgB;AAChB,gEAAgE;AAChE,MAAM,OAAO,kBAAkB;IAS3B,gBAAgB;IAChB,YAAY,MAAkB;QAT9B,gBAAgB;QACA,SAAI,GAAG,IAAI,CAAC;QASxB,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,gBAAgB;IAChB,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,cAAc,CAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;YAClG,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,+BAA+B,CAAC,CAAC;gBACpE,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAE7F,IAAI,eAAe,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBACtC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC;oBACvC,eAAe,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAC/C,CAAC;gBAED,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;gBACjE,eAA+B,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAEzD,OAAO,MAAM,OAAO,CAAC;YACzB,CAAC;QACL,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 { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"MSFT_minecraftMesh\";\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 MSFT_minecraftMesh extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"MSFT_minecraftMesh\"]: {};\r\n }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class MSFT_minecraftMesh implements IGLTFLoaderExtension {\r\n /** @internal */\r\n public readonly name = NAME;\r\n\r\n /** @internal */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @internal */\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 /** @internal */\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.LoadExtraAsync<boolean>(context, material, this.name, async (extraContext, extra) => {\r\n if (extra) {\r\n if (!this._loader._pbrMaterialClass) {\r\n throw new Error(`${extraContext}: Material type not supported`);\r\n }\r\n\r\n const promise = this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);\r\n\r\n if (babylonMaterial.needAlphaBlending()) {\r\n babylonMaterial.forceDepthWrite = true;\r\n babylonMaterial.separateCullingPass = true;\r\n }\r\n\r\n babylonMaterial.backFaceCulling = babylonMaterial.forceDepthWrite;\r\n (babylonMaterial as PBRMaterial).twoSidedLighting = true;\r\n\r\n return await promise;\r\n }\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new MSFT_minecraftMesh(loader));\r\n"]}
1
+ {"version":3,"file":"MSFT_minecraftMesh.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/MSFT_minecraftMesh.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAalC,gBAAgB;AAChB,gEAAgE;AAChE,MAAM,OAAO,kBAAkB;IAS3B,gBAAgB;IAChB,YAAY,MAAkB;QAT9B,gBAAgB;QACA,SAAI,GAAG,IAAI,CAAC;QASxB,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,gBAAgB;IAChB,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,cAAc,CAAU,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;YAClG,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,+BAA+B,CAAC,CAAC;gBACpE,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAE7F,IAAI,eAAe,CAAC,iBAAiB,EAAE,EAAE,CAAC;oBACtC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC;oBACvC,eAAe,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAC/C,CAAC;gBAED,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;gBACjE,eAA+B,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAEzD,OAAO,MAAM,OAAO,CAAC;YACzB,CAAC;QACL,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 { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"MSFT_minecraftMesh\";\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 MSFT_minecraftMesh extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"MSFT_minecraftMesh\"]: {};\r\n }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class MSFT_minecraftMesh implements IGLTFLoaderExtension {\r\n /** @internal */\r\n public readonly name = NAME;\r\n\r\n /** @internal */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @internal */\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 /** @internal */\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.LoadExtraAsync<boolean>(context, material, this.name, async (extraContext, extra) => {\r\n if (extra) {\r\n if (!this._loader._pbrMaterialImpl) {\r\n throw new Error(`${extraContext}: Material type not supported`);\r\n }\r\n\r\n const promise = this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);\r\n\r\n if (babylonMaterial.needAlphaBlending()) {\r\n babylonMaterial.forceDepthWrite = true;\r\n babylonMaterial.separateCullingPass = true;\r\n }\r\n\r\n babylonMaterial.backFaceCulling = babylonMaterial.forceDepthWrite;\r\n (babylonMaterial as PBRMaterial).twoSidedLighting = true;\r\n\r\n return await promise;\r\n }\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new MSFT_minecraftMesh(loader));\r\n"]}
@@ -11,9 +11,6 @@ export * from "./KHR_lights_punctual.js";
11
11
  export * from "./KHR_materials_pbrSpecularGlossiness.js";
12
12
  export * from "./KHR_materials_unlit.js";
13
13
  export * from "./KHR_materials_clearcoat.js";
14
- export * from "./KHR_materials_clearcoat_darkening.js";
15
- export * from "./KHR_materials_clearcoat_color.js";
16
- export * from "./KHR_materials_clearcoat_anisotropy.js";
17
14
  export * from "./KHR_materials_iridescence.js";
18
15
  export * from "./KHR_materials_anisotropy.js";
19
16
  export * from "./KHR_materials_emissive_strength.js";
@@ -12,9 +12,6 @@ export * from "./KHR_lights_punctual.js";
12
12
  export * from "./KHR_materials_pbrSpecularGlossiness.js";
13
13
  export * from "./KHR_materials_unlit.js";
14
14
  export * from "./KHR_materials_clearcoat.js";
15
- export * from "./KHR_materials_clearcoat_darkening.js";
16
- export * from "./KHR_materials_clearcoat_color.js";
17
- export * from "./KHR_materials_clearcoat_anisotropy.js";
18
15
  export * from "./KHR_materials_iridescence.js";
19
16
  export * from "./KHR_materials_anisotropy.js";
20
17
  export * from "./KHR_materials_emissive_strength.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./objectModelMapping\";\r\nexport * from \"./EXT_lights_area\";\r\nexport * from \"./EXT_lights_image_based\";\r\nexport * from \"./EXT_mesh_gpu_instancing\";\r\nexport * from \"./EXT_meshopt_compression\";\r\nexport * from \"./EXT_texture_webp\";\r\nexport * from \"./EXT_texture_avif\";\r\nexport * from \"./EXT_lights_ies\";\r\nexport * from \"./KHR_draco_mesh_compression\";\r\nexport * from \"./KHR_lights_punctual\";\r\nexport * from \"./KHR_materials_pbrSpecularGlossiness\";\r\nexport * from \"./KHR_materials_unlit\";\r\nexport * from \"./KHR_materials_clearcoat\";\r\nexport * from \"./KHR_materials_clearcoat_darkening\";\r\nexport * from \"./KHR_materials_clearcoat_color\";\r\nexport * from \"./KHR_materials_clearcoat_anisotropy\";\r\nexport * from \"./KHR_materials_iridescence\";\r\nexport * from \"./KHR_materials_anisotropy\";\r\nexport * from \"./KHR_materials_emissive_strength\";\r\nexport * from \"./KHR_materials_sheen\";\r\nexport * from \"./KHR_materials_specular\";\r\nexport * from \"./KHR_materials_ior\";\r\nexport * from \"./KHR_materials_variants\";\r\nexport * from \"./KHR_materials_transmission\";\r\nexport * from \"./KHR_materials_diffuse_transmission\";\r\nexport * from \"./KHR_materials_volume\";\r\nexport * from \"./KHR_materials_dispersion\";\r\nexport * from \"./KHR_materials_diffuse_roughness\";\r\nexport * from \"./KHR_mesh_quantization\";\r\nexport * from \"./KHR_texture_basisu\";\r\nexport * from \"./KHR_texture_transform\";\r\nexport * from \"./KHR_xmp_json_ld\";\r\nexport * from \"./KHR_animation_pointer\";\r\nexport * from \"./MSFT_audio_emitter\";\r\nexport * from \"./MSFT_lod\";\r\nexport * from \"./MSFT_minecraftMesh\";\r\nexport * from \"./MSFT_sRGBFactors\";\r\nexport * from \"./KHR_interactivity\";\r\nexport * from \"./KHR_node_visibility\";\r\nexport * from \"./KHR_node_selectability\";\r\nexport * from \"./KHR_node_hoverability\";\r\nexport * from \"./ExtrasAsMetadata\";\r\nexport * from \"./KHR_interactivity/index\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./objectModelMapping\";\r\nexport * from \"./EXT_lights_area\";\r\nexport * from \"./EXT_lights_image_based\";\r\nexport * from \"./EXT_mesh_gpu_instancing\";\r\nexport * from \"./EXT_meshopt_compression\";\r\nexport * from \"./EXT_texture_webp\";\r\nexport * from \"./EXT_texture_avif\";\r\nexport * from \"./EXT_lights_ies\";\r\nexport * from \"./KHR_draco_mesh_compression\";\r\nexport * from \"./KHR_lights_punctual\";\r\nexport * from \"./KHR_materials_pbrSpecularGlossiness\";\r\nexport * from \"./KHR_materials_unlit\";\r\nexport * from \"./KHR_materials_clearcoat\";\r\nexport * from \"./KHR_materials_iridescence\";\r\nexport * from \"./KHR_materials_anisotropy\";\r\nexport * from \"./KHR_materials_emissive_strength\";\r\nexport * from \"./KHR_materials_sheen\";\r\nexport * from \"./KHR_materials_specular\";\r\nexport * from \"./KHR_materials_ior\";\r\nexport * from \"./KHR_materials_variants\";\r\nexport * from \"./KHR_materials_transmission\";\r\nexport * from \"./KHR_materials_diffuse_transmission\";\r\nexport * from \"./KHR_materials_volume\";\r\nexport * from \"./KHR_materials_dispersion\";\r\nexport * from \"./KHR_materials_diffuse_roughness\";\r\nexport * from \"./KHR_mesh_quantization\";\r\nexport * from \"./KHR_texture_basisu\";\r\nexport * from \"./KHR_texture_transform\";\r\nexport * from \"./KHR_xmp_json_ld\";\r\nexport * from \"./KHR_animation_pointer\";\r\nexport * from \"./MSFT_audio_emitter\";\r\nexport * from \"./MSFT_lod\";\r\nexport * from \"./MSFT_minecraftMesh\";\r\nexport * from \"./MSFT_sRGBFactors\";\r\nexport * from \"./KHR_interactivity\";\r\nexport * from \"./KHR_node_visibility\";\r\nexport * from \"./KHR_node_selectability\";\r\nexport * from \"./KHR_node_hoverability\";\r\nexport * from \"./ExtrasAsMetadata\";\r\nexport * from \"./KHR_interactivity/index\";\r\n"]}
@@ -4,10 +4,6 @@ import type { Animation } from "@babylonjs/core/Animations/animation.js";
4
4
  import type { IAnimatable } from "@babylonjs/core/Animations/animatable.interface.js";
5
5
  import type { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
6
6
  import { Material } from "@babylonjs/core/Materials/material.js";
7
- import type { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
8
- import type { OpenPBRMaterial } from "@babylonjs/core/Materials/PBR/openPbrMaterial.js";
9
- import type { OpenPBRMaterialLoadingAdapter } from "./openPbrMaterialLoadingAdapter.js";
10
- import type { PBRMaterialLoadingAdapter } from "./pbrMaterialLoadingAdapter.js";
11
7
  import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
12
8
  import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
13
9
  import { Buffer, VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
@@ -67,6 +63,10 @@ export interface IAnimationTargetInfo {
67
63
  }
68
64
  /** @internal */
69
65
  export declare function LoadBoundingInfoFromPositionAccessor(accessor: IAccessor): Nullable<BoundingInfo>;
66
+ type PBRMaterialImplementation = {
67
+ materialClass: typeof Material;
68
+ adapterClass: new (material: Material) => IMaterialLoadingAdapter;
69
+ };
70
70
  /**
71
71
  * The glTF 2.0 loader
72
72
  */
@@ -97,9 +97,7 @@ export declare class GLTFLoader implements IGLTFLoader {
97
97
  private readonly _postSceneLoadActions;
98
98
  private readonly _materialAdapterCache;
99
99
  /** @internal */
100
- _pbrMaterialClass: typeof PBRMaterial | typeof OpenPBRMaterial | null;
101
- /** @internal */
102
- _pbrMaterialAdapterClass: typeof OpenPBRMaterialLoadingAdapter | typeof PBRMaterialLoadingAdapter | null;
100
+ _pbrMaterialImpl: Nullable<Readonly<PBRMaterialImplementation>> | false;
103
101
  /**
104
102
  * The default glTF sampler.
105
103
  */
@@ -191,9 +191,7 @@ export class GLTFLoader {
191
191
  this._postSceneLoadActions = new Array();
192
192
  this._materialAdapterCache = new WeakMap();
193
193
  /** @internal */
194
- this._pbrMaterialClass = null;
195
- /** @internal */
196
- this._pbrMaterialAdapterClass = null;
194
+ this._pbrMaterialImpl = null;
197
195
  this._parent = parent;
198
196
  }
199
197
  /**
@@ -205,8 +203,8 @@ export class GLTFLoader {
205
203
  _getOrCreateMaterialAdapter(material) {
206
204
  let adapter = this._materialAdapterCache.get(material);
207
205
  if (!adapter) {
208
- if (this._pbrMaterialAdapterClass) {
209
- adapter = new this._pbrMaterialAdapterClass(material);
206
+ if (this._pbrMaterialImpl) {
207
+ adapter = new this._pbrMaterialImpl.adapterClass(material);
210
208
  }
211
209
  else {
212
210
  throw new Error(`Appropriate material adapter class not found`);
@@ -290,17 +288,20 @@ export class GLTFLoader {
290
288
  this._fileName = fileName;
291
289
  this._allMaterialsDirtyRequired = false;
292
290
  await this._loadExtensionsAsync();
293
- if (this.parent.useOpenPBR) {
294
- const materialAdapterModule = await import("./openPbrMaterialLoadingAdapter.js");
295
- this._pbrMaterialAdapterClass = materialAdapterModule.OpenPBRMaterialLoadingAdapter;
296
- const materialModule = await import("@babylonjs/core/Materials/PBR/openPbrMaterial.js");
297
- this._pbrMaterialClass = materialModule.OpenPBRMaterial;
298
- }
299
- else {
300
- const materialAdapterModule = await import("./pbrMaterialLoadingAdapter.js");
301
- this._pbrMaterialAdapterClass = materialAdapterModule.PBRMaterialLoadingAdapter;
302
- const materialModule = await import("@babylonjs/core/Materials/PBR/pbrMaterial.js");
303
- this._pbrMaterialClass = materialModule.PBRMaterial;
291
+ // NOTE: Explicitly check _pbrMaterialImpl for null as a value of false means don't use PBR materials at all.
292
+ if (!this.parent.skipMaterials && this._pbrMaterialImpl == null) {
293
+ if (this.parent.useOpenPBR) {
294
+ this._pbrMaterialImpl = {
295
+ materialClass: (await import("@babylonjs/core/Materials/PBR/openPbrMaterial.js")).OpenPBRMaterial,
296
+ adapterClass: (await import("./openPbrMaterialLoadingAdapter.js")).OpenPBRMaterialLoadingAdapter,
297
+ };
298
+ }
299
+ else {
300
+ this._pbrMaterialImpl = {
301
+ materialClass: (await import("@babylonjs/core/Materials/PBR/pbrMaterial.js")).PBRMaterial,
302
+ adapterClass: (await import("./pbrMaterialLoadingAdapter.js")).PBRMaterialLoadingAdapter,
303
+ };
304
+ }
304
305
  }
305
306
  const loadingToReadyCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.READY]}`;
306
307
  const loadingToCompleteCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.COMPLETE]}`;
@@ -845,21 +846,23 @@ export class GLTFLoader {
845
846
  this._babylonScene._blockEntityCollection = false;
846
847
  });
847
848
  }));
848
- const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
849
- if (primitive.material == undefined) {
850
- let babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
851
- if (!babylonMaterial) {
852
- babylonMaterial = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
853
- this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
854
- this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;
855
- }
856
- babylonMesh.material = babylonMaterial;
857
- }
858
- else if (!this.parent.skipMaterials) {
859
- const material = ArrayItem.Get(`${context}/material`, this._gltf.materials, primitive.material);
860
- promises.push(this._loadMaterialAsync(`/materials/${material.index}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {
849
+ if (!this.parent.skipMaterials) {
850
+ const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
851
+ if (primitive.material == undefined) {
852
+ let babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
853
+ if (!babylonMaterial) {
854
+ babylonMaterial = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
855
+ this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
856
+ this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;
857
+ }
861
858
  babylonMesh.material = babylonMaterial;
862
- }));
859
+ }
860
+ else {
861
+ const material = ArrayItem.Get(`${context}/material`, this._gltf.materials, primitive.material);
862
+ promises.push(this._loadMaterialAsync(`/materials/${material.index}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {
863
+ babylonMesh.material = babylonMaterial;
864
+ }));
865
+ }
863
866
  }
864
867
  promise = Promise.all(promises);
865
868
  if (shouldInstance) {
@@ -1763,8 +1766,6 @@ export class GLTFLoader {
1763
1766
  if (!babylonData) {
1764
1767
  this.logOpen(`${context} ${material.name || ""}`);
1765
1768
  const babylonMaterial = this.createMaterial(context, material, babylonDrawMode);
1766
- // Create the adapter for this material immediately after creation
1767
- this._getOrCreateMaterialAdapter(babylonMaterial);
1768
1769
  babylonData = {
1769
1770
  babylonMaterial: babylonMaterial,
1770
1771
  babylonMeshes: [],
@@ -1790,15 +1791,15 @@ export class GLTFLoader {
1790
1791
  });
1791
1792
  }
1792
1793
  _createDefaultMaterial(name, babylonDrawMode) {
1793
- if (!this._pbrMaterialClass) {
1794
+ if (!this._pbrMaterialImpl) {
1794
1795
  throw new Error("PBR Material class not loaded");
1795
1796
  }
1796
1797
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1797
- const babylonMaterial = new this._pbrMaterialClass(name, this._babylonScene);
1798
+ const babylonMaterial = new this._pbrMaterialImpl.materialClass(name, this._babylonScene);
1798
1799
  babylonMaterial._parentContainer = this._assetContainer;
1799
1800
  this._babylonScene._blockEntityCollection = false;
1800
1801
  babylonMaterial.fillMode = babylonDrawMode;
1801
- babylonMaterial.transparencyMode = this._pbrMaterialClass.MATERIAL_OPAQUE;
1802
+ babylonMaterial.transparencyMode = this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE;
1802
1803
  // Create the material adapter and set some default properties.
1803
1804
  // We don't need to wait for the promise to resolve here.
1804
1805
  const adapter = this._getOrCreateMaterialAdapter(babylonMaterial);
@@ -1816,9 +1817,9 @@ export class GLTFLoader {
1816
1817
  * @returns The Babylon material
1817
1818
  */
1818
1819
  createMaterial(context, material, babylonDrawMode) {
1819
- const extensionPromise = this._extensionsCreateMaterial(context, material, babylonDrawMode);
1820
- if (extensionPromise) {
1821
- return extensionPromise;
1820
+ const extensionMaterial = this._extensionsCreateMaterial(context, material, babylonDrawMode);
1821
+ if (extensionMaterial) {
1822
+ return extensionMaterial;
1822
1823
  }
1823
1824
  const name = material.name || `material${material.index}`;
1824
1825
  const babylonMaterial = this._createDefaultMaterial(name, babylonDrawMode);
@@ -1911,7 +1912,7 @@ export class GLTFLoader {
1911
1912
  * @param babylonMaterial The Babylon material
1912
1913
  */
1913
1914
  loadMaterialAlphaProperties(context, material, babylonMaterial) {
1914
- if (!this._pbrMaterialClass) {
1915
+ if (!this._pbrMaterialImpl) {
1915
1916
  throw new Error(`${context}: Material type not supported`);
1916
1917
  }
1917
1918
  const adapter = this._getOrCreateMaterialAdapter(babylonMaterial);
@@ -1919,12 +1920,12 @@ export class GLTFLoader {
1919
1920
  const alphaMode = material.alphaMode || "OPAQUE" /* MaterialAlphaMode.OPAQUE */;
1920
1921
  switch (alphaMode) {
1921
1922
  case "OPAQUE" /* MaterialAlphaMode.OPAQUE */: {
1922
- babylonMaterial.transparencyMode = this._pbrMaterialClass.MATERIAL_OPAQUE;
1923
+ babylonMaterial.transparencyMode = this._pbrMaterialImpl.materialClass.MATERIAL_OPAQUE;
1923
1924
  babylonMaterial.alpha = 1.0; // Force alpha to 1.0 for opaque mode.
1924
1925
  break;
1925
1926
  }
1926
1927
  case "MASK" /* MaterialAlphaMode.MASK */: {
1927
- babylonMaterial.transparencyMode = this._pbrMaterialClass.MATERIAL_ALPHATEST;
1928
+ babylonMaterial.transparencyMode = this._pbrMaterialImpl.materialClass.MATERIAL_ALPHATEST;
1928
1929
  adapter.alphaCutOff = material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff;
1929
1930
  if (baseColorTexture) {
1930
1931
  baseColorTexture.hasAlpha = true;
@@ -1932,7 +1933,7 @@ export class GLTFLoader {
1932
1933
  break;
1933
1934
  }
1934
1935
  case "BLEND" /* MaterialAlphaMode.BLEND */: {
1935
- babylonMaterial.transparencyMode = this._pbrMaterialClass.MATERIAL_ALPHABLEND;
1936
+ babylonMaterial.transparencyMode = this._pbrMaterialImpl.materialClass.MATERIAL_ALPHABLEND;
1936
1937
  if (baseColorTexture) {
1937
1938
  baseColorTexture.hasAlpha = true;
1938
1939
  adapter.useAlphaFromBaseColorTexture = true;