@onerjs/loaders 8.26.9 → 8.27.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.
@@ -0,0 +1,43 @@
1
+ import type { Nullable } from "@onerjs/core/types.js";
2
+ import type { Material } from "@onerjs/core/Materials/material.js";
3
+ import type { IMaterial } from "../glTFLoaderInterfaces.js";
4
+ import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
5
+ import { GLTFLoader } from "../glTFLoader.js";
6
+ declare module "../../glTFFileLoader.js" {
7
+ interface GLTFLoaderExtensionOptions {
8
+ /**
9
+ * Defines options for the KHR_materials_openpbr extension.
10
+ */
11
+ ["KHR_materials_openpbr"]: {};
12
+ }
13
+ }
14
+ /**
15
+ * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_openpbr/README.md)
16
+ * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)
17
+ */
18
+ export declare class KHR_materials_openpbr implements IGLTFLoaderExtension {
19
+ /**
20
+ * The name of this extension.
21
+ */
22
+ readonly name = "KHR_materials_openpbr";
23
+ /**
24
+ * Defines whether this extension is enabled.
25
+ */
26
+ enabled: boolean;
27
+ /**
28
+ * Defines a number that determines the order the extensions are applied.
29
+ */
30
+ order: number;
31
+ private _loader;
32
+ /**
33
+ * @internal
34
+ */
35
+ constructor(loader: GLTFLoader);
36
+ /** @internal */
37
+ dispose(): void;
38
+ /**
39
+ * @internal
40
+ */
41
+ loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>>;
42
+ private _loadOpenPBRPropertiesAsync;
43
+ }
@@ -0,0 +1,50 @@
1
+ import { GLTFLoader } from "../glTFLoader.js";
2
+ import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
3
+ const NAME = "KHR_materials_openpbr";
4
+ /**
5
+ * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_openpbr/README.md)
6
+ * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)
7
+ */
8
+ // eslint-disable-next-line @typescript-eslint/naming-convention
9
+ export class KHR_materials_openpbr {
10
+ /**
11
+ * @internal
12
+ */
13
+ constructor(loader) {
14
+ /**
15
+ * The name of this extension.
16
+ */
17
+ this.name = NAME;
18
+ /**
19
+ * Defines a number that determines the order the extensions are applied.
20
+ */
21
+ this.order = 100;
22
+ this._loader = loader;
23
+ this.enabled = this._loader.isExtensionUsed(NAME);
24
+ }
25
+ /** @internal */
26
+ dispose() {
27
+ this._loader = null;
28
+ }
29
+ /**
30
+ * @internal
31
+ */
32
+ // eslint-disable-next-line no-restricted-syntax
33
+ loadMaterialPropertiesAsync(context, material, babylonMaterial) {
34
+ return GLTFLoader.LoadExtensionAsync(context, material, this.name, async (extensionContext, extension) => {
35
+ const promises = new Array();
36
+ promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
37
+ promises.push(this._loadOpenPBRPropertiesAsync(extensionContext, extension, babylonMaterial));
38
+ await Promise.all(promises);
39
+ });
40
+ }
41
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
42
+ _loadOpenPBRPropertiesAsync(context, properties, babylonMaterial) {
43
+ const promises = new Array();
44
+ // eslint-disable-next-line github/no-then
45
+ return Promise.all(promises).then(() => { });
46
+ }
47
+ }
48
+ unregisterGLTFExtension(NAME);
49
+ registerGLTFExtension(NAME, true, (loader) => new KHR_materials_openpbr(loader));
50
+ //# sourceMappingURL=KHR_materials_openpbr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KHR_materials_openpbr.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_openpbr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,uBAAuB,CAAC;AAarC;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAkB9B;;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,2BAA2B,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YAC9F,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,2BAA2B,CAAC,OAAe,EAAE,UAAkC,EAAE,eAAyB;QAC9G,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,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,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsClearcoat } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_openpbr\";\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_openpbr extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_openpbr\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_openpbr/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_openpbr implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 100;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @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._loadOpenPBRPropertiesAsync(extensionContext, extension, babylonMaterial));\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 _loadOpenPBRPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise<void> {\r\n const promises = new Array<Promise<any>>();\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_openpbr(loader));\r\n"]}
@@ -8,6 +8,7 @@ export * from "./EXT_texture_avif.js";
8
8
  export * from "./EXT_lights_ies.js";
9
9
  export * from "./KHR_draco_mesh_compression.js";
10
10
  export * from "./KHR_lights_punctual.js";
11
+ export * from "./KHR_materials_openpbr.js";
11
12
  export * from "./KHR_materials_pbrSpecularGlossiness.js";
12
13
  export * from "./KHR_materials_unlit.js";
13
14
  export * from "./KHR_materials_clearcoat.js";
@@ -9,6 +9,7 @@ export * from "./EXT_texture_avif.js";
9
9
  export * from "./EXT_lights_ies.js";
10
10
  export * from "./KHR_draco_mesh_compression.js";
11
11
  export * from "./KHR_lights_punctual.js";
12
+ export * from "./KHR_materials_openpbr.js";
12
13
  export * from "./KHR_materials_pbrSpecularGlossiness.js";
13
14
  export * from "./KHR_materials_unlit.js";
14
15
  export * from "./KHR_materials_clearcoat.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,yBAAyB,CAAC;AACxC,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_openpbr\";\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"]}
