@babylonjs/core 8.17.0 → 8.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Audio/audioEngine.d.ts +11 -16
- package/Audio/audioEngine.js +79 -189
- package/Audio/audioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +15 -1
- package/AudioV2/webAudio/webAudioEngine.js +25 -1
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioMainOut.d.ts +4 -2
- package/AudioV2/webAudio/webAudioMainOut.js +19 -5
- package/AudioV2/webAudio/webAudioMainOut.js.map +1 -1
- package/AudioV2/webAudio/webAudioUnmuteUI.d.ts +6 -0
- package/AudioV2/webAudio/webAudioUnmuteUI.js +30 -2
- package/AudioV2/webAudio/webAudioUnmuteUI.js.map +1 -1
- package/Culling/Helper/computeShaderBoundingHelper.js +1 -1
- package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Layers/effectLayer.d.ts +4 -0
- package/Layers/effectLayer.js +7 -5
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.d.ts +1 -17
- package/Layers/effectLayerSceneComponent.js +0 -11
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +14 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/ktx2decoderTypes.d.ts +1 -0
- package/Materials/Textures/ktx2decoderTypes.js +2 -0
- package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -2
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +1 -1
- package/Materials/uniformBuffer.js +2 -2
- package/Materials/uniformBuffer.js.map +1 -1
- package/Meshes/trailMesh.js +2 -2
- package/Meshes/trailMesh.js.map +1 -1
- package/Morph/morphTargetManager.js +3 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/IShapeBlock.d.ts +14 -0
- package/Particles/Node/Blocks/Emitters/IShapeBlock.js +2 -0
- package/Particles/Node/Blocks/Emitters/IShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.d.ts +2 -1
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +2 -1
- package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.d.ts +2 -1
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.d.ts +2 -1
- package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.d.ts +2 -1
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +4 -3
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +4 -4
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.js +0 -1
- package/Particles/Node/Blocks/systemBlock.js.map +1 -1
- package/Particles/Node/index.d.ts +1 -0
- package/Particles/Node/index.js +1 -0
- package/Particles/Node/index.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.d.ts +34 -1
- package/Particles/Node/nodeParticleSystemSet.helper.d.ts +10 -0
- package/Particles/Node/nodeParticleSystemSet.helper.js +90 -0
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -0
- package/Particles/Node/nodeParticleSystemSet.js +64 -1
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/particleSystem.d.ts +4 -6
- package/Particles/particleSystem.js +6 -8
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/v2/characterController.d.ts +1 -1
- package/Physics/v2/characterController.js +1 -1
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +1 -1
- package/Physics/v2/physicsBody.js +2 -2
- package/Physics/v2/physicsBody.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js +1 -0
- package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +1 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/boundingInfo.compute.js +2 -2
- package/ShadersWGSL/boundingInfo.compute.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +1 -1
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +23 -4
- package/scene.js +38 -4
- package/scene.js.map +1 -1
|
@@ -300,6 +300,11 @@ export class PBRSubSurfaceConfiguration extends MaterialPluginBase {
|
|
|
300
300
|
return false;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
+
if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled) {
|
|
304
|
+
if (!this._refractionIntensityTexture.isReadyOrNotBlocking()) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
303
308
|
if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled) {
|
|
304
309
|
if (!this._translucencyColorTexture.isReadyOrNotBlocking()) {
|
|
305
310
|
return false;
|
|
@@ -589,6 +594,9 @@ export class PBRSubSurfaceConfiguration extends MaterialPluginBase {
|
|
|
589
594
|
if (this._refractionTexture) {
|
|
590
595
|
activeTextures.push(this._refractionTexture);
|
|
591
596
|
}
|
|
597
|
+
if (this._refractionIntensityTexture) {
|
|
598
|
+
activeTextures.push(this._refractionIntensityTexture);
|
|
599
|
+
}
|
|
592
600
|
if (this._translucencyColorTexture) {
|
|
593
601
|
activeTextures.push(this._translucencyColorTexture);
|
|
594
602
|
}
|
|
@@ -603,6 +611,9 @@ export class PBRSubSurfaceConfiguration extends MaterialPluginBase {
|
|
|
603
611
|
if (this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0) {
|
|
604
612
|
animatables.push(this._refractionTexture);
|
|
605
613
|
}
|
|
614
|
+
if (this._refractionIntensityTexture && this._refractionIntensityTexture.animations && this._refractionIntensityTexture.animations.length > 0) {
|
|
615
|
+
animatables.push(this._refractionIntensityTexture);
|
|
616
|
+
}
|
|
606
617
|
if (this._translucencyColorTexture && this._translucencyColorTexture.animations && this._translucencyColorTexture.animations.length > 0) {
|
|
607
618
|
animatables.push(this._translucencyColorTexture);
|
|
608
619
|
}
|
|
@@ -618,6 +629,9 @@ export class PBRSubSurfaceConfiguration extends MaterialPluginBase {
|
|
|
618
629
|
if (this._refractionTexture) {
|
|
619
630
|
this._refractionTexture.dispose();
|
|
620
631
|
}
|
|
632
|
+
if (this._refractionIntensityTexture) {
|
|
633
|
+
this._refractionIntensityTexture.dispose();
|
|
634
|
+
}
|
|
621
635
|
if (this._translucencyColorTexture) {
|
|
622
636
|
this._translucencyColorTexture.dispose();
|
|
623
637
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrSubSurfaceConfiguration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/pbrSubSurfaceConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../types\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\nimport { serialize, serializeAsTexture, expandToProperty, serializeAsColor3 } from \"../../Misc/decorators\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport type { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport type { CubeTexture } from \"../Textures/cubeTexture\";\r\nimport { TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { PBRBaseMaterial } from \"./pbrBaseMaterial\";\r\nimport { BindTextureMatrix, PrepareDefinesForMergedUV } from \"../materialHelper.functions\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialSubSurfaceDefines extends MaterialDefines {\r\n public SUBSURFACE = false;\r\n\r\n public SS_REFRACTION = false;\r\n public SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n public SS_TRANSLUCENCY = false;\r\n public SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n public SS_SCATTERING = false;\r\n public SS_DISPERSION = false;\r\n\r\n public SS_THICKNESSANDMASK_TEXTURE = false;\r\n public SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0;\r\n public SS_HAS_THICKNESS = false;\r\n public SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n public SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n public SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = false;\r\n\r\n public SS_REFRACTIONMAP_3D = false;\r\n public SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n public SS_LODINREFRACTIONALPHA = false;\r\n public SS_GAMMAREFRACTION = false;\r\n public SS_RGBDREFRACTION = false;\r\n public SS_LINEARSPECULARREFRACTION = false;\r\n public SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n public SS_ALBEDOFORREFRACTIONTINT = false;\r\n public SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n public SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n public SS_USE_THICKNESS_AS_DEPTH = false;\r\n\r\n public SS_USE_GLTF_TEXTURES = false;\r\n public SS_APPLY_ALBEDO_AFTER_SUBSURFACE = false;\r\n public SS_TRANSLUCENCY_LEGACY = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the sub surface component of the PBR material\r\n */\r\nexport class PBRSubSurfaceConfiguration extends MaterialPluginBase {\r\n /**\r\n * Default value used for applyAlbedoAfterSubSurface.\r\n *\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface properties (transmission, refraction, etc.). Default is false.\r\n * Note however that the PBR calculation is wrong when this property is set to true, so only use it if you want to mimic the 7.0 behavior.\r\n */\r\n public static DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE = false;\r\n\r\n /**\r\n * Default value used for legacyTranslucency.\r\n *\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface translucency. Default is false.\r\n */\r\n public static DEFAULT_LEGACY_TRANSLUCENCY = false;\r\n\r\n protected override _material: PBRBaseMaterial;\r\n\r\n private _isRefractionEnabled = false;\r\n /**\r\n * Defines if the refraction is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isRefractionEnabled = false;\r\n\r\n private _isTranslucencyEnabled = false;\r\n /**\r\n * Defines if the translucency is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isTranslucencyEnabled = false;\r\n\r\n private _isDispersionEnabled = false;\r\n /**\r\n * Defines if dispersion is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isDispersionEnabled = false;\r\n\r\n private _isScatteringEnabled = false;\r\n /**\r\n * Defines if the sub surface scattering is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markScenePrePassDirty\")\r\n public isScatteringEnabled = false;\r\n\r\n @serialize()\r\n private _scatteringDiffusionProfileIndex = 0;\r\n\r\n /**\r\n * Diffusion profile for subsurface scattering.\r\n * Useful for better scattering in the skins or foliages.\r\n */\r\n public get scatteringDiffusionProfile(): Nullable<Color3> {\r\n if (!this._scene.subSurfaceConfiguration) {\r\n return null;\r\n }\r\n\r\n return this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex];\r\n }\r\n\r\n public set scatteringDiffusionProfile(c: Nullable<Color3>) {\r\n if (!this._scene.enableSubSurfaceForPrePass()) {\r\n // Not supported\r\n return;\r\n }\r\n\r\n // addDiffusionProfile automatically checks for doubles\r\n if (c) {\r\n this._scatteringDiffusionProfileIndex = this._scene.subSurfaceConfiguration!.addDiffusionProfile(c);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refraction intensity of the material.\r\n * The refraction when enabled replaces the Diffuse part of the material.\r\n * The intensity helps transitioning between diffuse and refraction.\r\n */\r\n @serialize()\r\n public refractionIntensity: number = 1;\r\n\r\n /**\r\n * Defines the translucency intensity of the material.\r\n * When translucency has been enabled, this defines how much of the \"translucency\"\r\n * is added to the diffuse part of the material.\r\n */\r\n @serialize()\r\n public translucencyIntensity: number = 1;\r\n\r\n /**\r\n * When enabled, transparent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintRefraction: boolean = false;\r\n\r\n /**\r\n * When enabled, translucent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintTranslucency: boolean = false;\r\n\r\n private _thicknessTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the average thickness of a mesh in a texture (The texture is holding the values linearly).\r\n * The red (or green if useGltfStyleTextures=true) channel of the texture should contain the thickness remapped between 0 and 1.\r\n * 0 would mean minimumThickness\r\n * 1 would mean maximumThickness\r\n * The other channels might be use as a mask to vary the different effects intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public thicknessTexture: Nullable<BaseTexture> = null;\r\n\r\n private _refractionTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the texture to use for refraction.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @internal */\r\n public _indexOfRefraction = 1.5;\r\n /**\r\n * Index of refraction of the material base layer.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This does not only impact refraction but also the Base F0 of Dielectric Materials.\r\n *\r\n * From dielectric fresnel rules: F0 = square((iorT - iorI) / (iorT + iorI))\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public indexOfRefraction = 1.5;\r\n\r\n @serialize()\r\n private _volumeIndexOfRefraction = -1.0;\r\n\r\n /**\r\n * Index of refraction of the material's volume.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This ONLY impacts refraction. If not provided or given a non-valid value,\r\n * the volume will use the same IOR as the surface.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public get volumeIndexOfRefraction(): number {\r\n if (this._volumeIndexOfRefraction >= 1.0) {\r\n return this._volumeIndexOfRefraction;\r\n }\r\n return this._indexOfRefraction;\r\n }\r\n public set volumeIndexOfRefraction(value: number) {\r\n if (value >= 1.0) {\r\n this._volumeIndexOfRefraction = value;\r\n } else {\r\n this._volumeIndexOfRefraction = -1.0;\r\n }\r\n }\r\n\r\n private _invertRefractionY = false;\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertRefractionY = false;\r\n\r\n /** @internal */\r\n public _linkRefractionWithTransparency = false;\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public linkRefractionWithTransparency = false;\r\n\r\n /**\r\n * Defines the minimum thickness stored in the thickness map.\r\n * If no thickness map is defined, this value will be used to simulate thickness.\r\n */\r\n @serialize()\r\n public minimumThickness: number = 0;\r\n\r\n /**\r\n * Defines the maximum thickness stored in the thickness map.\r\n */\r\n @serialize()\r\n public maximumThickness: number = 1;\r\n\r\n /**\r\n * Defines that the thickness should be used as a measure of the depth volume.\r\n */\r\n @serialize()\r\n public useThicknessAsDepth = false;\r\n\r\n /**\r\n * Defines the volume tint of the material.\r\n * This is used for both translucency and scattering.\r\n */\r\n @serializeAsColor3()\r\n public tintColor = Color3.White();\r\n\r\n /**\r\n * Defines the distance at which the tint color should be found in the media.\r\n * This is used for refraction only.\r\n */\r\n @serialize()\r\n public tintColorAtDistance = 1;\r\n\r\n /**\r\n * Defines the Abbe number for the volume.\r\n */\r\n @serialize()\r\n public dispersion = 0;\r\n\r\n /**\r\n * Defines how far each channel transmit through the media.\r\n * It is defined as a color to simplify it selection.\r\n */\r\n @serializeAsColor3()\r\n public diffusionDistance = Color3.White();\r\n\r\n private _useMaskFromThicknessTexture = false;\r\n /**\r\n * Stores the intensity of the different subsurface effects in the thickness texture.\r\n * Note that if refractionIntensityTexture and/or translucencyIntensityTexture is provided it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n * * the blue (alpha if useGltfStyleTextures = true) channel is the translucency intensity.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useMaskFromThicknessTexture: boolean = false;\r\n\r\n private _refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the refraction. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the translucency. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the blue (alpha if useGltfStyleTextures = true) channel is the translucency intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Defines the translucency tint of the material.\r\n * If not set, the tint color will be used instead.\r\n */\r\n @serializeAsColor3()\r\n public translucencyColor: Nullable<Color3> = null;\r\n\r\n private _translucencyColorTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the translucency tint color of the material as a texture.\r\n * This is multiplied against the translucency color to add variety and realism to the material.\r\n * If translucencyColor is not set, the tint color will be used instead.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyColorTexture: Nullable<BaseTexture> = null;\r\n\r\n private _useGltfStyleTextures = true;\r\n /**\r\n * Use channels layout used by glTF:\r\n * * thicknessTexture: the green (instead of red) channel is the thickness\r\n * * thicknessTexture/refractionIntensityTexture: the red (instead of green) channel is the refraction intensity\r\n * * thicknessTexture/translucencyIntensityTexture: the alpha (instead of blue) channel is the translucency intensity\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useGltfStyleTextures: boolean = true;\r\n\r\n /**\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface properties (transmission, refraction, etc.). Default is false.\r\n * Note however that the PBR calculation is wrong when this property is set to true, so only use it if you want to mimic the 7.0 behavior.\r\n */\r\n @serialize()\r\n public applyAlbedoAfterSubSurface = PBRSubSurfaceConfiguration.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE;\r\n\r\n /**\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface translucency. Default is false.\r\n */\r\n @serialize()\r\n public legacyTranslucency = PBRSubSurfaceConfiguration.DEFAULT_LEGACY_TRANSLUCENCY;\r\n\r\n /**\r\n * Keeping for backward compatibility... Should not be used anymore. It has been replaced by\r\n * the property with the correct spelling.\r\n * @see legacyTranslucency\r\n */\r\n public get legacyTransluceny(): boolean {\r\n return this.legacyTranslucency;\r\n }\r\n public set legacyTransluceny(value: boolean) {\r\n this.legacyTranslucency = value;\r\n }\r\n\r\n private _scene: Scene;\r\n\r\n /** @internal */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n private _internalMarkScenePrePassDirty: () => void;\r\n\r\n /** @internal */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n /** @internal */\r\n public _markScenePrePassDirty(): void {\r\n this._enable(this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n this._internalMarkScenePrePassDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRSubSurface\", 130, new MaterialSubSurfaceDefines(), addToPluginList);\r\n\r\n this._scene = material.getScene();\r\n this.registerForExtraEvents = true;\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n this._internalMarkScenePrePassDirty = material._dirtyCallbacks[Constants.MATERIAL_PrePassDirtyFlag];\r\n }\r\n\r\n public override isReadyForSubMesh(defines: MaterialSubSurfaceDefines, scene: Scene): boolean {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n if (!this._thicknessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled) {\r\n if (!this._translucencyColorTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled) {\r\n if (!this._translucencyIntensityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (!refractionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override prepareDefinesBeforeAttributes(defines: MaterialSubSurfaceDefines, scene: Scene): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n defines.SUBSURFACE = false;\r\n defines.SS_DISPERSION = false;\r\n defines.SS_TRANSLUCENCY = false;\r\n defines.SS_SCATTERING = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV = 0;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV = 0;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV = 0;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = false;\r\n defines.SS_APPLY_ALBEDO_AFTER_SUBSURFACE = false;\r\n return;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.SUBSURFACE = true;\r\n\r\n defines.SS_DISPERSION = this._isDispersionEnabled;\r\n defines.SS_TRANSLUCENCY = this._isTranslucencyEnabled;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_TRANSLUCENCY_LEGACY = this.legacyTranslucency;\r\n defines.SS_SCATTERING = this._isScatteringEnabled;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n defines.SS_APPLY_ALBEDO_AFTER_SUBSURFACE = this.applyAlbedoAfterSubSurface;\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._thicknessTexture, defines, \"SS_THICKNESSANDMASK_TEXTURE\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._refractionIntensityTexture, defines, \"SS_REFRACTIONINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._translucencyIntensityTexture, defines, \"SS_TRANSLUCENCYINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._translucencyColorTexture, defines, \"SS_TRANSLUCENCYCOLOR_TEXTURE\");\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = this._translucencyColorTexture.gammaSpace;\r\n }\r\n }\r\n }\r\n\r\n defines.SS_HAS_THICKNESS = this.maximumThickness - this.minimumThickness !== 0.0;\r\n defines.SS_USE_GLTF_TEXTURES = this._useGltfStyleTextures;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = this._useMaskFromThicknessTexture && !this._refractionIntensityTexture;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = this._useMaskFromThicknessTexture && !this._translucencyIntensityTexture;\r\n\r\n if (this._isRefractionEnabled) {\r\n if (scene.texturesEnabled) {\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n defines.SS_REFRACTION = true;\r\n defines.SS_REFRACTIONMAP_3D = refractionTexture.isCube;\r\n defines.SS_GAMMAREFRACTION = refractionTexture.gammaSpace;\r\n defines.SS_RGBDREFRACTION = refractionTexture.isRGBD;\r\n defines.SS_LINEARSPECULARREFRACTION = refractionTexture.linearSpecularLOD;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ;\r\n defines.SS_LODINREFRACTIONALPHA = refractionTexture.lodLevelInAlpha;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = this._linkRefractionWithTransparency;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = this.useAlbedoToTintRefraction;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = refractionTexture.isCube && (<any>refractionTexture).boundingBoxSize;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = this.useThicknessAsDepth;\r\n }\r\n }\r\n }\r\n\r\n if (this._isTranslucencyEnabled) {\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = this.useAlbedoToTintTranslucency;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the material data (this function is called even if mustRebind() returns false)\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public override hardBindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n // If min/max thickness is 0, avoid decompising to determine the scaled thickness (it's always zero).\r\n if (this.maximumThickness === 0.0 && this.minimumThickness === 0.0) {\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", 0, 0);\r\n } else {\r\n subMesh.getRenderingMesh().getWorldMatrix().decompose(TmpVectors.Vector3[0]);\r\n const thicknessScale = Math.max(Math.abs(TmpVectors.Vector3[0].x), Math.abs(TmpVectors.Vector3[0].y), Math.abs(TmpVectors.Vector3[0].z));\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", this.minimumThickness * thicknessScale, (this.maximumThickness - this.minimumThickness) * thicknessScale);\r\n }\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n const defines = subMesh.materialDefines as unknown as MaterialSubSurfaceDefines;\r\n\r\n const isFrozen = this._material.isFrozen;\r\n const realTimeFiltering = this._material.realTimeFiltering;\r\n const lodBasedMicrosurface = defines.LODBASEDMICROSFURACE;\r\n\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vThicknessInfos\", this._thicknessTexture.coordinatesIndex, this._thicknessTexture.level);\r\n BindTextureMatrix(this._thicknessTexture, uniformBuffer, \"thickness\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vRefractionIntensityInfos\", this._refractionIntensityTexture.coordinatesIndex, this._refractionIntensityTexture.level);\r\n BindTextureMatrix(this._refractionIntensityTexture, uniformBuffer, \"refractionIntensity\");\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled && defines.SS_TRANSLUCENCYCOLOR_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyColorInfos\", this._translucencyColorTexture.coordinatesIndex, this._translucencyColorTexture.level);\r\n BindTextureMatrix(this._translucencyColorTexture, uniformBuffer, \"translucencyColor\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyIntensityInfos\", this._translucencyIntensityTexture.coordinatesIndex, this._translucencyIntensityTexture.level);\r\n BindTextureMatrix(this._translucencyIntensityTexture, uniformBuffer, \"translucencyIntensity\");\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n uniformBuffer.updateMatrix(\"refractionMatrix\", refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const width = refractionTexture.getSize().width;\r\n const refractionIor = this.volumeIndexOfRefraction;\r\n uniformBuffer.updateFloat4(\"vRefractionInfos\", refractionTexture.level, 1 / refractionIor, depth, this._invertRefractionY ? -1 : 1);\r\n uniformBuffer.updateFloat4(\r\n \"vRefractionMicrosurfaceInfos\",\r\n width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1.0 / this.indexOfRefraction\r\n );\r\n\r\n if (realTimeFiltering) {\r\n uniformBuffer.updateFloat2(\"vRefractionFilteringInfo\", width, Math.log2(width));\r\n }\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n\r\n uniformBuffer.updateVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n uniformBuffer.updateVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n if (this._isScatteringEnabled) {\r\n uniformBuffer.updateFloat(\"scatteringDiffusionProfile\", this._scatteringDiffusionProfileIndex);\r\n }\r\n uniformBuffer.updateColor3(\"vDiffusionDistance\", this.diffusionDistance);\r\n\r\n uniformBuffer.updateFloat4(\"vTintColor\", this.tintColor.r, this.tintColor.g, this.tintColor.b, Math.max(0.00001, this.tintColorAtDistance));\r\n uniformBuffer.updateColor4(\"vTranslucencyColor\", this.translucencyColor ?? this.tintColor, 0);\r\n\r\n uniformBuffer.updateFloat3(\"vSubSurfaceIntensity\", this.refractionIntensity, this.translucencyIntensity, 0);\r\n\r\n uniformBuffer.updateFloat(\"dispersion\", this.dispersion);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.setTexture(\"thicknessSampler\", this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"refractionIntensitySampler\", this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyIntensitySampler\", this._translucencyIntensityTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled && defines.SS_TRANSLUCENCYCOLOR_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyColorSampler\", this._translucencyColorTexture);\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (lodBasedMicrosurface) {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture);\r\n } else {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture._lodTextureMid || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerLow\", refractionTexture._lodTextureLow || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerHigh\", refractionTexture._lodTextureHigh || refractionTexture);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the texture used for refraction or null if none is used.\r\n * @param scene defines the scene the material belongs to.\r\n * @returns - Refraction texture if present. If no refraction texture and refraction\r\n * is linked with transparency, returns environment texture. Otherwise, returns null.\r\n */\r\n private _getRefractionTexture(scene: Scene): Nullable<BaseTexture> {\r\n if (this._refractionTexture) {\r\n return this._refractionTexture;\r\n }\r\n\r\n if (this._isRefractionEnabled) {\r\n return scene.environmentTexture;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n public get disableAlphaBlending(): boolean {\r\n return this._isRefractionEnabled && this._linkRefractionWithTransparency;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public override fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n renderTargets.push(<RenderTargetTexture>this._refractionTexture);\r\n }\r\n }\r\n\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (this._thicknessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionIntensityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._translucencyIntensityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._translucencyColorTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._thicknessTexture) {\r\n activeTextures.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture) {\r\n activeTextures.push(this._refractionTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture) {\r\n activeTextures.push(this._translucencyColorTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture) {\r\n activeTextures.push(this._translucencyIntensityTexture);\r\n }\r\n }\r\n\r\n public override getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {\r\n animatables.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0) {\r\n animatables.push(this._refractionTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture && this._translucencyColorTexture.animations && this._translucencyColorTexture.animations.length > 0) {\r\n animatables.push(this._translucencyColorTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && this._translucencyIntensityTexture.animations && this._translucencyIntensityTexture.animations.length > 0) {\r\n animatables.push(this._translucencyIntensityTexture);\r\n }\r\n }\r\n\r\n public override dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._thicknessTexture) {\r\n this._thicknessTexture.dispose();\r\n }\r\n\r\n if (this._refractionTexture) {\r\n this._refractionTexture.dispose();\r\n }\r\n\r\n if (this._translucencyColorTexture) {\r\n this._translucencyColorTexture.dispose();\r\n }\r\n\r\n if (this._translucencyIntensityTexture) {\r\n this._translucencyIntensityTexture.dispose();\r\n }\r\n }\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"PBRSubSurfaceConfiguration\";\r\n }\r\n\r\n public override addFallbacks(defines: MaterialSubSurfaceDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.SS_SCATTERING) {\r\n fallbacks.addFallback(currentRank++, \"SS_SCATTERING\");\r\n }\r\n if (defines.SS_TRANSLUCENCY) {\r\n fallbacks.addFallback(currentRank++, \"SS_TRANSLUCENCY\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\r\n \"thicknessSampler\",\r\n \"refractionIntensitySampler\",\r\n \"translucencyIntensitySampler\",\r\n \"refractionSampler\",\r\n \"refractionSamplerLow\",\r\n \"refractionSamplerHigh\",\r\n \"translucencyColorSampler\"\r\n );\r\n }\r\n\r\n public override getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vRefractionMicrosurfaceInfos\", size: 4, type: \"vec4\" },\r\n { name: \"vRefractionFilteringInfo\", size: 2, type: \"vec2\" },\r\n { name: \"vTranslucencyIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionInfos\", size: 4, type: \"vec4\" },\r\n { name: \"refractionMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"thicknessMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"refractionIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"translucencyIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessParam\", size: 2, type: \"vec2\" },\r\n { name: \"vDiffusionDistance\", size: 3, type: \"vec3\" },\r\n { name: \"vTintColor\", size: 4, type: \"vec4\" },\r\n { name: \"vSubSurfaceIntensity\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionPosition\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionSize\", size: 3, type: \"vec3\" },\r\n { name: \"scatteringDiffusionProfile\", size: 1, type: \"float\" },\r\n { name: \"dispersion\", size: 1, type: \"float\" },\r\n\r\n { name: \"vTranslucencyColor\", size: 4, type: \"vec4\" },\r\n { name: \"vTranslucencyColorInfos\", size: 2, type: \"vec2\" },\r\n { name: \"translucencyColorMatrix\", size: 16, type: \"mat4\" },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"pbrSubSurfaceConfiguration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/pbrSubSurfaceConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../types\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\nimport { serialize, serializeAsTexture, expandToProperty, serializeAsColor3 } from \"../../Misc/decorators\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport type { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport type { CubeTexture } from \"../Textures/cubeTexture\";\r\nimport { TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { PBRBaseMaterial } from \"./pbrBaseMaterial\";\r\nimport { BindTextureMatrix, PrepareDefinesForMergedUV } from \"../materialHelper.functions\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MaterialSubSurfaceDefines extends MaterialDefines {\r\n public SUBSURFACE = false;\r\n\r\n public SS_REFRACTION = false;\r\n public SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n public SS_TRANSLUCENCY = false;\r\n public SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n public SS_SCATTERING = false;\r\n public SS_DISPERSION = false;\r\n\r\n public SS_THICKNESSANDMASK_TEXTURE = false;\r\n public SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0;\r\n public SS_HAS_THICKNESS = false;\r\n public SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n public SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n public SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = false;\r\n\r\n public SS_REFRACTIONMAP_3D = false;\r\n public SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n public SS_LODINREFRACTIONALPHA = false;\r\n public SS_GAMMAREFRACTION = false;\r\n public SS_RGBDREFRACTION = false;\r\n public SS_LINEARSPECULARREFRACTION = false;\r\n public SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n public SS_ALBEDOFORREFRACTIONTINT = false;\r\n public SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n public SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n public SS_USE_THICKNESS_AS_DEPTH = false;\r\n\r\n public SS_USE_GLTF_TEXTURES = false;\r\n public SS_APPLY_ALBEDO_AFTER_SUBSURFACE = false;\r\n public SS_TRANSLUCENCY_LEGACY = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the sub surface component of the PBR material\r\n */\r\nexport class PBRSubSurfaceConfiguration extends MaterialPluginBase {\r\n /**\r\n * Default value used for applyAlbedoAfterSubSurface.\r\n *\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface properties (transmission, refraction, etc.). Default is false.\r\n * Note however that the PBR calculation is wrong when this property is set to true, so only use it if you want to mimic the 7.0 behavior.\r\n */\r\n public static DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE = false;\r\n\r\n /**\r\n * Default value used for legacyTranslucency.\r\n *\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface translucency. Default is false.\r\n */\r\n public static DEFAULT_LEGACY_TRANSLUCENCY = false;\r\n\r\n protected override _material: PBRBaseMaterial;\r\n\r\n private _isRefractionEnabled = false;\r\n /**\r\n * Defines if the refraction is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isRefractionEnabled = false;\r\n\r\n private _isTranslucencyEnabled = false;\r\n /**\r\n * Defines if the translucency is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isTranslucencyEnabled = false;\r\n\r\n private _isDispersionEnabled = false;\r\n /**\r\n * Defines if dispersion is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isDispersionEnabled = false;\r\n\r\n private _isScatteringEnabled = false;\r\n /**\r\n * Defines if the sub surface scattering is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markScenePrePassDirty\")\r\n public isScatteringEnabled = false;\r\n\r\n @serialize()\r\n private _scatteringDiffusionProfileIndex = 0;\r\n\r\n /**\r\n * Diffusion profile for subsurface scattering.\r\n * Useful for better scattering in the skins or foliages.\r\n */\r\n public get scatteringDiffusionProfile(): Nullable<Color3> {\r\n if (!this._scene.subSurfaceConfiguration) {\r\n return null;\r\n }\r\n\r\n return this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex];\r\n }\r\n\r\n public set scatteringDiffusionProfile(c: Nullable<Color3>) {\r\n if (!this._scene.enableSubSurfaceForPrePass()) {\r\n // Not supported\r\n return;\r\n }\r\n\r\n // addDiffusionProfile automatically checks for doubles\r\n if (c) {\r\n this._scatteringDiffusionProfileIndex = this._scene.subSurfaceConfiguration!.addDiffusionProfile(c);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refraction intensity of the material.\r\n * The refraction when enabled replaces the Diffuse part of the material.\r\n * The intensity helps transitioning between diffuse and refraction.\r\n */\r\n @serialize()\r\n public refractionIntensity: number = 1;\r\n\r\n /**\r\n * Defines the translucency intensity of the material.\r\n * When translucency has been enabled, this defines how much of the \"translucency\"\r\n * is added to the diffuse part of the material.\r\n */\r\n @serialize()\r\n public translucencyIntensity: number = 1;\r\n\r\n /**\r\n * When enabled, transparent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintRefraction: boolean = false;\r\n\r\n /**\r\n * When enabled, translucent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintTranslucency: boolean = false;\r\n\r\n private _thicknessTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the average thickness of a mesh in a texture (The texture is holding the values linearly).\r\n * The red (or green if useGltfStyleTextures=true) channel of the texture should contain the thickness remapped between 0 and 1.\r\n * 0 would mean minimumThickness\r\n * 1 would mean maximumThickness\r\n * The other channels might be use as a mask to vary the different effects intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public thicknessTexture: Nullable<BaseTexture> = null;\r\n\r\n private _refractionTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the texture to use for refraction.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @internal */\r\n public _indexOfRefraction = 1.5;\r\n /**\r\n * Index of refraction of the material base layer.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This does not only impact refraction but also the Base F0 of Dielectric Materials.\r\n *\r\n * From dielectric fresnel rules: F0 = square((iorT - iorI) / (iorT + iorI))\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public indexOfRefraction = 1.5;\r\n\r\n @serialize()\r\n private _volumeIndexOfRefraction = -1.0;\r\n\r\n /**\r\n * Index of refraction of the material's volume.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This ONLY impacts refraction. If not provided or given a non-valid value,\r\n * the volume will use the same IOR as the surface.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public get volumeIndexOfRefraction(): number {\r\n if (this._volumeIndexOfRefraction >= 1.0) {\r\n return this._volumeIndexOfRefraction;\r\n }\r\n return this._indexOfRefraction;\r\n }\r\n public set volumeIndexOfRefraction(value: number) {\r\n if (value >= 1.0) {\r\n this._volumeIndexOfRefraction = value;\r\n } else {\r\n this._volumeIndexOfRefraction = -1.0;\r\n }\r\n }\r\n\r\n private _invertRefractionY = false;\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertRefractionY = false;\r\n\r\n /** @internal */\r\n public _linkRefractionWithTransparency = false;\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public linkRefractionWithTransparency = false;\r\n\r\n /**\r\n * Defines the minimum thickness stored in the thickness map.\r\n * If no thickness map is defined, this value will be used to simulate thickness.\r\n */\r\n @serialize()\r\n public minimumThickness: number = 0;\r\n\r\n /**\r\n * Defines the maximum thickness stored in the thickness map.\r\n */\r\n @serialize()\r\n public maximumThickness: number = 1;\r\n\r\n /**\r\n * Defines that the thickness should be used as a measure of the depth volume.\r\n */\r\n @serialize()\r\n public useThicknessAsDepth = false;\r\n\r\n /**\r\n * Defines the volume tint of the material.\r\n * This is used for both translucency and scattering.\r\n */\r\n @serializeAsColor3()\r\n public tintColor = Color3.White();\r\n\r\n /**\r\n * Defines the distance at which the tint color should be found in the media.\r\n * This is used for refraction only.\r\n */\r\n @serialize()\r\n public tintColorAtDistance = 1;\r\n\r\n /**\r\n * Defines the Abbe number for the volume.\r\n */\r\n @serialize()\r\n public dispersion = 0;\r\n\r\n /**\r\n * Defines how far each channel transmit through the media.\r\n * It is defined as a color to simplify it selection.\r\n */\r\n @serializeAsColor3()\r\n public diffusionDistance = Color3.White();\r\n\r\n private _useMaskFromThicknessTexture = false;\r\n /**\r\n * Stores the intensity of the different subsurface effects in the thickness texture.\r\n * Note that if refractionIntensityTexture and/or translucencyIntensityTexture is provided it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n * * the blue (alpha if useGltfStyleTextures = true) channel is the translucency intensity.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useMaskFromThicknessTexture: boolean = false;\r\n\r\n private _refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the refraction. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the translucency. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the blue (alpha if useGltfStyleTextures = true) channel is the translucency intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Defines the translucency tint of the material.\r\n * If not set, the tint color will be used instead.\r\n */\r\n @serializeAsColor3()\r\n public translucencyColor: Nullable<Color3> = null;\r\n\r\n private _translucencyColorTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the translucency tint color of the material as a texture.\r\n * This is multiplied against the translucency color to add variety and realism to the material.\r\n * If translucencyColor is not set, the tint color will be used instead.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyColorTexture: Nullable<BaseTexture> = null;\r\n\r\n private _useGltfStyleTextures = true;\r\n /**\r\n * Use channels layout used by glTF:\r\n * * thicknessTexture: the green (instead of red) channel is the thickness\r\n * * thicknessTexture/refractionIntensityTexture: the red (instead of green) channel is the refraction intensity\r\n * * thicknessTexture/translucencyIntensityTexture: the alpha (instead of blue) channel is the translucency intensity\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useGltfStyleTextures: boolean = true;\r\n\r\n /**\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface properties (transmission, refraction, etc.). Default is false.\r\n * Note however that the PBR calculation is wrong when this property is set to true, so only use it if you want to mimic the 7.0 behavior.\r\n */\r\n @serialize()\r\n public applyAlbedoAfterSubSurface = PBRSubSurfaceConfiguration.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE;\r\n\r\n /**\r\n * This property only exists for backward compatibility reasons.\r\n * Set it to true if your rendering in 8.0+ is different from that in 7 when you use sub-surface translucency. Default is false.\r\n */\r\n @serialize()\r\n public legacyTranslucency = PBRSubSurfaceConfiguration.DEFAULT_LEGACY_TRANSLUCENCY;\r\n\r\n /**\r\n * Keeping for backward compatibility... Should not be used anymore. It has been replaced by\r\n * the property with the correct spelling.\r\n * @see legacyTranslucency\r\n */\r\n public get legacyTransluceny(): boolean {\r\n return this.legacyTranslucency;\r\n }\r\n public set legacyTransluceny(value: boolean) {\r\n this.legacyTranslucency = value;\r\n }\r\n\r\n private _scene: Scene;\r\n\r\n /** @internal */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n private _internalMarkScenePrePassDirty: () => void;\r\n\r\n /** @internal */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n /** @internal */\r\n public _markScenePrePassDirty(): void {\r\n this._enable(this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n this._internalMarkScenePrePassDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRSubSurface\", 130, new MaterialSubSurfaceDefines(), addToPluginList);\r\n\r\n this._scene = material.getScene();\r\n this.registerForExtraEvents = true;\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n this._internalMarkScenePrePassDirty = material._dirtyCallbacks[Constants.MATERIAL_PrePassDirtyFlag];\r\n }\r\n\r\n public override isReadyForSubMesh(defines: MaterialSubSurfaceDefines, scene: Scene): boolean {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n if (!this._thicknessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled) {\r\n if (!this._refractionIntensityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled) {\r\n if (!this._translucencyColorTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled) {\r\n if (!this._translucencyIntensityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (!refractionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override prepareDefinesBeforeAttributes(defines: MaterialSubSurfaceDefines, scene: Scene): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n defines.SUBSURFACE = false;\r\n defines.SS_DISPERSION = false;\r\n defines.SS_TRANSLUCENCY = false;\r\n defines.SS_SCATTERING = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV = 0;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV = 0;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTUREDIRECTUV = 0;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = false;\r\n defines.SS_APPLY_ALBEDO_AFTER_SUBSURFACE = false;\r\n return;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.SUBSURFACE = true;\r\n\r\n defines.SS_DISPERSION = this._isDispersionEnabled;\r\n defines.SS_TRANSLUCENCY = this._isTranslucencyEnabled;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_TRANSLUCENCY_LEGACY = this.legacyTranslucency;\r\n defines.SS_SCATTERING = this._isScatteringEnabled;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = false;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE = false;\r\n defines.SS_APPLY_ALBEDO_AFTER_SUBSURFACE = this.applyAlbedoAfterSubSurface;\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._thicknessTexture, defines, \"SS_THICKNESSANDMASK_TEXTURE\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._refractionIntensityTexture, defines, \"SS_REFRACTIONINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._translucencyIntensityTexture, defines, \"SS_TRANSLUCENCYINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._translucencyColorTexture, defines, \"SS_TRANSLUCENCYCOLOR_TEXTURE\");\r\n defines.SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA = this._translucencyColorTexture.gammaSpace;\r\n }\r\n }\r\n }\r\n\r\n defines.SS_HAS_THICKNESS = this.maximumThickness - this.minimumThickness !== 0.0;\r\n defines.SS_USE_GLTF_TEXTURES = this._useGltfStyleTextures;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS = this._useMaskFromThicknessTexture && !this._refractionIntensityTexture;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS = this._useMaskFromThicknessTexture && !this._translucencyIntensityTexture;\r\n\r\n if (this._isRefractionEnabled) {\r\n if (scene.texturesEnabled) {\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n defines.SS_REFRACTION = true;\r\n defines.SS_REFRACTIONMAP_3D = refractionTexture.isCube;\r\n defines.SS_GAMMAREFRACTION = refractionTexture.gammaSpace;\r\n defines.SS_RGBDREFRACTION = refractionTexture.isRGBD;\r\n defines.SS_LINEARSPECULARREFRACTION = refractionTexture.linearSpecularLOD;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ;\r\n defines.SS_LODINREFRACTIONALPHA = refractionTexture.lodLevelInAlpha;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = this._linkRefractionWithTransparency;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = this.useAlbedoToTintRefraction;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = refractionTexture.isCube && (<any>refractionTexture).boundingBoxSize;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = this.useThicknessAsDepth;\r\n }\r\n }\r\n }\r\n\r\n if (this._isTranslucencyEnabled) {\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = this.useAlbedoToTintTranslucency;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the material data (this function is called even if mustRebind() returns false)\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public override hardBindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n // If min/max thickness is 0, avoid decompising to determine the scaled thickness (it's always zero).\r\n if (this.maximumThickness === 0.0 && this.minimumThickness === 0.0) {\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", 0, 0);\r\n } else {\r\n subMesh.getRenderingMesh().getWorldMatrix().decompose(TmpVectors.Vector3[0]);\r\n const thicknessScale = Math.max(Math.abs(TmpVectors.Vector3[0].x), Math.abs(TmpVectors.Vector3[0].y), Math.abs(TmpVectors.Vector3[0].z));\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", this.minimumThickness * thicknessScale, (this.maximumThickness - this.minimumThickness) * thicknessScale);\r\n }\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n const defines = subMesh.materialDefines as unknown as MaterialSubSurfaceDefines;\r\n\r\n const isFrozen = this._material.isFrozen;\r\n const realTimeFiltering = this._material.realTimeFiltering;\r\n const lodBasedMicrosurface = defines.LODBASEDMICROSFURACE;\r\n\r\n const refractionTexture = this._getRefractionTexture(scene);\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vThicknessInfos\", this._thicknessTexture.coordinatesIndex, this._thicknessTexture.level);\r\n BindTextureMatrix(this._thicknessTexture, uniformBuffer, \"thickness\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vRefractionIntensityInfos\", this._refractionIntensityTexture.coordinatesIndex, this._refractionIntensityTexture.level);\r\n BindTextureMatrix(this._refractionIntensityTexture, uniformBuffer, \"refractionIntensity\");\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled && defines.SS_TRANSLUCENCYCOLOR_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyColorInfos\", this._translucencyColorTexture.coordinatesIndex, this._translucencyColorTexture.level);\r\n BindTextureMatrix(this._translucencyColorTexture, uniformBuffer, \"translucencyColor\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyIntensityInfos\", this._translucencyIntensityTexture.coordinatesIndex, this._translucencyIntensityTexture.level);\r\n BindTextureMatrix(this._translucencyIntensityTexture, uniformBuffer, \"translucencyIntensity\");\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n uniformBuffer.updateMatrix(\"refractionMatrix\", refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const width = refractionTexture.getSize().width;\r\n const refractionIor = this.volumeIndexOfRefraction;\r\n uniformBuffer.updateFloat4(\"vRefractionInfos\", refractionTexture.level, 1 / refractionIor, depth, this._invertRefractionY ? -1 : 1);\r\n uniformBuffer.updateFloat4(\r\n \"vRefractionMicrosurfaceInfos\",\r\n width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1.0 / this.indexOfRefraction\r\n );\r\n\r\n if (realTimeFiltering) {\r\n uniformBuffer.updateFloat2(\"vRefractionFilteringInfo\", width, Math.log2(width));\r\n }\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n\r\n uniformBuffer.updateVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n uniformBuffer.updateVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n if (this._isScatteringEnabled) {\r\n uniformBuffer.updateFloat(\"scatteringDiffusionProfile\", this._scatteringDiffusionProfileIndex);\r\n }\r\n uniformBuffer.updateColor3(\"vDiffusionDistance\", this.diffusionDistance);\r\n\r\n uniformBuffer.updateFloat4(\"vTintColor\", this.tintColor.r, this.tintColor.g, this.tintColor.b, Math.max(0.00001, this.tintColorAtDistance));\r\n uniformBuffer.updateColor4(\"vTranslucencyColor\", this.translucencyColor ?? this.tintColor, 0);\r\n\r\n uniformBuffer.updateFloat3(\"vSubSurfaceIntensity\", this.refractionIntensity, this.translucencyIntensity, 0);\r\n\r\n uniformBuffer.updateFloat(\"dispersion\", this.dispersion);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.setTexture(\"thicknessSampler\", this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"refractionIntensitySampler\", this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyIntensitySampler\", this._translucencyIntensityTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture && MaterialFlags.TranslucencyColorTextureEnabled && defines.SS_TRANSLUCENCYCOLOR_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyColorSampler\", this._translucencyColorTexture);\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (lodBasedMicrosurface) {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture);\r\n } else {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture._lodTextureMid || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerLow\", refractionTexture._lodTextureLow || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerHigh\", refractionTexture._lodTextureHigh || refractionTexture);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the texture used for refraction or null if none is used.\r\n * @param scene defines the scene the material belongs to.\r\n * @returns - Refraction texture if present. If no refraction texture and refraction\r\n * is linked with transparency, returns environment texture. Otherwise, returns null.\r\n */\r\n private _getRefractionTexture(scene: Scene): Nullable<BaseTexture> {\r\n if (this._refractionTexture) {\r\n return this._refractionTexture;\r\n }\r\n\r\n if (this._isRefractionEnabled) {\r\n return scene.environmentTexture;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n public get disableAlphaBlending(): boolean {\r\n return this._isRefractionEnabled && this._linkRefractionWithTransparency;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public override fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n renderTargets.push(<RenderTargetTexture>this._refractionTexture);\r\n }\r\n }\r\n\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (this._thicknessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionIntensityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._translucencyIntensityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._translucencyColorTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._thicknessTexture) {\r\n activeTextures.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture) {\r\n activeTextures.push(this._refractionTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture) {\r\n activeTextures.push(this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture) {\r\n activeTextures.push(this._translucencyColorTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture) {\r\n activeTextures.push(this._translucencyIntensityTexture);\r\n }\r\n }\r\n\r\n public override getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {\r\n animatables.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0) {\r\n animatables.push(this._refractionTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture && this._refractionIntensityTexture.animations && this._refractionIntensityTexture.animations.length > 0) {\r\n animatables.push(this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyColorTexture && this._translucencyColorTexture.animations && this._translucencyColorTexture.animations.length > 0) {\r\n animatables.push(this._translucencyColorTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && this._translucencyIntensityTexture.animations && this._translucencyIntensityTexture.animations.length > 0) {\r\n animatables.push(this._translucencyIntensityTexture);\r\n }\r\n }\r\n\r\n public override dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._thicknessTexture) {\r\n this._thicknessTexture.dispose();\r\n }\r\n\r\n if (this._refractionTexture) {\r\n this._refractionTexture.dispose();\r\n }\r\n\r\n if (this._refractionIntensityTexture) {\r\n this._refractionIntensityTexture.dispose();\r\n }\r\n\r\n if (this._translucencyColorTexture) {\r\n this._translucencyColorTexture.dispose();\r\n }\r\n\r\n if (this._translucencyIntensityTexture) {\r\n this._translucencyIntensityTexture.dispose();\r\n }\r\n }\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"PBRSubSurfaceConfiguration\";\r\n }\r\n\r\n public override addFallbacks(defines: MaterialSubSurfaceDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.SS_SCATTERING) {\r\n fallbacks.addFallback(currentRank++, \"SS_SCATTERING\");\r\n }\r\n if (defines.SS_TRANSLUCENCY) {\r\n fallbacks.addFallback(currentRank++, \"SS_TRANSLUCENCY\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\r\n \"thicknessSampler\",\r\n \"refractionIntensitySampler\",\r\n \"translucencyIntensitySampler\",\r\n \"refractionSampler\",\r\n \"refractionSamplerLow\",\r\n \"refractionSamplerHigh\",\r\n \"translucencyColorSampler\"\r\n );\r\n }\r\n\r\n public override getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vRefractionMicrosurfaceInfos\", size: 4, type: \"vec4\" },\r\n { name: \"vRefractionFilteringInfo\", size: 2, type: \"vec2\" },\r\n { name: \"vTranslucencyIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionInfos\", size: 4, type: \"vec4\" },\r\n { name: \"refractionMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"thicknessMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"refractionIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"translucencyIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessParam\", size: 2, type: \"vec2\" },\r\n { name: \"vDiffusionDistance\", size: 3, type: \"vec3\" },\r\n { name: \"vTintColor\", size: 4, type: \"vec4\" },\r\n { name: \"vSubSurfaceIntensity\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionPosition\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionSize\", size: 3, type: \"vec3\" },\r\n { name: \"scatteringDiffusionProfile\", size: 1, type: \"float\" },\r\n { name: \"dispersion\", size: 1, type: \"float\" },\r\n\r\n { name: \"vTranslucencyColor\", size: 4, type: \"vec4\" },\r\n { name: \"vTranslucencyColorInfos\", size: 2, type: \"vec2\" },\r\n { name: \"translucencyColorMatrix\", size: 16, type: \"mat4\" },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -7,6 +7,8 @@ export var SourceTextureFormat;
|
|
|
7
7
|
export var TranscodeTarget;
|
|
8
8
|
(function (TranscodeTarget) {
|
|
9
9
|
TranscodeTarget[TranscodeTarget["ASTC_4X4_RGBA"] = 0] = "ASTC_4X4_RGBA";
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
11
|
+
TranscodeTarget[TranscodeTarget["ASTC_4x4_RGBA"] = 0] = "ASTC_4x4_RGBA";
|
|
10
12
|
TranscodeTarget[TranscodeTarget["BC7_RGBA"] = 1] = "BC7_RGBA";
|
|
11
13
|
TranscodeTarget[TranscodeTarget["BC3_RGBA"] = 2] = "BC3_RGBA";
|
|
12
14
|
TranscodeTarget[TranscodeTarget["BC1_RGB"] = 3] = "BC1_RGB";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ktx2decoderTypes.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/ktx2decoderTypes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC3B,+DAAK,CAAA;IACL,gEAAgE;IAChE,qEAAQ,CAAA;AACZ,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"ktx2decoderTypes.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/ktx2decoderTypes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC3B,+DAAK,CAAA;IACL,gEAAgE;IAChE,qEAAQ,CAAA;AACZ,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,eAcX;AAdD,WAAY,eAAe;IACvB,uEAAa,CAAA;IACb,gEAAgE;IAChE,uEAA6B,CAAA;IAC7B,6DAAQ,CAAA;IACR,6DAAQ,CAAA;IACR,2DAAO,CAAA;IACP,uEAAa,CAAA;IACb,qEAAY,CAAA;IACZ,+DAAS,CAAA;IACT,6DAAQ,CAAA;IACR,yDAAM,CAAA;IACN,iDAAE,CAAA;IACF,oDAAG,CAAA;AACP,CAAC,EAdW,eAAe,KAAf,eAAe,QAc1B;AAED,MAAM,CAAN,IAAkB,YAcjB;AAdD,WAAkB,YAAY;IAC1B,uGAAuC,CAAA;IACvC,mGAAqC,CAAA;IACrC,mGAAqC,CAAA;IACrC,qGAAsC,CAAA;IACtC,2GAAyC,CAAA;IACzC,yGAAwC,CAAA;IACxC,6FAAkC,CAAA;IAClC,mFAA6B,CAAA;IAC7B,6FAAkC,CAAA;IAClC,iEAAoB,CAAA;IACpB,2DAAiB,CAAA;IACjB,gEAAgE;IAChE,6DAAkB,CAAA;AACtB,CAAC,EAdiB,YAAY,KAAZ,YAAY,QAc7B","sourcesContent":["export enum SourceTextureFormat {\r\n ETC1S,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n UASTC4x4,\r\n}\r\n\r\nexport enum TranscodeTarget {\r\n ASTC_4X4_RGBA,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ASTC_4x4_RGBA = ASTC_4X4_RGBA,\r\n BC7_RGBA,\r\n BC3_RGBA,\r\n BC1_RGB,\r\n PVRTC1_4_RGBA,\r\n PVRTC1_4_RGB,\r\n ETC2_RGBA,\r\n ETC1_RGB,\r\n RGBA32,\r\n R8,\r\n RG8,\r\n}\r\n\r\nexport const enum EngineFormat {\r\n COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c,\r\n COMPRESSED_RGBA_ASTC_4X4_KHR = 0x93b0,\r\n COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0,\r\n COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3,\r\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02,\r\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00,\r\n COMPRESSED_RGBA8_ETC2_EAC = 0x9278,\r\n COMPRESSED_RGB8_ETC2 = 0x9274,\r\n COMPRESSED_RGB_ETC1_WEBGL = 0x8d64,\r\n RGBA8Format = 0x8058,\r\n R8Format = 0x8229,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n RG8Format = 0x822b,\r\n}\r\n\r\n/**\r\n * Leaf node of a decision tree\r\n * It defines the transcoding format to use to transcode the texture as well as the corresponding format to use at the engine level when creating the texture\r\n */\r\nexport interface ILeaf {\r\n /**\r\n * The format to transcode to\r\n */\r\n transcodeFormat: TranscodeTarget;\r\n\r\n /**\r\n * The format to use when creating the texture at the engine level after it has been transcoded to transcodeFormat\r\n */\r\n engineFormat: EngineFormat;\r\n\r\n /**\r\n * Whether the texture must be rounded to a multiple of 4 (should normally be the case for all compressed formats). Default: true\r\n */\r\n roundToMultiple4?: boolean;\r\n}\r\n\r\n/**\r\n * Regular node of a decision tree\r\n *\r\n * Each property (except for \"yes\" and \"no\"), if not empty, will be checked in order to determine the next node to select.\r\n * If all checks are successful, the \"yes\" node will be selected, else the \"no\" node will be selected.\r\n */\r\nexport interface INode {\r\n /**\r\n * The name of the capability to check. Can be one of the following:\r\n * astc\r\n * bptc\r\n * s3tc\r\n * pvrtc\r\n * etc2\r\n * etc1\r\n */\r\n cap?: string;\r\n\r\n /**\r\n * The name of the option to check from the options object passed to the KTX2 decode function. {@link IKTX2DecoderOptions}\r\n */\r\n option?: string;\r\n\r\n /**\r\n * Checks if alpha is present in the texture\r\n */\r\n alpha?: boolean;\r\n\r\n /**\r\n * Checks the currently selected transcoding format.\r\n */\r\n transcodeFormat?: TranscodeTarget | TranscodeTarget[];\r\n\r\n /**\r\n * Checks that the texture is a power of two\r\n */\r\n needsPowerOfTwo?: boolean;\r\n\r\n /**\r\n * The node to select if all checks are successful\r\n */\r\n yes?: INode | ILeaf;\r\n\r\n /**\r\n * The node to select if at least one check is not successful\r\n */\r\n no?: INode | ILeaf;\r\n}\r\n\r\n/**\r\n * Decision tree used to determine the transcoding format to use for a given source texture format\r\n */\r\nexport interface IDecisionTree {\r\n /**\r\n * textureFormat can be either UASTC or ETC1S\r\n */\r\n [textureFormat: string]: INode;\r\n}\r\n\r\n/**\r\n * Result of the KTX2 decode function\r\n */\r\nexport interface IDecodedData {\r\n /**\r\n * Width of the texture\r\n */\r\n width: number;\r\n\r\n /**\r\n * Height of the texture\r\n */\r\n height: number;\r\n\r\n /**\r\n * The format to use when creating the texture at the engine level\r\n * This corresponds to the engineFormat property of the leaf node of the decision tree\r\n */\r\n transcodedFormat: number;\r\n\r\n /**\r\n * List of mipmap levels.\r\n * The first element is the base level, the last element is the smallest mipmap level (if more than one mipmap level is present)\r\n */\r\n mipmaps: Array<IMipmap>;\r\n\r\n /**\r\n * Whether the texture data is in gamma space or not\r\n */\r\n isInGammaSpace: boolean;\r\n\r\n /**\r\n * Whether the texture has an alpha channel or not\r\n */\r\n hasAlpha: boolean;\r\n\r\n /**\r\n * The name of the transcoder used to transcode the texture\r\n */\r\n transcoderName: string;\r\n\r\n /**\r\n * The errors (if any) encountered during the decoding process\r\n */\r\n errors?: string;\r\n}\r\n\r\n/**\r\n * Defines a mipmap level\r\n */\r\nexport interface IMipmap {\r\n /**\r\n * The data of the mipmap level\r\n */\r\n data: Uint8Array | null;\r\n\r\n /**\r\n * The width of the mipmap level\r\n */\r\n width: number;\r\n\r\n /**\r\n * The height of the mipmap level\r\n */\r\n height: number;\r\n}\r\n\r\n/**\r\n * The compressed texture formats supported by the browser\r\n */\r\nexport interface ICompressedFormatCapabilities {\r\n /**\r\n * Whether the browser supports ASTC\r\n */\r\n astc?: boolean;\r\n\r\n /**\r\n * Whether the browser supports BPTC\r\n */\r\n bptc?: boolean;\r\n\r\n /**\r\n * Whether the browser supports S3TC\r\n */\r\n s3tc?: boolean;\r\n\r\n /**\r\n * Whether the browser supports PVRTC\r\n */\r\n pvrtc?: boolean;\r\n\r\n /**\r\n * Whether the browser supports ETC2\r\n */\r\n etc2?: boolean;\r\n\r\n /**\r\n * Whether the browser supports ETC1\r\n */\r\n etc1?: boolean;\r\n}\r\n\r\n/**\r\n * Options passed to the KTX2 decode function\r\n */\r\nexport interface IKTX2DecoderOptions {\r\n /** use RGBA format if ASTC and BC7 are not available as transcoded format */\r\n useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n\r\n /** force to always use (uncompressed) RGBA for transcoded format */\r\n forceRGBA?: boolean;\r\n\r\n /** force to always use (uncompressed) R8 for transcoded format */\r\n forceR8?: boolean;\r\n\r\n /** force to always use (uncompressed) RG8 for transcoded format */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n forceRG8?: boolean;\r\n\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * UniversalTranscoder_UASTC_R8_UNORM\r\n * UniversalTranscoder_UASTC_RG8_UNORM\r\n * MSCTranscoder\r\n */\r\n bypassTranscoders?: string[];\r\n\r\n /**\r\n * Custom decision tree to apply after the default decision tree has selected a transcoding format.\r\n * Allows the user to override the default decision tree selection.\r\n * The decision tree can use the INode.transcodeFormat property to base its decision on the transcoding format selected by the default decision tree.\r\n */\r\n transcodeFormatDecisionTree?: IDecisionTree;\r\n}\r\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Logger } from "../Misc/logger.js";
|
|
2
2
|
|
|
3
|
-
import { Color3 } from "../Maths/math.color.js";
|
|
4
3
|
import { EngineStore } from "../Engines/engineStore.js";
|
|
5
4
|
import { LightConstants } from "../Lights/lightConstants.js";
|
|
6
5
|
import { PrepareDefinesForClipPlanes } from "./clipPlaneMaterialHelper.js";
|
|
7
6
|
// Temps
|
|
8
|
-
const TempFogColor =
|
|
7
|
+
const TempFogColor = { r: 0, g: 0, b: 0 };
|
|
9
8
|
const TmpMorphInfluencers = {
|
|
10
9
|
NUM_MORPH_INFLUENCERS: 0,
|
|
11
10
|
NORMAL: false,
|