@babylonjs/loaders 7.53.1 → 7.53.3

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.
@@ -1,5 +1,5 @@
1
1
  import { Vector2 } from "@babylonjs/core/Maths/math.vector.js";
2
- import type { ISceneLoaderPluginAsync, ISceneLoaderPluginFactory, ISceneLoaderPlugin, ISceneLoaderAsyncResult } from "@babylonjs/core/Loading/sceneLoader.js";
2
+ import type { ISceneLoaderPluginAsync, ISceneLoaderPluginFactory, ISceneLoaderPlugin, ISceneLoaderAsyncResult, SceneLoaderPluginOptions } from "@babylonjs/core/Loading/sceneLoader.js";
3
3
  import { AssetContainer } from "@babylonjs/core/assetContainer.js";
4
4
  import type { Scene } from "@babylonjs/core/scene.js";
5
5
  import { OBJFileLoaderMetadata } from "./objFileLoader.metadata";
@@ -9,7 +9,7 @@ declare module "@babylonjs/core/Loading/sceneLoader.js" {
9
9
  /**
10
10
  * Defines options for the obj loader.
11
11
  */
12
- [OBJFileLoaderMetadata.name]: {};
12
+ [OBJFileLoaderMetadata.name]: Partial<OBJLoadingOptions>;
13
13
  }
14
14
  }
15
15
  /**
@@ -76,7 +76,7 @@ export declare class OBJFileLoader implements ISceneLoaderPluginAsync, ISceneLoa
76
76
  *
77
77
  * @param loadingOptions options for loading and parsing OBJ/MTL files.
78
78
  */
79
- constructor(loadingOptions?: OBJLoadingOptions);
79
+ constructor(loadingOptions?: Partial<Readonly<OBJLoadingOptions>>);
80
80
  private static get _DefaultLoadingOptions();
81
81
  /**
82
82
  * Calls synchronously the MTL file attached to this obj.
@@ -90,11 +90,8 @@ export declare class OBJFileLoader implements ISceneLoaderPluginAsync, ISceneLoa
90
90
  * @param onFailure
91
91
  */
92
92
  private _loadMTL;
93
- /**
94
- * Instantiates a OBJ file loader plugin.
95
- * @returns the created plugin
96
- */
97
- createPlugin(): ISceneLoaderPluginAsync | ISceneLoaderPlugin;
93
+ /** @internal */
94
+ createPlugin(options: SceneLoaderPluginOptions): ISceneLoaderPluginAsync | ISceneLoaderPlugin;
98
95
  /**
99
96
  * If the data string can be loaded directly.
100
97
  * @returns if the data can be loaded directly
@@ -35,7 +35,7 @@ export class OBJFileLoader {
35
35
  */
36
36
  this.extensions = OBJFileLoaderMetadata.extensions;
37
37
  this._assetContainer = null;
38
- this._loadingOptions = loadingOptions || OBJFileLoader._DefaultLoadingOptions;
38
+ this._loadingOptions = { ...OBJFileLoader._DefaultLoadingOptions, ...(loadingOptions ?? {}) };
39
39
  }
40
40
  static get _DefaultLoadingOptions() {
41
41
  return {
@@ -71,12 +71,9 @@ export class OBJFileLoader {
71
71
  onFailure(pathOfFile, exception);
72
72
  });
73
73
  }
