@babylonjs/loaders 8.34.0 → 8.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +0 -3
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +0 -80
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +49 -0
- package/glTF/2.0/Extensions/KHR_materials_coat.js +120 -0
- package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +42 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.js +77 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -0
- package/glTF/2.0/Extensions/index.d.ts +2 -0
- package/glTF/2.0/Extensions/index.js +2 -0
- package/glTF/2.0/Extensions/index.js.map +1 -1
- package/glTF/2.0/materialLoadingAdapter.d.ts +50 -46
- package/glTF/2.0/materialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/openpbrMaterialLoadingAdapter.d.ts +5 -0
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js +11 -0
- package/glTF/2.0/openpbrMaterialLoadingAdapter.js.map +1 -1
- package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +5 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.js +13 -1
- package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -1
- package/package.json +3 -3
|
@@ -40,7 +40,4 @@ 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;
|
|
46
43
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { GLTFLoader } from "../glTFLoader.js";
|
|
2
2
|
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
|
3
|
-
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
4
3
|
const NAME = "KHR_materials_clearcoat";
|
|
5
4
|
/**
|
|
6
5
|
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/README.md)
|
|
@@ -36,27 +35,6 @@ export class KHR_materials_clearcoat {
|
|
|
36
35
|
const promises = new Array();
|
|
37
36
|
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
|
|
38
37
|
promises.push(this._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));
|
|
39
|
-
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
|
40
|
-
if (extension.extensions && extension.extensions.KHR_materials_clearcoat_darkening) {
|
|
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;
|
|
49
|
-
}
|
|
50
|
-
adapter.coatIor = ior;
|
|
51
|
-
}
|
|
52
|
-
if (extension.extensions && extension.extensions.KHR_materials_clearcoat_anisotropy) {
|
|
53
|
-
const anisotropyExtension = extension.extensions.KHR_materials_clearcoat_anisotropy;
|
|
54
|
-
promises.push(this._loadClearCoatAnisotropyPropertiesAsync(extensionContext, anisotropyExtension, babylonMaterial));
|
|
55
|
-
}
|
|
56
|
-
if (extension.extensions && extension.extensions.KHR_materials_clearcoat_color) {
|
|
57
|
-
const colorExtension = extension.extensions.KHR_materials_clearcoat_color;
|
|
58
|
-
promises.push(this._loadClearCoatColorPropertiesAsync(extensionContext, colorExtension, babylonMaterial));
|
|
59
|
-
}
|
|
60
38
|
await Promise.all(promises);
|
|
61
39
|
});
|
|
62
40
|
}
|
|
@@ -96,64 +74,6 @@ export class KHR_materials_clearcoat {
|
|
|
96
74
|
// eslint-disable-next-line github/no-then
|
|
97
75
|
return Promise.all(promises).then(() => { });
|
|
98
76
|
}
|
|
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
|
-
}
|
|
157
77
|
}
|
|
158
78
|
unregisterGLTFExtension(NAME);
|
|
159
79
|
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 {\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"]}
|
|
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 { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\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 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\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat(loader));\r\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import type { Material } from "@babylonjs/core/Materials/material.js";
|
|
3
|
+
import type { IMaterial } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
|
+
declare module "../../glTFFileLoader.js" {
|
|
7
|
+
interface GLTFLoaderExtensionOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Defines options for the KHR_materials_coat extension.
|
|
10
|
+
*/
|
|
11
|
+
["KHR_materials_coat"]: {};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_coat/README.md)
|
|
16
|
+
* [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)
|
|
17
|
+
*/
|
|
18
|
+
export declare class KHR_materials_coat implements IGLTFLoaderExtension {
|
|
19
|
+
/**
|
|
20
|
+
* The name of this extension.
|
|
21
|
+
*/
|
|
22
|
+
readonly name = "KHR_materials_coat";
|
|
23
|
+
/**
|
|
24
|
+
* Defines whether this extension is enabled.
|
|
25
|
+
*/
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Defines a number that determines the order the extensions are applied.
|
|
29
|
+
*/
|
|
30
|
+
order: number;
|
|
31
|
+
private _loader;
|
|
32
|
+
/**
|
|
33
|
+
* Defines whether the KHR_materials_openpbr extension is used, indicating that
|
|
34
|
+
* the material should be interpreted as OpenPBR (for coat, this might be necessary
|
|
35
|
+
* to interpret anisotropy correctly).
|
|
36
|
+
*/
|
|
37
|
+
private useOpenPBR;
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
constructor(loader: GLTFLoader);
|
|
42
|
+
/** @internal */
|
|
43
|
+
dispose(): void;
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>>;
|
|
48
|
+
private _loadCoatPropertiesAsync;
|
|
49
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
|
2
|
+
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
|
3
|
+
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
4
|
+
const NAME = "KHR_materials_coat";
|
|
5
|
+
/**
|
|
6
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_coat/README.md)
|
|
7
|
+
* [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)
|
|
8
|
+
*/
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
10
|
+
export class KHR_materials_coat {
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
constructor(loader) {
|
|
15
|
+
/**
|
|
16
|
+
* The name of this extension.
|
|
17
|
+
*/
|
|
18
|
+
this.name = NAME;
|
|
19
|
+
/**
|
|
20
|
+
* Defines a number that determines the order the extensions are applied.
|
|
21
|
+
*/
|
|
22
|
+
this.order = 191;
|
|
23
|
+
/**
|
|
24
|
+
* Defines whether the KHR_materials_openpbr extension is used, indicating that
|
|
25
|
+
* the material should be interpreted as OpenPBR (for coat, this might be necessary
|
|
26
|
+
* to interpret anisotropy correctly).
|
|
27
|
+
*/
|
|
28
|
+
this.useOpenPBR = false;
|
|
29
|
+
this._loader = loader;
|
|
30
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
31
|
+
}
|
|
32
|
+
/** @internal */
|
|
33
|
+
dispose() {
|
|
34
|
+
this._loader = null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
40
|
+
loadMaterialPropertiesAsync(context, material, babylonMaterial) {
|
|
41
|
+
return GLTFLoader.LoadExtensionAsync(context, material, this.name, async (extensionContext, extension) => {
|
|
42
|
+
const promises = new Array();
|
|
43
|
+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
|
|
44
|
+
if (material.extensions && material.extensions["KHR_materials_openpbr"]) {
|
|
45
|
+
this.useOpenPBR = true;
|
|
46
|
+
}
|
|
47
|
+
promises.push(this._loadCoatPropertiesAsync(extensionContext, extension, babylonMaterial));
|
|
48
|
+
await Promise.all(promises);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
52
|
+
_loadCoatPropertiesAsync(context, properties, babylonMaterial) {
|
|
53
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
|
54
|
+
const promises = new Array();
|
|
55
|
+
// Set non-texture properties immediately
|
|
56
|
+
adapter.configureCoat();
|
|
57
|
+
adapter.coatWeight = properties.coatFactor !== undefined ? properties.coatFactor : 0;
|
|
58
|
+
adapter.coatRoughness = properties.coatRoughnessFactor !== undefined ? properties.coatRoughnessFactor : 0;
|
|
59
|
+
// Load textures
|
|
60
|
+
if (properties.coatTexture) {
|
|
61
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/coatTexture`, properties.coatTexture, (texture) => {
|
|
62
|
+
texture.name = `${babylonMaterial.name} (Coat)`;
|
|
63
|
+
adapter.coatWeightTexture = texture;
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
if (properties.coatRoughnessTexture) {
|
|
67
|
+
properties.coatRoughnessTexture.nonColorData = true;
|
|
68
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/coatRoughnessTexture`, properties.coatRoughnessTexture, (texture) => {
|
|
69
|
+
texture.name = `${babylonMaterial.name} (Coat Roughness)`;
|
|
70
|
+
adapter.coatRoughnessTexture = texture;
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
if (properties.coatNormalTexture) {
|
|
74
|
+
properties.coatNormalTexture.nonColorData = true;
|
|
75
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/coatNormalTexture`, properties.coatNormalTexture, (texture) => {
|
|
76
|
+
texture.name = `${babylonMaterial.name} (Coat Normal)`;
|
|
77
|
+
adapter.geometryCoatNormalTexture = texture;
|
|
78
|
+
if (properties.coatNormalTexture?.scale != undefined) {
|
|
79
|
+
adapter.geometryCoatNormalTextureScale = properties.coatNormalTexture.scale;
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);
|
|
83
|
+
}
|
|
84
|
+
adapter.coatDarkening = properties.coatDarkeningFactor !== undefined ? properties.coatDarkeningFactor : 1;
|
|
85
|
+
adapter.coatIor = properties.coatIor !== undefined ? properties.coatIor : 1.5;
|
|
86
|
+
const colorFactor = Color3.White();
|
|
87
|
+
if (properties.coatColorFactor !== undefined) {
|
|
88
|
+
colorFactor.fromArray(properties.coatColorFactor);
|
|
89
|
+
}
|
|
90
|
+
adapter.coatColor = colorFactor;
|
|
91
|
+
if (properties.coatColorTexture) {
|
|
92
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/coatColorTexture`, properties.coatColorTexture, (texture) => {
|
|
93
|
+
texture.name = `${babylonMaterial.name} (Coat Color)`;
|
|
94
|
+
adapter.coatColorTexture = texture;
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
// Set non-texture properties immediately
|
|
98
|
+
const coatAnisotropyWeight = properties.coatAnisotropyStrength ?? 0;
|
|
99
|
+
const coatAnisotropyAngle = properties.coatAnisotropyRotation ?? 0;
|
|
100
|
+
adapter.coatRoughnessAnisotropy = coatAnisotropyWeight;
|
|
101
|
+
adapter.geometryCoatTangentAngle = coatAnisotropyAngle;
|
|
102
|
+
// Check if this is glTF-style anisotropy
|
|
103
|
+
if (!this.useOpenPBR) {
|
|
104
|
+
adapter.configureGltfStyleAnisotropy(true);
|
|
105
|
+
}
|
|
106
|
+
// Load texture if present
|
|
107
|
+
if (properties.coatAnisotropyTexture) {
|
|
108
|
+
properties.coatAnisotropyTexture.nonColorData = true;
|
|
109
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/coatAnisotropyTexture`, properties.coatAnisotropyTexture, (texture) => {
|
|
110
|
+
texture.name = `${babylonMaterial.name} (Coat Anisotropy)`;
|
|
111
|
+
adapter.geometryCoatTangentTexture = texture;
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
// eslint-disable-next-line github/no-then
|
|
115
|
+
return Promise.all(promises).then(() => { });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
unregisterGLTFExtension(NAME);
|
|
119
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_coat(loader));
|
|
120
|
+
//# sourceMappingURL=KHR_materials_coat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_materials_coat.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_coat.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 { IKHRMaterialsCoat } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nconst NAME = \"KHR_materials_coat\";\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_coat extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_coat\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_coat/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_coat 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 = 191;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * Defines whether the KHR_materials_openpbr extension is used, indicating that\r\n * the material should be interpreted as OpenPBR (for coat, this might be necessary\r\n * to interpret anisotropy correctly).\r\n */\r\n private useOpenPBR: boolean = false;\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<IKHRMaterialsCoat>(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 if (material.extensions && material.extensions[\"KHR_materials_openpbr\"]) {\r\n this.useOpenPBR = true;\r\n }\r\n promises.push(this._loadCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n private _loadCoatPropertiesAsync(context: string, properties: IKHRMaterialsCoat, 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.coatFactor !== undefined ? properties.coatFactor : 0;\r\n adapter.coatRoughness = properties.coatRoughnessFactor !== undefined ? properties.coatRoughnessFactor : 0;\r\n\r\n // Load textures\r\n if (properties.coatTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatTexture`, properties.coatTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat)`;\r\n adapter.coatWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatRoughnessTexture) {\r\n (properties.coatRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatRoughnessTexture`, properties.coatRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Roughness)`;\r\n adapter.coatRoughnessTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.coatNormalTexture) {\r\n (properties.coatNormalTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatNormalTexture`, properties.coatNormalTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Normal)`;\r\n adapter.geometryCoatNormalTexture = texture;\r\n if (properties.coatNormalTexture?.scale != undefined) {\r\n adapter.geometryCoatNormalTextureScale = properties.coatNormalTexture.scale;\r\n }\r\n })\r\n );\r\n adapter.setNormalMapInversions(!babylonMaterial.getScene().useRightHandedSystem, babylonMaterial.getScene().useRightHandedSystem);\r\n }\r\n\r\n adapter.coatDarkening = properties.coatDarkeningFactor !== undefined ? properties.coatDarkeningFactor : 1;\r\n adapter.coatIor = properties.coatIor !== undefined ? properties.coatIor : 1.5;\r\n\r\n const colorFactor = Color3.White();\r\n if (properties.coatColorFactor !== undefined) {\r\n colorFactor.fromArray(properties.coatColorFactor);\r\n }\r\n\r\n adapter.coatColor = colorFactor;\r\n\r\n if (properties.coatColorTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatColorTexture`, properties.coatColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat Color)`;\r\n adapter.coatColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n // Set non-texture properties immediately\r\n const coatAnisotropyWeight = properties.coatAnisotropyStrength ?? 0;\r\n const coatAnisotropyAngle = properties.coatAnisotropyRotation ?? 0;\r\n\r\n adapter.coatRoughnessAnisotropy = coatAnisotropyWeight;\r\n adapter.geometryCoatTangentAngle = coatAnisotropyAngle;\r\n\r\n // Check if this is glTF-style anisotropy\r\n if (!this.useOpenPBR) {\r\n adapter.configureGltfStyleAnisotropy(true);\r\n }\r\n\r\n // Load texture if present\r\n if (properties.coatAnisotropyTexture) {\r\n (properties.coatAnisotropyTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/coatAnisotropyTexture`, properties.coatAnisotropyTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Coat 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_coat(loader));\r\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import type { Material } from "@babylonjs/core/Materials/material.js";
|
|
3
|
+
import type { IMaterial } from "../glTFLoaderInterfaces.js";
|
|
4
|
+
import type { IGLTFLoaderExtension } from "../glTFLoaderExtension.js";
|
|
5
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
|
6
|
+
declare module "../../glTFFileLoader.js" {
|
|
7
|
+
interface GLTFLoaderExtensionOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Defines options for the KHR_materials_fuzz extension.
|
|
10
|
+
*/
|
|
11
|
+
["KHR_materials_fuzz"]: {};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* [Specification]
|
|
16
|
+
*/
|
|
17
|
+
export declare class KHR_materials_fuzz implements IGLTFLoaderExtension {
|
|
18
|
+
/**
|
|
19
|
+
* The name of this extension.
|
|
20
|
+
*/
|
|
21
|
+
readonly name = "KHR_materials_fuzz";
|
|
22
|
+
/**
|
|
23
|
+
* Defines whether this extension is enabled.
|
|
24
|
+
*/
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Defines a number that determines the order the extensions are applied.
|
|
28
|
+
*/
|
|
29
|
+
order: number;
|
|
30
|
+
private _loader;
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
constructor(loader: GLTFLoader);
|
|
35
|
+
/** @internal */
|
|
36
|
+
dispose(): void;
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>>;
|
|
41
|
+
private _loadFuzzPropertiesAsync;
|
|
42
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
|
2
|
+
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
3
|
+
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
|
4
|
+
const NAME = "KHR_materials_fuzz";
|
|
5
|
+
/**
|
|
6
|
+
* [Specification]
|
|
7
|
+
*/
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
9
|
+
export class KHR_materials_fuzz {
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
constructor(loader) {
|
|
14
|
+
/**
|
|
15
|
+
* The name of this extension.
|
|
16
|
+
*/
|
|
17
|
+
this.name = NAME;
|
|
18
|
+
/**
|
|
19
|
+
* Defines a number that determines the order the extensions are applied.
|
|
20
|
+
*/
|
|
21
|
+
this.order = 190;
|
|
22
|
+
this._loader = loader;
|
|
23
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
24
|
+
}
|
|
25
|
+
/** @internal */
|
|
26
|
+
dispose() {
|
|
27
|
+
this._loader = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
33
|
+
loadMaterialPropertiesAsync(context, material, babylonMaterial) {
|
|
34
|
+
return GLTFLoader.LoadExtensionAsync(context, material, this.name, async (extensionContext, extension) => {
|
|
35
|
+
const promises = new Array();
|
|
36
|
+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
|
|
37
|
+
promises.push(this._loadFuzzPropertiesAsync(extensionContext, extension, babylonMaterial));
|
|
38
|
+
// eslint-disable-next-line github/no-then
|
|
39
|
+
return await Promise.all(promises).then(() => { });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
|
43
|
+
_loadFuzzPropertiesAsync(context, properties, babylonMaterial) {
|
|
44
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
|
45
|
+
const promises = new Array();
|
|
46
|
+
adapter.configureFuzz();
|
|
47
|
+
// Set non-texture properties immediately
|
|
48
|
+
adapter.fuzzWeight = properties.fuzzFactor !== undefined ? properties.fuzzFactor : 0.0;
|
|
49
|
+
adapter.fuzzColor = properties.fuzzColorFactor !== undefined ? Color3.FromArray(properties.fuzzColorFactor) : Color3.White();
|
|
50
|
+
adapter.fuzzRoughness = properties.fuzzRoughnessFactor !== undefined ? properties.fuzzRoughnessFactor : 0.5;
|
|
51
|
+
// Load textures
|
|
52
|
+
if (properties.fuzzTexture) {
|
|
53
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/fuzzTexture`, properties.fuzzTexture, (texture) => {
|
|
54
|
+
texture.name = `${babylonMaterial.name} (Fuzz)`;
|
|
55
|
+
adapter.fuzzWeightTexture = texture;
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
if (properties.fuzzColorTexture) {
|
|
59
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/fuzzColorTexture`, properties.fuzzColorTexture, (texture) => {
|
|
60
|
+
texture.name = `${babylonMaterial.name} (Fuzz Color)`;
|
|
61
|
+
adapter.fuzzColorTexture = texture;
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
if (properties.fuzzRoughnessTexture) {
|
|
65
|
+
properties.fuzzRoughnessTexture.nonColorData = true;
|
|
66
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/fuzzRoughnessTexture`, properties.fuzzRoughnessTexture, (texture) => {
|
|
67
|
+
texture.name = `${babylonMaterial.name} (Fuzz Roughness)`;
|
|
68
|
+
adapter.fuzzRoughnessTexture = texture;
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
// eslint-disable-next-line github/no-then
|
|
72
|
+
return Promise.all(promises).then(() => { });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
unregisterGLTFExtension(NAME);
|
|
76
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_fuzz(loader));
|
|
77
|
+
//# sourceMappingURL=KHR_materials_fuzz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_materials_fuzz.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_fuzz.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 { Color3 } from \"core/Maths/math.color\";\r\nimport type { IKHRMaterialsFuzz } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_fuzz\";\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_fuzz extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_fuzz\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification]\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_fuzz 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<IKHRMaterialsFuzz>(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._loadFuzzPropertiesAsync(extensionContext, extension, 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 _loadFuzzPropertiesAsync(context: string, properties: IKHRMaterialsFuzz, 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.configureFuzz();\r\n\r\n // Set non-texture properties immediately\r\n adapter.fuzzWeight = properties.fuzzFactor !== undefined ? properties.fuzzFactor : 0.0;\r\n adapter.fuzzColor = properties.fuzzColorFactor !== undefined ? Color3.FromArray(properties.fuzzColorFactor) : Color3.White();\r\n adapter.fuzzRoughness = properties.fuzzRoughnessFactor !== undefined ? properties.fuzzRoughnessFactor : 0.5;\r\n\r\n // Load textures\r\n if (properties.fuzzTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/fuzzTexture`, properties.fuzzTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Fuzz)`;\r\n adapter.fuzzWeightTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.fuzzColorTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/fuzzColorTexture`, properties.fuzzColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Fuzz Color)`;\r\n adapter.fuzzColorTexture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.fuzzRoughnessTexture) {\r\n (properties.fuzzRoughnessTexture as ITextureInfo).nonColorData = true;\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/fuzzRoughnessTexture`, properties.fuzzRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Fuzz Roughness)`;\r\n adapter.fuzzRoughnessTexture = 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_fuzz(loader));\r\n"]}
|
|
@@ -11,10 +11,12 @@ export * from "./EXT_lights_area.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_coat.js";
|
|
14
15
|
export * from "./KHR_materials_iridescence.js";
|
|
15
16
|
export * from "./KHR_materials_anisotropy.js";
|
|
16
17
|
export * from "./KHR_materials_emissive_strength.js";
|
|
17
18
|
export * from "./KHR_materials_sheen.js";
|
|
19
|
+
export * from "./KHR_materials_fuzz.js";
|
|
18
20
|
export * from "./KHR_materials_specular.js";
|
|
19
21
|
export * from "./KHR_materials_ior.js";
|
|
20
22
|
export * from "./KHR_materials_variants.js";
|
|
@@ -12,10 +12,12 @@ export * from "./EXT_lights_area.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_coat.js";
|
|
15
16
|
export * from "./KHR_materials_iridescence.js";
|
|
16
17
|
export * from "./KHR_materials_anisotropy.js";
|
|
17
18
|
export * from "./KHR_materials_emissive_strength.js";
|
|
18
19
|
export * from "./KHR_materials_sheen.js";
|
|
20
|
+
export * from "./KHR_materials_fuzz.js";
|
|
19
21
|
export * from "./KHR_materials_specular.js";
|
|
20
22
|
export * from "./KHR_materials_ior.js";
|
|
21
23
|
export * from "./KHR_materials_variants.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,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,mBAAmB,CAAC;AAClC,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_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 \"./EXT_lights_area\";\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"]}
|
|
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,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,mBAAmB,CAAC;AAClC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,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_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 \"./EXT_lights_area\";\r\nexport * from \"./KHR_materials_pbrSpecularGlossiness\";\r\nexport * from \"./KHR_materials_unlit\";\r\nexport * from \"./KHR_materials_clearcoat\";\r\nexport * from \"./KHR_materials_coat\";\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_fuzz\";\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"]}
|