@babylonjs/serializers 9.13.0 → 9.14.0
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/3MF/core/model/pure.d.ts +8 -0
- package/3MF/core/model/pure.js +9 -0
- package/3MF/core/model/pure.js.map +1 -0
- package/3MF/core/pure.d.ts +3 -0
- package/3MF/core/pure.js +5 -0
- package/3MF/core/pure.js.map +1 -0
- package/3MF/core/xml/pure.d.ts +7 -0
- package/3MF/core/xml/pure.js +8 -0
- package/3MF/core/xml/pure.js.map +1 -0
- package/3MF/pure.d.ts +4 -0
- package/3MF/pure.js +6 -0
- package/3MF/pure.js.map +1 -0
- package/BVH/pure.d.ts +2 -0
- package/BVH/pure.js +3 -0
- package/BVH/pure.js.map +1 -0
- package/OBJ/pure.d.ts +2 -0
- package/OBJ/pure.js +3 -0
- package/OBJ/pure.js.map +1 -0
- package/USDZ/pure.d.ts +2 -0
- package/USDZ/pure.js +4 -0
- package/USDZ/pure.js.map +1 -0
- package/glTF/2.0/Extensions/EXT_lights_area.d.ts +3 -37
- package/glTF/2.0/Extensions/EXT_lights_area.js +5 -130
- package/glTF/2.0/Extensions/EXT_lights_area.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_area.pure.d.ts +44 -0
- package/glTF/2.0/Extensions/EXT_lights_area.pure.js +145 -0
- package/glTF/2.0/Extensions/EXT_lights_area.pure.js.map +1 -0
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +4 -38
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +6 -138
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.d.ts +44 -0
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js +151 -0
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.pure.js.map +1 -0
- package/glTF/2.0/Extensions/EXT_texture_avif.d.ts +3 -15
- package/glTF/2.0/Extensions/EXT_texture_avif.js +5 -38
- package/glTF/2.0/Extensions/EXT_texture_avif.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_avif.pure.d.ts +27 -0
- package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +58 -0
- package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -0
- package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +3 -14
- package/glTF/2.0/Extensions/EXT_texture_webp.js +5 -37
- package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_texture_webp.pure.d.ts +26 -0
- package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +57 -0
- package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +3 -30
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +5 -128
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.d.ts +37 -0
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js +143 -0
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +3 -37
- package/glTF/2.0/Extensions/KHR_lights_punctual.js +5 -142
- package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_lights_punctual.pure.d.ts +44 -0
- package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js +157 -0
- package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +3 -30
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.js +5 -177
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.d.ts +37 -0
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js +192 -0
- package/glTF/2.0/Extensions/KHR_materials_anisotropy.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +3 -30
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +5 -251
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.d.ts +37 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js +266 -0
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_coat.d.ts +3 -30
- package/glTF/2.0/Extensions/KHR_materials_coat.js +5 -380
- package/glTF/2.0/Extensions/KHR_materials_coat.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_coat.pure.d.ts +37 -0
- package/glTF/2.0/Extensions/KHR_materials_coat.pure.js +395 -0
- package/glTF/2.0/Extensions/KHR_materials_coat.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +3 -22
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js +5 -75
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.d.ts +29 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js +90 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +3 -38
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +5 -115
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.d.ts +45 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js +130 -0
- package/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +3 -29
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js +5 -60
- package/glTF/2.0/Extensions/KHR_materials_dispersion.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.d.ts +36 -0
- package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js +75 -0
- package/glTF/2.0/Extensions/KHR_materials_dispersion.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +3 -25
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +5 -54
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.d.ts +32 -0
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js +69 -0
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +3 -30
- package/glTF/2.0/Extensions/KHR_materials_fuzz.js +5 -191
- package/glTF/2.0/Extensions/KHR_materials_fuzz.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.d.ts +37 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js +206 -0
- package/glTF/2.0/Extensions/KHR_materials_fuzz.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +3 -27
- package/glTF/2.0/Extensions/KHR_materials_ior.js +5 -67
- package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_ior.pure.d.ts +34 -0
- package/glTF/2.0/Extensions/KHR_materials_ior.pure.js +81 -0
- package/glTF/2.0/Extensions/KHR_materials_ior.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +3 -22
- package/glTF/2.0/Extensions/KHR_materials_iridescence.js +5 -100
- package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.d.ts +29 -0
- package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js +115 -0
- package/glTF/2.0/Extensions/KHR_materials_iridescence.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_openpbr.d.ts +3 -25
- package/glTF/2.0/Extensions/KHR_materials_openpbr.js +5 -41
- package/glTF/2.0/Extensions/KHR_materials_openpbr.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.d.ts +32 -0
- package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.js +56 -0
- package/glTF/2.0/Extensions/KHR_materials_openpbr.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +3 -22
- package/glTF/2.0/Extensions/KHR_materials_sheen.js +5 -63
- package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_sheen.pure.d.ts +29 -0
- package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js +78 -0
- package/glTF/2.0/Extensions/KHR_materials_sheen.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +3 -39
- package/glTF/2.0/Extensions/KHR_materials_specular.js +5 -123
- package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_specular.pure.d.ts +46 -0
- package/glTF/2.0/Extensions/KHR_materials_specular.pure.js +138 -0
- package/glTF/2.0/Extensions/KHR_materials_specular.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +3 -38
- package/glTF/2.0/Extensions/KHR_materials_transmission.js +5 -145
- package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_transmission.pure.d.ts +45 -0
- package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js +160 -0
- package/glTF/2.0/Extensions/KHR_materials_transmission.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +3 -18
- package/glTF/2.0/Extensions/KHR_materials_unlit.js +5 -43
- package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_unlit.pure.d.ts +25 -0
- package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js +58 -0
- package/glTF/2.0/Extensions/KHR_materials_unlit.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +3 -38
- package/glTF/2.0/Extensions/KHR_materials_volume.js +5 -169
- package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_volume.pure.d.ts +45 -0
- package/glTF/2.0/Extensions/KHR_materials_volume.pure.js +184 -0
- package/glTF/2.0/Extensions/KHR_materials_volume.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +3 -38
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js +5 -130
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.d.ts +45 -0
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js +145 -0
- package/glTF/2.0/Extensions/KHR_materials_volume_scatter.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +3 -14
- package/glTF/2.0/Extensions/KHR_texture_basisu.js +5 -37
- package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_basisu.pure.d.ts +26 -0
- package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +57 -0
- package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +3 -19
- package/glTF/2.0/Extensions/KHR_texture_transform.js +5 -90
- package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_texture_transform.pure.d.ts +26 -0
- package/glTF/2.0/Extensions/KHR_texture_transform.pure.js +105 -0
- package/glTF/2.0/Extensions/KHR_texture_transform.pure.js.map +1 -0
- package/glTF/2.0/Extensions/pure.d.ts +26 -0
- package/glTF/2.0/Extensions/pure.js +27 -0
- package/glTF/2.0/Extensions/pure.js.map +1 -0
- package/glTF/2.0/pure.d.ts +5 -0
- package/glTF/2.0/pure.js +7 -0
- package/glTF/2.0/pure.js.map +1 -0
- package/glTF/pure.d.ts +3 -0
- package/glTF/pure.js +5 -0
- package/glTF/pure.js.map +1 -0
- package/package.json +30 -4
- package/pure.d.ts +7 -0
- package/pure.js +9 -0
- package/pure.js.map +1 -0
- package/stl/pure.d.ts +2 -0
- package/stl/pure.js +3 -0
- package/stl/pure.js.map +1 -0
|
@@ -1,148 +1,8 @@
|
|
|
1
|
-
import { GLTFExporter } from "../glTFExporter.js";
|
|
2
|
-
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
|
|
3
|
-
import { Logger } from "@babylonjs/core/Misc/logger.js";
|
|
4
|
-
import { OpenPBRMaterial } from "@babylonjs/core/Materials/PBR/openpbrMaterial.js";
|
|
5
|
-
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
6
|
-
const NAME = "KHR_materials_transmission";
|
|
7
1
|
/**
|
|
8
|
-
*
|
|
2
|
+
* Re-exports the pure implementation and applies the runtime registration side effect.
|
|
3
|
+
* Import "./KHR_materials_transmission.pure" for tree-shakeable, side-effect-free usage.
|
|
9
4
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
/** Name of this extension */
|
|
14
|
-
this.name = NAME;
|
|
15
|
-
/** Defines whether this extension is enabled */
|
|
16
|
-
this.enabled = true;
|
|
17
|
-
/** Defines whether this extension is required */
|
|
18
|
-
this.required = false;
|
|
19
|
-
this._wasUsed = false;
|
|
20
|
-
this._exporter = exporter;
|
|
21
|
-
}
|
|
22
|
-
/** Dispose */
|
|
23
|
-
dispose() { }
|
|
24
|
-
/** @internal */
|
|
25
|
-
get wasUsed() {
|
|
26
|
-
return this._wasUsed;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* After exporting a material, deal with additional textures
|
|
30
|
-
* @param context GLTF context of the material
|
|
31
|
-
* @param node exported GLTF node
|
|
32
|
-
* @param babylonMaterial corresponding babylon material
|
|
33
|
-
* @returns array of additional textures to export
|
|
34
|
-
*/
|
|
35
|
-
async postExportMaterialAdditionalTexturesAsync(context, node, babylonMaterial) {
|
|
36
|
-
const additionalTextures = [];
|
|
37
|
-
if (babylonMaterial instanceof PBRMaterial) {
|
|
38
|
-
if (this._isExtensionEnabled(babylonMaterial)) {
|
|
39
|
-
if (babylonMaterial.subSurface.refractionIntensityTexture && babylonMaterial.subSurface.useGltfStyleTextures) {
|
|
40
|
-
additionalTextures.push(babylonMaterial.subSurface.refractionIntensityTexture);
|
|
41
|
-
}
|
|
42
|
-
return additionalTextures;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else if (babylonMaterial instanceof OpenPBRMaterial) {
|
|
46
|
-
if (babylonMaterial.transmissionWeight > 0 && babylonMaterial.transmissionWeightTexture) {
|
|
47
|
-
additionalTextures.push(babylonMaterial.transmissionWeightTexture);
|
|
48
|
-
if (babylonMaterial.transmissionColorTexture) {
|
|
49
|
-
additionalTextures.push(babylonMaterial.transmissionColorTexture);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (babylonMaterial.subsurfaceWeight > 0 && babylonMaterial.subsurfaceWeightTexture) {
|
|
53
|
-
additionalTextures.push(babylonMaterial.subsurfaceWeightTexture);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return additionalTextures;
|
|
57
|
-
}
|
|
58
|
-
_isExtensionEnabled(mat) {
|
|
59
|
-
// This extension must not be used on a material that also uses KHR_materials_unlit
|
|
60
|
-
if (mat instanceof OpenPBRMaterial && !mat.unlit) {
|
|
61
|
-
return mat.transmissionWeight > 0 || mat.subsurfaceWeight > 0;
|
|
62
|
-
}
|
|
63
|
-
else if (mat instanceof PBRMaterial && !mat.unlit) {
|
|
64
|
-
const subs = mat.subSurface;
|
|
65
|
-
return ((subs.isRefractionEnabled && subs.refractionIntensity != undefined && subs.refractionIntensity != 0) ||
|
|
66
|
-
(subs.refractionIntensityTexture != null && subs.useGltfStyleTextures));
|
|
67
|
-
}
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* After exporting a material
|
|
72
|
-
* @param context GLTF context of the material
|
|
73
|
-
* @param node exported GLTF node
|
|
74
|
-
* @param babylonMaterial corresponding babylon material
|
|
75
|
-
* @returns true if successful
|
|
76
|
-
*/
|
|
77
|
-
async postExportMaterialAsync(context, node, babylonMaterial) {
|
|
78
|
-
if (!this._isExtensionEnabled(babylonMaterial)) {
|
|
79
|
-
return node;
|
|
80
|
-
}
|
|
81
|
-
if (babylonMaterial instanceof PBRMaterial) {
|
|
82
|
-
this._wasUsed = true;
|
|
83
|
-
const subSurface = babylonMaterial.subSurface;
|
|
84
|
-
const transmissionFactor = subSurface.refractionIntensity === 0 ? undefined : subSurface.refractionIntensity;
|
|
85
|
-
const transmissionInfo = {
|
|
86
|
-
transmissionFactor: transmissionFactor,
|
|
87
|
-
};
|
|
88
|
-
if (subSurface.refractionIntensityTexture) {
|
|
89
|
-
if (subSurface.useGltfStyleTextures) {
|
|
90
|
-
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
91
|
-
const transmissionTexture = this._exporter._materialExporter.getTextureInfo(subSurface.refractionIntensityTexture);
|
|
92
|
-
if (transmissionTexture) {
|
|
93
|
-
transmissionInfo.transmissionTexture = transmissionTexture;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
Logger.Warn(`${context}: Exporting a subsurface refraction intensity texture without \`useGltfStyleTextures\` is not supported`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
node.extensions || (node.extensions = {});
|
|
101
|
-
node.extensions[NAME] = transmissionInfo;
|
|
102
|
-
}
|
|
103
|
-
else if (babylonMaterial instanceof OpenPBRMaterial) {
|
|
104
|
-
this._wasUsed = true;
|
|
105
|
-
const subsurfaceFractionOfDielectric = (1.0 - babylonMaterial.transmissionWeight) * babylonMaterial.subsurfaceWeight;
|
|
106
|
-
const transmissionFactor = subsurfaceFractionOfDielectric + babylonMaterial.transmissionWeight;
|
|
107
|
-
const transmissionInfo = {
|
|
108
|
-
transmissionFactor: transmissionFactor,
|
|
109
|
-
};
|
|
110
|
-
if (babylonMaterial.transmissionWeightTexture) {
|
|
111
|
-
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
112
|
-
const transmissionTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionWeightTexture);
|
|
113
|
-
if (transmissionTexture) {
|
|
114
|
-
transmissionInfo.transmissionTexture = transmissionTexture;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
else if (babylonMaterial.subsurfaceWeightTexture) {
|
|
118
|
-
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
119
|
-
const subsurfaceTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.subsurfaceWeightTexture);
|
|
120
|
-
if (subsurfaceTexture) {
|
|
121
|
-
transmissionInfo.transmissionTexture = subsurfaceTexture;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (babylonMaterial.transmissionDepth == 0.0 && (!babylonMaterial.transmissionColor.equals(Color3.White()) || babylonMaterial.transmissionColorTexture)) {
|
|
125
|
-
if (node.pbrMetallicRoughness) {
|
|
126
|
-
if (!node.pbrMetallicRoughness.baseColorFactor) {
|
|
127
|
-
node.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
|
|
128
|
-
}
|
|
129
|
-
node.pbrMetallicRoughness.baseColorFactor[0] *= babylonMaterial.transmissionColor.r;
|
|
130
|
-
node.pbrMetallicRoughness.baseColorFactor[1] *= babylonMaterial.transmissionColor.g;
|
|
131
|
-
node.pbrMetallicRoughness.baseColorFactor[2] *= babylonMaterial.transmissionColor.b;
|
|
132
|
-
if (babylonMaterial.transmissionColorTexture && !node.pbrMetallicRoughness.baseColorTexture) {
|
|
133
|
-
const transmissionColorTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionColorTexture);
|
|
134
|
-
if (transmissionColorTexture) {
|
|
135
|
-
node.pbrMetallicRoughness.baseColorTexture = transmissionColorTexture;
|
|
136
|
-
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
node.extensions || (node.extensions = {});
|
|
142
|
-
node.extensions[NAME] = transmissionInfo;
|
|
143
|
-
}
|
|
144
|
-
return node;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
GLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_materials_transmission(exporter));
|
|
5
|
+
export * from "./KHR_materials_transmission.pure.js";
|
|
6
|
+
import { RegisterKHR_materials_transmission } from "./KHR_materials_transmission.pure.js";
|
|
7
|
+
RegisterKHR_materials_transmission();
|
|
148
8
|
//# sourceMappingURL=KHR_materials_transmission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_transmission.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_transmission.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IMaterial, type IKHRMaterialsTransmission } from \"babylonjs-gltf2interface\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nconst NAME = \"KHR_materials_transmission\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_transmission implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n private _exporter: GLTFExporter;\r\n\r\n private _wasUsed = false;\r\n\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n /** Dispose */\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n /**\r\n * After exporting a material, deal with additional textures\r\n * @param context GLTF context of the material\r\n * @param node exported GLTF node\r\n * @param babylonMaterial corresponding babylon material\r\n * @returns array of additional textures to export\r\n */\r\n public async postExportMaterialAdditionalTexturesAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<BaseTexture[]> {\r\n const additionalTextures: BaseTexture[] = [];\r\n\r\n if (babylonMaterial instanceof PBRMaterial) {\r\n if (this._isExtensionEnabled(babylonMaterial)) {\r\n if (babylonMaterial.subSurface.refractionIntensityTexture && babylonMaterial.subSurface.useGltfStyleTextures) {\r\n additionalTextures.push(babylonMaterial.subSurface.refractionIntensityTexture);\r\n }\r\n return additionalTextures;\r\n }\r\n } else if (babylonMaterial instanceof OpenPBRMaterial) {\r\n if (babylonMaterial.transmissionWeight > 0 && babylonMaterial.transmissionWeightTexture) {\r\n additionalTextures.push(babylonMaterial.transmissionWeightTexture);\r\n if (babylonMaterial.transmissionColorTexture) {\r\n additionalTextures.push(babylonMaterial.transmissionColorTexture);\r\n }\r\n }\r\n if (babylonMaterial.subsurfaceWeight > 0 && babylonMaterial.subsurfaceWeightTexture) {\r\n additionalTextures.push(babylonMaterial.subsurfaceWeightTexture);\r\n }\r\n }\r\n\r\n return additionalTextures;\r\n }\r\n\r\n private _isExtensionEnabled(mat: Material): boolean {\r\n // This extension must not be used on a material that also uses KHR_materials_unlit\r\n if (mat instanceof OpenPBRMaterial && !mat.unlit) {\r\n return mat.transmissionWeight > 0 || mat.subsurfaceWeight > 0;\r\n } else if (mat instanceof PBRMaterial && !mat.unlit) {\r\n const subs = mat.subSurface;\r\n return (\r\n (subs.isRefractionEnabled && subs.refractionIntensity != undefined && subs.refractionIntensity != 0) ||\r\n (subs.refractionIntensityTexture != null && subs.useGltfStyleTextures)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * After exporting a material\r\n * @param context GLTF context of the material\r\n * @param node exported GLTF node\r\n * @param babylonMaterial corresponding babylon material\r\n * @returns true if successful\r\n */\r\n public async postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial> {\r\n if (!this._isExtensionEnabled(babylonMaterial)) {\r\n return node;\r\n }\r\n if (babylonMaterial instanceof PBRMaterial) {\r\n this._wasUsed = true;\r\n\r\n const subSurface = babylonMaterial.subSurface;\r\n const transmissionFactor = subSurface.refractionIntensity === 0 ? undefined : subSurface.refractionIntensity;\r\n\r\n const transmissionInfo: IKHRMaterialsTransmission = {\r\n transmissionFactor: transmissionFactor,\r\n };\r\n\r\n if (subSurface.refractionIntensityTexture) {\r\n if (subSurface.useGltfStyleTextures) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const transmissionTexture = this._exporter._materialExporter.getTextureInfo(subSurface.refractionIntensityTexture);\r\n if (transmissionTexture) {\r\n transmissionInfo.transmissionTexture = transmissionTexture;\r\n }\r\n } else {\r\n Logger.Warn(`${context}: Exporting a subsurface refraction intensity texture without \\`useGltfStyleTextures\\` is not supported`);\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = transmissionInfo;\r\n } else if (babylonMaterial instanceof OpenPBRMaterial) {\r\n this._wasUsed = true;\r\n\r\n const subsurfaceFractionOfDielectric = (1.0 - babylonMaterial.transmissionWeight) * babylonMaterial.subsurfaceWeight;\r\n const transmissionFactor = subsurfaceFractionOfDielectric + babylonMaterial.transmissionWeight;\r\n\r\n const transmissionInfo: IKHRMaterialsTransmission = {\r\n transmissionFactor: transmissionFactor,\r\n };\r\n\r\n if (babylonMaterial.transmissionWeightTexture) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const transmissionTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionWeightTexture);\r\n if (transmissionTexture) {\r\n transmissionInfo.transmissionTexture = transmissionTexture;\r\n }\r\n } else if (babylonMaterial.subsurfaceWeightTexture) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const subsurfaceTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.subsurfaceWeightTexture);\r\n if (subsurfaceTexture) {\r\n transmissionInfo.transmissionTexture = subsurfaceTexture;\r\n }\r\n }\r\n\r\n if (babylonMaterial.transmissionDepth == 0.0 && (!babylonMaterial.transmissionColor.equals(Color3.White()) || babylonMaterial.transmissionColorTexture)) {\r\n if (node.pbrMetallicRoughness) {\r\n if (!node.pbrMetallicRoughness.baseColorFactor) {\r\n node.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\r\n }\r\n node.pbrMetallicRoughness.baseColorFactor[0] *= babylonMaterial.transmissionColor.r;\r\n node.pbrMetallicRoughness.baseColorFactor[1] *= babylonMaterial.transmissionColor.g;\r\n node.pbrMetallicRoughness.baseColorFactor[2] *= babylonMaterial.transmissionColor.b;\r\n if (babylonMaterial.transmissionColorTexture && !node.pbrMetallicRoughness.baseColorTexture) {\r\n const transmissionColorTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionColorTexture);\r\n if (transmissionColorTexture) {\r\n node.pbrMetallicRoughness.baseColorTexture = transmissionColorTexture;\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n }\r\n }\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = transmissionInfo;\r\n }\r\n\r\n return node;\r\n }\r\n}\r\n\r\nGLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_materials_transmission(exporter));\r\n"]}
|
|
1
|
+
{"version":3,"file":"KHR_materials_transmission.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_transmission.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,mCAAmC,CAAC;AAElD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AACvF,kCAAkC,EAAE,CAAC","sourcesContent":["/**\r\n * Re-exports the pure implementation and applies the runtime registration side effect.\r\n * Import \"./KHR_materials_transmission.pure\" for tree-shakeable, side-effect-free usage.\r\n */\r\nexport * from \"./KHR_materials_transmission.pure\";\r\n\r\nimport { RegisterKHR_materials_transmission } from \"./KHR_materials_transmission.pure\";\r\nRegisterKHR_materials_transmission();\r\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type IMaterial } from "babylonjs-gltf2interface";
|
|
2
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
3
|
+
import { GLTFExporter } from "../glTFExporter.js";
|
|
4
|
+
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
5
|
+
import { type BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
|
|
6
|
+
/**
|
|
7
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/README.md)
|
|
8
|
+
*/
|
|
9
|
+
export declare class KHR_materials_transmission implements IGLTFExporterExtensionV2 {
|
|
10
|
+
/** Name of this extension */
|
|
11
|
+
readonly name = "KHR_materials_transmission";
|
|
12
|
+
/** Defines whether this extension is enabled */
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
/** Defines whether this extension is required */
|
|
15
|
+
required: boolean;
|
|
16
|
+
private _exporter;
|
|
17
|
+
private _wasUsed;
|
|
18
|
+
constructor(exporter: GLTFExporter);
|
|
19
|
+
/** Dispose */
|
|
20
|
+
dispose(): void;
|
|
21
|
+
/** @internal */
|
|
22
|
+
get wasUsed(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* After exporting a material, deal with additional textures
|
|
25
|
+
* @param context GLTF context of the material
|
|
26
|
+
* @param node exported GLTF node
|
|
27
|
+
* @param babylonMaterial corresponding babylon material
|
|
28
|
+
* @returns array of additional textures to export
|
|
29
|
+
*/
|
|
30
|
+
postExportMaterialAdditionalTexturesAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<BaseTexture[]>;
|
|
31
|
+
private _isExtensionEnabled;
|
|
32
|
+
/**
|
|
33
|
+
* After exporting a material
|
|
34
|
+
* @param context GLTF context of the material
|
|
35
|
+
* @param node exported GLTF node
|
|
36
|
+
* @param babylonMaterial corresponding babylon material
|
|
37
|
+
* @returns true if successful
|
|
38
|
+
*/
|
|
39
|
+
postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Registers the KHR_materials_transmission glTF serializer extension with the {@link GLTFExporter}.
|
|
43
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
44
|
+
*/
|
|
45
|
+
export declare function RegisterKHR_materials_transmission(): void;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { GLTFExporter } from "../glTFExporter.js";
|
|
2
|
+
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.pure.js";
|
|
3
|
+
import { Logger } from "@babylonjs/core/Misc/logger.js";
|
|
4
|
+
import { OpenPBRMaterial } from "@babylonjs/core/Materials/PBR/openpbrMaterial.pure.js";
|
|
5
|
+
import { Color3 } from "@babylonjs/core/Maths/math.color.pure.js";
|
|
6
|
+
const NAME = "KHR_materials_transmission";
|
|
7
|
+
/**
|
|
8
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/README.md)
|
|
9
|
+
*/
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
11
|
+
export class KHR_materials_transmission {
|
|
12
|
+
constructor(exporter) {
|
|
13
|
+
/** Name of this extension */
|
|
14
|
+
this.name = NAME;
|
|
15
|
+
/** Defines whether this extension is enabled */
|
|
16
|
+
this.enabled = true;
|
|
17
|
+
/** Defines whether this extension is required */
|
|
18
|
+
this.required = false;
|
|
19
|
+
this._wasUsed = false;
|
|
20
|
+
this._exporter = exporter;
|
|
21
|
+
}
|
|
22
|
+
/** Dispose */
|
|
23
|
+
dispose() { }
|
|
24
|
+
/** @internal */
|
|
25
|
+
get wasUsed() {
|
|
26
|
+
return this._wasUsed;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* After exporting a material, deal with additional textures
|
|
30
|
+
* @param context GLTF context of the material
|
|
31
|
+
* @param node exported GLTF node
|
|
32
|
+
* @param babylonMaterial corresponding babylon material
|
|
33
|
+
* @returns array of additional textures to export
|
|
34
|
+
*/
|
|
35
|
+
async postExportMaterialAdditionalTexturesAsync(context, node, babylonMaterial) {
|
|
36
|
+
const additionalTextures = [];
|
|
37
|
+
if (babylonMaterial instanceof PBRMaterial) {
|
|
38
|
+
if (this._isExtensionEnabled(babylonMaterial)) {
|
|
39
|
+
if (babylonMaterial.subSurface.refractionIntensityTexture && babylonMaterial.subSurface.useGltfStyleTextures) {
|
|
40
|
+
additionalTextures.push(babylonMaterial.subSurface.refractionIntensityTexture);
|
|
41
|
+
}
|
|
42
|
+
return additionalTextures;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (babylonMaterial instanceof OpenPBRMaterial) {
|
|
46
|
+
if (babylonMaterial.transmissionWeight > 0 && babylonMaterial.transmissionWeightTexture) {
|
|
47
|
+
additionalTextures.push(babylonMaterial.transmissionWeightTexture);
|
|
48
|
+
if (babylonMaterial.transmissionColorTexture) {
|
|
49
|
+
additionalTextures.push(babylonMaterial.transmissionColorTexture);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (babylonMaterial.subsurfaceWeight > 0 && babylonMaterial.subsurfaceWeightTexture) {
|
|
53
|
+
additionalTextures.push(babylonMaterial.subsurfaceWeightTexture);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return additionalTextures;
|
|
57
|
+
}
|
|
58
|
+
_isExtensionEnabled(mat) {
|
|
59
|
+
// This extension must not be used on a material that also uses KHR_materials_unlit
|
|
60
|
+
if (mat instanceof OpenPBRMaterial && !mat.unlit) {
|
|
61
|
+
return mat.transmissionWeight > 0 || mat.subsurfaceWeight > 0;
|
|
62
|
+
}
|
|
63
|
+
else if (mat instanceof PBRMaterial && !mat.unlit) {
|
|
64
|
+
const subs = mat.subSurface;
|
|
65
|
+
return ((subs.isRefractionEnabled && subs.refractionIntensity != undefined && subs.refractionIntensity != 0) ||
|
|
66
|
+
(subs.refractionIntensityTexture != null && subs.useGltfStyleTextures));
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* After exporting a material
|
|
72
|
+
* @param context GLTF context of the material
|
|
73
|
+
* @param node exported GLTF node
|
|
74
|
+
* @param babylonMaterial corresponding babylon material
|
|
75
|
+
* @returns true if successful
|
|
76
|
+
*/
|
|
77
|
+
async postExportMaterialAsync(context, node, babylonMaterial) {
|
|
78
|
+
if (!this._isExtensionEnabled(babylonMaterial)) {
|
|
79
|
+
return node;
|
|
80
|
+
}
|
|
81
|
+
if (babylonMaterial instanceof PBRMaterial) {
|
|
82
|
+
this._wasUsed = true;
|
|
83
|
+
const subSurface = babylonMaterial.subSurface;
|
|
84
|
+
const transmissionFactor = subSurface.refractionIntensity === 0 ? undefined : subSurface.refractionIntensity;
|
|
85
|
+
const transmissionInfo = {
|
|
86
|
+
transmissionFactor: transmissionFactor,
|
|
87
|
+
};
|
|
88
|
+
if (subSurface.refractionIntensityTexture) {
|
|
89
|
+
if (subSurface.useGltfStyleTextures) {
|
|
90
|
+
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
91
|
+
const transmissionTexture = this._exporter._materialExporter.getTextureInfo(subSurface.refractionIntensityTexture);
|
|
92
|
+
if (transmissionTexture) {
|
|
93
|
+
transmissionInfo.transmissionTexture = transmissionTexture;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
Logger.Warn(`${context}: Exporting a subsurface refraction intensity texture without \`useGltfStyleTextures\` is not supported`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
node.extensions || (node.extensions = {});
|
|
101
|
+
node.extensions[NAME] = transmissionInfo;
|
|
102
|
+
}
|
|
103
|
+
else if (babylonMaterial instanceof OpenPBRMaterial) {
|
|
104
|
+
this._wasUsed = true;
|
|
105
|
+
const subsurfaceFractionOfDielectric = (1.0 - babylonMaterial.transmissionWeight) * babylonMaterial.subsurfaceWeight;
|
|
106
|
+
const transmissionFactor = subsurfaceFractionOfDielectric + babylonMaterial.transmissionWeight;
|
|
107
|
+
const transmissionInfo = {
|
|
108
|
+
transmissionFactor: transmissionFactor,
|
|
109
|
+
};
|
|
110
|
+
if (babylonMaterial.transmissionWeightTexture) {
|
|
111
|
+
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
112
|
+
const transmissionTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionWeightTexture);
|
|
113
|
+
if (transmissionTexture) {
|
|
114
|
+
transmissionInfo.transmissionTexture = transmissionTexture;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (babylonMaterial.subsurfaceWeightTexture) {
|
|
118
|
+
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
119
|
+
const subsurfaceTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.subsurfaceWeightTexture);
|
|
120
|
+
if (subsurfaceTexture) {
|
|
121
|
+
transmissionInfo.transmissionTexture = subsurfaceTexture;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (babylonMaterial.transmissionDepth == 0.0 && (!babylonMaterial.transmissionColor.equals(Color3.White()) || babylonMaterial.transmissionColorTexture)) {
|
|
125
|
+
if (node.pbrMetallicRoughness) {
|
|
126
|
+
if (!node.pbrMetallicRoughness.baseColorFactor) {
|
|
127
|
+
node.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];
|
|
128
|
+
}
|
|
129
|
+
node.pbrMetallicRoughness.baseColorFactor[0] *= babylonMaterial.transmissionColor.r;
|
|
130
|
+
node.pbrMetallicRoughness.baseColorFactor[1] *= babylonMaterial.transmissionColor.g;
|
|
131
|
+
node.pbrMetallicRoughness.baseColorFactor[2] *= babylonMaterial.transmissionColor.b;
|
|
132
|
+
if (babylonMaterial.transmissionColorTexture && !node.pbrMetallicRoughness.baseColorTexture) {
|
|
133
|
+
const transmissionColorTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionColorTexture);
|
|
134
|
+
if (transmissionColorTexture) {
|
|
135
|
+
node.pbrMetallicRoughness.baseColorTexture = transmissionColorTexture;
|
|
136
|
+
this._exporter._materialNeedsUVsSet.add(babylonMaterial);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
node.extensions || (node.extensions = {});
|
|
142
|
+
node.extensions[NAME] = transmissionInfo;
|
|
143
|
+
}
|
|
144
|
+
return node;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
let _Registered = false;
|
|
148
|
+
/**
|
|
149
|
+
* Registers the KHR_materials_transmission glTF serializer extension with the {@link GLTFExporter}.
|
|
150
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
151
|
+
*/
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
153
|
+
export function RegisterKHR_materials_transmission() {
|
|
154
|
+
if (_Registered) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
_Registered = true;
|
|
158
|
+
GLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_materials_transmission(exporter));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=KHR_materials_transmission.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_materials_transmission.pure.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_transmission.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IMaterial, type IKHRMaterialsTransmission } from \"babylonjs-gltf2interface\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial.pure\";\r\nimport { Color3 } from \"core/Maths/math.color.pure\";\r\n\r\nconst NAME = \"KHR_materials_transmission\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_transmission implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n private _exporter: GLTFExporter;\r\n\r\n private _wasUsed = false;\r\n\r\n constructor(exporter: GLTFExporter) {\r\n this._exporter = exporter;\r\n }\r\n\r\n /** Dispose */\r\n public dispose() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n /**\r\n * After exporting a material, deal with additional textures\r\n * @param context GLTF context of the material\r\n * @param node exported GLTF node\r\n * @param babylonMaterial corresponding babylon material\r\n * @returns array of additional textures to export\r\n */\r\n public async postExportMaterialAdditionalTexturesAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<BaseTexture[]> {\r\n const additionalTextures: BaseTexture[] = [];\r\n\r\n if (babylonMaterial instanceof PBRMaterial) {\r\n if (this._isExtensionEnabled(babylonMaterial)) {\r\n if (babylonMaterial.subSurface.refractionIntensityTexture && babylonMaterial.subSurface.useGltfStyleTextures) {\r\n additionalTextures.push(babylonMaterial.subSurface.refractionIntensityTexture);\r\n }\r\n return additionalTextures;\r\n }\r\n } else if (babylonMaterial instanceof OpenPBRMaterial) {\r\n if (babylonMaterial.transmissionWeight > 0 && babylonMaterial.transmissionWeightTexture) {\r\n additionalTextures.push(babylonMaterial.transmissionWeightTexture);\r\n if (babylonMaterial.transmissionColorTexture) {\r\n additionalTextures.push(babylonMaterial.transmissionColorTexture);\r\n }\r\n }\r\n if (babylonMaterial.subsurfaceWeight > 0 && babylonMaterial.subsurfaceWeightTexture) {\r\n additionalTextures.push(babylonMaterial.subsurfaceWeightTexture);\r\n }\r\n }\r\n\r\n return additionalTextures;\r\n }\r\n\r\n private _isExtensionEnabled(mat: Material): boolean {\r\n // This extension must not be used on a material that also uses KHR_materials_unlit\r\n if (mat instanceof OpenPBRMaterial && !mat.unlit) {\r\n return mat.transmissionWeight > 0 || mat.subsurfaceWeight > 0;\r\n } else if (mat instanceof PBRMaterial && !mat.unlit) {\r\n const subs = mat.subSurface;\r\n return (\r\n (subs.isRefractionEnabled && subs.refractionIntensity != undefined && subs.refractionIntensity != 0) ||\r\n (subs.refractionIntensityTexture != null && subs.useGltfStyleTextures)\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * After exporting a material\r\n * @param context GLTF context of the material\r\n * @param node exported GLTF node\r\n * @param babylonMaterial corresponding babylon material\r\n * @returns true if successful\r\n */\r\n public async postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial> {\r\n if (!this._isExtensionEnabled(babylonMaterial)) {\r\n return node;\r\n }\r\n if (babylonMaterial instanceof PBRMaterial) {\r\n this._wasUsed = true;\r\n\r\n const subSurface = babylonMaterial.subSurface;\r\n const transmissionFactor = subSurface.refractionIntensity === 0 ? undefined : subSurface.refractionIntensity;\r\n\r\n const transmissionInfo: IKHRMaterialsTransmission = {\r\n transmissionFactor: transmissionFactor,\r\n };\r\n\r\n if (subSurface.refractionIntensityTexture) {\r\n if (subSurface.useGltfStyleTextures) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const transmissionTexture = this._exporter._materialExporter.getTextureInfo(subSurface.refractionIntensityTexture);\r\n if (transmissionTexture) {\r\n transmissionInfo.transmissionTexture = transmissionTexture;\r\n }\r\n } else {\r\n Logger.Warn(`${context}: Exporting a subsurface refraction intensity texture without \\`useGltfStyleTextures\\` is not supported`);\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = transmissionInfo;\r\n } else if (babylonMaterial instanceof OpenPBRMaterial) {\r\n this._wasUsed = true;\r\n\r\n const subsurfaceFractionOfDielectric = (1.0 - babylonMaterial.transmissionWeight) * babylonMaterial.subsurfaceWeight;\r\n const transmissionFactor = subsurfaceFractionOfDielectric + babylonMaterial.transmissionWeight;\r\n\r\n const transmissionInfo: IKHRMaterialsTransmission = {\r\n transmissionFactor: transmissionFactor,\r\n };\r\n\r\n if (babylonMaterial.transmissionWeightTexture) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const transmissionTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionWeightTexture);\r\n if (transmissionTexture) {\r\n transmissionInfo.transmissionTexture = transmissionTexture;\r\n }\r\n } else if (babylonMaterial.subsurfaceWeightTexture) {\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n const subsurfaceTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.subsurfaceWeightTexture);\r\n if (subsurfaceTexture) {\r\n transmissionInfo.transmissionTexture = subsurfaceTexture;\r\n }\r\n }\r\n\r\n if (babylonMaterial.transmissionDepth == 0.0 && (!babylonMaterial.transmissionColor.equals(Color3.White()) || babylonMaterial.transmissionColorTexture)) {\r\n if (node.pbrMetallicRoughness) {\r\n if (!node.pbrMetallicRoughness.baseColorFactor) {\r\n node.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, 1];\r\n }\r\n node.pbrMetallicRoughness.baseColorFactor[0] *= babylonMaterial.transmissionColor.r;\r\n node.pbrMetallicRoughness.baseColorFactor[1] *= babylonMaterial.transmissionColor.g;\r\n node.pbrMetallicRoughness.baseColorFactor[2] *= babylonMaterial.transmissionColor.b;\r\n if (babylonMaterial.transmissionColorTexture && !node.pbrMetallicRoughness.baseColorTexture) {\r\n const transmissionColorTexture = this._exporter._materialExporter.getTextureInfo(babylonMaterial.transmissionColorTexture);\r\n if (transmissionColorTexture) {\r\n node.pbrMetallicRoughness.baseColorTexture = transmissionColorTexture;\r\n this._exporter._materialNeedsUVsSet.add(babylonMaterial);\r\n }\r\n }\r\n }\r\n }\r\n\r\n node.extensions ||= {};\r\n node.extensions[NAME] = transmissionInfo;\r\n }\r\n\r\n return node;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_materials_transmission glTF serializer extension with the {@link GLTFExporter}.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_materials_transmission(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n GLTFExporter.RegisterExtension(NAME, (exporter) => new KHR_materials_transmission(exporter));\r\n}\r\n"]}
|
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
import { type IMaterial } from "babylonjs-gltf2interface";
|
|
2
|
-
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
3
|
-
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
2
|
+
* Re-exports the pure implementation and applies the runtime registration side effect.
|
|
3
|
+
* Import "./KHR_materials_unlit.pure" for tree-shakeable, side-effect-free usage.
|
|
6
4
|
*/
|
|
7
|
-
export
|
|
8
|
-
/** Name of this extension */
|
|
9
|
-
readonly name = "KHR_materials_unlit";
|
|
10
|
-
/** Defines whether this extension is enabled */
|
|
11
|
-
enabled: boolean;
|
|
12
|
-
/** Defines whether this extension is required */
|
|
13
|
-
required: boolean;
|
|
14
|
-
private _wasUsed;
|
|
15
|
-
constructor();
|
|
16
|
-
/** @internal */
|
|
17
|
-
get wasUsed(): boolean;
|
|
18
|
-
dispose(): void;
|
|
19
|
-
postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial>;
|
|
20
|
-
}
|
|
5
|
+
export * from "./KHR_materials_unlit.pure.js";
|
|
@@ -1,46 +1,8 @@
|
|
|
1
|
-
import { GLTFExporter } from "../glTFExporter.js";
|
|
2
|
-
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
|
|
3
|
-
import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
|
|
4
|
-
const NAME = "KHR_materials_unlit";
|
|
5
1
|
/**
|
|
6
|
-
*
|
|
2
|
+
* Re-exports the pure implementation and applies the runtime registration side effect.
|
|
3
|
+
* Import "./KHR_materials_unlit.pure" for tree-shakeable, side-effect-free usage.
|
|
7
4
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** Name of this extension */
|
|
12
|
-
this.name = NAME;
|
|
13
|
-
/** Defines whether this extension is enabled */
|
|
14
|
-
this.enabled = true;
|
|
15
|
-
/** Defines whether this extension is required */
|
|
16
|
-
this.required = false;
|
|
17
|
-
this._wasUsed = false;
|
|
18
|
-
}
|
|
19
|
-
/** @internal */
|
|
20
|
-
get wasUsed() {
|
|
21
|
-
return this._wasUsed;
|
|
22
|
-
}
|
|
23
|
-
dispose() { }
|
|
24
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
25
|
-
postExportMaterialAsync(context, node, babylonMaterial) {
|
|
26
|
-
return new Promise((resolve) => {
|
|
27
|
-
let unlitMaterial = false;
|
|
28
|
-
if (babylonMaterial instanceof PBRMaterial) {
|
|
29
|
-
unlitMaterial = babylonMaterial.unlit;
|
|
30
|
-
}
|
|
31
|
-
else if (babylonMaterial instanceof StandardMaterial) {
|
|
32
|
-
unlitMaterial = babylonMaterial.disableLighting;
|
|
33
|
-
}
|
|
34
|
-
if (unlitMaterial) {
|
|
35
|
-
this._wasUsed = true;
|
|
36
|
-
if (node.extensions == null) {
|
|
37
|
-
node.extensions = {};
|
|
38
|
-
}
|
|
39
|
-
node.extensions[NAME] = {};
|
|
40
|
-
}
|
|
41
|
-
resolve(node);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
GLTFExporter.RegisterExtension(NAME, () => new KHR_materials_unlit());
|
|
5
|
+
export * from "./KHR_materials_unlit.pure.js";
|
|
6
|
+
import { RegisterKHR_materials_unlit } from "./KHR_materials_unlit.pure.js";
|
|
7
|
+
RegisterKHR_materials_unlit();
|
|
46
8
|
//# sourceMappingURL=KHR_materials_unlit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_materials_unlit.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_unlit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KHR_materials_unlit.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_unlit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,2BAA2B,EAAE,CAAC","sourcesContent":["/**\r\n * Re-exports the pure implementation and applies the runtime registration side effect.\r\n * Import \"./KHR_materials_unlit.pure\" for tree-shakeable, side-effect-free usage.\r\n */\r\nexport * from \"./KHR_materials_unlit.pure\";\r\n\r\nimport { RegisterKHR_materials_unlit } from \"./KHR_materials_unlit.pure\";\r\nRegisterKHR_materials_unlit();\r\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type IMaterial } from "babylonjs-gltf2interface";
|
|
2
|
+
import { type IGLTFExporterExtensionV2 } from "../glTFExporterExtension.js";
|
|
3
|
+
import { type Material } from "@babylonjs/core/Materials/material.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare class KHR_materials_unlit implements IGLTFExporterExtensionV2 {
|
|
8
|
+
/** Name of this extension */
|
|
9
|
+
readonly name = "KHR_materials_unlit";
|
|
10
|
+
/** Defines whether this extension is enabled */
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
/** Defines whether this extension is required */
|
|
13
|
+
required: boolean;
|
|
14
|
+
private _wasUsed;
|
|
15
|
+
constructor();
|
|
16
|
+
/** @internal */
|
|
17
|
+
get wasUsed(): boolean;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Registers the KHR_materials_unlit glTF serializer extension with the {@link GLTFExporter}.
|
|
23
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
24
|
+
*/
|
|
25
|
+
export declare function RegisterKHR_materials_unlit(): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { GLTFExporter } from "../glTFExporter.js";
|
|
2
|
+
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.pure.js";
|
|
3
|
+
import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.pure.js";
|
|
4
|
+
const NAME = "KHR_materials_unlit";
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
9
|
+
export class KHR_materials_unlit {
|
|
10
|
+
constructor() {
|
|
11
|
+
/** Name of this extension */
|
|
12
|
+
this.name = NAME;
|
|
13
|
+
/** Defines whether this extension is enabled */
|
|
14
|
+
this.enabled = true;
|
|
15
|
+
/** Defines whether this extension is required */
|
|
16
|
+
this.required = false;
|
|
17
|
+
this._wasUsed = false;
|
|
18
|
+
}
|
|
19
|
+
/** @internal */
|
|
20
|
+
get wasUsed() {
|
|
21
|
+
return this._wasUsed;
|
|
22
|
+
}
|
|
23
|
+
dispose() { }
|
|
24
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
25
|
+
postExportMaterialAsync(context, node, babylonMaterial) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
let unlitMaterial = false;
|
|
28
|
+
if (babylonMaterial instanceof PBRMaterial) {
|
|
29
|
+
unlitMaterial = babylonMaterial.unlit;
|
|
30
|
+
}
|
|
31
|
+
else if (babylonMaterial instanceof StandardMaterial) {
|
|
32
|
+
unlitMaterial = babylonMaterial.disableLighting;
|
|
33
|
+
}
|
|
34
|
+
if (unlitMaterial) {
|
|
35
|
+
this._wasUsed = true;
|
|
36
|
+
if (node.extensions == null) {
|
|
37
|
+
node.extensions = {};
|
|
38
|
+
}
|
|
39
|
+
node.extensions[NAME] = {};
|
|
40
|
+
}
|
|
41
|
+
resolve(node);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
let _Registered = false;
|
|
46
|
+
/**
|
|
47
|
+
* Registers the KHR_materials_unlit glTF serializer extension with the {@link GLTFExporter}.
|
|
48
|
+
* Safe to call multiple times; only the first call has an effect.
|
|
49
|
+
*/
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
51
|
+
export function RegisterKHR_materials_unlit() {
|
|
52
|
+
if (_Registered) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
_Registered = true;
|
|
56
|
+
GLTFExporter.RegisterExtension(NAME, () => new KHR_materials_unlit());
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=KHR_materials_unlit.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_materials_unlit.pure.js","sourceRoot":"","sources":["../../../../../../dev/serializers/src/glTF/2.0/Extensions/KHR_materials_unlit.pure.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAEnC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,mBAAmB;IAY5B;QAXA,6BAA6B;QACb,SAAI,GAAG,IAAI,CAAC;QAE5B,gDAAgD;QACzC,YAAO,GAAG,IAAI,CAAC;QAEtB,iDAAiD;QAC1C,aAAQ,GAAG,KAAK,CAAC;QAEhB,aAAQ,GAAG,KAAK,CAAC;IAEV,CAAC;IAEhB,gBAAgB;IAChB,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEM,OAAO,KAAI,CAAC;IAEnB,gDAAgD;IACzC,uBAAuB,CAAE,OAAe,EAAE,IAAe,EAAE,eAAyB;QACvF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,IAAI,eAAe,YAAY,WAAW,EAAE,CAAC;gBACzC,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;YAC1C,CAAC;iBAAM,IAAI,eAAe,YAAY,gBAAgB,EAAE,CAAC;gBACrD,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC;YACpD,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAErB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACzB,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,2BAA2B;IACvC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import { type IMaterial } from \"babylonjs-gltf2interface\";\r\nimport { type IGLTFExporterExtensionV2 } from \"../glTFExporterExtension\";\r\nimport { GLTFExporter } from \"../glTFExporter\";\r\nimport { type Material } from \"core/Materials/material\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial.pure\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial.pure\";\r\n\r\nconst NAME = \"KHR_materials_unlit\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_materials_unlit implements IGLTFExporterExtensionV2 {\r\n /** Name of this extension */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled */\r\n public enabled = true;\r\n\r\n /** Defines whether this extension is required */\r\n public required = false;\r\n\r\n private _wasUsed = false;\r\n\r\n constructor() {}\r\n\r\n /** @internal */\r\n public get wasUsed() {\r\n return this._wasUsed;\r\n }\r\n\r\n public dispose() {}\r\n\r\n // eslint-disable-next-line no-restricted-syntax\r\n public postExportMaterialAsync?(context: string, node: IMaterial, babylonMaterial: Material): Promise<IMaterial> {\r\n return new Promise((resolve) => {\r\n let unlitMaterial = false;\r\n\r\n if (babylonMaterial instanceof PBRMaterial) {\r\n unlitMaterial = babylonMaterial.unlit;\r\n } else if (babylonMaterial instanceof StandardMaterial) {\r\n unlitMaterial = babylonMaterial.disableLighting;\r\n }\r\n\r\n if (unlitMaterial) {\r\n this._wasUsed = true;\r\n\r\n if (node.extensions == null) {\r\n node.extensions = {};\r\n }\r\n\r\n node.extensions[NAME] = {};\r\n }\r\n\r\n resolve(node);\r\n });\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_materials_unlit glTF serializer extension with the {@link GLTFExporter}.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_materials_unlit(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n GLTFExporter.RegisterExtension(NAME, () => new KHR_materials_unlit());\r\n}\r\n"]}
|