Skip to content

Commit 58d5c51

Browse files
authored
Material: Add allowOverride. (#30753)
* Material: Add `allowOverride`. * Scene: Fix typo.
1 parent e6b3f2d commit 58d5c51

File tree

6 files changed

+23
-5
lines changed

6 files changed

+23
-5
lines changed

src/materials/Material.js

+8
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,14 @@ class Material extends EventDispatcher {
427427
*/
428428
this.forceSinglePass = false;
429429

430+
/**
431+
* Whether it's possible to override the material with {@link Scene#overrideMaterial} or not.
432+
*
433+
* @type {boolean}
434+
* @default true
435+
*/
436+
this.allowOverride = true;
437+
430438
/**
431439
* Defines whether 3D objects using this material are visible.
432440
*

src/renderers/WebGLRenderer.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -1979,8 +1979,14 @@ class WebGLRenderer {
19791979

19801980
const object = renderItem.object;
19811981
const geometry = renderItem.geometry;
1982-
const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
19831982
const group = renderItem.group;
1983+
let material = renderItem.material;
1984+
1985+
if ( material.allowOverride === true && overrideMaterial !== null ) {
1986+
1987+
material = overrideMaterial;
1988+
1989+
}
19841990

19851991
if ( object.layers.test( camera.layers ) ) {
19861992

src/renderers/common/Background.js

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class Background extends DataMap {
101101
nodeMaterial.side = BackSide;
102102
nodeMaterial.depthTest = false;
103103
nodeMaterial.depthWrite = false;
104+
nodeMaterial.allowOverride = false;
104105
nodeMaterial.fog = false;
105106
nodeMaterial.lights = false;
106107
nodeMaterial.vertexNode = viewProj;

src/renderers/common/Renderer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2758,7 +2758,7 @@ class Renderer {
27582758

27592759
//
27602760

2761-
if ( scene.overrideMaterial !== null ) {
2761+
if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
27622762

27632763
const overrideMaterial = scene.overrideMaterial;
27642764

src/renderers/webgl/WebGLBackground.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
101101
side: BackSide,
102102
depthTest: false,
103103
depthWrite: false,
104-
fog: false
104+
fog: false,
105+
allowOverride: false
105106
} )
106107
);
107108

@@ -180,7 +181,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
180181
side: FrontSide,
181182
depthTest: false,
182183
depthWrite: false,
183-
fog: false
184+
fog: false,
185+
allowOverride: false
184186
} )
185187
);
186188

src/scenes/Scene.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ class Scene extends Object3D {
104104
this.environmentRotation = new Euler();
105105

106106
/**
107-
* Forces everything in the scene to be rendered with the defined material.
107+
* Forces everything in the scene to be rendered with the defined material. It is possible
108+
* to exclude materials from override by setting {@link Material#allowOverride} to `false`.
108109
*
109110
* @type {?Material}
110111
* @default null

0 commit comments

Comments
 (0)