* Material: Add `allowOverride`. * Scene: Fix typo.
@@ -427,6 +427,14 @@ class Material extends EventDispatcher {
*/
this.forceSinglePass = false;
+ /**
+ * Whether it's possible to override the material with {@link Scene#overrideMaterial} or not.
+ *
+ * @type {boolean}
+ * @default true
+ */
+ this.allowOverride = true;
+
/**
* Defines whether 3D objects using this material are visible.
*
@@ -1979,8 +1979,14 @@ class WebGLRenderer {
const object = renderItem.object;
const geometry = renderItem.geometry;
- const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
const group = renderItem.group;
+ let material = renderItem.material;
+ if ( material.allowOverride === true && overrideMaterial !== null ) {
+ material = overrideMaterial;
+ }
if ( object.layers.test( camera.layers ) ) {
@@ -101,6 +101,7 @@ class Background extends DataMap {
nodeMaterial.side = BackSide;
nodeMaterial.depthTest = false;
nodeMaterial.depthWrite = false;
+ nodeMaterial.allowOverride = false;
nodeMaterial.fog = false;
nodeMaterial.lights = false;
nodeMaterial.vertexNode = viewProj;
@@ -2758,7 +2758,7 @@ class Renderer {
//
- if ( scene.overrideMaterial !== null ) {
+ if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
const overrideMaterial = scene.overrideMaterial;
@@ -101,7 +101,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
side: BackSide,
depthTest: false,
depthWrite: false,
- fog: false
+ fog: false,
+ allowOverride: false
} )
);
@@ -180,7 +181,8 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
side: FrontSide,
@@ -104,7 +104,8 @@ class Scene extends Object3D {
this.environmentRotation = new Euler();
- * Forces everything in the scene to be rendered with the defined material.
+ * Forces everything in the scene to be rendered with the defined material. It is possible
+ * to exclude materials from override by setting {@link Material#allowOverride} to `false`.
* @type {?Material}
* @default null