Skip to content

Commit 1dd9ba5

Browse files
authored
WebGPURenderer: Fix material transparent assignment (#32110)
* fix material transparent assignment * updates
1 parent 96fe466 commit 1dd9ba5

File tree

5 files changed

+28
-12
lines changed

5 files changed

+28
-12
lines changed

src/materials/nodes/NodeMaterial.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Material } from '../Material.js';
2-
import { NormalBlending } from '../../constants.js';
32

43
import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
54
import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
@@ -820,7 +819,9 @@ class NodeMaterial extends Material {
820819
* @param {NodeBuilder} builder - The current node builder.
821820
* @param {BufferGeometry} geometry - The geometry.
822821
*/
823-
setupDiffuseColor( { object, geometry } ) {
822+
setupDiffuseColor( builder ) {
823+
824+
const { object, geometry } = builder;
824825

825826
// MASK
826827

@@ -902,9 +903,7 @@ class NodeMaterial extends Material {
902903

903904
// OPAQUE
904905

905-
const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
906-
907-
if ( isOpaque ) {
906+
if ( builder.isOpaque() ) {
908907

909908
diffuseColor.a.assign( 1.0 );
910909

src/nodes/core/NodeBuilder.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import ChainMap from '../../renderers/common/ChainMap.js';
2424

2525
import BindGroup from '../../renderers/common/BindGroup.js';
2626

27-
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
27+
import { REVISION, IntType, UnsignedIntType, LinearFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, LinearMipmapLinearFilter, NormalBlending } from '../../constants.js';
2828
import { RenderTarget } from '../../core/RenderTarget.js';
2929
import { Color } from '../../math/Color.js';
3030
import { Vector2 } from '../../math/Vector2.js';
@@ -461,6 +461,19 @@ class NodeBuilder {
461461

462462
}
463463

464+
/**
465+
* Whether the material is opaque or not.
466+
*
467+
* @return {boolean} Whether the material is opaque or not.
468+
*/
469+
isOpaque() {
470+
471+
const material = this.material;
472+
473+
return material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false;
474+
475+
}
476+
464477
/**
465478
* Returns the bind groups of the current renderer.
466479
*

src/nodes/lighting/LightsNode.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,6 @@ class LightsNode extends Node {
369369

370370
}
371371

372-
context.material.transparent = true;
373-
374372
}
375373

376374
totalDiffuseNode.assign( totalDiffuse );

src/renderers/common/RenderList.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function reversePainterSortStable( a, b ) {
7272
*/
7373
function needsDoublePass( material ) {
7474

75-
const hasTransmission = material.transmission > 0 || material.transmissionNode;
75+
const hasTransmission = material.transmission > 0 || ( material.transmissionNode && material.transmissionNode.isNode );
7676

7777
return hasTransmission && material.side === DoubleSide && material.forceSinglePass === false;
7878

@@ -283,7 +283,9 @@ class RenderList {
283283

284284
if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
285285

286-
if ( material.transparent === true || material.transmission > 0 ) {
286+
if ( material.transparent === true || material.transmission > 0 ||
287+
( material.transmissionNode && material.transmissionNode.isNode ) ||
288+
( material.backdropNode && material.backdropNode.isNode ) ) {
287289

288290
if ( needsDoublePass( material ) ) this.transparentDoublePass.push( renderItem );
289291

@@ -313,7 +315,9 @@ class RenderList {
313315

314316
const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );
315317

316-
if ( material.transparent === true || material.transmission > 0 ) {
318+
if ( material.transparent === true || material.transmission > 0 ||
319+
( material.transmissionNode && material.transmissionNode.isNode ) ||
320+
( material.backdropNode && material.backdropNode.isNode ) ) {
317321

318322
if ( needsDoublePass( material ) ) this.transparentDoublePass.unshift( renderItem );
319323

src/renderers/common/Renderer.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3102,7 +3102,9 @@ class Renderer {
31023102

31033103
overrideMaterial.alphaTest = material.alphaTest;
31043104
overrideMaterial.alphaMap = material.alphaMap;
3105-
overrideMaterial.transparent = material.transparent || material.transmission > 0;
3105+
overrideMaterial.transparent = material.transparent || material.transmission > 0 ||
3106+
( material.transmissionNode && material.transmissionNode.isNode ) ||
3107+
( material.backdropNode && material.backdropNode.isNode );
31063108

31073109
if ( overrideMaterial.isShadowPassMaterial ) {
31083110

0 commit comments

Comments
 (0)