Browse Source

Merge pull request #18025 from Mugen87/dev39

WebGLRenderer: VR -> XR.
Mr.doob 5 years ago
parent
commit
7603dbfd71

+ 11 - 1
docs/api/en/renderers/WebGLRenderer.html

@@ -283,6 +283,16 @@
 		Tone mapping white point. Default is *1*.
 		Tone mapping white point. Default is *1*.
 		</p>
 		</p>
 
 
+		<h3>[property:Object xr]</h3>
+		<p>
+		Provides access to the WebXR related interface of the renderer.
+		</p>
+
+		<h3>[property:Boolean xr.enabled]</h3>
+		<p>
+		Whether the renderer should enable XR rendering or not. Default is *false*.
+		</p>
+
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
 		<h3>[method:null clear]( [param:Boolean color], [param:Boolean depth], [param:Boolean stencil] )</h3>
 		<h3>[method:null clear]( [param:Boolean color], [param:Boolean depth], [param:Boolean stencil] )</h3>
@@ -431,7 +441,7 @@
 
 
 		<h3>[method:null setAnimationLoop]( [param:Function callback] )</h3>
 		<h3>[method:null setAnimationLoop]( [param:Function callback] )</h3>
 		<p>[page:Function callback] — The function will be called every available frame. If `null` is passed it will stop any already ongoing animation.</p>
 		<p>[page:Function callback] — The function will be called every available frame. If `null` is passed it will stop any already ongoing animation.</p>
-		<p>A built in function that can be used instead of [link:https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame]. For WebVR projects this function must be used.</p>
+		<p>A built in function that can be used instead of [link:https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame]. For WebXR projects this function must be used.</p>
 
 
 		<h3>[method:null setClearAlpha]( [param:Float alpha] )</h3>
 		<h3>[method:null setClearAlpha]( [param:Float alpha] )</h3>
 		<p>Sets the clear alpha. Valid input is a float between *0.0* and *1.0*.</p>
 		<p>Sets the clear alpha. Valid input is a float between *0.0* and *1.0*.</p>

+ 11 - 1
docs/api/zh/renderers/WebGLRenderer.html

@@ -260,6 +260,16 @@
 		色调映射的白点。默认是*1*
 		色调映射的白点。默认是*1*
 		</p>
 		</p>
 
 
+		<h3>[property:Object xr]</h3>
+		<p>
+		Provides access to the WebXR related interface of the renderer.
+		</p>
+
+		<h3>[property:Boolean xr.enabled]</h3>
+		<p>
+		Whether the renderer should enable XR rendering or not. Default is *false*.
+		</p>
+
 		<h2>方法</h2>
 		<h2>方法</h2>
 
 
 		<h3>[method:null clear]( [param:Boolean color], [param:Boolean depth], [param:Boolean stencil] )</h3>
 		<h3>[method:null clear]( [param:Boolean color], [param:Boolean depth], [param:Boolean stencil] )</h3>
@@ -388,7 +398,7 @@
 
 
 		<h3>[method:null setAnimationLoop]( [param:Function callback] )</h3>
 		<h3>[method:null setAnimationLoop]( [param:Function callback] )</h3>
 		<p>[page:Function callback] — 每个可用帧都会调用的函数。 如果传入‘null’,所有正在进行的动画都会停止。</p>
 		<p>[page:Function callback] — 每个可用帧都会调用的函数。 如果传入‘null’,所有正在进行的动画都会停止。</p>
-		<p>可用来代替[link:https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame]的内置函数. 对于WebVR项目,必须使用此函数。</p>
+		<p>可用来代替[link:https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame requestAnimationFrame]的内置函数. 对于WebXR项目,必须使用此函数。</p>
 
 
 		<h3>[method:null setClearAlpha]( [param:Float alpha] )</h3>
 		<h3>[method:null setClearAlpha]( [param:Float alpha] )</h3>
 		<p>设置alpha。合法参数是一个*0.0*到 *1.0*之间的浮点数</p>
 		<p>设置alpha。合法参数是一个*0.0*到 *1.0*之间的浮点数</p>

+ 2 - 2
docs/manual/en/introduction/How-to-create-VR-content.html

