@babylonjs/loaders 8.28.1 → 8.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/OBJ/solidParser.d.ts +8 -7
- package/OBJ/solidParser.js +95 -53
- package/OBJ/solidParser.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +1 -1
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.js +15 -10
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +44 -28
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.d.ts +42 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.js +66 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.d.ts +42 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.js +62 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_color.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.d.ts +43 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.js +62 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.js.map +1 -0
- package/glTF/2.0/Extensions/{EXT_materials_diffuse_roughness.d.ts → KHR_materials_diffuse_roughness.d.ts} +5 -5
- package/glTF/2.0/Extensions/{EXT_materials_diffuse_roughness.js → KHR_materials_diffuse_roughness.js} +8 -18
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +6 -31
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js +3 -7
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +5 -9
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_ior.js +3 -10
- package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_iridescence.js +13 -11
- package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_sheen.js +11 -22
- package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_specular.js +9 -17
- package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_transmission.js +25 -39
- package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_unlit.js +7 -13
- package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_volume.js +13 -22
- package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +1 -2
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +5 -8
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
- package/glTF/2.0/Extensions/dynamic.js +3 -3
- package/glTF/2.0/Extensions/dynamic.js.map +1 -1
- package/glTF/2.0/Extensions/index.d.ts +4 -1
- package/glTF/2.0/Extensions/index.js +4 -1
- package/glTF/2.0/Extensions/index.js.map +1 -1
- package/glTF/2.0/glTFLoader.d.ts +17 -0
- package/glTF/2.0/glTFLoader.js +104 -50
- package/glTF/2.0/glTFLoader.js.map +1 -1
- package/glTF/2.0/index.d.ts +2 -0
- package/glTF/2.0/index.js +2 -0
- package/glTF/2.0/index.js.map +1 -1
- package/glTF/2.0/materialLoadingAdapter.d.ts +314 -0
- package/glTF/2.0/materialLoadingAdapter.js +2 -0
- package/glTF/2.0/materialLoadingAdapter.js.map +1 -0
- package/glTF/2.0/openPbrMaterialLoadingAdapter.d.ts +594 -0
- package/glTF/2.0/openPbrMaterialLoadingAdapter.js +902 -0
- package/glTF/2.0/openPbrMaterialLoadingAdapter.js.map +1 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +612 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.js +973 -0
- package/glTF/2.0/pbrMaterialLoadingAdapter.js.map +1 -0
- package/glTF/glTFFileLoader.d.ts +5 -0
- package/glTF/glTFFileLoader.js +6 -0
- package/glTF/glTFFileLoader.js.map +1 -1
- package/package.json +3 -3
- package/glTF/2.0/Extensions/EXT_materials_diffuse_roughness.js.map +0 -1
@@ -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 { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { Material } from \"core/Materials/material\";\r\n\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 if (!(babylonMaterial instanceof PBRMaterial)) {\r\n throw new Error(`${context}: Material type not supported`);\r\n }\r\n\r\n const promises = new Array<Promise<any>>();\r\n\r\n babylonMaterial.clearCoat.isEnabled = true;\r\n babylonMaterial.clearCoat.useRoughnessFromMainTexture = false;\r\n babylonMaterial.clearCoat.remapF0OnInterfaceChange = false;\r\n\r\n if (properties.clearcoatFactor != undefined) {\r\n babylonMaterial.clearCoat.intensity = properties.clearcoatFactor;\r\n } else {\r\n babylonMaterial.clearCoat.intensity = 0;\r\n }\r\n\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 babylonMaterial.clearCoat.texture = texture;\r\n })\r\n );\r\n }\r\n\r\n if (properties.clearcoatRoughnessFactor != undefined) {\r\n babylonMaterial.clearCoat.roughness = properties.clearcoatRoughnessFactor;\r\n } else {\r\n babylonMaterial.clearCoat.roughness = 0;\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 babylonMaterial.clearCoat.textureRoughness = 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 babylonMaterial.clearCoat.bumpTexture = texture;\r\n })\r\n );\r\n\r\n babylonMaterial.invertNormalMapX = !babylonMaterial.getScene().useRightHandedSystem;\r\n babylonMaterial.invertNormalMapY = babylonMaterial.getScene().useRightHandedSystem;\r\n if (properties.clearcoatNormalTexture.scale != undefined) {\r\n babylonMaterial.clearCoat.bumpTexture!.level = properties.clearcoatNormalTexture.scale;\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_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 { 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"]}
|
@@ -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_clearcoat_anisotropy extension.
|
10
|
+
*/
|
11
|
+
["KHR_materials_clearcoat_anisotropy"]: {};
|
12
|
+
}
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* [Specification](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_clearcoat_anisotropy)
|
16
|
+
*/
|
17
|
+
export declare class KHR_materials_clearcoat_anisotropy implements IGLTFLoaderExtension {
|
18
|
+
/**
|
19
|
+
* The name of this extension.
|
20
|
+
*/
|
21
|
+
readonly name = "KHR_materials_clearcoat_anisotropy";
|
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 _loadAnisotropyPropertiesAsync;
|
42
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
2
|
+
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
3
|
+
const NAME = "KHR_materials_clearcoat_anisotropy";
|
4
|
+
/**
|
5
|
+
* [Specification](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_clearcoat_anisotropy)
|
6
|
+
*/
|
7
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
8
|
+
export class KHR_materials_clearcoat_anisotropy {
|
9
|
+
/**
|
10
|
+
* @internal
|
11
|
+
*/
|
12
|
+
constructor(loader) {
|
13
|
+
/**
|
14
|
+
* The name of this extension.
|
15
|
+
*/
|
16
|
+
this.name = NAME;
|
17
|
+
/**
|
18
|
+
* Defines a number that determines the order the extensions are applied.
|
19
|
+
*/
|
20
|
+
this.order = 195;
|
21
|
+
this._loader = loader;
|
22
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
23
|
+
}
|
24
|
+
/** @internal */
|
25
|
+
dispose() {
|
26
|
+
this._loader = null;
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* @internal
|
30
|
+
*/
|
31
|
+
// eslint-disable-next-line no-restricted-syntax
|
32
|
+
loadMaterialPropertiesAsync(context, material, babylonMaterial) {
|
33
|
+
return GLTFLoader.LoadExtensionAsync(context, material, this.name, async (extensionContext, extension) => {
|
34
|
+
const promises = new Array();
|
35
|
+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
|
36
|
+
promises.push(this._loadAnisotropyPropertiesAsync(extensionContext, extension, babylonMaterial));
|
37
|
+
await Promise.all(promises);
|
38
|
+
});
|
39
|
+
}
|
40
|
+
async _loadAnisotropyPropertiesAsync(context, properties, babylonMaterial) {
|
41
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
42
|
+
const promises = new Array();
|
43
|
+
// Set non-texture properties immediately
|
44
|
+
const clearcoatAnisotropyWeight = properties.clearcoatAnisotropyStrength ?? 0;
|
45
|
+
const clearcoatAnisotropyAngle = properties.clearcoatAnisotropyRotation ?? 0;
|
46
|
+
adapter.coatRoughnessAnisotropy = clearcoatAnisotropyWeight;
|
47
|
+
adapter.geometryCoatTangentAngle = clearcoatAnisotropyAngle;
|
48
|
+
// Check if this is glTF-style anisotropy
|
49
|
+
const extensions = properties.extensions ?? {};
|
50
|
+
if (!extensions.EXT_materials_anisotropy_openpbr || !extensions.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled) {
|
51
|
+
adapter.configureGltfStyleAnisotropy(true);
|
52
|
+
}
|
53
|
+
// Load texture if present
|
54
|
+
if (properties.clearcoatAnisotropyTexture) {
|
55
|
+
properties.clearcoatAnisotropyTexture.nonColorData = true;
|
56
|
+
promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatAnisotropyTexture`, properties.clearcoatAnisotropyTexture, (texture) => {
|
57
|
+
texture.name = `${babylonMaterial.name} (Clearcoat Anisotropy)`;
|
58
|
+
adapter.geometryCoatTangentTexture = texture;
|
59
|
+
}));
|
60
|
+
}
|
61
|
+
await Promise.all(promises);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
unregisterGLTFExtension(NAME);
|
65
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_anisotropy(loader));
|
66
|
+
//# sourceMappingURL=KHR_materials_clearcoat_anisotropy.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"KHR_materials_clearcoat_anisotropy.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat_anisotropy.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 { IKHRMaterialsClearcoatAnisotropy } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat_anisotropy\";\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_anisotropy extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat_anisotropy\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_clearcoat_anisotropy)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat_anisotropy 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 = 195;\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<IKHRMaterialsClearcoatAnisotropy>(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._loadAnisotropyPropertiesAsync(extensionContext, extension, babylonMaterial));\r\n await Promise.all(promises);\r\n });\r\n }\r\n\r\n private async _loadAnisotropyPropertiesAsync(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 await Promise.all(promises);\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_anisotropy(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_clearcoat_color extension.
|
10
|
+
*/
|
11
|
+
["KHR_materials_clearcoat_color"]: {};
|
12
|
+
}
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* !!! Experimental Extension Subject to Changes !!!
|
16
|
+
*/
|
17
|
+
export declare class KHR_materials_clearcoat_color implements IGLTFLoaderExtension {
|
18
|
+
/**
|
19
|
+
* The name of this extension.
|
20
|
+
*/
|
21
|
+
readonly name = "KHR_materials_clearcoat_color";
|
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 _loadColorPropertiesAsync;
|
42
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
2
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
3
|
+
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
4
|
+
const NAME = "KHR_materials_clearcoat_color";
|
5
|
+
/**
|
6
|
+
* !!! Experimental Extension Subject to Changes !!!
|
7
|
+
*/
|
8
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
9
|
+
export class KHR_materials_clearcoat_color {
|
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 = 191;
|
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._loadColorPropertiesAsync(extensionContext, material, babylonMaterial, extension));
|
38
|
+
return await Promise.all(promises).then(() => { });
|
39
|
+
});
|
40
|
+
}
|
41
|
+
// eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async
|
42
|
+
_loadColorPropertiesAsync(context, material, babylonMaterial, extension) {
|
43
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
44
|
+
const colorFactor = Color3.White();
|
45
|
+
if (extension.clearcoatColorFactor !== undefined) {
|
46
|
+
colorFactor.fromArray(extension.clearcoatColorFactor);
|
47
|
+
}
|
48
|
+
adapter.coatColor = colorFactor;
|
49
|
+
let texturePromise = Promise.resolve();
|
50
|
+
if (extension.clearcoatColorTexture) {
|
51
|
+
extension.clearcoatColorTexture.nonColorData = true;
|
52
|
+
texturePromise = this._loader.loadTextureInfoAsync(`${context}/clearcoatColorTexture`, extension.clearcoatColorTexture).then((texture) => {
|
53
|
+
texture.name = `${babylonMaterial.name} (Clearcoat Color)`;
|
54
|
+
adapter.coatColorTexture = texture;
|
55
|
+
});
|
56
|
+
}
|
57
|
+
return texturePromise.then(() => { });
|
58
|
+
}
|
59
|
+
}
|
60
|
+
unregisterGLTFExtension(NAME);
|
61
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_color(loader));
|
62
|
+
//# sourceMappingURL=KHR_materials_clearcoat_color.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"KHR_materials_clearcoat_color.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat_color.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAa7C;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,6BAA6B;IAkBtC;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAA8B,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YAClI,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YACtG,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,yBAAyB,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB,EAAE,SAAsC;QACrI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAEnC,IAAI,SAAS,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC/C,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;QAEhC,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAEvC,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;YACjC,SAAS,CAAC,qBAAsC,CAAC,YAAY,GAAG,IAAI,CAAC;YACtE,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,wBAAwB,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,OAAoB,EAAE,EAAE;gBAClJ,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,oBAAoB,CAAC;gBAC3D,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC;YACvC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzC,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable github/no-then */\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsClearcoatColor } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat_color\";\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_color extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat_color\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * !!! Experimental Extension Subject to Changes !!!\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat_color 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 * @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<IKHRMaterialsClearcoatColor>(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._loadColorPropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async\r\n private _loadColorPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsClearcoatColor): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n const colorFactor = Color3.White();\r\n\r\n if (extension.clearcoatColorFactor !== undefined) {\r\n colorFactor.fromArray(extension.clearcoatColorFactor);\r\n }\r\n\r\n adapter.coatColor = colorFactor;\r\n\r\n let texturePromise = Promise.resolve();\r\n\r\n if (extension.clearcoatColorTexture) {\r\n (extension.clearcoatColorTexture as ITextureInfo).nonColorData = true;\r\n texturePromise = this._loader.loadTextureInfoAsync(`${context}/clearcoatColorTexture`, extension.clearcoatColorTexture).then((texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Clearcoat Color)`;\r\n adapter.coatColorTexture = texture;\r\n });\r\n }\r\n\r\n return texturePromise.then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_color(loader));\r\n"]}
|
@@ -0,0 +1,43 @@
|
|
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_clearcoat_darkening extension.
|
10
|
+
*/
|
11
|
+
["KHR_materials_clearcoat_darkening"]: {};
|
12
|
+
}
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/2518)
|
16
|
+
* !!! Experimental Extension Subject to Changes !!!
|
17
|
+
*/
|
18
|
+
export declare class KHR_materials_clearcoat_darkening implements IGLTFLoaderExtension {
|
19
|
+
/**
|
20
|
+
* The name of this extension.
|
21
|
+
*/
|
22
|
+
readonly name = "KHR_materials_clearcoat_darkening";
|
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
|
+
* @internal
|
34
|
+
*/
|
35
|
+
constructor(loader: GLTFLoader);
|
36
|
+
/** @internal */
|
37
|
+
dispose(): void;
|
38
|
+
/**
|
39
|
+
* @internal
|
40
|
+
*/
|
41
|
+
loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>>;
|
42
|
+
private _loadDarkeningPropertiesAsync;
|
43
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { GLTFLoader } from "../glTFLoader.js";
|
2
|
+
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
3
|
+
const NAME = "KHR_materials_clearcoat_darkening";
|
4
|
+
/**
|
5
|
+
* [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/2518)
|
6
|
+
* !!! Experimental Extension Subject to Changes !!!
|
7
|
+
*/
|
8
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
9
|
+
export class KHR_materials_clearcoat_darkening {
|
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 = 191;
|
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._loadDarkeningPropertiesAsync(extensionContext, material, babylonMaterial, extension));
|
38
|
+
return await Promise.all(promises).then(() => { });
|
39
|
+
});
|
40
|
+
}
|
41
|
+
// eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async
|
42
|
+
_loadDarkeningPropertiesAsync(context, material, babylonMaterial, extension) {
|
43
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
44
|
+
let darkeningFactor = 1.0;
|
45
|
+
if (extension.clearcoatDarkeningFactor !== undefined) {
|
46
|
+
darkeningFactor = extension.clearcoatDarkeningFactor;
|
47
|
+
}
|
48
|
+
adapter.coatDarkening = darkeningFactor;
|
49
|
+
let texturePromise = Promise.resolve();
|
50
|
+
if (extension.clearcoatDarkeningTexture) {
|
51
|
+
extension.clearcoatDarkeningTexture.nonColorData = true;
|
52
|
+
texturePromise = this._loader.loadTextureInfoAsync(`${context}/clearcoatDarkeningTexture`, extension.clearcoatDarkeningTexture).then((texture) => {
|
53
|
+
texture.name = `${babylonMaterial.name} (Clearcoat Darkening)`;
|
54
|
+
adapter.coatDarkeningTexture = texture;
|
55
|
+
});
|
56
|
+
}
|
57
|
+
return texturePromise.then(() => { });
|
58
|
+
}
|
59
|
+
}
|
60
|
+
unregisterGLTFExtension(NAME);
|
61
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_darkening(loader));
|
62
|
+
//# sourceMappingURL=KHR_materials_clearcoat_darkening.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"KHR_materials_clearcoat_darkening.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat_darkening.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,mCAAmC,CAAC;AAajD;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,iCAAiC;IAkB1C;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAkC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACtI,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;YAC1G,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,6BAA6B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB,EAAE,SAA0C;QAC7I,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAE1E,IAAI,eAAe,GAAG,GAAG,CAAC;QAE1B,IAAI,SAAS,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YACnD,eAAe,GAAG,SAAS,CAAC,wBAAwB,CAAC;QACzD,CAAC;QAED,OAAO,CAAC,aAAa,GAAG,eAAe,CAAC;QAExC,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAEvC,IAAI,SAAS,CAAC,yBAAyB,EAAE,CAAC;YACrC,SAAS,CAAC,yBAA0C,CAAC,YAAY,GAAG,IAAI,CAAC;YAC1E,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,4BAA4B,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,OAAoB,EAAE,EAAE;gBAC1J,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,wBAAwB,CAAC;gBAC/D,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC;YAC3C,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzC,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable github/no-then */\r\nimport type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IMaterial, ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsClearcoatDarkening } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_clearcoat_darkening\";\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_darkening extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_clearcoat_darkening\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/2518)\r\n * !!! Experimental Extension Subject to Changes !!!\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_clearcoat_darkening 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 * @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<IKHRMaterialsClearcoatDarkening>(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._loadDarkeningPropertiesAsync(extensionContext, material, babylonMaterial, extension));\r\n return await Promise.all(promises).then(() => {});\r\n });\r\n }\r\n\r\n // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async\r\n private _loadDarkeningPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsClearcoatDarkening): Promise<void> {\r\n const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);\r\n\r\n let darkeningFactor = 1.0;\r\n\r\n if (extension.clearcoatDarkeningFactor !== undefined) {\r\n darkeningFactor = extension.clearcoatDarkeningFactor;\r\n }\r\n\r\n adapter.coatDarkening = darkeningFactor;\r\n\r\n let texturePromise = Promise.resolve();\r\n\r\n if (extension.clearcoatDarkeningTexture) {\r\n (extension.clearcoatDarkeningTexture as ITextureInfo).nonColorData = true;\r\n texturePromise = this._loader.loadTextureInfoAsync(`${context}/clearcoatDarkeningTexture`, extension.clearcoatDarkeningTexture).then((texture: BaseTexture) => {\r\n texture.name = `${babylonMaterial.name} (Clearcoat Darkening)`;\r\n adapter.coatDarkeningTexture = texture;\r\n });\r\n }\r\n\r\n return texturePromise.then(() => {});\r\n }\r\n}\r\n\r\nunregisterGLTFExtension(NAME);\r\nregisterGLTFExtension(NAME, true, (loader) => new KHR_materials_clearcoat_darkening(loader));\r\n"]}
|
@@ -6,20 +6,20 @@ import { GLTFLoader } from "../glTFLoader.js";
|
|
6
6
|
declare module "../../glTFFileLoader.js" {
|
7
7
|
interface GLTFLoaderExtensionOptions {
|
8
8
|
/**
|
9
|
-
* Defines options for the
|
9
|
+
* Defines options for the KHR_materials_diffuse_roughness extension.
|
10
10
|
*/
|
11
|
-
["
|
11
|
+
["KHR_materials_diffuse_roughness"]: {};
|
12
12
|
}
|
13
13
|
}
|
14
14
|
/**
|
15
|
-
* [Specification](https://github.com/KhronosGroup/glTF/blob/fdee35425ae560ea378092e38977216d63a094ec/extensions/2.0/Khronos/
|
15
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/fdee35425ae560ea378092e38977216d63a094ec/extensions/2.0/Khronos/KHR_materials_diffuse_roughness/README.md)
|
16
16
|
* @experimental
|
17
17
|
*/
|
18
|
-
export declare class
|
18
|
+
export declare class KHR_materials_diffuse_roughness implements IGLTFLoaderExtension {
|
19
19
|
/**
|
20
20
|
* The name of this extension.
|
21
21
|
*/
|
22
|
-
readonly name = "
|
22
|
+
readonly name = "KHR_materials_diffuse_roughness";
|
23
23
|
/**
|
24
24
|
* Defines whether this extension is enabled.
|
25
25
|
*/
|
@@ -1,14 +1,12 @@
|
|
1
|
-
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
|
2
1
|
import { GLTFLoader } from "../glTFLoader.js";
|
3
2
|
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
4
|
-
|
5
|
-
const NAME = "EXT_materials_diffuse_roughness";
|
3
|
+
const NAME = "KHR_materials_diffuse_roughness";
|
6
4
|
/**
|
7
|
-
* [Specification](https://github.com/KhronosGroup/glTF/blob/fdee35425ae560ea378092e38977216d63a094ec/extensions/2.0/Khronos/
|
5
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/fdee35425ae560ea378092e38977216d63a094ec/extensions/2.0/Khronos/KHR_materials_diffuse_roughness/README.md)
|
8
6
|
* @experimental
|
9
7
|
*/
|
10
8
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
11
|
-
export class
|
9
|
+
export class KHR_materials_diffuse_roughness {
|
12
10
|
/**
|
13
11
|
* @internal
|
14
12
|
*/
|
@@ -43,21 +41,13 @@ export class EXT_materials_diffuse_roughness {
|
|
43
41
|
}
|
44
42
|
// eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
|
45
43
|
_loadDiffuseRoughnessPropertiesAsync(context, properties, babylonMaterial) {
|
46
|
-
|
47
|
-
throw new Error(`${context}: Material type not supported`);
|
48
|
-
}
|
44
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
49
45
|
const promises = new Array();
|
50
|
-
|
51
|
-
if (properties.diffuseRoughnessFactor != undefined) {
|
52
|
-
babylonMaterial.baseDiffuseRoughness = properties.diffuseRoughnessFactor;
|
53
|
-
}
|
54
|
-
else {
|
55
|
-
babylonMaterial.baseDiffuseRoughness = 0;
|
56
|
-
}
|
46
|
+
adapter.baseDiffuseRoughness = properties.diffuseRoughnessFactor ?? 0;
|
57
47
|
if (properties.diffuseRoughnessTexture) {
|
58
48
|
promises.push(this._loader.loadTextureInfoAsync(`${context}/diffuseRoughnessTexture`, properties.diffuseRoughnessTexture, (texture) => {
|
59
49
|
texture.name = `${babylonMaterial.name} (Diffuse Roughness)`;
|
60
|
-
|
50
|
+
adapter.baseDiffuseRoughnessTexture = texture;
|
61
51
|
}));
|
62
52
|
}
|
63
53
|
// eslint-disable-next-line github/no-then
|
@@ -65,5 +55,5 @@ export class EXT_materials_diffuse_roughness {
|
|
65
55
|
}
|
66
56
|
}
|
67
57
|
unregisterGLTFExtension(NAME);
|
68
|
-
registerGLTFExtension(NAME, true, (loader) => new
|
69
|
-
//# sourceMappingURL=
|
58
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_materials_diffuse_roughness(loader));
|
59
|
+
//# sourceMappingURL=KHR_materials_diffuse_roughness.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"KHR_materials_diffuse_roughness.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,iCAAiC,CAAC;AAa/C;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,+BAA+B;IAkBxC;;OAEG;IACH,YAAY,MAAkB;QApB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAO5B;;WAEG;QACI,UAAK,GAAG,GAAG,CAAC;QAQf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,2FAA2F;IACpF,2BAA2B,CAAC,OAAe,EAAE,QAAmB,EAAE,eAAyB;QAC9F,OAAO,UAAU,CAAC,kBAAkB,CAAgC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACpI,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;YACvG,0CAA0C;YAC1C,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2FAA2F;IACnF,oCAAoC,CAAC,OAAe,EAAE,UAAyC,EAAE,eAAyB;QAC9H,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;QAE3C,OAAO,CAAC,oBAAoB,GAAG,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAEtE,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,OAAO,0BAA0B,EAAE,UAAU,CAAC,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACpH,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,IAAI,sBAAsB,CAAC;gBAC7D,OAAO,CAAC,2BAA2B,GAAG,OAAO,CAAC;YAClD,CAAC,CAAC,CACL,CAAC;QACN,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChD,CAAC;CACJ;AAED,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,+BAA+B,CAAC,MAAM,CAAC,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Material } from \"core/Materials/material\";\r\n\r\nimport type { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport type { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport type { IKHRMaterialsDiffuseRoughness } from \"babylonjs-gltf2interface\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_materials_diffuse_roughness\";\r\n\r\ndeclare module \"../../glTFFileLoader\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface GLTFLoaderExtensionOptions {\r\n /**\r\n * Defines options for the KHR_materials_diffuse_roughness extension.\r\n */\r\n // NOTE: Don't use NAME here as it will break the UMD type declarations.\r\n [\"KHR_materials_diffuse_roughness\"]: {};\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/fdee35425ae560ea378092e38977216d63a094ec/extensions/2.0/Khronos/KHR_materials_diffuse_roughness/README.md)\r\n * @experimental\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_diffuse_roughness 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 @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable<Promise<void>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRMaterialsDiffuseRoughness>(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._loadDiffuseRoughnessPropertiesAsync(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 _loadDiffuseRoughnessPropertiesAsync(context: string, properties: IKHRMaterialsDiffuseRoughness, 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.baseDiffuseRoughness = properties.diffuseRoughnessFactor ?? 0;\r\n\r\n if (properties.diffuseRoughnessTexture) {\r\n promises.push(\r\n this._loader.loadTextureInfoAsync(`${context}/diffuseRoughnessTexture`, properties.diffuseRoughnessTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Diffuse Roughness)`;\r\n adapter.baseDiffuseRoughnessTexture = 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_diffuse_roughness(loader));\r\n"]}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
|
2
1
|
import { GLTFLoader } from "../glTFLoader.js";
|
3
2
|
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
4
3
|
import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExtensionRegistry.js";
|
@@ -45,46 +44,22 @@ export class KHR_materials_diffuse_transmission {
|
|
45
44
|
}
|
46
45
|
// eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async
|
47
46
|
_loadTranslucentPropertiesAsync(context, material, babylonMaterial, extension) {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
// Enables "translucency" texture which represents diffusely-transmitted light.
|
53
|
-
pbrMaterial.subSurface.isTranslucencyEnabled = true;
|
54
|
-
// Since this extension models thin-surface transmission only, we must make the
|
55
|
-
// internal IOR == 1.0 and set the thickness to 0.
|
56
|
-
pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;
|
57
|
-
pbrMaterial.subSurface.minimumThickness = 0.0;
|
58
|
-
pbrMaterial.subSurface.maximumThickness = 0.0;
|
59
|
-
// Tint color will be used for transmission.
|
60
|
-
pbrMaterial.subSurface.useAlbedoToTintTranslucency = false;
|
61
|
-
if (extension.diffuseTransmissionFactor !== undefined) {
|
62
|
-
pbrMaterial.subSurface.translucencyIntensity = extension.diffuseTransmissionFactor;
|
63
|
-
}
|
64
|
-
else {
|
65
|
-
pbrMaterial.subSurface.translucencyIntensity = 0.0;
|
66
|
-
pbrMaterial.subSurface.isTranslucencyEnabled = false;
|
67
|
-
return Promise.resolve();
|
68
|
-
}
|
47
|
+
const adapter = this._loader._getOrCreateMaterialAdapter(babylonMaterial);
|
48
|
+
adapter.configureSubsurface();
|
49
|
+
adapter.subsurfaceWeight = extension.diffuseTransmissionFactor ?? 0;
|
50
|
+
adapter.subsurfaceColor = extension.diffuseTransmissionColorFactor !== undefined ? Color3.FromArray(extension.diffuseTransmissionColorFactor) : Color3.White();
|
69
51
|
const promises = new Array();
|
70
|
-
pbrMaterial.subSurface.useGltfStyleTextures = true;
|
71
52
|
if (extension.diffuseTransmissionTexture) {
|
72
53
|
extension.diffuseTransmissionTexture.nonColorData = true;
|
73
54
|
promises.push(this._loader.loadTextureInfoAsync(`${context}/diffuseTransmissionTexture`, extension.diffuseTransmissionTexture).then((texture) => {
|
74
55
|
texture.name = `${babylonMaterial.name} (Diffuse Transmission)`;
|
75
|
-
|
56
|
+
adapter.subsurfaceWeightTexture = texture;
|
76
57
|
}));
|
77
58
|
}
|
78
|
-
if (extension.diffuseTransmissionColorFactor !== undefined) {
|
79
|
-
pbrMaterial.subSurface.translucencyColor = Color3.FromArray(extension.diffuseTransmissionColorFactor);
|
80
|
-
}
|
81
|
-
else {
|
82
|
-
pbrMaterial.subSurface.translucencyColor = Color3.White();
|
83
|
-
}
|
84
59
|
if (extension.diffuseTransmissionColorTexture) {
|
85
60
|
promises.push(this._loader.loadTextureInfoAsync(`${context}/diffuseTransmissionColorTexture`, extension.diffuseTransmissionColorTexture).then((texture) => {
|
86
61
|
texture.name = `${babylonMaterial.name} (Diffuse Transmission Color)`;
|
87
|
-
|
62
|
+
adapter.subsurfaceColorTexture = texture;
|
88
63
|
}));
|
89
64
|
}
|
90
65
|
return Promise.all(promises).then(() => { });
|