@onerjs/loaders 8.51.4 → 8.51.5
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.
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +8 -14
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
- package/glTF/2.0/glTFLoader.d.ts +2 -0
- package/glTF/2.0/glTFLoader.js +25 -3
- package/glTF/2.0/glTFLoader.js.map +1 -1
- package/glTF/2.0/materialLoadingAdapter.d.ts +24 -2
- package/glTF/2.0/materialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/openpbrMaterialLoadingAdapter.d.ts +25 -1
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js +179 -26
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +18 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.js +55 -5
- package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Color3 } from "@onerjs/core/Maths/math.color.js";
|
|
2
|
-
import { PBRMaterial } from "@onerjs/core/Materials/PBR/pbrMaterial.js";
|
|
3
2
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
4
3
|
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
|
5
4
|
const NAME = "KHR_materials_pbrSpecularGlossiness";
|
|
@@ -43,34 +42,29 @@ export class KHR_materials_pbrSpecularGlossiness {
|
|
|
43
42
|
}
|
|
44
43
|
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
45
44
|
_loadSpecularGlossinessPropertiesAsync(context, properties, babylonMaterial) {
|
|
46
|
-
|
|
47
|
-
throw new Error(`${context}: Material type not supported`);
|
|
48
|
-
}
|
|
45
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
|
49
46
|
const promises = new Array();
|
|
50
|
-
|
|
51
|
-
babylonMaterial.roughness = null;
|
|
47
|
+
adapter.configureSpecularGlossiness();
|
|
52
48
|
if (properties.diffuseFactor) {
|
|
53
|
-
|
|
49
|
+
adapter.baseColor = Color3.FromArray(properties.diffuseFactor);
|
|
54
50
|
babylonMaterial.alpha = properties.diffuseFactor[3];
|
|
55
51
|
}
|
|
56
52
|
else {
|
|
57
|
-
|
|
53
|
+
adapter.baseColor = Color3.White();
|
|
58
54
|
}
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
adapter.specularColor = properties.specularFactor ? Color3.FromArray(properties.specularFactor) : Color3.White();
|
|
56
|
+
adapter.glossiness = properties.glossinessFactor == undefined ? 1 : properties.glossinessFactor;
|
|
61
57
|
if (properties.diffuseTexture) {
|
|
62
58
|
promises.push(this._loader.loadTextureInfoAsync(`${context}/diffuseTexture`, properties.diffuseTexture, (texture) => {
|
|
63
59
|
texture.name = `${babylonMaterial.name} (Diffuse)`;
|
|
64
|
-
|
|
60
|
+
adapter.baseColorTexture = texture;
|
|
65
61
|
}));
|
|
66
62
|
}
|
|
67
63
|
if (properties.specularGlossinessTexture) {
|
|
68
64
|
promises.push(this._loader.loadTextureInfoAsync(`${context}/specularGlossinessTexture`, properties.specularGlossinessTexture, (texture) => {
|
|
69
65
|
texture.name = `${babylonMaterial.name} (Specular Glossiness)`;
|
|
70
|
-
|
|
71
|
-
babylonMaterial.reflectivityTexture.hasAlpha = true;
|
|
66
|
+
adapter.specularColorTexture = texture;
|
|
72
67
|
}));
|
|
73
|
-
babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;
|
|
74
68
|
}
|
|
75
69
|
// eslint-disable-next-line github/no-then
|
|
76
70
|
return Promise.all(promises).then(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_pbrSpecularGlossiness.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"KHR_materials_pbrSpecularGlossiness.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,qCAAqC,CAAC;AAanD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,mCAAmC;IAkB5C;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAqC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACzI,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAChG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YACzG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAC7E,0CAA0C;YAC1C,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,sCAAsC,CAAC,OAAe,EAAE,UAA8C,EAAE,eAAyB;QACrI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,OAAO,CAAC,2BAA2B,EAAE,CAAC;QAEtC,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/D,eAAe,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjH,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,gBAAgB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAEhG,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,iBAAiB,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClG,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,YAAY,CAAC;gBACnD,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC;YACvC,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,IAAI,UAAU,CAAC,yBAAyB,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,4BAA4B,EAAE,UAAU,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,wBAAwB,CAAC;gBAC/D,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC;YAC3C,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChD,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,mCAAmC,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type Material } from \"core/Materials/material\";\r\n\r\nimport { type IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { type IKHRMaterialsPbrSpecularGlossiness } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_pbrSpecularGlossiness\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line jsdoc/require-jsdoc, @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_pbrSpecularGlossiness extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_pbrSpecularGlossiness\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_pbrSpecularGlossiness implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 200;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsPbrSpecularGlossiness>(context, material, this.name, async (extensionContext, extension) => {\r\n const promises = new Array<Promise<any>>();\r\n promises.push(this._loader.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));\r\n promises.push(this._loadSpecularGlossinessPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n this._loader.loadMaterialAlphaProperties(context, material, babylonMaterial);\r\n // eslint-disable-next-line github/no-then\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadSpecularGlossinessPropertiesAsync(context: string, properties: IKHRMaterialsPbrSpecularGlossiness, babylonMaterial: Material): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n const promises = new Array<Promise<any>>();\r\n\r\n adapter.configureSpecularGlossiness();\r\n\r\n if (properties.diffuseFactor) {\r\n adapter.baseColor = Color3.FromArray(properties.diffuseFactor);\r\n babylonMaterial.alpha = properties.diffuseFactor[3];\r\n } else {\r\n adapter.baseColor = Color3.White();\r\n }\r\n\r\n adapter.specularColor = properties.specularFactor ? Color3.FromArray(properties.specularFactor) : Color3.White();\r\n adapter.glossiness = properties.glossinessFactor == undefined ? 1 : properties.glossinessFactor;\r\n\r\n if (properties.diffuseTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/diffuseTexture`, properties.diffuseTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Diffuse)`;\r\n adapter.baseColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.specularGlossinessTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/specularGlossinessTexture`, properties.specularGlossinessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Specular Glossiness)`;\r\n adapter.specularColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n return Promise.all(promises).then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_pbrSpecularGlossiness(loader));\r\n"]}
|
package/glTF/2.0/glTFLoader.d.ts
CHANGED
|
@@ -72,6 +72,8 @@ type PBRMaterialImplementation = {
|
|
|
72
72
|
export declare class GLTFLoader implements IGLTFLoader {
|
|
73
73
|
/** @internal */
|
|
74
74
|
readonly _completePromises: Promise<unknown>[];
|
|
75
|
+
/** AbortController used to cancel in-flight finalizeAsync() calls when dispose() is called. */
|
|
76
|
+
private _finalizeController;
|
|
75
77
|
/** @internal */
|
|
76
78
|
_assetContainer: Nullable<AssetContainer>;
|
|
77
79
|
/** Storage */
|
package/glTF/2.0/glTFLoader.js
CHANGED
|
@@ -182,6 +182,8 @@ export class GLTFLoader {
|
|
|
182
182
|
constructor(parent) {
|
|
183
183
|
/** @internal */
|
|
184
184
|
this._completePromises = new Array();
|
|
185
|
+
/** AbortController used to cancel in-flight finalizeAsync() calls when dispose() is called. */
|
|
186
|
+
this._finalizeController = null;
|
|
185
187
|
/** @internal */
|
|
186
188
|
this._assetContainer = null;
|
|
187
189
|
/** Storage */
|
|
@@ -234,12 +236,11 @@ export class GLTFLoader {
|
|
|
234
236
|
return;
|
|
235
237
|
}
|
|
236
238
|
this._disposed = true;
|
|
239
|
+
this._finalizeController?.abort();
|
|
240
|
+
this._finalizeController = null;
|
|
237
241
|
this._completePromises.length = 0;
|
|
238
242
|
this._extensions.forEach((extension) => extension.dispose && extension.dispose());
|
|
239
243
|
this._extensions.length = 0;
|
|
240
|
-
for (const adapter of Array.from(this._materialAdapters)) {
|
|
241
|
-
adapter.finalize?.();
|
|
242
|
-
}
|
|
243
244
|
this._materialAdapters.clear();
|
|
244
245
|
this._gltf = null; // TODO
|
|
245
246
|
this._bin = null;
|
|
@@ -378,6 +379,27 @@ export class GLTFLoader {
|
|
|
378
379
|
mat.maxSimultaneousLights = Math.max(mat.maxSimultaneousLights, this._babylonScene.lights.length);
|
|
379
380
|
}
|
|
380
381
|
}
|
|
382
|
+
// Finalize all material adapters. finalizeAsync() may return a Promise for async
|
|
383
|
+
// work (e.g. GPU texture processing); push any such promises into
|
|
384
|
+
// _completePromises so they are awaited before the COMPLETE state is reached.
|
|
385
|
+
// Fall back to the deprecated finalize() for third-party adapters that have not
|
|
386
|
+
// yet migrated, logging a warning so authors know to update.
|
|
387
|
+
// An AbortController is created here and aborted in dispose() so that adapters
|
|
388
|
+
// can detect mid-flight disposal and clean up intermediate resources early.
|
|
389
|
+
this._finalizeController = new AbortController();
|
|
390
|
+
const finalizeSignal = this._finalizeController.signal;
|
|
391
|
+
for (const adapter of Array.from(this._materialAdapters)) {
|
|
392
|
+
if (adapter.finalizeAsync) {
|
|
393
|
+
const finalizePromise = adapter.finalizeAsync(finalizeSignal);
|
|
394
|
+
if (finalizePromise) {
|
|
395
|
+
this._completePromises.push(finalizePromise);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
else if (adapter.finalize) {
|
|
399
|
+
Logger.Warn("GLTFLoader: IMaterialLoadingAdapter.finalize() is deprecated. Implement finalizeAsync() instead.");
|
|
400
|
+
adapter.finalize();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
381
403
|
this._extensionsOnReady();
|
|
382
404
|
this._parent._setState(GLTFLoaderState.READY);
|
|
383
405
|
if (!this._skipStartAnimationStep) {
|