@@ -39,11 +39,11 @@ document.body.appendChild( VRButton.createButton( renderer ) );
 	</code>
 	</code>
 
 
 	<p>
 	<p>
-		Next, you have to tell your instance of *WebGLRenderer* to enable VR rendering.
+		Next, you have to tell your instance of *WebGLRenderer* to enable XR rendering.
 	</p>
 	</p>
 
 
 	<code>
 	<code>
-renderer.vr.enabled = true;
+renderer.xr.enabled = true;
 	</code>
 	</code>
 
 
 	<p>
 	<p>

+ 2 - 2
docs/manual/zh/introduction/How-to-create-VR-content.html

@@ -37,11 +37,11 @@ document.body.appendChild( VRButton.createButton( renderer ) );
 	</code>
 	</code>
 
 
 	<p>
 	<p>
-		接下来,你需要告诉你的*WebGLRenderer*实例来启用VR渲染。
+		接下来,你需要告诉你的*WebGLRenderer*实例来启用XR渲染。
 	</p>
 	</p>
 
 
 	<code>
 	<code>
-renderer.vr.enabled = true;
+renderer.xr.enabled = true;
 	</code>
 	</code>
 
 
 	<p>
 	<p>

+ 2 - 2
editor/js/libs/app.js

@@ -28,7 +28,7 @@ var APP = {
 			var project = json.project;
 			var project = json.project;
 
 
 			if ( project.shadows ) renderer.shadowMap.enabled = true;
 			if ( project.shadows ) renderer.shadowMap.enabled = true;
-			if ( project.vr ) renderer.vr.enabled = true;
+			if ( project.vr ) renderer.xr.enabled = true;
 
 
 			dom.appendChild( renderer.domElement );
 			dom.appendChild( renderer.domElement );
 
 
@@ -110,7 +110,7 @@ var APP = {
 			camera.aspect = this.width / this.height;
 			camera.aspect = this.width / this.height;
 			camera.updateProjectionMatrix();
 			camera.updateProjectionMatrix();
 
 
-			if ( renderer.vr.enabled ) {
+			if ( renderer.xr.enabled ) {
 
 
 				dom.appendChild( THREE.WEBVR.createButton( renderer ) );
 				dom.appendChild( THREE.WEBVR.createButton( renderer ) );
 
 

+ 3 - 3
examples/js/objects/Fire.js

@@ -319,7 +319,7 @@ THREE.Fire = function ( geometry, options ) {
 	this.saveRenderState = function ( renderer ) {
 	this.saveRenderState = function ( renderer ) {
 
 
 		this.savedRenderTarget = renderer.getRenderTarget();
 		this.savedRenderTarget = renderer.getRenderTarget();
-		this.savedVrEnabled = renderer.vr.enabled;
+		this.savedXrEnabled = renderer.xr.enabled;
 		this.savedShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		this.savedShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		this.savedAntialias = renderer.antialias;
 		this.savedAntialias = renderer.antialias;
 		this.savedToneMapping = renderer.toneMapping;
 		this.savedToneMapping = renderer.toneMapping;
@@ -328,7 +328,7 @@ THREE.Fire = function ( geometry, options ) {
 
 
 	this.restoreRenderState = function ( renderer ) {
 	this.restoreRenderState = function ( renderer ) {
 
 
-		renderer.vr.enabled = this.savedVrEnabled;
+		renderer.xr.enabled = this.savedXrEnabled;
 		renderer.shadowMap.autoUpdate = this.savedShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = this.savedShadowAutoUpdate;
 		renderer.setRenderTarget( this.savedRenderTarget );
 		renderer.setRenderTarget( this.savedRenderTarget );
 		renderer.antialias = this.savedAntialias;
 		renderer.antialias = this.savedAntialias;
@@ -445,7 +445,7 @@ THREE.Fire = function ( geometry, options ) {
 
 
 		this.saveRenderState( renderer );
 		this.saveRenderState( renderer );
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.antialias = false;
 		renderer.antialias = false;
 		renderer.toneMapping = THREE.NoToneMapping;
 		renderer.toneMapping = THREE.NoToneMapping;

+ 3 - 3
examples/js/objects/Reflector.js

@@ -153,17 +153,17 @@ THREE.Reflector = function ( geometry, options ) {
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
 
 
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
 		renderer.clear();
 		renderer.clear();
 		renderer.render( scene, virtualCamera );
 		renderer.render( scene, virtualCamera );
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 
 
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );

+ 3 - 3
examples/js/objects/Refractor.js

@@ -189,17 +189,17 @@ THREE.Refractor = function ( geometry, options ) {
 		scope.visible = false;
 		scope.visible = false;
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
-		renderer.vr.enabled = false; // avoid camera modification
+		renderer.xr.enabled = false; // avoid camera modification
 		renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
 		renderer.clear();
 		renderer.clear();
 		renderer.render( scene, virtualCamera );
 		renderer.render( scene, virtualCamera );
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );
 
 

+ 3 - 3
examples/js/objects/Water.js

@@ -283,12 +283,12 @@ THREE.Water = function ( geometry, options ) {
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
 
 
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
 		scope.visible = false;
 		scope.visible = false;
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
@@ -297,7 +297,7 @@ THREE.Water = function ( geometry, options ) {
 
 
 		scope.visible = true;
 		scope.visible = true;
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 
 
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );

+ 5 - 5
examples/js/vr/WebVR.js

@@ -13,7 +13,7 @@ THREE.WEBVR = {
 
 
 		if ( options && options.referenceSpaceType ) {
 		if ( options && options.referenceSpaceType ) {
 
 
-			renderer.vr.setReferenceSpaceType( options.referenceSpaceType );
+			renderer.xr.setReferenceSpaceType( options.referenceSpaceType );
 
 
 		}
 		}
 
 
@@ -45,7 +45,7 @@ THREE.WEBVR = {
 
 
 			};
 			};
 
 
-			renderer.vr.setDevice( device );
+			renderer.xr.setDevice( device );
 
 
 		}
 		}
 
 
@@ -57,7 +57,7 @@ THREE.WEBVR = {
 
 
 				session.addEventListener( 'end', onSessionEnded );
 				session.addEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( session );
+				renderer.xr.setSession( session );
 				button.textContent = 'EXIT XR';
 				button.textContent = 'EXIT XR';
 
 
 				currentSession = session;
 				currentSession = session;
@@ -68,7 +68,7 @@ THREE.WEBVR = {
 
 
 				currentSession.removeEventListener( 'end', onSessionEnded );
 				currentSession.removeEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( null );
+				renderer.xr.setSession( null );
 				button.textContent = 'ENTER XR';
 				button.textContent = 'ENTER XR';
 
 
 				currentSession = null;
 				currentSession = null;
@@ -142,7 +142,7 @@ THREE.WEBVR = {
 
 
 			button.textContent = 'VR NOT FOUND';
 			button.textContent = 'VR NOT FOUND';
 
 
-			renderer.vr.setDevice( null );
+			renderer.xr.setDevice( null );
 
 
 		}
 		}
 
 

+ 3 - 3
examples/jsm/objects/Fire.js

@@ -337,7 +337,7 @@ var Fire = function ( geometry, options ) {
 	this.saveRenderState = function ( renderer ) {
 	this.saveRenderState = function ( renderer ) {
 
 
 		this.savedRenderTarget = renderer.getRenderTarget();
 		this.savedRenderTarget = renderer.getRenderTarget();
-		this.savedVrEnabled = renderer.vr.enabled;
+		this.savedXrEnabled = renderer.xr.enabled;
 		this.savedShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		this.savedShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		this.savedAntialias = renderer.antialias;
 		this.savedAntialias = renderer.antialias;
 		this.savedToneMapping = renderer.toneMapping;
 		this.savedToneMapping = renderer.toneMapping;
@@ -346,7 +346,7 @@ var Fire = function ( geometry, options ) {
 
 
 	this.restoreRenderState = function ( renderer ) {
 	this.restoreRenderState = function ( renderer ) {
 
 
-		renderer.vr.enabled = this.savedVrEnabled;
+		renderer.xr.enabled = this.savedXrEnabled;
 		renderer.shadowMap.autoUpdate = this.savedShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = this.savedShadowAutoUpdate;
 		renderer.setRenderTarget( this.savedRenderTarget );
 		renderer.setRenderTarget( this.savedRenderTarget );
 		renderer.antialias = this.savedAntialias;
 		renderer.antialias = this.savedAntialias;
@@ -463,7 +463,7 @@ var Fire = function ( geometry, options ) {
 
 
 		this.saveRenderState( renderer );
 		this.saveRenderState( renderer );
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.antialias = false;
 		renderer.antialias = false;
 		renderer.toneMapping = NoToneMapping;
 		renderer.toneMapping = NoToneMapping;

+ 3 - 3
examples/jsm/objects/Reflector.js

@@ -169,17 +169,17 @@ var Reflector = function ( geometry, options ) {
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
 
 
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
 		renderer.clear();
 		renderer.clear();
 		renderer.render( scene, virtualCamera );
 		renderer.render( scene, virtualCamera );
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 
 
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );

+ 3 - 3
examples/jsm/objects/Refractor.js

@@ -206,17 +206,17 @@ var Refractor = function ( geometry, options ) {
 		scope.visible = false;
 		scope.visible = false;
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
-		renderer.vr.enabled = false; // avoid camera modification
+		renderer.xr.enabled = false; // avoid camera modification
 		renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
 		renderer.clear();
 		renderer.clear();
 		renderer.render( scene, virtualCamera );
 		renderer.render( scene, virtualCamera );
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );
 
 

+ 3 - 3
examples/jsm/objects/Water.js

@@ -302,12 +302,12 @@ var Water = function ( geometry, options ) {
 
 
 		var currentRenderTarget = renderer.getRenderTarget();
 		var currentRenderTarget = renderer.getRenderTarget();
 
 
-		var currentVrEnabled = renderer.vr.enabled;
+		var currentXrEnabled = renderer.xr.enabled;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 		var currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
 
 
 		scope.visible = false;
 		scope.visible = false;
 
 
-		renderer.vr.enabled = false; // Avoid camera modification and recursion
+		renderer.xr.enabled = false; // Avoid camera modification and recursion
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 		renderer.shadowMap.autoUpdate = false; // Avoid re-computing shadows
 
 
 		renderer.setRenderTarget( renderTarget );
 		renderer.setRenderTarget( renderTarget );
@@ -316,7 +316,7 @@ var Water = function ( geometry, options ) {
 
 
 		scope.visible = true;
 		scope.visible = true;
 
 
-		renderer.vr.enabled = currentVrEnabled;
+		renderer.xr.enabled = currentXrEnabled;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 		renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
 
 
 		renderer.setRenderTarget( currentRenderTarget );
 		renderer.setRenderTarget( currentRenderTarget );

+ 5 - 5
examples/jsm/vr/WebVR.js

@@ -15,7 +15,7 @@ var WEBVR = {
 
 
 		if ( options && options.referenceSpaceType ) {
 		if ( options && options.referenceSpaceType ) {
 
 
-			renderer.vr.setReferenceSpaceType( options.referenceSpaceType );
+			renderer.xr.setReferenceSpaceType( options.referenceSpaceType );
 
 
 		}
 		}
 
 
@@ -47,7 +47,7 @@ var WEBVR = {
 
 
 			};
 			};
 
 
-			renderer.vr.setDevice( device );
+			renderer.xr.setDevice( device );
 
 
 		}
 		}
 
 
@@ -59,7 +59,7 @@ var WEBVR = {
 
 
 				session.addEventListener( 'end', onSessionEnded );
 				session.addEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( session );
+				renderer.xr.setSession( session );
 				button.textContent = 'EXIT XR';
 				button.textContent = 'EXIT XR';
 
 
 				currentSession = session;
 				currentSession = session;
@@ -70,7 +70,7 @@ var WEBVR = {
 
 
 				currentSession.removeEventListener( 'end', onSessionEnded );
 				currentSession.removeEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( null );
+				renderer.xr.setSession( null );
 				button.textContent = 'ENTER XR';
 				button.textContent = 'ENTER XR';
 
 
 				currentSession = null;
 				currentSession = null;
@@ -144,7 +144,7 @@ var WEBVR = {
 
 
 			button.textContent = 'VR NOT FOUND';
 			button.textContent = 'VR NOT FOUND';
 
 
-			renderer.vr.setDevice( null );
+			renderer.xr.setDevice( null );
 
 
 		}
 		}
 
 

+ 3 - 3
examples/jsm/webxr/ARButton.js

@@ -21,8 +21,8 @@ var ARButton = {
 				} );
 				} );
 				*/
 				*/
 
 
-				renderer.vr.setReferenceSpaceType( 'local' );
-				renderer.vr.setSession( session );
+				renderer.xr.setReferenceSpaceType( 'local' );
+				renderer.xr.setSession( session );
 				button.textContent = 'STOP AR';
 				button.textContent = 'STOP AR';
 
 
 				currentSession = session;
 				currentSession = session;
@@ -33,7 +33,7 @@ var ARButton = {
 
 
 				currentSession.removeEventListener( 'end', onSessionEnded );
 				currentSession.removeEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( null );
+				renderer.xr.setSession( null );
 				button.textContent = 'START AR';
 				button.textContent = 'START AR';
 
 
 				currentSession = null;
 				currentSession = null;

+ 5 - 5
examples/jsm/webxr/VRButton.js

@@ -9,7 +9,7 @@ var VRButton = {
 
 
 		if ( options && options.referenceSpaceType ) {
 		if ( options && options.referenceSpaceType ) {
 
 
-			renderer.vr.setReferenceSpaceType( options.referenceSpaceType );
+			renderer.xr.setReferenceSpaceType( options.referenceSpaceType );
 
 
 		}
 		}
 
 
@@ -41,7 +41,7 @@ var VRButton = {
 
 
 			};
 			};
 
 
-			renderer.vr.setDevice( device );
+			renderer.xr.setDevice( device );
 
 
 		}
 		}
 
 
@@ -53,7 +53,7 @@ var VRButton = {
 
 
 				session.addEventListener( 'end', onSessionEnded );
 				session.addEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( session );
+				renderer.xr.setSession( session );
 				button.textContent = 'EXIT VR';
 				button.textContent = 'EXIT VR';
 
 
 				currentSession = session;
 				currentSession = session;
@@ -64,7 +64,7 @@ var VRButton = {
 
 
 				currentSession.removeEventListener( 'end', onSessionEnded );
 				currentSession.removeEventListener( 'end', onSessionEnded );
 
 
-				renderer.vr.setSession( null );
+				renderer.xr.setSession( null );
 				button.textContent = 'ENTER VR';
 				button.textContent = 'ENTER VR';
 
 
 				currentSession = null;
 				currentSession = null;
@@ -138,7 +138,7 @@ var VRButton = {
 
 
 			button.textContent = 'VR NOT FOUND';
 			button.textContent = 'VR NOT FOUND';
 
 
-			renderer.vr.setDevice( null );
+			renderer.xr.setDevice( null );
 
 
 		}
 		}
 
 

+ 2 - 2
examples/webxr_ar_paint.html

@@ -49,7 +49,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -84,7 +84,7 @@
 
 
 				}
 				}
 
 
-				controller = renderer.vr.getController( 0 );
+				controller = renderer.xr.getController( 0 );
 				controller.addEventListener( 'selectstart', onSelectStart );
 				controller.addEventListener( 'selectstart', onSelectStart );
 				controller.addEventListener( 'selectend', onSelectEnd );
 				controller.addEventListener( 'selectend', onSelectEnd );
 				controller.userData.points = [ new THREE.Vector3(), new THREE.Vector3() ];
 				controller.userData.points = [ new THREE.Vector3(), new THREE.Vector3() ];

+ 3 - 3
examples/webxr_vr_ballshooter.html

@@ -79,7 +79,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -100,12 +100,12 @@
 
 
 				}
 				}
 
 
-				controller1 = renderer.vr.getController( 0 );
+				controller1 = renderer.xr.getController( 0 );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				scene.add( controller1 );
 				scene.add( controller1 );
 
 
-				controller2 = renderer.vr.getController( 1 );
+				controller2 = renderer.xr.getController( 1 );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				scene.add( controller2 );
 				scene.add( controller2 );

+ 1 - 1
examples/webxr_vr_cubes.html

@@ -103,7 +103,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				renderer.domElement.addEventListener( 'mousedown', onMouseDown, false );
 				renderer.domElement.addEventListener( 'mousedown', onMouseDown, false );

+ 3 - 3
examples/webxr_vr_dragging.html

@@ -117,19 +117,19 @@
 				renderer.gammaInput = true;
 				renderer.gammaInput = true;
 				renderer.gammaOutput = true;
 				renderer.gammaOutput = true;
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer ) );
 				document.body.appendChild( VRButton.createButton( renderer ) );
 
 
 				// controllers
 				// controllers
 
 
-				controller1 = renderer.vr.getController( 0 );
+				controller1 = renderer.xr.getController( 0 );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				scene.add( controller1 );
 				scene.add( controller1 );
 
 
-				controller2 = renderer.vr.getController( 1 );
+				controller2 = renderer.xr.getController( 1 );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				scene.add( controller2 );
 				scene.add( controller2 );

+ 1 - 1
examples/webxr_vr_lorenzattractor.html

@@ -131,7 +131,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer ) );
 				document.body.appendChild( VRButton.createButton( renderer ) );

+ 1 - 1
examples/webxr_vr_multiview.html

@@ -62,7 +62,7 @@
 
 
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				var info = document.createElement( 'div' );
 				var info = document.createElement( 'div' );

+ 3 - 3
examples/webxr_vr_paint.html

@@ -93,7 +93,7 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.gammaInput = true;
 				renderer.gammaInput = true;
 				renderer.gammaOutput = true;
 				renderer.gammaOutput = true;
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer ) );
 				document.body.appendChild( VRButton.createButton( renderer ) );
@@ -126,7 +126,7 @@
 
 
 				}
 				}
 
 
-				controller1 = renderer.vr.getController( 0 );
+				controller1 = renderer.xr.getController( 0 );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.addEventListener( 'squeezestart', onSequeezeStart );
 				controller1.addEventListener( 'squeezestart', onSequeezeStart );
@@ -136,7 +136,7 @@
 				controller1.userData.matrices = [ new THREE.Matrix4(), new THREE.Matrix4() ];
 				controller1.userData.matrices = [ new THREE.Matrix4(), new THREE.Matrix4() ];
 				scene.add( controller1 );
 				scene.add( controller1 );
 
 
-				controller2 = renderer.vr.getController( 1 );
+				controller2 = renderer.xr.getController( 1 );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.addEventListener( 'squeezestart', onSequeezeStart );
 				controller2.addEventListener( 'squeezestart', onSequeezeStart );

+ 1 - 1
examples/webxr_vr_panorama.html

@@ -26,7 +26,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );

+ 2 - 2
examples/webxr_vr_panorama_depth.html

@@ -85,7 +85,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
@@ -115,7 +115,7 @@
 
 
 				// If we are not presenting move the camera a little so the effect is visible
 				// If we are not presenting move the camera a little so the effect is visible
 
 
-				if ( renderer.vr.isPresenting() === false ) {
+				if ( renderer.xr.isPresenting() === false ) {
 
 
 					var time = clock.getElapsedTime();
 					var time = clock.getElapsedTime();
 
 

+ 1 - 1
examples/webxr_vr_rollercoaster.html

@@ -26,7 +26,7 @@
 			var renderer = new THREE.WebGLRenderer( { antialias: true } );
 			var renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
-			renderer.vr.enabled = true;
+			renderer.xr.enabled = true;
 			document.body.appendChild( renderer.domElement );
 			document.body.appendChild( renderer.domElement );
 
 
 			document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
 			document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );

+ 1 - 1
examples/webxr_vr_sandbox.html

@@ -120,7 +120,7 @@
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer ) );
 				document.body.appendChild( VRButton.createButton( renderer ) );

+ 3 - 3
examples/webxr_vr_sculpt.html

@@ -86,7 +86,7 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.gammaInput = true;
 				renderer.gammaInput = true;
 				renderer.gammaOutput = true;
 				renderer.gammaOutput = true;
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer ) );
 				document.body.appendChild( VRButton.createButton( renderer ) );