74
- /**
75
- * Instantiates a OBJ file loader plugin.
76
- * @returns the created plugin
77
- */
78
- createPlugin() {
79
- return new OBJFileLoader(OBJFileLoader._DefaultLoadingOptions);
74
+ /** @internal */
75
+ createPlugin(options) {
76
+ return new OBJFileLoader(options[OBJFileLoaderMetadata.name]);
80
77
  }
81
78
  /**
82
79
  * If the data string can be loaded directly.
@@ -1 +1 @@
1
- {"version":3,"file":"objFileLoader.js","sourceRoot":"","sources":["../../../../dev/loaders/src/OBJ/objFileLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,6CAA+B;AACjD,OAAO,EAAE,KAAK,EAAE,sCAAwB;AAGxC,OAAO,EAAE,yBAAyB,EAAE,+CAAiC;AACrE,OAAO,EAAE,cAAc,EAAE,0CAA4B;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,sDAAwC;AAYnE;;;GAGG;AACH,MAAM,OAAO,aAAa;IAStB;;OAEG;IACI,MAAM,KAAK,gBAAgB;QAC9B,OAAO,aAAa,CAAC,gBAAgB,CAAC;IAC1C,CAAC;IAEM,MAAM,KAAK,gBAAgB,CAAC,KAAc;QAC7C,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAiDD;;;;OAIG;IACH,YAAY,cAAkC;QAlB9C;;WAEG;QACa,SAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;QAClD;;WAEG;QACa,eAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC;QAEtD,oBAAe,GAA6B,IAAI,CAAC;QAUrD,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,aAAa,CAAC,sBAAsB,CAAC;IAClF,CAAC;IAEO,MAAM,KAAK,sBAAsB;QACrC,OAAO;YACH,cAAc,EAAE,aAAa,CAAC,eAAe;YAC7C,eAAe,EAAE,aAAa,CAAC,gBAAgB;YAC/C,kBAAkB,EAAE,aAAa,CAAC,oBAAoB;YACtD,OAAO,EAAE,aAAa,CAAC,QAAQ;YAC/B,cAAc,EAAE,aAAa,CAAC,gBAAgB;YAC9C,gEAAgE;YAChE,SAAS,EAAE,aAAa,CAAC,UAAU;YACnC,4BAA4B,EAAE,aAAa,CAAC,+BAA+B;YAC3E,cAAc,EAAE,aAAa,CAAC,gBAAgB;YAC9C,aAAa,EAAE,aAAa,CAAC,cAAc;YAC3C,iBAAiB,EAAE,aAAa,CAAC,mBAAmB;SACvD,CAAC;IACN,CAAC;IAED;;;;;;;;;;OAUG;IACK,QAAQ,CACZ,GAAW,EACX,OAAe,EACf,SAAwE,EACxE,SAAwD;QAExD,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,GAAG,GAAG,CAAC;QAEjC,6DAA6D;QAC7D,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,OAAgC,EAAE,SAAe,EAAE,EAAE;YACrH,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,YAAY;QACR,OAAO,IAAI,aAAa,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,aAAa;QAChB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACI,eAAe,CAAC,WAAgB,EAAE,KAAY,EAAE,IAAS,EAAE,OAAe;QAC7E,8BAA8B;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvE,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,EAAE;gBACb,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,EAAE;gBAClB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,EAAE;gBACV,cAAc,EAAE,EAAE;aACrB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACI,SAAS,CAAC,KAAY,EAAE,IAAY,EAAE,OAAe;QACxD,kBAAkB;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC9D,cAAc;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACI,uBAAuB,CAAC,KAAY,EAAE,IAAY,EAAE,OAAe;QACtE,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;aAClD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,QAAQ,EAAE,CAAC;oBACX,YAAY;oBACZ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBAC9C,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAEnC,WAAW;wBACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;wBAC9C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;4BACnB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gCACtC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC/B,CAAC;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;YACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,MAAM,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;;;OASG;IACK,WAAW,CAAC,WAAgB,EAAE,KAAY,EAAE,IAAY,EAAE,OAAe;QAC7E,IAAI,UAAU,GAAW,EAAE,CAAC,CAAC,iCAAiC;QAC9D,MAAM,oBAAoB,GAAkB,IAAI,aAAa,EAAE,CAAC;QAChE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAgB,EAAE,CAAC,CAAC,sBAAsB;QAElE,gBAAgB;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzC,gBAAgB;QAChB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7F,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,QAAgB,EAAE,EAAE;YACnF,UAAU,GAAG,QAAQ,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,kCAAkC;QAClC,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;YAC3D,6BAA6B;YAC7B,WAAW,CAAC,IAAI,CACZ,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CACT,UAAU,EACV,OAAO,EACP,CAAC,UAAU,EAAE,EAAE;oBACX,IAAI,CAAC;wBACD,4CAA4C;wBAC5C,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;wBAChF,8CAA8C;wBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7D,0DAA0D;4BAC1D,IAAI,UAAU,GAAG,CAAC,CAAC;4BACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;4BACpB,IAAI,MAAM,CAAC;4BAEX,yDAAyD;4BACzD,6BAA6B;4BAC7B,oDAAoD;4BACpD,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gCAC/F,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCACtB,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;4BAC5B,CAAC;4BACD,wCAAwC;4BACxC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCACzC,0CAA0C;gCAC1C,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;4BAChD,CAAC;iCAAM,CAAC;gCACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCACvC,gEAAgE;oCAChE,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oCACnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;oCAEzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;wCAC1B,6CAA6C;wCAC7C,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;oCAChC,CAAC;gCACL,CAAC;4BACL,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,CAAC;oBACd,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,KAAK,CAAC,IAAI,CAAC,+BAA+B,UAAU,GAAG,CAAC,CAAC;wBACzD,IAAI,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAC;4BACpD,OAAO,EAAE,CAAC;wBACd,CAAC;6BAAM,CAAC;4BACJ,MAAM,CAAC,CAAC,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC;gBACL,CAAC,EACD,CAAC,UAAkB,EAAE,SAAe,EAAE,EAAE;oBACpC,KAAK,CAAC,IAAI,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;oBAC1D,IAAI,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAC;wBACpD,OAAO,EAAE,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,SAAS,CAAC,CAAC;oBACtB,CAAC;gBACL,CAAC,CACJ,CAAC;YACN,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QACD,+BAA+B;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;YAE7F,yGAAyG;YACzG,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACf,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC5E,wFAAwF;oBACxF,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7E,IAAI,SAAS,EAAE,CAAC;wBACZ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC;oBAC/C,CAAC;oBACD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;oBAClD,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;;AAxUD;;GAEG;AACW,8BAAgB,GAAG,IAAI,AAAP,CAAQ;AACtC;;GAEG;AACW,sBAAQ,GAAG,KAAK,AAAR,CAAS;AAY/B;;GAEG;AACW,kCAAoB,GAAG,KAAK,AAAR,CAAS;AAC3C;;GAEG;AACW,6BAAe,GAAG,KAAK,AAAR,CAAS;AACtC;;;GAGG;AACW,8BAAgB,GAAG,KAAK,AAAR,CAAS;AACvC;;GAEG;AACW,wBAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,AAApB,CAAqB;AAC7C;;GAEG;AACW,4BAAc,GAAG,KAAK,AAAR,CAAS;AAErC;;;;GAIG;AACW,6CAA+B,GAAG,IAAI,AAAP,CAAQ;AAErD;;GAEG;AACW,iCAAmB,GAAG,KAAK,AAAR,CAAS;AAwR9C,0CAA0C;AAC1C,yBAAyB,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { ISceneLoaderPluginAsync, ISceneLoaderPluginFactory, ISceneLoaderPlugin, ISceneLoaderAsyncResult } from \"core/Loading/sceneLoader\";\r\nimport { RegisterSceneLoaderPlugin } from \"core/Loading/sceneLoader\";\r\nimport { AssetContainer } from \"core/assetContainer\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { WebRequest } from \"core/Misc/webRequest\";\r\nimport { OBJFileLoaderMetadata } from \"./objFileLoader.metadata\";\r\nimport { MTLFileLoader } from \"./mtlFileLoader\";\r\nimport type { OBJLoadingOptions } from \"./objLoadingOptions\";\r\nimport { SolidParser } from \"./solidParser\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\n\r\ndeclare module \"core/Loading/sceneLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n export interface SceneLoaderPluginOptions {\r\n /**\r\n * Defines options for the obj loader.\r\n */\r\n [OBJFileLoaderMetadata.name]: {};\r\n }\r\n}\r\n\r\n/**\r\n * OBJ file type loader.\r\n * This is a babylon scene loader plugin.\r\n */\r\nexport class OBJFileLoader implements ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\r\n /**\r\n * Defines if UVs are optimized by default during load.\r\n */\r\n public static OPTIMIZE_WITH_UV = true;\r\n /**\r\n * Invert model on y-axis (does a model scaling inversion)\r\n */\r\n public static INVERT_Y = false;\r\n /**\r\n * Invert Y-Axis of referenced textures on load\r\n */\r\n public static get INVERT_TEXTURE_Y() {\r\n return MTLFileLoader.INVERT_TEXTURE_Y;\r\n }\r\n\r\n public static set INVERT_TEXTURE_Y(value: boolean) {\r\n MTLFileLoader.INVERT_TEXTURE_Y = value;\r\n }\r\n\r\n /**\r\n * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.\r\n */\r\n public static IMPORT_VERTEX_COLORS = false;\r\n /**\r\n * Compute the normals for the model, even if normals are present in the file.\r\n */\r\n public static COMPUTE_NORMALS = false;\r\n /**\r\n * Optimize the normals for the model. Lighting can be uneven if you use OptimizeWithUV = true because new vertices can be created for the same location if they pertain to different faces.\r\n * Using OptimizehNormals = true will help smoothing the lighting by averaging the normals of those vertices.\r\n */\r\n public static OPTIMIZE_NORMALS = false;\r\n /**\r\n * Defines custom scaling of UV coordinates of loaded meshes.\r\n */\r\n public static UV_SCALING = new Vector2(1, 1);\r\n /**\r\n * Skip loading the materials even if defined in the OBJ file (materials are ignored).\r\n */\r\n public static SKIP_MATERIALS = false;\r\n\r\n /**\r\n * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.\r\n *\r\n * Defaults to true for backwards compatibility.\r\n */\r\n public static MATERIAL_LOADING_FAILS_SILENTLY = true;\r\n\r\n /**\r\n * Loads assets without handedness conversions. This flag is for compatibility. Use it only if absolutely required. Defaults to false.\r\n */\r\n public static USE_LEGACY_BEHAVIOR = false;\r\n\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public readonly name = OBJFileLoaderMetadata.name;\r\n /**\r\n * Defines the extension the plugin is able to load.\r\n */\r\n public readonly extensions = OBJFileLoaderMetadata.extensions;\r\n\r\n private _assetContainer: Nullable<AssetContainer> = null;\r\n\r\n private _loadingOptions: OBJLoadingOptions;\r\n\r\n /**\r\n * Creates loader for .OBJ files\r\n *\r\n * @param loadingOptions options for loading and parsing OBJ/MTL files.\r\n */\r\n constructor(loadingOptions?: OBJLoadingOptions) {\r\n this._loadingOptions = loadingOptions || OBJFileLoader._DefaultLoadingOptions;\r\n }\r\n\r\n private static get _DefaultLoadingOptions(): OBJLoadingOptions {\r\n return {\r\n computeNormals: OBJFileLoader.COMPUTE_NORMALS,\r\n optimizeNormals: OBJFileLoader.OPTIMIZE_NORMALS,\r\n importVertexColors: OBJFileLoader.IMPORT_VERTEX_COLORS,\r\n invertY: OBJFileLoader.INVERT_Y,\r\n invertTextureY: OBJFileLoader.INVERT_TEXTURE_Y,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n UVScaling: OBJFileLoader.UV_SCALING,\r\n materialLoadingFailsSilently: OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY,\r\n optimizeWithUV: OBJFileLoader.OPTIMIZE_WITH_UV,\r\n skipMaterials: OBJFileLoader.SKIP_MATERIALS,\r\n useLegacyBehavior: OBJFileLoader.USE_LEGACY_BEHAVIOR,\r\n };\r\n }\r\n\r\n /**\r\n * Calls synchronously the MTL file attached to this obj.\r\n * Load function or importMesh function don't enable to load 2 files in the same time asynchronously.\r\n * Without this function materials are not displayed in the first frame (but displayed after).\r\n * In consequence it is impossible to get material information in your HTML file\r\n *\r\n * @param url The URL of the MTL file\r\n * @param rootUrl defines where to load data from\r\n * @param onSuccess Callback function to be called when the MTL file is loaded\r\n * @param onFailure\r\n */\r\n private _loadMTL(\r\n url: string,\r\n rootUrl: string,\r\n onSuccess: (response: string | ArrayBuffer, responseUrl?: string) => any,\r\n onFailure: (pathOfFile: string, exception?: any) => void\r\n ) {\r\n //The complete path to the mtl file\r\n const pathOfFile = rootUrl + url;\r\n\r\n // Loads through the babylon tools to allow fileInput search.\r\n Tools.LoadFile(pathOfFile, onSuccess, undefined, undefined, false, (request?: WebRequest | undefined, exception?: any) => {\r\n onFailure(pathOfFile, exception);\r\n });\r\n }\r\n\r\n /**\r\n * Instantiates a OBJ file loader plugin.\r\n * @returns the created plugin\r\n */\r\n createPlugin(): ISceneLoaderPluginAsync | ISceneLoaderPlugin {\r\n return new OBJFileLoader(OBJFileLoader._DefaultLoadingOptions);\r\n }\r\n\r\n /**\r\n * If the data string can be loaded directly.\r\n * @returns if the data can be loaded directly\r\n */\r\n public canDirectLoad(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Imports one or more meshes from the loaded OBJ data and adds them to the scene\r\n * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file\r\n * @param scene the scene the meshes should be added to\r\n * @param data the OBJ data to load\r\n * @param rootUrl root url to load from\r\n * @returns a promise containing the loaded meshes, particles, skeletons and animations\r\n */\r\n public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string): Promise<ISceneLoaderAsyncResult> {\r\n //get the meshes from OBJ file\r\n return this._parseSolid(meshesNames, scene, data, rootUrl).then((meshes) => {\r\n return {\r\n meshes: meshes,\r\n particleSystems: [],\r\n skeletons: [],\r\n animationGroups: [],\r\n transformNodes: [],\r\n geometries: [],\r\n lights: [],\r\n spriteManagers: [],\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Imports all objects from the loaded OBJ data and adds them to the scene\r\n * @param scene the scene the objects should be added to\r\n * @param data the OBJ data to load\r\n * @param rootUrl root url to load from\r\n * @returns a promise which completes when objects have been loaded to the scene\r\n */\r\n public loadAsync(scene: Scene, data: string, rootUrl: string): Promise<void> {\r\n //Get the 3D model\r\n return this.importMeshAsync(null, scene, data, rootUrl).then(() => {\r\n // return void\r\n });\r\n }\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @returns The loaded asset container\r\n */\r\n public loadAssetContainerAsync(scene: Scene, data: string, rootUrl: string): Promise<AssetContainer> {\r\n const container = new AssetContainer(scene);\r\n this._assetContainer = container;\r\n\r\n return this.importMeshAsync(null, scene, data, rootUrl)\r\n .then((result) => {\r\n result.meshes.forEach((mesh) => container.meshes.push(mesh));\r\n result.meshes.forEach((mesh) => {\r\n const material = mesh.material;\r\n if (material) {\r\n // Materials\r\n if (container.materials.indexOf(material) == -1) {\r\n container.materials.push(material);\r\n\r\n // Textures\r\n const textures = material.getActiveTextures();\r\n textures.forEach((t) => {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n this._assetContainer = null;\r\n return container;\r\n })\r\n .catch((ex) => {\r\n this._assetContainer = null;\r\n throw ex;\r\n });\r\n }\r\n\r\n /**\r\n * Read the OBJ file and create an Array of meshes.\r\n * Each mesh contains all information given by the OBJ and the MTL file.\r\n * i.e. vertices positions and indices, optional normals values, optional UV values, optional material\r\n * @param meshesNames defines a string or array of strings of the mesh names that should be loaded from the file\r\n * @param scene defines the scene where are displayed the data\r\n * @param data defines the content of the obj file\r\n * @param rootUrl defines the path to the folder\r\n * @returns the list of loaded meshes\r\n */\r\n private _parseSolid(meshesNames: any, scene: Scene, data: string, rootUrl: string): Promise<Array<AbstractMesh>> {\r\n let fileToLoad: string = \"\"; //The name of the mtlFile to load\r\n const materialsFromMTLFile: MTLFileLoader = new MTLFileLoader();\r\n const materialToUse: string[] = [];\r\n const babylonMeshesArray: Array<Mesh> = []; //The mesh for babylon\r\n\r\n // Sanitize data\r\n data = data.replace(/#.*$/gm, \"\").trim();\r\n\r\n // Main function\r\n const solidParser = new SolidParser(materialToUse, babylonMeshesArray, this._loadingOptions);\r\n\r\n solidParser.parse(meshesNames, data, scene, this._assetContainer, (fileName: string) => {\r\n fileToLoad = fileName;\r\n });\r\n\r\n // load the materials\r\n const mtlPromises: Array<Promise<void>> = [];\r\n // Check if we have a file to load\r\n if (fileToLoad !== \"\" && !this._loadingOptions.skipMaterials) {\r\n //Load the file synchronously\r\n mtlPromises.push(\r\n new Promise((resolve, reject) => {\r\n this._loadMTL(\r\n fileToLoad,\r\n rootUrl,\r\n (dataLoaded) => {\r\n try {\r\n //Create materials thanks MTLLoader function\r\n materialsFromMTLFile.parseMTL(scene, dataLoaded, rootUrl, this._assetContainer);\r\n //Look at each material loaded in the mtl file\r\n for (let n = 0; n < materialsFromMTLFile.materials.length; n++) {\r\n //Three variables to get all meshes with the same material\r\n let startIndex = 0;\r\n const _indices = [];\r\n let _index;\r\n\r\n //The material from MTL file is used in the meshes loaded\r\n //Push the indice in an array\r\n //Check if the material is not used for another mesh\r\n while ((_index = materialToUse.indexOf(materialsFromMTLFile.materials[n].name, startIndex)) > -1) {\r\n _indices.push(_index);\r\n startIndex = _index + 1;\r\n }\r\n //If the material is not used dispose it\r\n if (_index === -1 && _indices.length === 0) {\r\n //If the material is not needed, remove it\r\n materialsFromMTLFile.materials[n].dispose();\r\n } else {\r\n for (let o = 0; o < _indices.length; o++) {\r\n //Apply the material to the Mesh for each mesh with the material\r\n const mesh = babylonMeshesArray[_indices[o]];\r\n const material = materialsFromMTLFile.materials[n];\r\n mesh.material = material;\r\n\r\n if (!mesh.getTotalIndices()) {\r\n // No indices, we need to turn on point cloud\r\n material.pointsCloud = true;\r\n }\r\n }\r\n }\r\n }\r\n resolve();\r\n } catch (e) {\r\n Tools.Warn(`Error processing MTL file: '${fileToLoad}'`);\r\n if (this._loadingOptions.materialLoadingFailsSilently) {\r\n resolve();\r\n } else {\r\n reject(e);\r\n }\r\n }\r\n },\r\n (pathOfFile: string, exception?: any) => {\r\n Tools.Warn(`Error downloading MTL file: '${fileToLoad}'`);\r\n if (this._loadingOptions.materialLoadingFailsSilently) {\r\n resolve();\r\n } else {\r\n reject(exception);\r\n }\r\n }\r\n );\r\n })\r\n );\r\n }\r\n //Return an array with all Mesh\r\n return Promise.all(mtlPromises).then(() => {\r\n const isLine = (mesh: AbstractMesh) => Boolean(mesh._internalMetadata?.[\"_isLine\"] ?? false);\r\n\r\n // Iterate over the mesh, determine if it is a line mesh, clone or modify the material to line rendering.\r\n babylonMeshesArray.forEach((mesh) => {\r\n if (isLine(mesh)) {\r\n let mat = mesh.material ?? new StandardMaterial(mesh.name + \"_line\", scene);\r\n // If another mesh is using this material and it is not a line then we need to clone it.\r\n const needClone = mat.getBindedMeshes().filter((e) => !isLine(e)).length > 0;\r\n if (needClone) {\r\n mat = mat.clone(mat.name + \"_line\") ?? mat;\r\n }\r\n mat.wireframe = true;\r\n mesh.material = mat;\r\n if (mesh._internalMetadata) {\r\n mesh._internalMetadata[\"_isLine\"] = undefined;\r\n }\r\n }\r\n });\r\n\r\n return babylonMeshesArray;\r\n });\r\n }\r\n}\r\n\r\n//Add this loader into the register plugin\r\nRegisterSceneLoaderPlugin(new OBJFileLoader());\r\n"]}
1
+ {"version":3,"file":"objFileLoader.js","sourceRoot":"","sources":["../../../../dev/loaders/src/OBJ/objFileLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,6CAA+B;AACjD,OAAO,EAAE,KAAK,EAAE,sCAAwB;AAGxC,OAAO,EAAE,yBAAyB,EAAE,+CAAiC;AACrE,OAAO,EAAE,cAAc,EAAE,0CAA4B;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,sDAAwC;AAYnE;;;GAGG;AACH,MAAM,OAAO,aAAa;IAStB;;OAEG;IACI,MAAM,KAAK,gBAAgB;QAC9B,OAAO,aAAa,CAAC,gBAAgB,CAAC;IAC1C,CAAC;IAEM,MAAM,KAAK,gBAAgB,CAAC,KAAc;QAC7C,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAiDD;;;;OAIG;IACH,YAAY,cAAqD;QAlBjE;;WAEG;QACa,SAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;QAClD;;WAEG;QACa,eAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC;QAEtD,oBAAe,GAA6B,IAAI,CAAC;QAUrD,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,aAAa,CAAC,sBAAsB,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;IAClG,CAAC;IAEO,MAAM,KAAK,sBAAsB;QACrC,OAAO;YACH,cAAc,EAAE,aAAa,CAAC,eAAe;YAC7C,eAAe,EAAE,aAAa,CAAC,gBAAgB;YAC/C,kBAAkB,EAAE,aAAa,CAAC,oBAAoB;YACtD,OAAO,EAAE,aAAa,CAAC,QAAQ;YAC/B,cAAc,EAAE,aAAa,CAAC,gBAAgB;YAC9C,gEAAgE;YAChE,SAAS,EAAE,aAAa,CAAC,UAAU;YACnC,4BAA4B,EAAE,aAAa,CAAC,+BAA+B;YAC3E,cAAc,EAAE,aAAa,CAAC,gBAAgB;YAC9C,aAAa,EAAE,aAAa,CAAC,cAAc;YAC3C,iBAAiB,EAAE,aAAa,CAAC,mBAAmB;SACvD,CAAC;IACN,CAAC;IAED;;;;;;;;;;OAUG;IACK,QAAQ,CACZ,GAAW,EACX,OAAe,EACf,SAAwE,EACxE,SAAwD;QAExD,mCAAmC;QACnC,MAAM,UAAU,GAAG,OAAO,GAAG,GAAG,CAAC;QAEjC,6DAA6D;QAC7D,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,OAAgC,EAAE,SAAe,EAAE,EAAE;YACrH,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gBAAgB;IAChB,YAAY,CAAC,OAAiC;QAC1C,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACI,aAAa;QAChB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACI,eAAe,CAAC,WAAgB,EAAE,KAAY,EAAE,IAAS,EAAE,OAAe;QAC7E,8BAA8B;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvE,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,eAAe,EAAE,EAAE;gBACnB,SAAS,EAAE,EAAE;gBACb,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,EAAE;gBAClB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,EAAE;gBACV,cAAc,EAAE,EAAE;aACrB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACI,SAAS,CAAC,KAAY,EAAE,IAAY,EAAE,OAAe;QACxD,kBAAkB;QAClB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC9D,cAAc;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACI,uBAAuB,CAAC,KAAY,EAAE,IAAY,EAAE,OAAe;QACtE,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;aAClD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACb,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,QAAQ,EAAE,CAAC;oBACX,YAAY;oBACZ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBAC9C,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAEnC,WAAW;wBACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;wBAC9C,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;4BACnB,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gCACtC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC/B,CAAC;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;YACV,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,MAAM,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;;;OASG;IACK,WAAW,CAAC,WAAgB,EAAE,KAAY,EAAE,IAAY,EAAE,OAAe;QAC7E,IAAI,UAAU,GAAW,EAAE,CAAC,CAAC,iCAAiC;QAC9D,MAAM,oBAAoB,GAAkB,IAAI,aAAa,EAAE,CAAC;QAChE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAgB,EAAE,CAAC,CAAC,sBAAsB;QAElE,gBAAgB;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEzC,gBAAgB;QAChB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7F,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,QAAgB,EAAE,EAAE;YACnF,UAAU,GAAG,QAAQ,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,kCAAkC;QAClC,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;YAC3D,6BAA6B;YAC7B,WAAW,CAAC,IAAI,CACZ,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CACT,UAAU,EACV,OAAO,EACP,CAAC,UAAU,EAAE,EAAE;oBACX,IAAI,CAAC;wBACD,4CAA4C;wBAC5C,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;wBAChF,8CAA8C;wBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7D,0DAA0D;4BAC1D,IAAI,UAAU,GAAG,CAAC,CAAC;4BACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;4BACpB,IAAI,MAAM,CAAC;4BAEX,yDAAyD;4BACzD,6BAA6B;4BAC7B,oDAAoD;4BACpD,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gCAC/F,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCACtB,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;4BAC5B,CAAC;4BACD,wCAAwC;4BACxC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCACzC,0CAA0C;gCAC1C,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;4BAChD,CAAC;iCAAM,CAAC;gCACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCACvC,gEAAgE;oCAChE,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oCACnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;oCAEzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;wCAC1B,6CAA6C;wCAC7C,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;oCAChC,CAAC;gCACL,CAAC;4BACL,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,CAAC;oBACd,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,KAAK,CAAC,IAAI,CAAC,+BAA+B,UAAU,GAAG,CAAC,CAAC;wBACzD,IAAI,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAC;4BACpD,OAAO,EAAE,CAAC;wBACd,CAAC;6BAAM,CAAC;4BACJ,MAAM,CAAC,CAAC,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC;gBACL,CAAC,EACD,CAAC,UAAkB,EAAE,SAAe,EAAE,EAAE;oBACpC,KAAK,CAAC,IAAI,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;oBAC1D,IAAI,IAAI,CAAC,eAAe,CAAC,4BAA4B,EAAE,CAAC;wBACpD,OAAO,EAAE,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,SAAS,CAAC,CAAC;oBACtB,CAAC;gBACL,CAAC,CACJ,CAAC;YACN,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QACD,+BAA+B;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;YAE7F,yGAAyG;YACzG,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACf,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC5E,wFAAwF;oBACxF,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7E,IAAI,SAAS,EAAE,CAAC;wBACZ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC;oBAC/C,CAAC;oBACD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;oBAClD,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;;AArUD;;GAEG;AACW,8BAAgB,GAAG,IAAI,AAAP,CAAQ;AACtC;;GAEG;AACW,sBAAQ,GAAG,KAAK,AAAR,CAAS;AAY/B;;GAEG;AACW,kCAAoB,GAAG,KAAK,AAAR,CAAS;AAC3C;;GAEG;AACW,6BAAe,GAAG,KAAK,AAAR,CAAS;AACtC;;;GAGG;AACW,8BAAgB,GAAG,KAAK,AAAR,CAAS;AACvC;;GAEG;AACW,wBAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,AAApB,CAAqB;AAC7C;;GAEG;AACW,4BAAc,GAAG,KAAK,AAAR,CAAS;AAErC;;;;GAIG;AACW,6CAA+B,GAAG,IAAI,AAAP,CAAQ;AAErD;;GAEG;AACW,iCAAmB,GAAG,KAAK,AAAR,CAAS;AAqR9C,0CAA0C;AAC1C,yBAAyB,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { ISceneLoaderPluginAsync, ISceneLoaderPluginFactory, ISceneLoaderPlugin, ISceneLoaderAsyncResult, SceneLoaderPluginOptions } from \"core/Loading/sceneLoader\";\r\nimport { RegisterSceneLoaderPlugin } from \"core/Loading/sceneLoader\";\r\nimport { AssetContainer } from \"core/assetContainer\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { WebRequest } from \"core/Misc/webRequest\";\r\nimport { OBJFileLoaderMetadata } from \"./objFileLoader.metadata\";\r\nimport { MTLFileLoader } from \"./mtlFileLoader\";\r\nimport type { OBJLoadingOptions } from \"./objLoadingOptions\";\r\nimport { SolidParser } from \"./solidParser\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\n\r\ndeclare module \"core/Loading/sceneLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n export interface SceneLoaderPluginOptions {\r\n /**\r\n * Defines options for the obj loader.\r\n */\r\n [OBJFileLoaderMetadata.name]: Partial<OBJLoadingOptions>;\r\n }\r\n}\r\n\r\n/**\r\n * OBJ file type loader.\r\n * This is a babylon scene loader plugin.\r\n */\r\nexport class OBJFileLoader implements ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\r\n /**\r\n * Defines if UVs are optimized by default during load.\r\n */\r\n public static OPTIMIZE_WITH_UV = true;\r\n /**\r\n * Invert model on y-axis (does a model scaling inversion)\r\n */\r\n public static INVERT_Y = false;\r\n /**\r\n * Invert Y-Axis of referenced textures on load\r\n */\r\n public static get INVERT_TEXTURE_Y() {\r\n return MTLFileLoader.INVERT_TEXTURE_Y;\r\n }\r\n\r\n public static set INVERT_TEXTURE_Y(value: boolean) {\r\n MTLFileLoader.INVERT_TEXTURE_Y = value;\r\n }\r\n\r\n /**\r\n * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.\r\n */\r\n public static IMPORT_VERTEX_COLORS = false;\r\n /**\r\n * Compute the normals for the model, even if normals are present in the file.\r\n */\r\n public static COMPUTE_NORMALS = false;\r\n /**\r\n * Optimize the normals for the model. Lighting can be uneven if you use OptimizeWithUV = true because new vertices can be created for the same location if they pertain to different faces.\r\n * Using OptimizehNormals = true will help smoothing the lighting by averaging the normals of those vertices.\r\n */\r\n public static OPTIMIZE_NORMALS = false;\r\n /**\r\n * Defines custom scaling of UV coordinates of loaded meshes.\r\n */\r\n public static UV_SCALING = new Vector2(1, 1);\r\n /**\r\n * Skip loading the materials even if defined in the OBJ file (materials are ignored).\r\n */\r\n public static SKIP_MATERIALS = false;\r\n\r\n /**\r\n * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.\r\n *\r\n * Defaults to true for backwards compatibility.\r\n */\r\n public static MATERIAL_LOADING_FAILS_SILENTLY = true;\r\n\r\n /**\r\n * Loads assets without handedness conversions. This flag is for compatibility. Use it only if absolutely required. Defaults to false.\r\n */\r\n public static USE_LEGACY_BEHAVIOR = false;\r\n\r\n /**\r\n * Defines the name of the plugin.\r\n */\r\n public readonly name = OBJFileLoaderMetadata.name;\r\n /**\r\n * Defines the extension the plugin is able to load.\r\n */\r\n public readonly extensions = OBJFileLoaderMetadata.extensions;\r\n\r\n private _assetContainer: Nullable<AssetContainer> = null;\r\n\r\n private _loadingOptions: OBJLoadingOptions;\r\n\r\n /**\r\n * Creates loader for .OBJ files\r\n *\r\n * @param loadingOptions options for loading and parsing OBJ/MTL files.\r\n */\r\n constructor(loadingOptions?: Partial<Readonly<OBJLoadingOptions>>) {\r\n this._loadingOptions = { ...OBJFileLoader._DefaultLoadingOptions, ...(loadingOptions ?? {}) };\r\n }\r\n\r\n private static get _DefaultLoadingOptions(): OBJLoadingOptions {\r\n return {\r\n computeNormals: OBJFileLoader.COMPUTE_NORMALS,\r\n optimizeNormals: OBJFileLoader.OPTIMIZE_NORMALS,\r\n importVertexColors: OBJFileLoader.IMPORT_VERTEX_COLORS,\r\n invertY: OBJFileLoader.INVERT_Y,\r\n invertTextureY: OBJFileLoader.INVERT_TEXTURE_Y,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n UVScaling: OBJFileLoader.UV_SCALING,\r\n materialLoadingFailsSilently: OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY,\r\n optimizeWithUV: OBJFileLoader.OPTIMIZE_WITH_UV,\r\n skipMaterials: OBJFileLoader.SKIP_MATERIALS,\r\n useLegacyBehavior: OBJFileLoader.USE_LEGACY_BEHAVIOR,\r\n };\r\n }\r\n\r\n /**\r\n * Calls synchronously the MTL file attached to this obj.\r\n * Load function or importMesh function don't enable to load 2 files in the same time asynchronously.\r\n * Without this function materials are not displayed in the first frame (but displayed after).\r\n * In consequence it is impossible to get material information in your HTML file\r\n *\r\n * @param url The URL of the MTL file\r\n * @param rootUrl defines where to load data from\r\n * @param onSuccess Callback function to be called when the MTL file is loaded\r\n * @param onFailure\r\n */\r\n private _loadMTL(\r\n url: string,\r\n rootUrl: string,\r\n onSuccess: (response: string | ArrayBuffer, responseUrl?: string) => any,\r\n onFailure: (pathOfFile: string, exception?: any) => void\r\n ) {\r\n //The complete path to the mtl file\r\n const pathOfFile = rootUrl + url;\r\n\r\n // Loads through the babylon tools to allow fileInput search.\r\n Tools.LoadFile(pathOfFile, onSuccess, undefined, undefined, false, (request?: WebRequest | undefined, exception?: any) => {\r\n onFailure(pathOfFile, exception);\r\n });\r\n }\r\n\r\n /** @internal */\r\n createPlugin(options: SceneLoaderPluginOptions): ISceneLoaderPluginAsync | ISceneLoaderPlugin {\r\n return new OBJFileLoader(options[OBJFileLoaderMetadata.name]);\r\n }\r\n\r\n /**\r\n * If the data string can be loaded directly.\r\n * @returns if the data can be loaded directly\r\n */\r\n public canDirectLoad(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Imports one or more meshes from the loaded OBJ data and adds them to the scene\r\n * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file\r\n * @param scene the scene the meshes should be added to\r\n * @param data the OBJ data to load\r\n * @param rootUrl root url to load from\r\n * @returns a promise containing the loaded meshes, particles, skeletons and animations\r\n */\r\n public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string): Promise<ISceneLoaderAsyncResult> {\r\n //get the meshes from OBJ file\r\n return this._parseSolid(meshesNames, scene, data, rootUrl).then((meshes) => {\r\n return {\r\n meshes: meshes,\r\n particleSystems: [],\r\n skeletons: [],\r\n animationGroups: [],\r\n transformNodes: [],\r\n geometries: [],\r\n lights: [],\r\n spriteManagers: [],\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Imports all objects from the loaded OBJ data and adds them to the scene\r\n * @param scene the scene the objects should be added to\r\n * @param data the OBJ data to load\r\n * @param rootUrl root url to load from\r\n * @returns a promise which completes when objects have been loaded to the scene\r\n */\r\n public loadAsync(scene: Scene, data: string, rootUrl: string): Promise<void> {\r\n //Get the 3D model\r\n return this.importMeshAsync(null, scene, data, rootUrl).then(() => {\r\n // return void\r\n });\r\n }\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @returns The loaded asset container\r\n */\r\n public loadAssetContainerAsync(scene: Scene, data: string, rootUrl: string): Promise<AssetContainer> {\r\n const container = new AssetContainer(scene);\r\n this._assetContainer = container;\r\n\r\n return this.importMeshAsync(null, scene, data, rootUrl)\r\n .then((result) => {\r\n result.meshes.forEach((mesh) => container.meshes.push(mesh));\r\n result.meshes.forEach((mesh) => {\r\n const material = mesh.material;\r\n if (material) {\r\n // Materials\r\n if (container.materials.indexOf(material) == -1) {\r\n container.materials.push(material);\r\n\r\n // Textures\r\n const textures = material.getActiveTextures();\r\n textures.forEach((t) => {\r\n if (container.textures.indexOf(t) == -1) {\r\n container.textures.push(t);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n this._assetContainer = null;\r\n return container;\r\n })\r\n .catch((ex) => {\r\n this._assetContainer = null;\r\n throw ex;\r\n });\r\n }\r\n\r\n /**\r\n * Read the OBJ file and create an Array of meshes.\r\n * Each mesh contains all information given by the OBJ and the MTL file.\r\n * i.e. vertices positions and indices, optional normals values, optional UV values, optional material\r\n * @param meshesNames defines a string or array of strings of the mesh names that should be loaded from the file\r\n * @param scene defines the scene where are displayed the data\r\n * @param data defines the content of the obj file\r\n * @param rootUrl defines the path to the folder\r\n * @returns the list of loaded meshes\r\n */\r\n private _parseSolid(meshesNames: any, scene: Scene, data: string, rootUrl: string): Promise<Array<AbstractMesh>> {\r\n let fileToLoad: string = \"\"; //The name of the mtlFile to load\r\n const materialsFromMTLFile: MTLFileLoader = new MTLFileLoader();\r\n const materialToUse: string[] = [];\r\n const babylonMeshesArray: Array<Mesh> = []; //The mesh for babylon\r\n\r\n // Sanitize data\r\n data = data.replace(/#.*$/gm, \"\").trim();\r\n\r\n // Main function\r\n const solidParser = new SolidParser(materialToUse, babylonMeshesArray, this._loadingOptions);\r\n\r\n solidParser.parse(meshesNames, data, scene, this._assetContainer, (fileName: string) => {\r\n fileToLoad = fileName;\r\n });\r\n\r\n // load the materials\r\n const mtlPromises: Array<Promise<void>> = [];\r\n // Check if we have a file to load\r\n if (fileToLoad !== \"\" && !this._loadingOptions.skipMaterials) {\r\n //Load the file synchronously\r\n mtlPromises.push(\r\n new Promise((resolve, reject) => {\r\n this._loadMTL(\r\n fileToLoad,\r\n rootUrl,\r\n (dataLoaded) => {\r\n try {\r\n //Create materials thanks MTLLoader function\r\n materialsFromMTLFile.parseMTL(scene, dataLoaded, rootUrl, this._assetContainer);\r\n //Look at each material loaded in the mtl file\r\n for (let n = 0; n < materialsFromMTLFile.materials.length; n++) {\r\n //Three variables to get all meshes with the same material\r\n let startIndex = 0;\r\n const _indices = [];\r\n let _index;\r\n\r\n //The material from MTL file is used in the meshes loaded\r\n //Push the indice in an array\r\n //Check if the material is not used for another mesh\r\n while ((_index = materialToUse.indexOf(materialsFromMTLFile.materials[n].name, startIndex)) > -1) {\r\n _indices.push(_index);\r\n startIndex = _index + 1;\r\n }\r\n //If the material is not used dispose it\r\n if (_index === -1 && _indices.length === 0) {\r\n //If the material is not needed, remove it\r\n materialsFromMTLFile.materials[n].dispose();\r\n } else {\r\n for (let o = 0; o < _indices.length; o++) {\r\n //Apply the material to the Mesh for each mesh with the material\r\n const mesh = babylonMeshesArray[_indices[o]];\r\n const material = materialsFromMTLFile.materials[n];\r\n mesh.material = material;\r\n\r\n if (!mesh.getTotalIndices()) {\r\n // No indices, we need to turn on point cloud\r\n material.pointsCloud = true;\r\n }\r\n }\r\n }\r\n }\r\n resolve();\r\n } catch (e) {\r\n Tools.Warn(`Error processing MTL file: '${fileToLoad}'`);\r\n if (this._loadingOptions.materialLoadingFailsSilently) {\r\n resolve();\r\n } else {\r\n reject(e);\r\n }\r\n }\r\n },\r\n (pathOfFile: string, exception?: any) => {\r\n Tools.Warn(`Error downloading MTL file: '${fileToLoad}'`);\r\n if (this._loadingOptions.materialLoadingFailsSilently) {\r\n resolve();\r\n } else {\r\n reject(exception);\r\n }\r\n }\r\n );\r\n })\r\n );\r\n }\r\n //Return an array with all Mesh\r\n return Promise.all(mtlPromises).then(() => {\r\n const isLine = (mesh: AbstractMesh) => Boolean(mesh._internalMetadata?.[\"_isLine\"] ?? false);\r\n\r\n // Iterate over the mesh, determine if it is a line mesh, clone or modify the material to line rendering.\r\n babylonMeshesArray.forEach((mesh) => {\r\n if (isLine(mesh)) {\r\n let mat = mesh.material ?? new StandardMaterial(mesh.name + \"_line\", scene);\r\n // If another mesh is using this material and it is not a line then we need to clone it.\r\n const needClone = mat.getBindedMeshes().filter((e) => !isLine(e)).length > 0;\r\n if (needClone) {\r\n mat = mat.clone(mat.name + \"_line\") ?? mat;\r\n }\r\n mat.wireframe = true;\r\n mesh.material = mat;\r\n if (mesh._internalMetadata) {\r\n mesh._internalMetadata[\"_isLine\"] = undefined;\r\n }\r\n }\r\n });\r\n\r\n return babylonMeshesArray;\r\n });\r\n }\r\n}\r\n\r\n//Add this loader into the register plugin\r\nRegisterSceneLoaderPlugin(new OBJFileLoader());\r\n"]}
package/dynamic.js CHANGED
@@ -23,9 +23,9 @@ export function registerBuiltInLoaders() {
23
23
  // Register the OBJ loader.
24
24
  RegisterSceneLoaderPlugin({
25
25
  ...OBJFileLoaderMetadata,
26
- createPlugin: async () => {
26
+ createPlugin: async (options) => {
27
27
  const { OBJFileLoader } = await import("./OBJ/objFileLoader.js");
28
- return new OBJFileLoader();
28
+ return new OBJFileLoader(options[OBJFileLoaderMetadata.name]);
29
29
  },
30
30
  });
31
31
  // Register the SPLAT loader.
package/dynamic.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../../../dev/loaders/src/dynamic.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,yBAAyB,EAAE,+CAAiC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IAClC,oDAAoD;IACpD,yBAAyB,CAAC;QACtB,GAAG,sBAAsB;QACzB,YAAY,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE;YACtD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACjE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;KACgC,CAAC,CAAC;IAEvC,+CAA+C;IAC/C,6BAA6B,EAAE,CAAC;IAEhC,2BAA2B;IAC3B,yBAAyB,CAAC;QACtB,GAAG,qBAAqB;QACxB,YAAY,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9D,OAAO,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC;KACgC,CAAC,CAAC;IAEvC,6BAA6B;IAC7B,yBAAyB,CAAC;QACtB,GAAG,uBAAuB;QAC1B,YAAY,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE;YACtD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACpE,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;KACgC,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,yBAAyB,CAAC;QACtB,GAAG,qBAAqB;QACxB,YAAY,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9D,OAAO,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC;KACgC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport type { ISceneLoaderPluginFactory, SceneLoaderPluginOptions } from \"core/Loading/sceneLoader\";\r\nimport { RegisterSceneLoaderPlugin } from \"core/Loading/sceneLoader\";\r\n\r\nimport { GLTFFileLoaderMetadata } from \"./glTF/glTFFileLoader.metadata\";\r\nimport { OBJFileLoaderMetadata } from \"./OBJ/objFileLoader.metadata\";\r\nimport { SPLATFileLoaderMetadata } from \"./SPLAT/splatFileLoader.metadata\";\r\nimport { STLFileLoaderMetadata } from \"./STL/stlFileLoader.metadata\";\r\n\r\nimport { registerBuiltInGLTFExtensions } from \"./glTF/2.0/Extensions/dynamic\";\r\n\r\n/**\r\n * Registers the async plugin factories for all built-in loaders.\r\n * Loaders will be dynamically imported on demand, only when a SceneLoader load operation needs each respective loader.\r\n */\r\nexport function registerBuiltInLoaders() {\r\n // Register the glTF loader (2.0) specifically/only.\r\n RegisterSceneLoaderPlugin({\r\n ...GLTFFileLoaderMetadata,\r\n createPlugin: async (options: SceneLoaderPluginOptions) => {\r\n const { GLTFFileLoader } = await import(\"./glTF/2.0/glTFLoader\");\r\n return new GLTFFileLoader(options[GLTFFileLoaderMetadata.name]);\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the built-in glTF (2.0) extensions.\r\n registerBuiltInGLTFExtensions();\r\n\r\n // Register the OBJ loader.\r\n RegisterSceneLoaderPlugin({\r\n ...OBJFileLoaderMetadata,\r\n createPlugin: async () => {\r\n const { OBJFileLoader } = await import(\"./OBJ/objFileLoader\");\r\n return new OBJFileLoader();\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the SPLAT loader.\r\n RegisterSceneLoaderPlugin({\r\n ...SPLATFileLoaderMetadata,\r\n createPlugin: async (options: SceneLoaderPluginOptions) => {\r\n const { SPLATFileLoader } = await import(\"./SPLAT/splatFileLoader\");\r\n return new SPLATFileLoader(options[SPLATFileLoaderMetadata.name]);\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the STL loader.\r\n RegisterSceneLoaderPlugin({\r\n ...STLFileLoaderMetadata,\r\n createPlugin: async () => {\r\n const { STLFileLoader } = await import(\"./STL/stlFileLoader\");\r\n return new STLFileLoader();\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n}\r\n"]}
1
+ {"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../../../dev/loaders/src/dynamic.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,yBAAyB,EAAE,+CAAiC;AAErE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IAClC,oDAAoD;IACpD,yBAAyB,CAAC;QACtB,GAAG,sBAAsB;QACzB,YAAY,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE;YACtD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACjE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;KACgC,CAAC,CAAC;IAEvC,+CAA+C;IAC/C,6BAA6B,EAAE,CAAC;IAEhC,2BAA2B;IAC3B,yBAAyB,CAAC;QACtB,GAAG,qBAAqB;QACxB,YAAY,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE;YACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;KACgC,CAAC,CAAC;IAEvC,6BAA6B;IAC7B,yBAAyB,CAAC;QACtB,GAAG,uBAAuB;QAC1B,YAAY,EAAE,KAAK,EAAE,OAAiC,EAAE,EAAE;YACtD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACpE,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;KACgC,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,yBAAyB,CAAC;QACtB,GAAG,qBAAqB;QACxB,YAAY,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC9D,OAAO,IAAI,aAAa,EAAE,CAAC;QAC/B,CAAC;KACgC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport type { ISceneLoaderPluginFactory, SceneLoaderPluginOptions } from \"core/Loading/sceneLoader\";\r\nimport { RegisterSceneLoaderPlugin } from \"core/Loading/sceneLoader\";\r\n\r\nimport { GLTFFileLoaderMetadata } from \"./glTF/glTFFileLoader.metadata\";\r\nimport { OBJFileLoaderMetadata } from \"./OBJ/objFileLoader.metadata\";\r\nimport { SPLATFileLoaderMetadata } from \"./SPLAT/splatFileLoader.metadata\";\r\nimport { STLFileLoaderMetadata } from \"./STL/stlFileLoader.metadata\";\r\n\r\nimport { registerBuiltInGLTFExtensions } from \"./glTF/2.0/Extensions/dynamic\";\r\n\r\n/**\r\n * Registers the async plugin factories for all built-in loaders.\r\n * Loaders will be dynamically imported on demand, only when a SceneLoader load operation needs each respective loader.\r\n */\r\nexport function registerBuiltInLoaders() {\r\n // Register the glTF loader (2.0) specifically/only.\r\n RegisterSceneLoaderPlugin({\r\n ...GLTFFileLoaderMetadata,\r\n createPlugin: async (options: SceneLoaderPluginOptions) => {\r\n const { GLTFFileLoader } = await import(\"./glTF/2.0/glTFLoader\");\r\n return new GLTFFileLoader(options[GLTFFileLoaderMetadata.name]);\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the built-in glTF (2.0) extensions.\r\n registerBuiltInGLTFExtensions();\r\n\r\n // Register the OBJ loader.\r\n RegisterSceneLoaderPlugin({\r\n ...OBJFileLoaderMetadata,\r\n createPlugin: async (options: SceneLoaderPluginOptions) => {\r\n const { OBJFileLoader } = await import(\"./OBJ/objFileLoader\");\r\n return new OBJFileLoader(options[OBJFileLoaderMetadata.name]);\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the SPLAT loader.\r\n RegisterSceneLoaderPlugin({\r\n ...SPLATFileLoaderMetadata,\r\n createPlugin: async (options: SceneLoaderPluginOptions) => {\r\n const { SPLATFileLoader } = await import(\"./SPLAT/splatFileLoader\");\r\n return new SPLATFileLoader(options[SPLATFileLoaderMetadata.name]);\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n\r\n // Register the STL loader.\r\n RegisterSceneLoaderPlugin({\r\n ...STLFileLoaderMetadata,\r\n createPlugin: async () => {\r\n const { STLFileLoader } = await import(\"./STL/stlFileLoader\");\r\n return new STLFileLoader();\r\n },\r\n } satisfies ISceneLoaderPluginFactory);\r\n}\r\n"]}
@@ -22,6 +22,10 @@ declare module "../../glTFFileLoader" {
22
22
  * Defines options for the KHR_materials_variants extension.
23
23
  */
24
24
  ["KHR_materials_variants"]: Partial<{
25
+ /**
26
+ * Specifies the name of the variant that should be selected by default.
27
+ */
28
+ defaultVariant: string;
25
29
  /**
26
30
  * Defines a callback that will be called if material variants are loaded.
27
31
  * @experimental
@@ -134,7 +134,11 @@ export class KHR_materials_variants {
134
134
  onReady() {
135
135
  const rootNode = this._loader.rootBabylonMesh;
136
136
  if (rootNode) {
137
- this._loader.parent.extensionOptions[NAME]?.onLoaded?.({
137
+ const options = this._loader.parent.extensionOptions[NAME];
138
+ if (options?.defaultVariant) {
139
+ KHR_materials_variants.SelectVariant(rootNode, options.defaultVariant);
140
+ }
141
+ options?.onLoaded?.({
138
142
  get variants() {
139
143
  return KHR_materials_variants.GetAvailableVariants(rootNode);
140
144
  },
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_materials_variants.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_variants.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\n\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Node } from \"core/node\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { INode, IMeshPrimitive, IMesh } from \"../glTFLoaderInterfaces\";\r\nimport type { IKHRMaterialVariants_Mapping, IKHRMaterialVariants_Variant, IKHRMaterialVariants_Variants } from \"babylonjs-gltf2interface\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport type { MaterialVariantsController } from \"../../glTFFileLoader\";\r\n\r\nconst NAME = \"KHR_materials_variants\";\r\n\r\nexport { MaterialVariantsController };\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // Define options related types here so they can be referenced in the options,\r\n // but export the types at the module level. This ensures the types are in the\r\n // correct namespace for UMD.\r\n type MaterialVariantsController = {\r\n /**\r\n * The list of available variant names for this asset.\r\n */\r\n readonly variants: readonly string[];\r\n\r\n /**\r\n * Gets or sets the selected variant.\r\n */\r\n selectedVariant: string;\r\n };\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_variants extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_variants\"]: Partial<{\r\n /**\r\n * Defines a callback that will be called if material variants are loaded.\r\n * @experimental\r\n */\r\n onLoaded: (controller: MaterialVariantsController) => void;\r\n }>;\r\n }\r\n}\r\n\r\ninterface IVariantsMap {\r\n [key: string]: Array<{ mesh: AbstractMesh; material: Nullable<Material> }>;\r\n}\r\n\r\ninterface IExtensionMetadata {\r\n lastSelected: Nullable<string | Array<string>>;\r\n original: Array<{ mesh: AbstractMesh; material: Nullable<Material> }>;\r\n variants: IVariantsMap;\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_variants/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_variants implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n private _variants?: Array<IKHRMaterialVariants_Variant>;\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 * Gets the list of available variant names for this asset.\r\n * @param rootNode The glTF root node\r\n * @returns the list of all the variant names for this model\r\n */\r\n public static GetAvailableVariants(rootNode: TransformNode): string[] {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n return [];\r\n }\r\n\r\n return Object.keys(extensionMetadata.variants);\r\n }\r\n\r\n /**\r\n * Gets the list of available variant names for this asset.\r\n * @param rootNode The glTF root node\r\n * @returns the list of all the variant names for this model\r\n */\r\n public getAvailableVariants(rootNode: TransformNode): string[] {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode);\r\n }\r\n\r\n /**\r\n * Select a variant given a variant name or a list of variant names.\r\n * @param rootNode The glTF root node\r\n * @param variantName The variant name(s) to select.\r\n */\r\n public static SelectVariant(rootNode: TransformNode, variantName: string | string[]): void {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot select variant on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n const select = (variantName: string): void => {\r\n const entries = extensionMetadata.variants[variantName];\r\n if (entries) {\r\n for (const entry of entries) {\r\n entry.mesh.material = entry.material;\r\n }\r\n }\r\n };\r\n\r\n if (variantName instanceof Array) {\r\n for (const name of variantName) {\r\n select(name);\r\n }\r\n } else {\r\n select(variantName);\r\n }\r\n\r\n extensionMetadata.lastSelected = variantName;\r\n }\r\n\r\n /**\r\n * Select a variant given a variant name or a list of variant names.\r\n * @param rootNode The glTF root node\r\n * @param variantName The variant name(s) to select.\r\n */\r\n public selectVariant(rootNode: TransformNode, variantName: string | string[]): void {\r\n KHR_materials_variants.SelectVariant(rootNode, variantName);\r\n }\r\n\r\n /**\r\n * Reset back to the original before selecting a variant.\r\n * @param rootNode The glTF root node\r\n */\r\n public static Reset(rootNode: TransformNode): void {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot reset on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n for (const entry of extensionMetadata.original) {\r\n entry.mesh.material = entry.material;\r\n }\r\n\r\n extensionMetadata.lastSelected = null;\r\n }\r\n\r\n /**\r\n * Reset back to the original before selecting a variant.\r\n * @param rootNode The glTF root node\r\n */\r\n public reset(rootNode: TransformNode): void {\r\n KHR_materials_variants.Reset(rootNode);\r\n }\r\n\r\n /**\r\n * Gets the last selected variant name(s) or null if original.\r\n * @param rootNode The glTF root node\r\n * @returns The selected variant name(s).\r\n */\r\n public static GetLastSelectedVariant(rootNode: TransformNode): Nullable<string | string[]> {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot get the last selected variant on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n return extensionMetadata.lastSelected;\r\n }\r\n\r\n /**\r\n * Gets the last selected variant name(s) or null if original.\r\n * @param rootNode The glTF root node\r\n * @returns The selected variant name(s).\r\n */\r\n public getLastSelectedVariant(rootNode: TransformNode): Nullable<string | string[]> {\r\n return KHR_materials_variants.GetLastSelectedVariant(rootNode);\r\n }\r\n\r\n private static _GetExtensionMetadata(rootNode: Nullable<TransformNode>): Nullable<IExtensionMetadata> {\r\n return rootNode?._internalMetadata?.gltf?.[NAME] || null;\r\n }\r\n\r\n /** @internal */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name] as IKHRMaterialVariants_Variants;\r\n this._variants = extension.variants;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public onReady(): void {\r\n const rootNode = this._loader.rootBabylonMesh;\r\n if (rootNode) {\r\n this._loader.parent.extensionOptions[NAME]?.onLoaded?.({\r\n get variants() {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode);\r\n },\r\n get selectedVariant(): string {\r\n const lastSelectedVariant = KHR_materials_variants.GetLastSelectedVariant(rootNode);\r\n if (!lastSelectedVariant) {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode)[0];\r\n }\r\n if (Array.isArray(lastSelectedVariant)) {\r\n return lastSelectedVariant[0];\r\n }\r\n return lastSelectedVariant;\r\n },\r\n set selectedVariant(variantName) {\r\n KHR_materials_variants.SelectVariant(rootNode, variantName);\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _loadMeshPrimitiveAsync(\r\n context: string,\r\n name: string,\r\n node: INode,\r\n mesh: IMesh,\r\n primitive: IMeshPrimitive,\r\n assign: (babylonMesh: AbstractMesh) => void\r\n ): Nullable<Promise<AbstractMesh>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialVariants_Mapping, AbstractMesh>(context, primitive, this.name, (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(\r\n this._loader._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, (babylonMesh) => {\r\n assign(babylonMesh);\r\n\r\n if (babylonMesh instanceof Mesh) {\r\n const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);\r\n\r\n const root = this._loader.rootBabylonMesh;\r\n const metadata = root ? (root._internalMetadata = root._internalMetadata || {}) : {};\r\n const gltf = (metadata.gltf = metadata.gltf || {});\r\n const extensionMetadata: IExtensionMetadata = (gltf[NAME] = gltf[NAME] || { lastSelected: null, original: [], variants: {} });\r\n\r\n // Store the original material.\r\n extensionMetadata.original.push({ mesh: babylonMesh, material: babylonMesh.material });\r\n\r\n // For each mapping, look at the variants and make a new entry for them.\r\n for (let mappingIndex = 0; mappingIndex < extension.mappings.length; ++mappingIndex) {\r\n const mapping = extension.mappings[mappingIndex];\r\n const material = ArrayItem.Get(`${extensionContext}/mappings/${mappingIndex}/material`, this._loader.gltf.materials, mapping.material);\r\n promises.push(\r\n this._loader._loadMaterialAsync(`#/materials/${mapping.material}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {\r\n for (let mappingVariantIndex = 0; mappingVariantIndex < mapping.variants.length; ++mappingVariantIndex) {\r\n const variantIndex = mapping.variants[mappingVariantIndex];\r\n const variant = ArrayItem.Get(`/extensions/${NAME}/variants/${variantIndex}`, this._variants, variantIndex);\r\n extensionMetadata.variants[variant.name] = extensionMetadata.variants[variant.name] || [];\r\n extensionMetadata.variants[variant.name].push({\r\n mesh: babylonMesh,\r\n material: babylonMaterial,\r\n });\r\n\r\n // Replace the target when original mesh is cloned\r\n babylonMesh.onClonedObservable.add((newOne: Node) => {\r\n const newMesh = newOne as Mesh;\r\n let metadata: Nullable<IExtensionMetadata> = null;\r\n let newRoot: Nullable<Node> = newMesh;\r\n\r\n // Find root to get medata\r\n do {\r\n newRoot = newRoot!.parent;\r\n if (!newRoot) {\r\n return;\r\n }\r\n metadata = KHR_materials_variants._GetExtensionMetadata(newRoot as Mesh);\r\n } while (metadata === null);\r\n\r\n // Need to clone the metadata on the root (first time only)\r\n if (root && metadata === KHR_materials_variants._GetExtensionMetadata(root)) {\r\n // Copy main metadata\r\n newRoot._internalMetadata = {};\r\n for (const key in root._internalMetadata) {\r\n newRoot._internalMetadata[key] = root._internalMetadata[key];\r\n }\r\n\r\n // Copy the gltf metadata\r\n newRoot._internalMetadata.gltf = [];\r\n for (const key in root._internalMetadata.gltf) {\r\n newRoot._internalMetadata.gltf[key] = root._internalMetadata.gltf[key];\r\n }\r\n\r\n // Duplicate the extension specific metadata\r\n newRoot._internalMetadata.gltf[NAME] = { lastSelected: null, original: [], variants: {} };\r\n for (const original of metadata.original) {\r\n newRoot._internalMetadata.gltf[NAME].original.push({\r\n mesh: original.mesh,\r\n material: original.material,\r\n });\r\n }\r\n for (const key in metadata.variants) {\r\n if (Object.prototype.hasOwnProperty.call(metadata.variants, key)) {\r\n newRoot._internalMetadata.gltf[NAME].variants[key] = [];\r\n for (const variantEntry of metadata.variants[key]) {\r\n newRoot._internalMetadata.gltf[NAME].variants[key].push({\r\n mesh: variantEntry.mesh,\r\n material: variantEntry.material,\r\n });\r\n }\r\n }\r\n }\r\n\r\n metadata = newRoot._internalMetadata.gltf[NAME];\r\n }\r\n\r\n // Relocate\r\n for (const target of metadata!.original) {\r\n if (target.mesh === babylonMesh) {\r\n target.mesh = newMesh;\r\n }\r\n }\r\n for (const target of metadata!.variants[variant.name]) {\r\n if (target.mesh === babylonMesh) {\r\n target.mesh = newMesh;\r\n }\r\n }\r\n });\r\n }\r\n })\r\n );\r\n }\r\n }\r\n })\r\n );\r\n return Promise.all(promises).then(([babylonMesh]) => {\r\n return babylonMesh;\r\n });\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_variants(loader));\r\n"]}
1
+ {"version":3,"file":"KHR_materials_variants.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_variants.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\n\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Node } from \"core/node\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { INode, IMeshPrimitive, IMesh } from \"../glTFLoaderInterfaces\";\r\nimport type { IKHRMaterialVariants_Mapping, IKHRMaterialVariants_Variant, IKHRMaterialVariants_Variants } from \"babylonjs-gltf2interface\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport type { MaterialVariantsController } from \"../../glTFFileLoader\";\r\n\r\nconst NAME = \"KHR_materials_variants\";\r\n\r\nexport { MaterialVariantsController };\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // Define options related types here so they can be referenced in the options,\r\n // but export the types at the module level. This ensures the types are in the\r\n // correct namespace for UMD.\r\n type MaterialVariantsController = {\r\n /**\r\n * The list of available variant names for this asset.\r\n */\r\n readonly variants: readonly string[];\r\n\r\n /**\r\n * Gets or sets the selected variant.\r\n */\r\n selectedVariant: string;\r\n };\r\n\r\n // eslint-disable-next-line jsdoc/require-jsdoc\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_variants extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_variants\"]: Partial<{\r\n /**\r\n * Specifies the name of the variant that should be selected by default.\r\n */\r\n defaultVariant: string;\r\n\r\n /**\r\n * Defines a callback that will be called if material variants are loaded.\r\n * @experimental\r\n */\r\n onLoaded: (controller: MaterialVariantsController) => void;\r\n }>;\r\n }\r\n}\r\n\r\ninterface IVariantsMap {\r\n [key: string]: Array<{ mesh: AbstractMesh; material: Nullable<Material> }>;\r\n}\r\n\r\ninterface IExtensionMetadata {\r\n lastSelected: Nullable<string | Array<string>>;\r\n original: Array<{ mesh: AbstractMesh; material: Nullable<Material> }>;\r\n variants: IVariantsMap;\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_variants/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_variants implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n private _variants?: Array<IKHRMaterialVariants_Variant>;\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 * Gets the list of available variant names for this asset.\r\n * @param rootNode The glTF root node\r\n * @returns the list of all the variant names for this model\r\n */\r\n public static GetAvailableVariants(rootNode: TransformNode): string[] {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n return [];\r\n }\r\n\r\n return Object.keys(extensionMetadata.variants);\r\n }\r\n\r\n /**\r\n * Gets the list of available variant names for this asset.\r\n * @param rootNode The glTF root node\r\n * @returns the list of all the variant names for this model\r\n */\r\n public getAvailableVariants(rootNode: TransformNode): string[] {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode);\r\n }\r\n\r\n /**\r\n * Select a variant given a variant name or a list of variant names.\r\n * @param rootNode The glTF root node\r\n * @param variantName The variant name(s) to select.\r\n */\r\n public static SelectVariant(rootNode: TransformNode, variantName: string | string[]): void {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot select variant on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n const select = (variantName: string): void => {\r\n const entries = extensionMetadata.variants[variantName];\r\n if (entries) {\r\n for (const entry of entries) {\r\n entry.mesh.material = entry.material;\r\n }\r\n }\r\n };\r\n\r\n if (variantName instanceof Array) {\r\n for (const name of variantName) {\r\n select(name);\r\n }\r\n } else {\r\n select(variantName);\r\n }\r\n\r\n extensionMetadata.lastSelected = variantName;\r\n }\r\n\r\n /**\r\n * Select a variant given a variant name or a list of variant names.\r\n * @param rootNode The glTF root node\r\n * @param variantName The variant name(s) to select.\r\n */\r\n public selectVariant(rootNode: TransformNode, variantName: string | string[]): void {\r\n KHR_materials_variants.SelectVariant(rootNode, variantName);\r\n }\r\n\r\n /**\r\n * Reset back to the original before selecting a variant.\r\n * @param rootNode The glTF root node\r\n */\r\n public static Reset(rootNode: TransformNode): void {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot reset on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n for (const entry of extensionMetadata.original) {\r\n entry.mesh.material = entry.material;\r\n }\r\n\r\n extensionMetadata.lastSelected = null;\r\n }\r\n\r\n /**\r\n * Reset back to the original before selecting a variant.\r\n * @param rootNode The glTF root node\r\n */\r\n public reset(rootNode: TransformNode): void {\r\n KHR_materials_variants.Reset(rootNode);\r\n }\r\n\r\n /**\r\n * Gets the last selected variant name(s) or null if original.\r\n * @param rootNode The glTF root node\r\n * @returns The selected variant name(s).\r\n */\r\n public static GetLastSelectedVariant(rootNode: TransformNode): Nullable<string | string[]> {\r\n const extensionMetadata = this._GetExtensionMetadata(rootNode);\r\n if (!extensionMetadata) {\r\n throw new Error(`Cannot get the last selected variant on a glTF mesh that does not have the ${NAME} extension`);\r\n }\r\n\r\n return extensionMetadata.lastSelected;\r\n }\r\n\r\n /**\r\n * Gets the last selected variant name(s) or null if original.\r\n * @param rootNode The glTF root node\r\n * @returns The selected variant name(s).\r\n */\r\n public getLastSelectedVariant(rootNode: TransformNode): Nullable<string | string[]> {\r\n return KHR_materials_variants.GetLastSelectedVariant(rootNode);\r\n }\r\n\r\n private static _GetExtensionMetadata(rootNode: Nullable<TransformNode>): Nullable<IExtensionMetadata> {\r\n return rootNode?._internalMetadata?.gltf?.[NAME] || null;\r\n }\r\n\r\n /** @internal */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name] as IKHRMaterialVariants_Variants;\r\n this._variants = extension.variants;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public onReady(): void {\r\n const rootNode = this._loader.rootBabylonMesh;\r\n if (rootNode) {\r\n const options = this._loader.parent.extensionOptions[NAME];\r\n if (options?.defaultVariant) {\r\n KHR_materials_variants.SelectVariant(rootNode, options.defaultVariant);\r\n }\r\n\r\n options?.onLoaded?.({\r\n get variants() {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode);\r\n },\r\n get selectedVariant(): string {\r\n const lastSelectedVariant = KHR_materials_variants.GetLastSelectedVariant(rootNode);\r\n if (!lastSelectedVariant) {\r\n return KHR_materials_variants.GetAvailableVariants(rootNode)[0];\r\n }\r\n if (Array.isArray(lastSelectedVariant)) {\r\n return lastSelectedVariant[0];\r\n }\r\n return lastSelectedVariant;\r\n },\r\n set selectedVariant(variantName) {\r\n KHR_materials_variants.SelectVariant(rootNode, variantName);\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _loadMeshPrimitiveAsync(\r\n context: string,\r\n name: string,\r\n node: INode,\r\n mesh: IMesh,\r\n primitive: IMeshPrimitive,\r\n assign: (babylonMesh: AbstractMesh) => void\r\n ): Nullable<Promise<AbstractMesh>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialVariants_Mapping, AbstractMesh>(context, primitive, this.name, (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(\r\n this._loader._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, (babylonMesh) => {\r\n assign(babylonMesh);\r\n\r\n if (babylonMesh instanceof Mesh) {\r\n const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);\r\n\r\n const root = this._loader.rootBabylonMesh;\r\n const metadata = root ? (root._internalMetadata = root._internalMetadata || {}) : {};\r\n const gltf = (metadata.gltf = metadata.gltf || {});\r\n const extensionMetadata: IExtensionMetadata = (gltf[NAME] = gltf[NAME] || { lastSelected: null, original: [], variants: {} });\r\n\r\n // Store the original material.\r\n extensionMetadata.original.push({ mesh: babylonMesh, material: babylonMesh.material });\r\n\r\n // For each mapping, look at the variants and make a new entry for them.\r\n for (let mappingIndex = 0; mappingIndex < extension.mappings.length; ++mappingIndex) {\r\n const mapping = extension.mappings[mappingIndex];\r\n const material = ArrayItem.Get(`${extensionContext}/mappings/${mappingIndex}/material`, this._loader.gltf.materials, mapping.material);\r\n promises.push(\r\n this._loader._loadMaterialAsync(`#/materials/${mapping.material}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {\r\n for (let mappingVariantIndex = 0; mappingVariantIndex < mapping.variants.length; ++mappingVariantIndex) {\r\n const variantIndex = mapping.variants[mappingVariantIndex];\r\n const variant = ArrayItem.Get(`/extensions/${NAME}/variants/${variantIndex}`, this._variants, variantIndex);\r\n extensionMetadata.variants[variant.name] = extensionMetadata.variants[variant.name] || [];\r\n extensionMetadata.variants[variant.name].push({\r\n mesh: babylonMesh,\r\n material: babylonMaterial,\r\n });\r\n\r\n // Replace the target when original mesh is cloned\r\n babylonMesh.onClonedObservable.add((newOne: Node) => {\r\n const newMesh = newOne as Mesh;\r\n let metadata: Nullable<IExtensionMetadata> = null;\r\n let newRoot: Nullable<Node> = newMesh;\r\n\r\n // Find root to get medata\r\n do {\r\n newRoot = newRoot!.parent;\r\n if (!newRoot) {\r\n return;\r\n }\r\n metadata = KHR_materials_variants._GetExtensionMetadata(newRoot as Mesh);\r\n } while (metadata === null);\r\n\r\n // Need to clone the metadata on the root (first time only)\r\n if (root && metadata === KHR_materials_variants._GetExtensionMetadata(root)) {\r\n // Copy main metadata\r\n newRoot._internalMetadata = {};\r\n for (const key in root._internalMetadata) {\r\n newRoot._internalMetadata[key] = root._internalMetadata[key];\r\n }\r\n\r\n // Copy the gltf metadata\r\n newRoot._internalMetadata.gltf = [];\r\n for (const key in root._internalMetadata.gltf) {\r\n newRoot._internalMetadata.gltf[key] = root._internalMetadata.gltf[key];\r\n }\r\n\r\n // Duplicate the extension specific metadata\r\n newRoot._internalMetadata.gltf[NAME] = { lastSelected: null, original: [], variants: {} };\r\n for (const original of metadata.original) {\r\n newRoot._internalMetadata.gltf[NAME].original.push({\r\n mesh: original.mesh,\r\n material: original.material,\r\n });\r\n }\r\n for (const key in metadata.variants) {\r\n if (Object.prototype.hasOwnProperty.call(metadata.variants, key)) {\r\n newRoot._internalMetadata.gltf[NAME].variants[key] = [];\r\n for (const variantEntry of metadata.variants[key]) {\r\n newRoot._internalMetadata.gltf[NAME].variants[key].push({\r\n mesh: variantEntry.mesh,\r\n material: variantEntry.material,\r\n });\r\n }\r\n }\r\n }\r\n\r\n metadata = newRoot._internalMetadata.gltf[NAME];\r\n }\r\n\r\n // Relocate\r\n for (const target of metadata!.original) {\r\n if (target.mesh === babylonMesh) {\r\n target.mesh = newMesh;\r\n }\r\n }\r\n for (const target of metadata!.variants[variant.name]) {\r\n if (target.mesh === babylonMesh) {\r\n target.mesh = newMesh;\r\n }\r\n }\r\n });\r\n }\r\n })\r\n );\r\n }\r\n }\r\n })\r\n );\r\n return Promise.all(promises).then(([babylonMesh]) => {\r\n return babylonMesh;\r\n });\r\n });\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_variants(loader));\r\n"]}
@@ -144,5 +144,13 @@ export function registerBuiltInGLTFExtensions() {
144
144
  const { KHR_node_hoverability } = await import("./KHR_node_hoverability.js");
145
145
  return new KHR_node_hoverability(loader);
146
146
  });
