diff --git a/src/materials/nodes/InstancedPointsNodeMaterial.js b/src/materials/nodes/InstancedPointsNodeMaterial.js index 45e3fd4f54f79b..0d7278225f5bdd 100644 --- a/src/materials/nodes/InstancedPointsNodeMaterial.js +++ b/src/materials/nodes/InstancedPointsNodeMaterial.js @@ -39,21 +39,19 @@ class InstancedPointsNodeMaterial extends NodeMaterial { this.setDefaultValues( _defaultValues ); - this.setupShaders(); - this.setValues( params ); } setup( builder ) { - this.setupShaders(); + this.setupShaders( builder ); super.setup( builder ); } - setupShaders() { + setupShaders( { renderer } ) { const useAlphaToCoverage = this.alphaToCoverage; const useColor = this.useColor; @@ -94,7 +92,7 @@ class InstancedPointsNodeMaterial extends NodeMaterial { const len2 = lengthSq( uv().mul( 2 ).sub( 1 ) ); - if ( useAlphaToCoverage ) { + if ( useAlphaToCoverage && renderer.samples > 1 ) { const dlen = float( len2.fwidth() ).toVar(); diff --git a/src/materials/nodes/Line2NodeMaterial.js b/src/materials/nodes/Line2NodeMaterial.js index 56e3a346b775bc..04e9bee3bb1edb 100644 --- a/src/materials/nodes/Line2NodeMaterial.js +++ b/src/materials/nodes/Line2NodeMaterial.js @@ -52,13 +52,13 @@ class Line2NodeMaterial extends NodeMaterial { setup( builder ) { - this.setupShaders(); + this.setupShaders( builder ); super.setup( builder ); } - setupShaders() { + setupShaders( { renderer } ) { const useAlphaToCoverage = this.alphaToCoverage; const useColor = this.useColor; @@ -299,7 +299,7 @@ class Line2NodeMaterial extends NodeMaterial { if ( ! useDash ) { - if ( useAlphaToCoverage ) { + if ( useAlphaToCoverage && renderer.samples > 1 ) { const dnorm = norm.fwidth(); alpha.assign( smoothstep( dnorm.negate().add( 0.5 ), dnorm.add( 0.5 ), norm ).oneMinus() ); @@ -316,7 +316,7 @@ class Line2NodeMaterial extends NodeMaterial { // round endcaps - if ( useAlphaToCoverage ) { + if ( useAlphaToCoverage && renderer.samples > 1 ) { const a = vUv.x; const b = vUv.y.greaterThan( 0.0 ).select( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) ); diff --git a/src/materials/nodes/NodeMaterial.js b/src/materials/nodes/NodeMaterial.js index 21ce125e0466d6..0fd9aa25b5c6f9 100644 --- a/src/materials/nodes/NodeMaterial.js +++ b/src/materials/nodes/NodeMaterial.js @@ -194,7 +194,9 @@ class NodeMaterial extends Material { if ( globalClippingCount || localClippingCount ) { - if ( this.alphaToCoverage ) { + const samples = builder.renderer.samples; + + if ( this.alphaToCoverage && samples > 1 ) { // to be added to flow when the color/alpha value has been determined result = clippingAlpha(); diff --git a/src/renderers/webgl-fallback/utils/WebGLState.js b/src/renderers/webgl-fallback/utils/WebGLState.js index 3993a175427558..feedf240c877f5 100644 --- a/src/renderers/webgl-fallback/utils/WebGLState.js +++ b/src/renderers/webgl-fallback/utils/WebGLState.js @@ -512,7 +512,7 @@ class WebGLState { this.setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - material.alphaToCoverage === true + material.alphaToCoverage === true && this.backend.renderer.samples > 1 ? this.enable( gl.SAMPLE_ALPHA_TO_COVERAGE ) : this.disable( gl.SAMPLE_ALPHA_TO_COVERAGE ); diff --git a/src/renderers/webgpu/utils/WebGPUPipelineUtils.js b/src/renderers/webgpu/utils/WebGPUPipelineUtils.js index 6c749586b757b4..ef1a78dcfb0f3c 100644 --- a/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +++ b/src/renderers/webgpu/utils/WebGPUPipelineUtils.js @@ -138,7 +138,7 @@ class WebGPUPipelineUtils { }, multisample: { count: sampleCount, - alphaToCoverageEnabled: material.alphaToCoverage + alphaToCoverageEnabled: material.alphaToCoverage && sampleCount > 1 }, layout: device.createPipelineLayout( { bindGroupLayouts