@onerjs/loaders 8.51.4 → 8.51.6
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 -1
- package/glTF/2.0/glTFLoader.js +12 -7
- package/glTF/2.0/glTFLoader.js.map +1 -1
- package/glTF/2.0/materialLoadingAdapter.d.ts +22 -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 +178 -26
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +24 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.js +60 -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
|
@@ -84,7 +84,8 @@ export declare class GLTFLoader implements IGLTFLoader {
|
|
|
84
84
|
_skipStartAnimationStep: boolean;
|
|
85
85
|
private readonly _parent;
|
|
86
86
|
private readonly _extensions;
|
|
87
|
-
|
|
87
|
+
/** @internal */
|
|
88
|
+
_disposed: boolean;
|
|
88
89
|
private _rootUrl;
|
|
89
90
|
private _fileName;
|
|
90
91
|
private _uniqueRootUrl;
|
package/glTF/2.0/glTFLoader.js
CHANGED
|
@@ -11,6 +11,7 @@ import { Material } from "@onerjs/core/Materials/material.js";
|
|
|
11
11
|
import { Texture } from "@onerjs/core/Materials/Textures/texture.js";
|
|
12
12
|
import { TransformNode } from "@onerjs/core/Meshes/transformNode.js";
|
|
13
13
|
import { Buffer, VertexBuffer } from "@onerjs/core/Buffers/buffer.js";
|
|
14
|
+
import { VertexBufferForEach, VertexBufferGetTypeByteLength } from "@onerjs/core/Buffers/buffer.pure.js";
|
|
14
15
|
import { Geometry } from "@onerjs/core/Meshes/geometry.js";
|
|
15
16
|
import { AbstractMesh } from "@onerjs/core/Meshes/abstractMesh.js";
|
|
16
17
|
import { Mesh } from "@onerjs/core/Meshes/mesh.js";
|
|
@@ -193,6 +194,7 @@ export class GLTFLoader {
|
|
|
193
194
|
/** @internal */
|
|
194
195
|
this._skipStartAnimationStep = false;
|
|
195
196
|
this._extensions = new Array();
|
|
197
|
+
/** @internal */
|
|
196
198
|
this._disposed = false;
|
|
197
199
|
this._rootUrl = null;
|
|
198
200
|
this._fileName = null;
|
|
@@ -237,9 +239,6 @@ export class GLTFLoader {
|
|
|
237
239
|
this._completePromises.length = 0;
|
|
238
240
|
this._extensions.forEach((extension) => extension.dispose && extension.dispose());
|
|
239
241
|
this._extensions.length = 0;
|
|
240
|
-
for (const adapter of Array.from(this._materialAdapters)) {
|
|
241
|
-
adapter.finalize?.();
|
|
242
|
-
}
|
|
243
242
|
this._materialAdapters.clear();
|
|
244
243
|
this._gltf = null; // TODO
|
|
245
244
|
this._bin = null;
|
|
@@ -378,6 +377,12 @@ export class GLTFLoader {
|
|
|
378
377
|
mat.maxSimultaneousLights = Math.max(mat.maxSimultaneousLights, this._babylonScene.lights.length);
|
|
379
378
|
}
|
|
380
379
|
}
|
|
380
|
+
// Finalize all material adapters. finalizeAsync() may return a Promise for async
|
|
381
|
+
// work (e.g. GPU texture processing); any returned Promise is pushed into
|
|
382
|
+
// _completePromises so it is awaited before the COMPLETE state is reached.
|
|
383
|
+
for (const adapter of Array.from(this._materialAdapters)) {
|
|
384
|
+
this._completePromises.push(adapter.finalizeAsync(this));
|
|
385
|
+
}
|
|
381
386
|
this._extensionsOnReady();
|
|
382
387
|
this._parent._setState(GLTFLoaderState.READY);
|
|
383
388
|
if (!this._skipStartAnimationStep) {
|
|
@@ -1630,7 +1635,7 @@ export class GLTFLoader {
|
|
|
1630
1635
|
return accessor._data;
|
|
1631
1636
|
}
|
|
1632
1637
|
const numComponents = GLTFLoader._GetNumComponents(context, accessor.type);
|
|
1633
|
-
const byteStride = numComponents *
|
|
1638
|
+
const byteStride = numComponents * VertexBufferGetTypeByteLength(accessor.componentType);
|
|
1634
1639
|
const length = numComponents * accessor.count;
|
|
1635
1640
|
if (accessor.bufferView == undefined) {
|
|
1636
1641
|
accessor._data = Promise.resolve(new constructor(length));
|
|
@@ -1643,7 +1648,7 @@ export class GLTFLoader {
|
|
|
1643
1648
|
}
|
|
1644
1649
|
else {
|
|
1645
1650
|
const typedArray = new constructor(length);
|
|
1646
|
-
|
|
1651
|
+
VertexBufferForEach(data, accessor.byteOffset || 0, bufferView.byteStride || byteStride, numComponents, accessor.componentType, typedArray.length, accessor.normalized || false, (value, index) => {
|
|
1647
1652
|
typedArray[index] = value;
|
|
1648
1653
|
});
|
|
1649
1654
|
return typedArray;
|
|
@@ -1669,7 +1674,7 @@ export class GLTFLoader {
|
|
|
1669
1674
|
else {
|
|
1670
1675
|
const sparseData = GLTFLoader._GetTypedArray(`${context}/sparse/values`, accessor.componentType, valuesData, sparse.values.byteOffset, sparseLength);
|
|
1671
1676
|
values = new constructor(sparseLength);
|
|
1672
|
-
|
|
1677
|
+
VertexBufferForEach(sparseData, 0, byteStride, numComponents, accessor.componentType, values.length, accessor.normalized || false, (value, index) => {
|
|
1673
1678
|
values[index] = value;
|
|
1674
1679
|
});
|
|
1675
1680
|
}
|
|
@@ -2227,7 +2232,7 @@ export class GLTFLoader {
|
|
|
2227
2232
|
const buffer = bufferView.buffer;
|
|
2228
2233
|
byteOffset = bufferView.byteOffset + (byteOffset || 0);
|
|
2229
2234
|
const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, componentType);
|
|
2230
|
-
const componentTypeLength =
|
|
2235
|
+
const componentTypeLength = VertexBufferGetTypeByteLength(componentType);
|
|
2231
2236
|
if (byteOffset % componentTypeLength !== 0) {
|
|
2232
2237
|
// HACK: Copy the buffer if byte offset is not a multiple of component type byte length.
|
|
2233
2238
|
Logger.Warn(`${context}: Copying buffer as byte offset (${byteOffset}) is not a multiple of component type byte length (${componentTypeLength})`);
|