@@ -105,13 +105,13 @@
 
 
 				}
 				}
 
 
-				controller1 = renderer.vr.getController( 0 );
+				controller1 = renderer.xr.getController( 0 );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectstart', onSelectStart );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.addEventListener( 'selectend', onSelectEnd );
 				controller1.userData.id = 0;
 				controller1.userData.id = 0;
 				scene.add( controller1 );
 				scene.add( controller1 );
 
 
-				controller2 = renderer.vr.getController( 1 );
+				controller2 = renderer.xr.getController( 1 );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectstart', onSelectStart );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.addEventListener( 'selectend', onSelectEnd );
 				controller2.userData.id = 1;
 				controller2.userData.id = 1;

+ 1 - 1
examples/webxr_vr_video.html

@@ -114,7 +114,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.vr.enabled = true;
+				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );
 				document.body.appendChild( VRButton.createButton( renderer, { referenceSpaceType: 'local' } ) );

+ 8 - 0
src/Three.Legacy.js

@@ -1678,6 +1678,14 @@ Object.defineProperties( WebGLRenderer.prototype, {
 			console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );
 			console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );
 			return this.getContext();
 			return this.getContext();
 
 
+		}
+	},
+	vr: {
+		get: function () {
+
+			console.warn( 'THREE.WebGLRenderer: .vr has been removed. Use .xr instead.' );
+			return this.xr;
+
 		}
 		}
 	}
 	}
 
 

