@babylonjs/core 7.15.2 → 7.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animationGroup.d.ts +1 -0
- package/Animations/animationGroup.js +4 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Collisions/gpuPicker.js +1 -1
- package/Collisions/gpuPicker.js.map +1 -1
- package/Compute/computeEffect.js +1 -1
- package/Compute/computeEffect.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +32 -0
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +32 -0
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +1993 -1993
- package/Engines/nativeEngine.d.ts +7 -0
- package/Engines/nativeEngine.js +24 -1
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +3 -3
- package/Engines/webgpuEngine.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -6
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +4 -7
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +4 -4
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +46 -40
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +2 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +10 -9
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +85 -69
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +54 -38
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +2 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +2 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +40 -32
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +53 -45
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +2 -1
- package/Materials/Node/nodeMaterial.js +4 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -0
- package/Materials/Node/nodeMaterialBuildState.js +12 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +5 -0
- package/Materials/Textures/rawTexture.js +13 -0
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/effect.js +2 -2
- package/Materials/effect.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +12 -12
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +10 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +50 -11
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +6 -0
- package/Meshes/Node/nodeGeometry.js +7 -0
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -0
- package/Meshes/mesh.js +138 -134
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.js +1 -1
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +1 -1
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/edgesRenderer.js +1 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +3 -3
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +13 -14
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +4 -5
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +4 -5
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +4 -5
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js +34 -35
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.js +10 -11
- package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +23 -24
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +12 -13
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.js +31 -32
- package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +43 -44
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/Shaders/pbr.fragment.js +143 -153
- package/Shaders/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +3 -3
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/decalFragment.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/decalFragment.js +18 -0
- package/ShadersWGSL/ShadersInclude/decalFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/depthPrePass.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/depthPrePass.js +12 -0
- package/ShadersWGSL/ShadersInclude/depthPrePass.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/harmonicsFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js +24 -0
- package/ShadersWGSL/ShadersInclude/harmonicsFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +39 -0
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +6 -2
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/importanceSampling.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/importanceSampling.js +12 -0
- package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +3 -3
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +139 -0
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +81 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js +37 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js +35 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js +46 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAnisotropic.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js +267 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockClearcoat.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +24 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js +51 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +96 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +26 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js +33 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js +20 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockImageProcessing.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js +51 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockIridescence.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js +19 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockLightmapInit.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +19 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +30 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +18 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +277 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +120 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSheen.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js +195 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSheen.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +425 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrDebug.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +193 -0
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js +43 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +68 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +30 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +41 -0
- package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +23 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -0
- package/package.json +1 -1
|
@@ -83,68 +83,76 @@ export class SheenBlock extends NodeMaterialBlock {
|
|
|
83
83
|
/**
|
|
84
84
|
* Gets the main code of the block (fragment side)
|
|
85
85
|
* @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module
|
|
86
|
+
* @param state define the build state
|
|
86
87
|
* @returns the shader code
|
|
87
88
|
*/
|
|
88
|
-
getCode(reflectionBlock) {
|
|
89
|
+
getCode(reflectionBlock, state) {
|
|
89
90
|
let code = "";
|
|
90
|
-
const color = this.color.isConnected ? this.color.associatedVariableName :
|
|
91
|
+
const color = this.color.isConnected ? this.color.associatedVariableName : `vec3${state.fSuffix}(1.)`;
|
|
91
92
|
const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : "1.";
|
|
92
93
|
const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : "0.";
|
|
93
|
-
const texture =
|
|
94
|
+
const texture = `vec4${state.fSuffix}(0.)`;
|
|
95
|
+
const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
94
96
|
code = `#ifdef SHEEN
|
|
95
|
-
sheenOutParams sheenOut;
|
|
97
|
+
${isWebGPU ? "var sheenOut: sheenOutParams" : "sheenOutParams sheenOut"};
|
|
96
98
|
|
|
97
|
-
|
|
99
|
+
${state._declareLocalVar("vSheenColor", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${color}, ${intensity});
|
|
98
100
|
|
|
99
|
-
sheenBlock(
|
|
100
|
-
vSheenColor
|
|
101
|
+
sheenOut = sheenBlock(
|
|
102
|
+
vSheenColor
|
|
101
103
|
#ifdef SHEEN_ROUGHNESS
|
|
102
|
-
${roughness}
|
|
104
|
+
, ${roughness}
|
|
103
105
|
#endif
|
|
104
|
-
roughness
|
|
106
|
+
, roughness
|
|
105
107
|
#ifdef SHEEN_TEXTURE
|
|
106
|
-
${texture}
|
|
107
|
-
|
|
108
|
+
, ${texture}
|
|
109
|
+
${isWebGPU ? `, ${texture}Sampler` : ""}
|
|
110
|
+
, 1.0
|
|
108
111
|
#endif
|
|
109
|
-
reflectance
|
|
112
|
+
, reflectance
|
|
110
113
|
#ifdef SHEEN_LINKWITHALBEDO
|
|
111
|
-
baseColor
|
|
112
|
-
surfaceAlbedo
|
|
114
|
+
, baseColor
|
|
115
|
+
, surfaceAlbedo
|
|
113
116
|
#endif
|
|
114
117
|
#ifdef ENVIRONMENTBRDF
|
|
115
|
-
NdotV
|
|
116
|
-
environmentBrdf
|
|
118
|
+
, NdotV
|
|
119
|
+
, environmentBrdf
|
|
117
120
|
#endif
|
|
118
121
|
#if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
|
|
119
|
-
AARoughnessFactors
|
|
120
|
-
${reflectionBlock?._vReflectionMicrosurfaceInfosName}
|
|
121
|
-
${reflectionBlock?._vReflectionInfosName}
|
|
122
|
-
${reflectionBlock?.reflectionColor}
|
|
123
|
-
vLightingIntensity
|
|
122
|
+
, AARoughnessFactors
|
|
123
|
+
, ${isWebGPU ? "uniforms." : ""}${reflectionBlock?._vReflectionMicrosurfaceInfosName}
|
|
124
|
+
, ${reflectionBlock?._vReflectionInfosName}
|
|
125
|
+
, ${reflectionBlock?.reflectionColor}
|
|
126
|
+
, ${isWebGPU ? "uniforms." : ""}vLightingIntensity
|
|
124
127
|
#ifdef ${reflectionBlock?._define3DName}
|
|
125
|
-
${reflectionBlock?._cubeSamplerName}
|
|
128
|
+
, ${reflectionBlock?._cubeSamplerName}
|
|
129
|
+
${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
|
|
126
130
|
#else
|
|
127
|
-
${reflectionBlock?._2DSamplerName}
|
|
131
|
+
, ${reflectionBlock?._2DSamplerName}
|
|
132
|
+
${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
|
|
128
133
|
#endif
|
|
129
|
-
reflectionOut.reflectionCoords
|
|
130
|
-
NdotVUnclamped
|
|
134
|
+
, reflectionOut.reflectionCoords
|
|
135
|
+
, NdotVUnclamped
|
|
131
136
|
#ifndef LODBASEDMICROSFURACE
|
|
132
137
|
#ifdef ${reflectionBlock?._define3DName}
|
|
133
|
-
${reflectionBlock?._cubeSamplerName}
|
|
134
|
-
${reflectionBlock?._cubeSamplerName}
|
|
138
|
+
, ${reflectionBlock?._cubeSamplerName}
|
|
139
|
+
${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
|
|
140
|
+
, ${reflectionBlock?._cubeSamplerName}
|
|
141
|
+
${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
|
|
135
142
|
#else
|
|
136
|
-
${reflectionBlock?._2DSamplerName}
|
|
137
|
-
${reflectionBlock?._2DSamplerName}
|
|
143
|
+
, ${reflectionBlock?._2DSamplerName}
|
|
144
|
+
${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
|
|
145
|
+
, ${reflectionBlock?._2DSamplerName}
|
|
146
|
+
${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : ""}
|
|
138
147
|
#endif
|
|
139
148
|
#endif
|
|
140
149
|
#if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)
|
|
141
|
-
seo
|
|
150
|
+
, seo
|
|
142
151
|
#endif
|
|
143
152
|
#if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})
|
|
144
|
-
eho
|
|
153
|
+
, eho
|
|
145
154
|
#endif
|
|
146
155
|
#endif
|
|
147
|
-
sheenOut
|
|
148
156
|
);
|
|
149
157
|
|
|
150
158
|
#ifdef SHEEN_LINKWITHALBEDO
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SheenBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>): string {\r\n let code = \"\";\r\n\r\n const color = this.color.isConnected ? this.color.associatedVariableName : \"vec3(1.)\";\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = \"vec4(0.)\";\r\n\r\n code = `#ifdef SHEEN\r\n sheenOutParams sheenOut;\r\n\r\n vec4 vSheenColor = vec4(${color}, ${intensity});\r\n\r\n sheenBlock(\r\n vSheenColor,\r\n #ifdef SHEEN_ROUGHNESS\r\n ${roughness},\r\n #endif\r\n roughness,\r\n #ifdef SHEEN_TEXTURE\r\n ${texture},\r\n 1.0,\r\n #endif\r\n reflectance,\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n baseColor,\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n NdotV,\r\n environmentBrdf,\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n AARoughnessFactors,\r\n ${reflectionBlock?._vReflectionMicrosurfaceInfosName},\r\n ${reflectionBlock?._vReflectionInfosName},\r\n ${reflectionBlock?.reflectionColor},\r\n vLightingIntensity,\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n reflectionOut.reflectionCoords,\r\n NdotVUnclamped,\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n seo,\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n eho,\r\n #endif\r\n #endif\r\n sheenOut\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SheenBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param state define the build state\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>, state: NodeMaterialBuildState): string {\r\n let code = \"\";\r\n\r\n const color = this.color.isConnected ? this.color.associatedVariableName : `vec3${state.fSuffix}(1.)`;\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = `vec4${state.fSuffix}(0.)`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n code = `#ifdef SHEEN\r\n ${isWebGPU ? \"var sheenOut: sheenOutParams\" : \"sheenOutParams sheenOut\"};\r\n\r\n ${state._declareLocalVar(\"vSheenColor\", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${color}, ${intensity});\r\n\r\n sheenOut = sheenBlock(\r\n vSheenColor\r\n #ifdef SHEEN_ROUGHNESS\r\n , ${roughness}\r\n #endif\r\n , roughness\r\n #ifdef SHEEN_TEXTURE\r\n , ${texture}\r\n ${isWebGPU ? `, ${texture}Sampler` : \"\"}\r\n , 1.0\r\n #endif\r\n , reflectance\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n , baseColor\r\n , surfaceAlbedo\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n , NdotV\r\n , environmentBrdf\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n , AARoughnessFactors\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}${reflectionBlock?._vReflectionMicrosurfaceInfosName}\r\n , ${reflectionBlock?._vReflectionInfosName}\r\n , ${reflectionBlock?.reflectionColor}\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}vLightingIntensity\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n , reflectionOut.reflectionCoords\r\n , NdotVUnclamped\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._cubeSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n , seo\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n , eho\r\n #endif\r\n #endif\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
|
|
@@ -122,97 +122,105 @@ export class SubSurfaceBlock extends NodeMaterialBlock {
|
|
|
122
122
|
const refractionIntensity = refractionBlock?.intensity.isConnected ? refractionBlock.intensity.associatedVariableName : "1.";
|
|
123
123
|
const refractionView = refractionBlock?.view.isConnected ? refractionBlock.view.associatedVariableName : "";
|
|
124
124
|
const dispersion = ssBlock?.dispersion.isConnected ? ssBlock?.dispersion.associatedVariableName : "0.0";
|
|
125
|
+
const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
125
126
|
code += refractionBlock?.getCode(state) ?? "";
|
|
126
|
-
code +=
|
|
127
|
+
code += `${isWebGPU ? "var subSurfaceOut: subSurfaceOutParams" : "subSurfaceOutParams subSurfaceOut"};
|
|
127
128
|
|
|
128
129
|
#ifdef SUBSURFACE
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
subSurfaceBlock(
|
|
134
|
-
vSubSurfaceIntensity
|
|
135
|
-
vThicknessParam
|
|
136
|
-
vTintColor
|
|
137
|
-
normalW
|
|
138
|
-
specularEnvironmentReflectance
|
|
130
|
+
${state._declareLocalVar("vThicknessParam", NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(0., ${thickness});
|
|
131
|
+
${state._declareLocalVar("vTintColor", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${tintColor}, ${refractionTintAtDistance});
|
|
132
|
+
${state._declareLocalVar("vSubSurfaceIntensity", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);
|
|
133
|
+
${state._declareLocalVar("dispersion", NodeMaterialBlockConnectionPointTypes.Float)} = ${dispersion};
|
|
134
|
+
subSurfaceOut = subSurfaceBlock(
|
|
135
|
+
vSubSurfaceIntensity
|
|
136
|
+
, vThicknessParam
|
|
137
|
+
, vTintColor
|
|
138
|
+
, normalW
|
|
139
|
+
, specularEnvironmentReflectance
|
|
139
140
|
#ifdef SS_THICKNESSANDMASK_TEXTURE
|
|
140
|
-
vec4(0.)
|
|
141
|
+
, vec4${state.fSuffix}(0.)
|
|
141
142
|
#endif
|
|
142
143
|
#ifdef REFLECTION
|
|
143
144
|
#ifdef SS_TRANSLUCENCY
|
|
144
|
-
${reflectionBlock?._reflectionMatrixName}
|
|
145
|
+
, ${(isWebGPU ? "uniforms." : "") + reflectionBlock?._reflectionMatrixName}
|
|
145
146
|
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
146
147
|
#if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
|
|
147
|
-
reflectionOut.irradianceVector
|
|
148
|
+
, reflectionOut.irradianceVector
|
|
148
149
|
#endif
|
|
149
150
|
#if defined(REALTIME_FILTERING)
|
|
150
|
-
${reflectionBlock?._cubeSamplerName}
|
|
151
|
-
${reflectionBlock?.
|
|
151
|
+
, ${reflectionBlock?._cubeSamplerName}
|
|
152
|
+
${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : ""}
|
|
153
|
+
, ${reflectionBlock?._vReflectionFilteringInfoName}
|
|
152
154
|
#endif
|
|
153
155
|
#endif
|
|
154
156
|
#ifdef USEIRRADIANCEMAP
|
|
155
|
-
irradianceSampler
|
|
157
|
+
, irradianceSampler
|
|
158
|
+
${isWebGPU ? `, irradianceSamplerSampler` : ""}
|
|
156
159
|
#endif
|
|
157
160
|
#endif
|
|
158
161
|
#endif
|
|
159
162
|
#if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
|
|
160
|
-
surfaceAlbedo
|
|
163
|
+
, surfaceAlbedo
|
|
161
164
|
#endif
|
|
162
165
|
#ifdef SS_REFRACTION
|
|
163
|
-
${worldPosVarName}.xyz
|
|
164
|
-
viewDirectionW
|
|
165
|
-
${refractionView}
|
|
166
|
-
${refractionBlock?._vRefractionInfosName ?? ""}
|
|
167
|
-
${refractionBlock?._refractionMatrixName ?? ""}
|
|
168
|
-
${refractionBlock?._vRefractionMicrosurfaceInfosName ?? ""}
|
|
169
|
-
vLightingIntensity
|
|
166
|
+
, ${worldPosVarName}.xyz
|
|
167
|
+
, viewDirectionW
|
|
168
|
+
, ${refractionView}
|
|
169
|
+
, ${(isWebGPU ? "uniforms." : "") + refractionBlock?._vRefractionInfosName ?? ""}
|
|
170
|
+
, ${(isWebGPU ? "uniforms." : "") + refractionBlock?._refractionMatrixName ?? ""}
|
|
171
|
+
, ${(isWebGPU ? "uniforms." : "") + refractionBlock?._vRefractionMicrosurfaceInfosName ?? ""}
|
|
172
|
+
, ${isWebGPU ? "uniforms." : ""}vLightingIntensity
|
|
170
173
|
#ifdef SS_LINKREFRACTIONTOTRANSPARENCY
|
|
171
|
-
alpha
|
|
174
|
+
, alpha
|
|
172
175
|
#endif
|
|
173
176
|
#ifdef ${refractionBlock?._defineLODRefractionAlpha ?? "IGNORE"}
|
|
174
|
-
NdotVUnclamped
|
|
177
|
+
, NdotVUnclamped
|
|
175
178
|
#endif
|
|
176
179
|
#ifdef ${refractionBlock?._defineLinearSpecularRefraction ?? "IGNORE"}
|
|
177
|
-
roughness
|
|
180
|
+
, roughness
|
|
178
181
|
#endif
|
|
179
|
-
alphaG
|
|
182
|
+
, alphaG
|
|
180
183
|
#ifdef ${refractionBlock?._define3DName ?? "IGNORE"}
|
|
181
|
-
${refractionBlock?._cubeSamplerName ?? ""}
|
|
184
|
+
, ${refractionBlock?._cubeSamplerName ?? ""}
|
|
185
|
+
${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : ""}
|
|
182
186
|
#else
|
|
183
|
-
${refractionBlock?._2DSamplerName ?? ""}
|
|
187
|
+
, ${refractionBlock?._2DSamplerName ?? ""}
|
|
188
|
+
${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : ""}
|
|
184
189
|
#endif
|
|
185
190
|
#ifndef LODBASEDMICROSFURACE
|
|
186
191
|
#ifdef ${refractionBlock?._define3DName ?? "IGNORE"}
|
|
187
|
-
${refractionBlock?._cubeSamplerName ?? ""}
|
|
188
|
-
${refractionBlock?._cubeSamplerName
|
|
192
|
+
, ${refractionBlock?._cubeSamplerName ?? ""}
|
|
193
|
+
${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : ""}
|
|
194
|
+
, ${refractionBlock?._cubeSamplerName ?? ""}
|
|
195
|
+
${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : ""}
|
|
189
196
|
#else
|
|
190
|
-
${refractionBlock?._2DSamplerName ?? ""}
|
|
191
|
-
${refractionBlock?._2DSamplerName
|
|
197
|
+
, ${refractionBlock?._2DSamplerName ?? ""}
|
|
198
|
+
${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : ""}
|
|
199
|
+
, ${refractionBlock?._2DSamplerName ?? ""}
|
|
200
|
+
${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : ""}
|
|
192
201
|
#endif
|
|
193
202
|
#endif
|
|
194
203
|
#ifdef ANISOTROPIC
|
|
195
|
-
anisotropicOut
|
|
204
|
+
, anisotropicOut
|
|
196
205
|
#endif
|
|
197
206
|
#ifdef REALTIME_FILTERING
|
|
198
|
-
${refractionBlock?._vRefractionFilteringInfoName ?? ""}
|
|
207
|
+
, ${refractionBlock?._vRefractionFilteringInfoName ?? ""}
|
|
199
208
|
#endif
|
|
200
209
|
#ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
|
|
201
|
-
vRefractionPosition
|
|
202
|
-
vRefractionSize
|
|
210
|
+
, vRefractionPosition
|
|
211
|
+
, vRefractionSize
|
|
203
212
|
#endif
|
|
204
213
|
#ifdef SS_DISPERSION
|
|
205
|
-
dispersion
|
|
214
|
+
, dispersion
|
|
206
215
|
#endif
|
|
207
216
|
#endif
|
|
208
217
|
#ifdef SS_TRANSLUCENCY
|
|
209
|
-
${translucencyDiffusionDistance}
|
|
210
|
-
vTintColor
|
|
218
|
+
, ${translucencyDiffusionDistance}
|
|
219
|
+
, vTintColor
|
|
211
220
|
#ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
|
|
212
|
-
vec4(0.)
|
|
221
|
+
, vec4${state.fSuffix}(0.)
|
|
213
222
|
#endif
|
|
214
|
-
#endif
|
|
215
|
-
subSurfaceOut
|
|
223
|
+
#endif
|
|
216
224
|
);
|
|
217
225
|
|
|
218
226
|
#ifdef SS_REFRACTION
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subSurfaceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/subSurfaceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RefractionBlock } from \"./refractionBlock\";\r\n\r\n/**\r\n * Block used to implement the sub surface module of the PBR material\r\n */\r\nexport class SubSurfaceBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SubSurfaceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"thickness\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyIntensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyDiffusionDist\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Input, RefractionBlock, \"RefractionBlock\")\r\n );\r\n this.registerInput(\"dispersion\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"subsurface\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"subsurface\", this, NodeMaterialConnectionPointDirection.Output, SubSurfaceBlock, \"SubSurfaceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"subSurfaceOut\");\r\n state._excludeVariableName(\"vThicknessParam\");\r\n state._excludeVariableName(\"vTintColor\");\r\n state._excludeVariableName(\"vTranslucencyColor\");\r\n state._excludeVariableName(\"vSubSurfaceIntensity\");\r\n state._excludeVariableName(\"dispersion\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SubSurfaceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the thickness component\r\n */\r\n public get thickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the translucency intensity input component\r\n */\r\n public get translucencyIntensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translucency diffusion distance input component\r\n */\r\n public get translucencyDiffusionDist(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the refraction object parameters\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the dispersion input component\r\n */\r\n public get dispersion(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sub surface object output component\r\n */\r\n public get subsurface(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override autoConfigure() {\r\n if (!this.thickness.isConnected) {\r\n const thicknessInput = new InputBlock(\"SubSurface thickness\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n thicknessInput.value = 0;\r\n thicknessInput.output.connectTo(this.thickness);\r\n }\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const translucencyEnabled = this.translucencyDiffusionDist.isConnected || this.translucencyIntensity.isConnected;\r\n\r\n defines.setValue(\"SUBSURFACE\", translucencyEnabled || this.refraction.isConnected, true);\r\n defines.setValue(\"SS_TRANSLUCENCY\", translucencyEnabled, true);\r\n defines.setValue(\"SS_THICKNESSANDMASK_TEXTURE\", false, true);\r\n defines.setValue(\"SS_REFRACTIONINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_TRANSLUCENCYINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_USE_GLTF_TEXTURES\", false, true);\r\n defines.setValue(\"SS_DISPERSION\", this.dispersion.isConnected, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param ssBlock instance of a SubSurfaceBlock or null if the code must be generated without an active sub surface module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @returns the shader code\r\n */\r\n public static GetCode(state: NodeMaterialBuildState, ssBlock: Nullable<SubSurfaceBlock>, reflectionBlock: Nullable<ReflectionBlock>, worldPosVarName: string): string {\r\n let code = \"\";\r\n\r\n const thickness = ssBlock?.thickness.isConnected ? ssBlock.thickness.associatedVariableName : \"0.\";\r\n const tintColor = ssBlock?.tintColor.isConnected ? ssBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const translucencyIntensity = ssBlock?.translucencyIntensity.isConnected ? ssBlock?.translucencyIntensity.associatedVariableName : \"1.\";\r\n const translucencyDiffusionDistance = ssBlock?.translucencyDiffusionDist.isConnected ? ssBlock?.translucencyDiffusionDist.associatedVariableName : \"vec3(1.)\";\r\n\r\n const refractionBlock: Nullable<RefractionBlock> = (ssBlock?.refraction.isConnected ? ssBlock?.refraction.connectedPoint?.ownerBlock : null) as Nullable<RefractionBlock>;\r\n\r\n const refractionTintAtDistance = refractionBlock?.tintAtDistance.isConnected ? refractionBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const refractionIntensity = refractionBlock?.intensity.isConnected ? refractionBlock.intensity.associatedVariableName : \"1.\";\r\n const refractionView = refractionBlock?.view.isConnected ? refractionBlock.view.associatedVariableName : \"\";\r\n\r\n const dispersion = ssBlock?.dispersion.isConnected ? ssBlock?.dispersion.associatedVariableName : \"0.0\";\r\n\r\n code += refractionBlock?.getCode(state) ?? \"\";\r\n\r\n code += `subSurfaceOutParams subSurfaceOut;\r\n\r\n #ifdef SUBSURFACE\r\n vec2 vThicknessParam = vec2(0., ${thickness});\r\n vec4 vTintColor = vec4(${tintColor}, ${refractionTintAtDistance});\r\n vec3 vSubSurfaceIntensity = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);\r\n float dispersion = ${dispersion};\r\n subSurfaceBlock(\r\n vSubSurfaceIntensity,\r\n vThicknessParam,\r\n vTintColor,\r\n normalW,\r\n specularEnvironmentReflectance,\r\n #ifdef SS_THICKNESSANDMASK_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #ifdef REFLECTION\r\n #ifdef SS_TRANSLUCENCY\r\n ${reflectionBlock?._reflectionMatrixName},\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n reflectionOut.irradianceVector,\r\n #endif\r\n #if defined(REALTIME_FILTERING)\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._vReflectionFilteringInfoName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler,\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef SS_REFRACTION\r\n ${worldPosVarName}.xyz,\r\n viewDirectionW,\r\n ${refractionView},\r\n ${refractionBlock?._vRefractionInfosName ?? \"\"},\r\n ${refractionBlock?._refractionMatrixName ?? \"\"},\r\n ${refractionBlock?._vRefractionMicrosurfaceInfosName ?? \"\"},\r\n vLightingIntensity,\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLODRefractionAlpha ?? \"IGNORE\"}\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLinearSpecularRefraction ?? \"IGNORE\"}\r\n roughness,\r\n #endif\r\n alphaG,\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #endif\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${refractionBlock?._vRefractionFilteringInfoName ?? \"\"},\r\n #endif\r\n #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\r\n vRefractionPosition,\r\n vRefractionSize,\r\n #endif\r\n #ifdef SS_DISPERSION\r\n dispersion,\r\n #endif\r\n #endif\r\n #ifdef SS_TRANSLUCENCY\r\n ${translucencyDiffusionDistance},\r\n vTintColor,\r\n #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #endif\r\n subSurfaceOut\r\n );\r\n\r\n #ifdef SS_REFRACTION\r\n surfaceAlbedo = subSurfaceOut.surfaceAlbedo;\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha = subSurfaceOut.alpha;\r\n #endif\r\n #endif\r\n #else\r\n subSurfaceOut.specularEnvironmentReflectance = specularEnvironmentReflectance;\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SubSurfaceBlock\", SubSurfaceBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"subSurfaceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/subSurfaceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RefractionBlock } from \"./refractionBlock\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the sub surface module of the PBR material\r\n */\r\nexport class SubSurfaceBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SubSurfaceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"thickness\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyIntensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyDiffusionDist\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Input, RefractionBlock, \"RefractionBlock\")\r\n );\r\n this.registerInput(\"dispersion\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"subsurface\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"subsurface\", this, NodeMaterialConnectionPointDirection.Output, SubSurfaceBlock, \"SubSurfaceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"subSurfaceOut\");\r\n state._excludeVariableName(\"vThicknessParam\");\r\n state._excludeVariableName(\"vTintColor\");\r\n state._excludeVariableName(\"vTranslucencyColor\");\r\n state._excludeVariableName(\"vSubSurfaceIntensity\");\r\n state._excludeVariableName(\"dispersion\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SubSurfaceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the thickness component\r\n */\r\n public get thickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the translucency intensity input component\r\n */\r\n public get translucencyIntensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translucency diffusion distance input component\r\n */\r\n public get translucencyDiffusionDist(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the refraction object parameters\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the dispersion input component\r\n */\r\n public get dispersion(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sub surface object output component\r\n */\r\n public get subsurface(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override autoConfigure() {\r\n if (!this.thickness.isConnected) {\r\n const thicknessInput = new InputBlock(\"SubSurface thickness\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n thicknessInput.value = 0;\r\n thicknessInput.output.connectTo(this.thickness);\r\n }\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const translucencyEnabled = this.translucencyDiffusionDist.isConnected || this.translucencyIntensity.isConnected;\r\n\r\n defines.setValue(\"SUBSURFACE\", translucencyEnabled || this.refraction.isConnected, true);\r\n defines.setValue(\"SS_TRANSLUCENCY\", translucencyEnabled, true);\r\n defines.setValue(\"SS_THICKNESSANDMASK_TEXTURE\", false, true);\r\n defines.setValue(\"SS_REFRACTIONINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_TRANSLUCENCYINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_USE_GLTF_TEXTURES\", false, true);\r\n defines.setValue(\"SS_DISPERSION\", this.dispersion.isConnected, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param ssBlock instance of a SubSurfaceBlock or null if the code must be generated without an active sub surface module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @returns the shader code\r\n */\r\n public static GetCode(state: NodeMaterialBuildState, ssBlock: Nullable<SubSurfaceBlock>, reflectionBlock: Nullable<ReflectionBlock>, worldPosVarName: string): string {\r\n let code = \"\";\r\n\r\n const thickness = ssBlock?.thickness.isConnected ? ssBlock.thickness.associatedVariableName : \"0.\";\r\n const tintColor = ssBlock?.tintColor.isConnected ? ssBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const translucencyIntensity = ssBlock?.translucencyIntensity.isConnected ? ssBlock?.translucencyIntensity.associatedVariableName : \"1.\";\r\n const translucencyDiffusionDistance = ssBlock?.translucencyDiffusionDist.isConnected ? ssBlock?.translucencyDiffusionDist.associatedVariableName : \"vec3(1.)\";\r\n\r\n const refractionBlock: Nullable<RefractionBlock> = (ssBlock?.refraction.isConnected ? ssBlock?.refraction.connectedPoint?.ownerBlock : null) as Nullable<RefractionBlock>;\r\n\r\n const refractionTintAtDistance = refractionBlock?.tintAtDistance.isConnected ? refractionBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const refractionIntensity = refractionBlock?.intensity.isConnected ? refractionBlock.intensity.associatedVariableName : \"1.\";\r\n const refractionView = refractionBlock?.view.isConnected ? refractionBlock.view.associatedVariableName : \"\";\r\n\r\n const dispersion = ssBlock?.dispersion.isConnected ? ssBlock?.dispersion.associatedVariableName : \"0.0\";\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n code += refractionBlock?.getCode(state) ?? \"\";\r\n\r\n code += `${isWebGPU ? \"var subSurfaceOut: subSurfaceOutParams\" : \"subSurfaceOutParams subSurfaceOut\"};\r\n\r\n #ifdef SUBSURFACE\r\n ${state._declareLocalVar(\"vThicknessParam\", NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(0., ${thickness});\r\n ${state._declareLocalVar(\"vTintColor\", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${tintColor}, ${refractionTintAtDistance});\r\n ${state._declareLocalVar(\"vSubSurfaceIntensity\", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);\r\n ${state._declareLocalVar(\"dispersion\", NodeMaterialBlockConnectionPointTypes.Float)} = ${dispersion};\r\n subSurfaceOut = subSurfaceBlock(\r\n vSubSurfaceIntensity\r\n , vThicknessParam\r\n , vTintColor\r\n , normalW\r\n , specularEnvironmentReflectance\r\n #ifdef SS_THICKNESSANDMASK_TEXTURE\r\n , vec4${state.fSuffix}(0.)\r\n #endif\r\n #ifdef REFLECTION\r\n #ifdef SS_TRANSLUCENCY\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + reflectionBlock?._reflectionMatrixName}\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n , reflectionOut.irradianceVector\r\n #endif\r\n #if defined(REALTIME_FILTERING)\r\n , ${reflectionBlock?._cubeSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._vReflectionFilteringInfoName}\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n , irradianceSampler\r\n ${isWebGPU ? `, irradianceSamplerSampler` : \"\"}\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\r\n , surfaceAlbedo\r\n #endif\r\n #ifdef SS_REFRACTION\r\n , ${worldPosVarName}.xyz\r\n , viewDirectionW\r\n , ${refractionView}\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + refractionBlock?._vRefractionInfosName ?? \"\"}\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + refractionBlock?._refractionMatrixName ?? \"\"}\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + refractionBlock?._vRefractionMicrosurfaceInfosName ?? \"\"}\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}vLightingIntensity\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n , alpha\r\n #endif\r\n #ifdef ${refractionBlock?._defineLODRefractionAlpha ?? \"IGNORE\"}\r\n , NdotVUnclamped\r\n #endif\r\n #ifdef ${refractionBlock?._defineLinearSpecularRefraction ?? \"IGNORE\"}\r\n , roughness\r\n #endif\r\n , alphaG\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n , ${refractionBlock?._cubeSamplerName ?? \"\"}\r\n ${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${refractionBlock?._2DSamplerName ?? \"\"}\r\n ${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n , ${refractionBlock?._cubeSamplerName ?? \"\"} \r\n ${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n , ${refractionBlock?._cubeSamplerName ?? \"\"} \r\n ${isWebGPU ? `, ${refractionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${refractionBlock?._2DSamplerName ?? \"\"}\r\n ${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : \"\"}\r\n , ${refractionBlock?._2DSamplerName ?? \"\"}\r\n ${isWebGPU ? `, ${refractionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #ifdef ANISOTROPIC\r\n , anisotropicOut\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n , ${refractionBlock?._vRefractionFilteringInfoName ?? \"\"}\r\n #endif\r\n #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\r\n , vRefractionPosition\r\n , vRefractionSize\r\n #endif\r\n #ifdef SS_DISPERSION\r\n , dispersion\r\n #endif\r\n #endif\r\n #ifdef SS_TRANSLUCENCY\r\n , ${translucencyDiffusionDistance}\r\n , vTintColor\r\n #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE\r\n , vec4${state.fSuffix}(0.)\r\n #endif\r\n #endif \r\n );\r\n\r\n #ifdef SS_REFRACTION\r\n surfaceAlbedo = subSurfaceOut.surfaceAlbedo;\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha = subSurfaceOut.alpha;\r\n #endif\r\n #endif\r\n #else\r\n subSurfaceOut.specularEnvironmentReflectance = specularEnvironmentReflectance;\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SubSurfaceBlock\", SubSurfaceBlock);\r\n"]}
|
|
@@ -196,8 +196,9 @@ export declare class NodeMaterial extends PushMaterial {
|
|
|
196
196
|
* @returns the global NME
|
|
197
197
|
*/
|
|
198
198
|
private _getGlobalNodeMaterialEditor;
|
|
199
|
-
/**
|
|
199
|
+
/** Gets or sets the active shader language */
|
|
200
200
|
get shaderLanguage(): ShaderLanguage;
|
|
201
|
+
set shaderLanguage(value: ShaderLanguage);
|
|
201
202
|
/**
|
|
202
203
|
* Snippet ID if the material was created from the snippet server
|
|
203
204
|
*/
|
|
@@ -192,10 +192,13 @@ export class NodeMaterial extends PushMaterial {
|
|
|
192
192
|
}
|
|
193
193
|
return undefined;
|
|
194
194
|
}
|
|
195
|
-
/**
|
|
195
|
+
/** Gets or sets the active shader language */
|
|
196
196
|
get shaderLanguage() {
|
|
197
197
|
return this._options.shaderLanguage;
|
|
198
198
|
}
|
|
199
|
+
set shaderLanguage(value) {
|
|
200
|
+
this._options.shaderLanguage = value;
|
|
201
|
+
}
|
|
199
202
|
/** Gets or sets options to control the node material overall behavior */
|
|
200
203
|
get options() {
|
|
201
204
|
return this._options;
|