@@ -291,6 +291,7 @@ export declare class GLTFLoader implements IGLTFLoader {
291
291
  /**
292
292
  * @internal
293
293
  */
294
+ private _ensurePbrMaterialClassesAsync;
294
295
  _loadMaterialAsync(context: string, material: IMaterial, babylonMesh: Nullable<Mesh>, babylonDrawMode: number, assign?: (babylonMaterial: Material) => void): Promise<Material>;
295
296
  private _createDefaultMaterial;
296
297
  /**
@@ -291,18 +291,6 @@ export class GLTFLoader {
291
291
  this._fileName = fileName;
292
292
  this._allMaterialsDirtyRequired = false;
293
293
  await this._loadExtensionsAsync();
294
- if (this.parent.useOpenPBR) {
295
- const materialAdapterModule = await import("./openPbrMaterialLoadingAdapter.js");
296
- this._pbrMaterialAdapterClass = materialAdapterModule.OpenPBRMaterialLoadingAdapter;
297
- const materialModule = await import("@onerjs/core/Materials/PBR/openPbrMaterial.js");
298
- this._pbrMaterialClass = materialModule.OpenPBRMaterial;
299
- }
300
- else {
301
- const materialAdapterModule = await import("./pbrMaterialLoadingAdapter.js");
302
- this._pbrMaterialAdapterClass = materialAdapterModule.PBRMaterialLoadingAdapter;
303
- const materialModule = await import("@onerjs/core/Materials/PBR/pbrMaterial.js");
304
- this._pbrMaterialClass = materialModule.PBRMaterial;
305
- }
306
294
  const loadingToReadyCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.READY]}`;
307
295
  const loadingToCompleteCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.COMPLETE]}`;
308
296
  this._parent._startPerformanceCounter(loadingToReadyCounterName);
@@ -863,13 +851,19 @@ export class GLTFLoader {
863
851
  }));
864
852
  const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
865
853
  if (primitive.material == undefined) {
866
- let babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
854
+ const babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
867
855
  if (!babylonMaterial) {
868
- babylonMaterial = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
869
- this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
870
- this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;
856
+ promises.push((async () => {
857
+ await this._ensurePbrMaterialClassesAsync();
858
+ const created = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
859
+ this._parent.onMaterialLoadedObservable.notifyObservers(created);
860
+ this._defaultBabylonMaterialData[babylonDrawMode] = created;
861
+ babylonMesh.material = created;
862
+ })());
863
+ }
864
+ else {
865
+ babylonMesh.material = babylonMaterial;
871
866
  }
872
- babylonMesh.material = babylonMaterial;
873
867
  }
874
868
  else if (!this.parent.skipMaterials) {
875
869
  const material = ArrayItem.Get(`${context}/material`, this._gltf.materials, primitive.material);
@@ -1772,11 +1766,30 @@ export class GLTFLoader {
1772
1766
  /**
1773
1767
  * @internal
1774
1768
  */
1775
- _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign = () => { }) {
1769
+ async _ensurePbrMaterialClassesAsync() {
1770
+ if (!this._pbrMaterialClass || !this._pbrMaterialAdapterClass) {
1771
+ const openpbrExt = this._extensions.find((extension) => extension.name === "KHR_materials_openpbr");
1772
+ if (this.parent.useOpenPBR || openpbrExt) {
1773
+ const materialAdapterModule = await import("./openPbrMaterialLoadingAdapter.js");
1774
+ this._pbrMaterialAdapterClass = materialAdapterModule.OpenPBRMaterialLoadingAdapter;
1775
+ const materialModule = await import("@onerjs/core/Materials/PBR/openPbrMaterial.js");
1776
+ this._pbrMaterialClass = materialModule.OpenPBRMaterial;
1777
+ }
1778
+ else {
1779
+ const materialAdapterModule = await import("./pbrMaterialLoadingAdapter.js");
1780
+ this._pbrMaterialAdapterClass = materialAdapterModule.PBRMaterialLoadingAdapter;
1781
+ const materialModule = await import("@onerjs/core/Materials/PBR/pbrMaterial.js");
1782
+ this._pbrMaterialClass = materialModule.PBRMaterial;
1783
+ }
1784
+ }
1785
+ }
1786
+ async _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign = () => { }) {
1776
1787
  const extensionPromise = this._extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign);
1777
1788
  if (extensionPromise) {
1778
- return extensionPromise;
1789
+ return await extensionPromise;
1779
1790
  }
1791
+ // Ensure PBR/OpenPBR classes are available before creating materials
1792
+ await this._ensurePbrMaterialClassesAsync();
1780
1793
  material._data = material._data || {};
1781
1794
  let babylonData = material._data[babylonDrawMode];
1782
1795
  if (!babylonData) {
@@ -1804,9 +1817,8 @@ export class GLTFLoader {
1804
1817
  });
1805
1818
  }
1806
1819
  assign(babylonData.babylonMaterial);
1807
- return babylonData.promise.then(() => {
1808
- return babylonData.babylonMaterial;
1809
- });
1820
+ await babylonData.promise;
1821
+ return babylonData.babylonMaterial;
1810
1822
  }
1811
1823
  _createDefaultMaterial(name, babylonDrawMode) {
1812
1824
  if (!this._pbrMaterialClass) {