+ 7 - 2
src/renderers/WebGLRenderer.d.ts

@@ -15,7 +15,7 @@ import { Object3D } from './../core/Object3D';
 import { Material } from './../materials/Material';
 import { Material } from './../materials/Material';
 import { Fog } from './../scenes/Fog';
 import { Fog } from './../scenes/Fog';
 import { ToneMapping, ShadowMapType, CullFace } from '../constants';
 import { ToneMapping, ShadowMapType, CullFace } from '../constants';
-import { WebVRManager } from '../renderers/webvr/WebVRManager';
+import { WebXRManager } from '../renderers/webvr/WebXRManager';
 import { RenderTarget } from './webgl/WebGLRenderLists';
 import { RenderTarget } from './webgl/WebGLRenderLists';
 import { Geometry } from './../core/Geometry';
 import { Geometry } from './../core/Geometry';
 import { BufferGeometry } from './../core/BufferGeometry';
 import { BufferGeometry } from './../core/BufferGeometry';
@@ -196,7 +196,7 @@ export class WebGLRenderer implements Renderer {
 	renderLists: WebGLRenderLists;
 	renderLists: WebGLRenderLists;
 	state: WebGLState;
 	state: WebGLState;
 
 
-	vr: WebVRManager;
+	xr: WebXRManager;
 
 
 	/**
 	/**
 	 * Return the WebGL context.
 	 * Return the WebGL context.
@@ -429,6 +429,11 @@ export class WebGLRenderer implements Renderer {
 	 */
 	 */
 	gammaFactor: number;
 	gammaFactor: number;
 
 
+	/**
+	 * @deprecated Use {@link WebGLRenderer#xr .xr} instead.
+	 */
+	vr: boolean;
+
 	/**
 	/**
 	 * @deprecated Use {@link WebGLShadowMap#enabled .shadowMap.enabled} instead.
 	 * @deprecated Use {@link WebGLShadowMap#enabled .shadowMap.enabled} instead.
 	 */
 	 */

+ 13 - 13
src/renderers/WebGLRenderer.js

@@ -307,11 +307,11 @@ function WebGLRenderer( parameters ) {
 
 
 	initGLContext();
 	initGLContext();
 
 
-	// vr
+	// xr
 
 
-	var vr = ( typeof navigator !== 'undefined' && 'xr' in navigator ) ? new WebXRManager( _this, _gl ) : new WebVRManager( _this );
+	var xr = ( typeof navigator !== 'undefined' && 'xr' in navigator ) ? new WebXRManager( _this, _gl ) : new WebVRManager( _this );
 
 
-	this.vr = vr;
+	this.xr = xr;
 
 
 	// Multiview
 	// Multiview
 
 
@@ -383,7 +383,7 @@ function WebGLRenderer( parameters ) {
 
 
 	this.setSize = function ( width, height, updateStyle ) {
 	this.setSize = function ( width, height, updateStyle ) {
 
 
-		if ( vr.isPresenting() ) {
+		if ( xr.isPresenting() ) {
 
 
 			console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
 			console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
 			return;
 			return;
@@ -573,7 +573,7 @@ function WebGLRenderer( parameters ) {
 		properties.dispose();
 		properties.dispose();
 		objects.dispose();
 		objects.dispose();
 
 
-		vr.dispose();
+		xr.dispose();
 
 
 		animation.stop();
 		animation.stop();
 
 
@@ -1089,7 +1089,7 @@ function WebGLRenderer( parameters ) {
 
 
 	function onAnimationFrame( time ) {
 	function onAnimationFrame( time ) {
 
 
-		if ( vr.isPresenting() ) return;
+		if ( xr.isPresenting() ) return;
 		if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
 		if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
 
 
 	}
 	}
@@ -1102,7 +1102,7 @@ function WebGLRenderer( parameters ) {
 	this.setAnimationLoop = function ( callback ) {
 	this.setAnimationLoop = function ( callback ) {
 
 
 		onAnimationFrameCallback = callback;
 		onAnimationFrameCallback = callback;
-		vr.setAnimationLoop( callback );
+		xr.setAnimationLoop( callback );
 
 
 		animation.start();
 		animation.start();
 
 
@@ -1153,9 +1153,9 @@ function WebGLRenderer( parameters ) {
 
 
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 		if ( camera.parent === null ) camera.updateMatrixWorld();
 
 
-		if ( vr.enabled && vr.isPresenting() ) {
+		if ( xr.enabled && xr.isPresenting() ) {
 
 
-			camera = vr.getCamera( camera );
+			camera = xr.getCamera( camera );
 
 
 		}
 		}
 
 
@@ -1205,7 +1205,7 @@ function WebGLRenderer( parameters ) {
 
 
 		}
 		}
 
 
-		if ( vr.enabled && multiview.isAvailable() ) {
+		if ( xr.enabled && multiview.isAvailable() ) {
 
 
 			multiview.attachCamera( camera );
 			multiview.attachCamera( camera );
 
 
@@ -1265,7 +1265,7 @@ function WebGLRenderer( parameters ) {
 
 
 		state.setPolygonOffset( false );
 		state.setPolygonOffset( false );
 
 
-		if ( vr.enabled ) {
+		if ( xr.enabled ) {
 
 
 			if ( multiview.isAvailable() ) {
 			if ( multiview.isAvailable() ) {
 
 
@@ -1273,7 +1273,7 @@ function WebGLRenderer( parameters ) {
 
 
 			}
 			}
 
 
-			vr.submitFrame();
+			xr.submitFrame();
 
 
 		}
 		}
 
 
@@ -1424,7 +1424,7 @@ function WebGLRenderer( parameters ) {
 
 
 				_currentArrayCamera = camera;
 				_currentArrayCamera = camera;
 
 
-				if ( vr.enabled && multiview.isAvailable() ) {
+				if ( xr.enabled && multiview.isAvailable() ) {
 
 
 					renderObject( object, scene, camera, geometry, material, group );
 					renderObject( object, scene, camera, geometry, material, group );
 
 

+ 2 - 2
src/renderers/webgl/WebGLBackground.js

@@ -30,8 +30,8 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) {
 		// Ignore background in AR
 		// Ignore background in AR
 		// TODO: Reconsider this.
 		// TODO: Reconsider this.
 
 
-		var vr = renderer.vr;
-		var session = vr.getSession && vr.getSession();
+		var xr = renderer.xr;
+		var session = xr.getSession && xr.getSession();
 
 
 		if ( session && session.environmentBlendMode === 'additive' ) {
 		if ( session && session.environmentBlendMode === 'additive' ) {