147
+ registerGLTFExtension("KHR_interactivity", true, async (loader) => {
148
+ const { KHR_interactivity } = await import("./KHR_interactivity.js");
149
+ return new KHR_interactivity(loader);
150
+ });
151
+ registerGLTFExtension("KHR_node_selectability", true, async (loader) => {
152
+ const { KHR_node_selectability } = await import("./KHR_node_selectability.js");
153
+ return new KHR_node_selectability(loader);
154
+ });
147
155
  }
148
156
  //# sourceMappingURL=dynamic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/dynamic.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { registerGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\n/**\r\n * Registers the built-in glTF 2.0 extension async factories, which dynamically imports and loads each glTF extension on demand (e.g. only when a glTF model uses the extension).\r\n */\r\nexport function registerBuiltInGLTFExtensions() {\r\n registerGLTFExtension(\"EXT_lights_image_based\", true, async (loader) => {\r\n const { EXT_lights_image_based } = await import(\"./EXT_lights_image_based\");\r\n return new EXT_lights_image_based(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_mesh_gpu_instancing\", true, async (loader) => {\r\n const { EXT_mesh_gpu_instancing } = await import(\"./EXT_mesh_gpu_instancing\");\r\n return new EXT_mesh_gpu_instancing(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_meshopt_compression\", true, async (loader) => {\r\n const { EXT_meshopt_compression } = await import(\"./EXT_meshopt_compression\");\r\n return new EXT_meshopt_compression(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_texture_avif\", true, async (loader) => {\r\n const { EXT_texture_avif } = await import(\"./EXT_texture_avif\");\r\n return new EXT_texture_avif(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_texture_webp\", true, async (loader) => {\r\n const { EXT_texture_webp } = await import(\"./EXT_texture_webp\");\r\n return new EXT_texture_webp(loader);\r\n });\r\n\r\n registerGLTFExtension(\"ExtrasAsMetadata\", false, async (loader) => {\r\n const { ExtrasAsMetadata } = await import(\"./ExtrasAsMetadata\");\r\n return new ExtrasAsMetadata(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_animation_pointer\", true, async (loader) => {\r\n const { KHR_animation_pointer } = await import(\"./KHR_animation_pointer\");\r\n return new KHR_animation_pointer(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_draco_mesh_compression\", true, async (loader) => {\r\n const { KHR_draco_mesh_compression } = await import(\"./KHR_draco_mesh_compression\");\r\n return new KHR_draco_mesh_compression(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_interactivity\", true, async (loader) => {\r\n const { KHR_interactivity } = await import(\"./KHR_interactivity\");\r\n return new KHR_interactivity(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_lights_punctual\", true, async (loader) => {\r\n const { KHR_lights } = await import(\"./KHR_lights_punctual\");\r\n return new KHR_lights(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_lights_ies\", true, async (loader) => {\r\n const { EXT_lights_ies } = await import(\"./EXT_lights_ies\");\r\n return new EXT_lights_ies(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_anisotropy\", true, async (loader) => {\r\n const { KHR_materials_anisotropy } = await import(\"./KHR_materials_anisotropy\");\r\n return new KHR_materials_anisotropy(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_clearcoat\", true, async (loader) => {\r\n const { KHR_materials_clearcoat } = await import(\"./KHR_materials_clearcoat\");\r\n return new KHR_materials_clearcoat(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_diffuse_transmission\", true, async (loader) => {\r\n const { KHR_materials_diffuse_transmission } = await import(\"./KHR_materials_diffuse_transmission\");\r\n return new KHR_materials_diffuse_transmission(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_dispersion\", true, async (loader) => {\r\n const { KHR_materials_dispersion } = await import(\"./KHR_materials_dispersion\");\r\n return new KHR_materials_dispersion(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_emissive_strength\", true, async (loader) => {\r\n const { KHR_materials_emissive_strength } = await import(\"./KHR_materials_emissive_strength\");\r\n return new KHR_materials_emissive_strength(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_ior\", true, async (loader) => {\r\n const { KHR_materials_ior } = await import(\"./KHR_materials_ior\");\r\n return new KHR_materials_ior(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_iridescence\", true, async (loader) => {\r\n const { KHR_materials_iridescence } = await import(\"./KHR_materials_iridescence\");\r\n return new KHR_materials_iridescence(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_pbrSpecularGlossiness\", true, async (loader) => {\r\n const { KHR_materials_pbrSpecularGlossiness } = await import(\"./KHR_materials_pbrSpecularGlossiness\");\r\n return new KHR_materials_pbrSpecularGlossiness(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_sheen\", true, async (loader) => {\r\n const { KHR_materials_sheen } = await import(\"./KHR_materials_sheen\");\r\n return new KHR_materials_sheen(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_specular\", true, async (loader) => {\r\n const { KHR_materials_specular } = await import(\"./KHR_materials_specular\");\r\n return new KHR_materials_specular(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_transmission\", true, async (loader) => {\r\n const { KHR_materials_transmission } = await import(\"./KHR_materials_transmission\");\r\n return new KHR_materials_transmission(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_unlit\", true, async (loader) => {\r\n const { KHR_materials_unlit } = await import(\"./KHR_materials_unlit\");\r\n return new KHR_materials_unlit(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_variants\", true, async (loader) => {\r\n const { KHR_materials_variants } = await import(\"./KHR_materials_variants\");\r\n return new KHR_materials_variants(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_volume\", true, async (loader) => {\r\n const { KHR_materials_volume } = await import(\"./KHR_materials_volume\");\r\n return new KHR_materials_volume(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_mesh_quantization\", true, async (loader) => {\r\n const { KHR_mesh_quantization } = await import(\"./KHR_mesh_quantization\");\r\n return new KHR_mesh_quantization(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_texture_basisu\", true, async (loader) => {\r\n const { KHR_texture_basisu } = await import(\"./KHR_texture_basisu\");\r\n return new KHR_texture_basisu(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_texture_transform\", true, async (loader) => {\r\n const { KHR_texture_transform } = await import(\"./KHR_texture_transform\");\r\n return new KHR_texture_transform(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_xmp_json_ld\", true, async (loader) => {\r\n const { KHR_xmp_json_ld } = await import(\"./KHR_xmp_json_ld\");\r\n return new KHR_xmp_json_ld(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_audio_emitter\", true, async (loader) => {\r\n const { MSFT_audio_emitter } = await import(\"./MSFT_audio_emitter\");\r\n return new MSFT_audio_emitter(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_lod\", true, async (loader) => {\r\n const { MSFT_lod } = await import(\"./MSFT_lod\");\r\n return new MSFT_lod(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_minecraftMesh\", true, async (loader) => {\r\n const { MSFT_minecraftMesh } = await import(\"./MSFT_minecraftMesh\");\r\n return new MSFT_minecraftMesh(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_sRGBFactors\", true, async (loader) => {\r\n const { MSFT_sRGBFactors } = await import(\"./MSFT_sRGBFactors\");\r\n return new MSFT_sRGBFactors(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_node_visibility\", true, async (loader) => {\r\n const { KHR_node_visibility } = await import(\"./KHR_node_visibility\");\r\n return new KHR_node_visibility(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_node_hoverability\", true, async (loader) => {\r\n const { KHR_node_hoverability } = await import(\"./KHR_node_hoverability\");\r\n return new KHR_node_hoverability(loader);\r\n });\r\n}\r\n"]}
