@babylonjs/core 8.12.1 → 8.13.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/AudioV2/abstractAudio/abstractAudioBus.d.ts +4 -21
- package/AudioV2/abstractAudio/abstractAudioBus.js +2 -34
- package/AudioV2/abstractAudio/abstractAudioBus.js.map +1 -1
- package/AudioV2/abstractAudio/abstractAudioOutNode.d.ts +40 -0
- package/AudioV2/abstractAudio/abstractAudioOutNode.js +56 -0
- package/AudioV2/abstractAudio/abstractAudioOutNode.js.map +1 -0
- package/AudioV2/abstractAudio/abstractSoundSource.d.ts +5 -16
- package/AudioV2/abstractAudio/abstractSoundSource.js +2 -27
- package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
- package/AudioV2/abstractAudio/audioEngineV2.d.ts +13 -0
- package/AudioV2/abstractAudio/audioEngineV2.js +4 -0
- package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
- package/AudioV2/abstractAudio/index.d.ts +1 -0
- package/AudioV2/abstractAudio/index.js +1 -0
- package/AudioV2/abstractAudio/index.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.d.ts +3 -0
- package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js.map +1 -1
- package/AudioV2/audioParameter.d.ts +31 -0
- package/AudioV2/audioParameter.js +19 -0
- package/AudioV2/audioParameter.js.map +1 -0
- package/AudioV2/audioUtils.d.ts +3 -0
- package/AudioV2/audioUtils.js +61 -0
- package/AudioV2/audioUtils.js.map +1 -1
- package/AudioV2/index.d.ts +1 -0
- package/AudioV2/index.js +1 -0
- package/AudioV2/index.js.map +1 -1
- package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +37 -0
- package/AudioV2/webAudio/components/webAudioParameterComponent.js +89 -0
- package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -0
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +8 -0
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +24 -6
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.d.ts +2 -0
- package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.js +9 -4
- package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.d.ts +7 -1
- package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.js +14 -5
- package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +92 -30
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +4 -2
- package/AudioV2/webAudio/webAudioEngine.js +9 -4
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioMainOut.d.ts +6 -2
- package/AudioV2/webAudio/webAudioMainOut.js +15 -10
- package/AudioV2/webAudio/webAudioMainOut.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +4 -2
- package/AudioV2/webAudio/webAudioStaticSound.js +17 -14
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.d.ts +10 -2
- package/BakedVertexAnimation/vertexAnimationBaker.js +48 -2
- package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +5 -0
- package/Behaviors/Meshes/pointerDragBehavior.js +7 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Cameras/camera.d.ts +6 -0
- package/Cameras/camera.js +8 -0
- package/Cameras/camera.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.d.ts +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +27 -18
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.d.ts +55 -3
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js +83 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.d.ts +1 -0
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +23 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +5 -5
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +10 -0
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +5 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js +5 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
- package/FlowGraph/flowGraphRichTypes.js +10 -8
- package/FlowGraph/flowGraphRichTypes.js.map +1 -1
- package/FlowGraph/utils.d.ts +3 -3
- package/FlowGraph/utils.js +5 -4
- package/FlowGraph/utils.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +6 -0
- package/Gizmos/boundingBoxGizmo.js +16 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +5 -0
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.d.ts +1 -0
- package/Instrumentation/sceneInstrumentation.js +5 -0
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +2 -5
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +8 -71
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +7 -8
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/index.js +1 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.d.ts +29 -0
- package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js +100 -0
- package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js.map +1 -0
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +3 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +5 -5
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +0 -2
- package/Materials/Node/nodeMaterialBuildState.js +0 -2
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialDefault.js +2 -1
- package/Materials/Node/nodeMaterialDefault.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +10 -3
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +16 -5
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Maths/math.vector.d.ts +14 -0
- package/Maths/math.vector.functions.d.ts +25 -1
- package/Maths/math.vector.functions.js +35 -0
- package/Maths/math.vector.functions.js.map +1 -1
- package/Maths/math.vector.js +28 -0
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +6 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +11 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/linesMesh.d.ts +4 -12
- package/Meshes/linesMesh.js +15 -24
- package/Meshes/linesMesh.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +4 -1
- package/Misc/environmentTextureTools.js +9 -2
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +5 -0
- package/Morph/morphTargetManager.js +8 -0
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/Node/Blocks/particleDebugBlock.d.ts +6 -0
- package/Particles/Node/Blocks/particleDebugBlock.js +10 -0
- package/Particles/Node/Blocks/particleDebugBlock.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +16 -2
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +2 -3
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +17 -2
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +2 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +3 -3
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/package.json +1 -1
|
@@ -138,17 +138,17 @@ export class SubSurfaceBlock extends NodeMaterialBlock {
|
|
|
138
138
|
${state._declareLocalVar("vTintColor", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${tintColor}, ${refractionTintAtDistance});
|
|
139
139
|
${state._declareLocalVar("vSubSurfaceIntensity", NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);
|
|
140
140
|
${state._declareLocalVar("dispersion", NodeMaterialBlockConnectionPointTypes.Float)} = ${dispersion};
|
|
141
|
-
#ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
|
|
142
|
-
vec3 vSpecularEnvironmentReflectance = vec3(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)));
|
|
143
|
-
#endif
|
|
144
141
|
subSurfaceOut = subSurfaceBlock(
|
|
145
142
|
vSubSurfaceIntensity
|
|
146
143
|
, vThicknessParam
|
|
147
144
|
, vTintColor
|
|
148
145
|
, normalW
|
|
149
146
|
#ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
`;
|
|
148
|
+
code += isWebGPU
|
|
149
|
+
? `, vec3f(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)))/n`
|
|
150
|
+
: `, vec3(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)))/n`;
|
|
151
|
+
code += `#else
|
|
152
152
|
, baseSpecularEnvironmentReflectance
|
|
153
153
|
#endif
|
|
154
154
|
#ifdef SS_THICKNESSANDMASK_TEXTURE
|
|
@@ -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 { NodeMaterialDefines } from \"../../nodeMaterial\";\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\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { PBRSubSurfaceConfiguration } from \"core/Materials/PBR/pbrSubSurfaceConfiguration\";\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 * 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.)\r\n */\r\n @editableInPropertyPage(\"Apply albedo after sub-surface\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public applyAlbedoAfterSubSurface: boolean = PBRSubSurfaceConfiguration.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE;\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(defines: NodeMaterialDefines) {\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 defines.setValue(\"SS_APPLY_ALBEDO_AFTER_SUBSURFACE\", this.applyAlbedoAfterSubSurface, 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 #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION\r\n vec3 vSpecularEnvironmentReflectance = vec3(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)));\r\n #endif\r\n subSurfaceOut = subSurfaceBlock(\r\n vSubSurfaceIntensity\r\n , vThicknessParam\r\n , vTintColor\r\n , normalW\r\n #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION\r\n , vSpecularEnvironmentReflectance\r\n #else\r\n , baseSpecularEnvironmentReflectance\r\n #endif\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 = colorSpecularEnvironmentReflectance;\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 { NodeMaterialDefines } from \"../../nodeMaterial\";\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\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { PBRSubSurfaceConfiguration } from \"core/Materials/PBR/pbrSubSurfaceConfiguration\";\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 * 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.)\r\n */\r\n @editableInPropertyPage(\"Apply albedo after sub-surface\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public applyAlbedoAfterSubSurface: boolean = PBRSubSurfaceConfiguration.DEFAULT_APPLY_ALBEDO_AFTERSUBSURFACE;\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(defines: NodeMaterialDefines) {\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 defines.setValue(\"SS_APPLY_ALBEDO_AFTER_SUBSURFACE\", this.applyAlbedoAfterSubSurface, 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 #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION\r\n `;\r\n\r\n code += isWebGPU\r\n ? `, vec3f(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)))/n`\r\n : `, vec3(max(colorSpecularEnvironmentReflectance.r, max(colorSpecularEnvironmentReflectance.g, colorSpecularEnvironmentReflectance.b)))/n`;\r\n\r\n code += `#else\r\n , baseSpecularEnvironmentReflectance\r\n #endif\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 = colorSpecularEnvironmentReflectance;\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"]}
|
|
@@ -10,7 +10,7 @@ import { NodeMaterialBuildStateSharedData } from "./nodeMaterialBuildStateShared
|
|
|
10
10
|
import { MaterialDefines } from "../../Materials/materialDefines.js";
|
|
11
11
|
import { VertexBuffer } from "../../Buffers/buffer.js";
|
|
12
12
|
import { Tools } from "../../Misc/tools.js";
|
|
13
|
-
import { SfeModeDefine } from "./Blocks/
|
|
13
|
+
import { SfeModeDefine } from "./Blocks/Fragment/smartFilterFragmentOutputBlock.js";
|
|
14
14
|
import { TransformBlock } from "./Blocks/transformBlock.js";
|
|
15
15
|
import { VertexOutputBlock } from "./Blocks/Vertex/vertexOutputBlock.js";
|
|
16
16
|
import { FragmentOutputBlock } from "./Blocks/Fragment/fragmentOutputBlock.js";
|