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