1
+ {"version":3,"file":"dynamic.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/dynamic.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { registerGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\n/**\r\n * Registers the built-in glTF 2.0 extension async factories, which dynamically imports and loads each glTF extension on demand (e.g. only when a glTF model uses the extension).\r\n */\r\nexport function registerBuiltInGLTFExtensions() {\r\n registerGLTFExtension(\"EXT_lights_image_based\", true, async (loader) => {\r\n const { EXT_lights_image_based } = await import(\"./EXT_lights_image_based\");\r\n return new EXT_lights_image_based(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_mesh_gpu_instancing\", true, async (loader) => {\r\n const { EXT_mesh_gpu_instancing } = await import(\"./EXT_mesh_gpu_instancing\");\r\n return new EXT_mesh_gpu_instancing(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_meshopt_compression\", true, async (loader) => {\r\n const { EXT_meshopt_compression } = await import(\"./EXT_meshopt_compression\");\r\n return new EXT_meshopt_compression(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_texture_avif\", true, async (loader) => {\r\n const { EXT_texture_avif } = await import(\"./EXT_texture_avif\");\r\n return new EXT_texture_avif(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_texture_webp\", true, async (loader) => {\r\n const { EXT_texture_webp } = await import(\"./EXT_texture_webp\");\r\n return new EXT_texture_webp(loader);\r\n });\r\n\r\n registerGLTFExtension(\"ExtrasAsMetadata\", false, async (loader) => {\r\n const { ExtrasAsMetadata } = await import(\"./ExtrasAsMetadata\");\r\n return new ExtrasAsMetadata(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_animation_pointer\", true, async (loader) => {\r\n const { KHR_animation_pointer } = await import(\"./KHR_animation_pointer\");\r\n return new KHR_animation_pointer(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_draco_mesh_compression\", true, async (loader) => {\r\n const { KHR_draco_mesh_compression } = await import(\"./KHR_draco_mesh_compression\");\r\n return new KHR_draco_mesh_compression(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_interactivity\", true, async (loader) => {\r\n const { KHR_interactivity } = await import(\"./KHR_interactivity\");\r\n return new KHR_interactivity(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_lights_punctual\", true, async (loader) => {\r\n const { KHR_lights } = await import(\"./KHR_lights_punctual\");\r\n return new KHR_lights(loader);\r\n });\r\n\r\n registerGLTFExtension(\"EXT_lights_ies\", true, async (loader) => {\r\n const { EXT_lights_ies } = await import(\"./EXT_lights_ies\");\r\n return new EXT_lights_ies(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_anisotropy\", true, async (loader) => {\r\n const { KHR_materials_anisotropy } = await import(\"./KHR_materials_anisotropy\");\r\n return new KHR_materials_anisotropy(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_clearcoat\", true, async (loader) => {\r\n const { KHR_materials_clearcoat } = await import(\"./KHR_materials_clearcoat\");\r\n return new KHR_materials_clearcoat(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_diffuse_transmission\", true, async (loader) => {\r\n const { KHR_materials_diffuse_transmission } = await import(\"./KHR_materials_diffuse_transmission\");\r\n return new KHR_materials_diffuse_transmission(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_dispersion\", true, async (loader) => {\r\n const { KHR_materials_dispersion } = await import(\"./KHR_materials_dispersion\");\r\n return new KHR_materials_dispersion(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_emissive_strength\", true, async (loader) => {\r\n const { KHR_materials_emissive_strength } = await import(\"./KHR_materials_emissive_strength\");\r\n return new KHR_materials_emissive_strength(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_ior\", true, async (loader) => {\r\n const { KHR_materials_ior } = await import(\"./KHR_materials_ior\");\r\n return new KHR_materials_ior(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_iridescence\", true, async (loader) => {\r\n const { KHR_materials_iridescence } = await import(\"./KHR_materials_iridescence\");\r\n return new KHR_materials_iridescence(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_pbrSpecularGlossiness\", true, async (loader) => {\r\n const { KHR_materials_pbrSpecularGlossiness } = await import(\"./KHR_materials_pbrSpecularGlossiness\");\r\n return new KHR_materials_pbrSpecularGlossiness(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_sheen\", true, async (loader) => {\r\n const { KHR_materials_sheen } = await import(\"./KHR_materials_sheen\");\r\n return new KHR_materials_sheen(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_specular\", true, async (loader) => {\r\n const { KHR_materials_specular } = await import(\"./KHR_materials_specular\");\r\n return new KHR_materials_specular(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_transmission\", true, async (loader) => {\r\n const { KHR_materials_transmission } = await import(\"./KHR_materials_transmission\");\r\n return new KHR_materials_transmission(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_unlit\", true, async (loader) => {\r\n const { KHR_materials_unlit } = await import(\"./KHR_materials_unlit\");\r\n return new KHR_materials_unlit(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_variants\", true, async (loader) => {\r\n const { KHR_materials_variants } = await import(\"./KHR_materials_variants\");\r\n return new KHR_materials_variants(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_materials_volume\", true, async (loader) => {\r\n const { KHR_materials_volume } = await import(\"./KHR_materials_volume\");\r\n return new KHR_materials_volume(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_mesh_quantization\", true, async (loader) => {\r\n const { KHR_mesh_quantization } = await import(\"./KHR_mesh_quantization\");\r\n return new KHR_mesh_quantization(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_texture_basisu\", true, async (loader) => {\r\n const { KHR_texture_basisu } = await import(\"./KHR_texture_basisu\");\r\n return new KHR_texture_basisu(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_texture_transform\", true, async (loader) => {\r\n const { KHR_texture_transform } = await import(\"./KHR_texture_transform\");\r\n return new KHR_texture_transform(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_xmp_json_ld\", true, async (loader) => {\r\n const { KHR_xmp_json_ld } = await import(\"./KHR_xmp_json_ld\");\r\n return new KHR_xmp_json_ld(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_audio_emitter\", true, async (loader) => {\r\n const { MSFT_audio_emitter } = await import(\"./MSFT_audio_emitter\");\r\n return new MSFT_audio_emitter(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_lod\", true, async (loader) => {\r\n const { MSFT_lod } = await import(\"./MSFT_lod\");\r\n return new MSFT_lod(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_minecraftMesh\", true, async (loader) => {\r\n const { MSFT_minecraftMesh } = await import(\"./MSFT_minecraftMesh\");\r\n return new MSFT_minecraftMesh(loader);\r\n });\r\n\r\n registerGLTFExtension(\"MSFT_sRGBFactors\", true, async (loader) => {\r\n const { MSFT_sRGBFactors } = await import(\"./MSFT_sRGBFactors\");\r\n return new MSFT_sRGBFactors(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_node_visibility\", true, async (loader) => {\r\n const { KHR_node_visibility } = await import(\"./KHR_node_visibility\");\r\n return new KHR_node_visibility(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_node_hoverability\", true, async (loader) => {\r\n const { KHR_node_hoverability } = await import(\"./KHR_node_hoverability\");\r\n return new KHR_node_hoverability(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_interactivity\", true, async (loader) => {\r\n const { KHR_interactivity } = await import(\"./KHR_interactivity\");\r\n return new KHR_interactivity(loader);\r\n });\r\n\r\n registerGLTFExtension(\"KHR_node_selectability\", true, async (loader) => {\r\n const { KHR_node_selectability } = await import(\"./KHR_node_selectability\");\r\n return new KHR_node_selectability(loader);\r\n });\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/loaders",
3
- "version": "7.53.1",
3
+ "version": "7.53.3",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
@@ -18,10 +18,10 @@
18
18
  "postcompile": "build-tools -c add-js-to-es6"
19
19
  },
20
20
  "devDependencies": {
21
- "@babylonjs/core": "^7.53.1",
21
+ "@babylonjs/core": "^7.53.3",
22
22
  "@dev/build-tools": "^1.0.0",
23
23
  "@lts/loaders": "^1.0.0",
24
- "babylonjs-gltf2interface": "^7.53.1"
24
+ "babylonjs-gltf2interface": "^7.53.3"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "@babylonjs/core": "^7.0.0",