Quellcode durchsuchen

WebGLRenderer: Add transmission render target scale (#30018)

* WebGLRenderer: Add transmission render target scale

* WebGLRenderer: Rename transmissionResolutionScale to transmissionResolutionScale

* WebGLRenderer: Document transmissionResolutionScale

* Add transmission resolution scale control to transmission physical material example
Michael vor 1 Jahr
Ursprung
Commit
ef48deefeb

+ 3 - 0
docs/api/en/renderers/WebGLRenderer.html

@@ -323,6 +323,9 @@ document.body.appendChild( renderer.domElement );
 		<h3>[property:Number toneMappingExposure]</h3>
 		<p>Exposure level of tone mapping. Default is `1`.</p>
 
+		<h3>[property:Number transmissionResolutionScale]</h3>
+		<p>The normalized resolution scale for the transmission render target, measured in percentage of viewport dimensions. Lowering this value can result in significant improvements to [page:MeshPhysicalMaterial MeshPhysicalMaterial] transmission performance. Default is `1`.</p>
+
 		<h3>[property:WebXRManager xr]</h3>
 		<p>
 			Provides access to the WebXR related [page:WebXRManager interface] of the

+ 11 - 1
examples/webgl_materials_physical_transmission.html

@@ -40,7 +40,8 @@
 				specularColor: 0xffffff,
 				envMapIntensity: 1,
 				lightIntensity: 1,
-				exposure: 1
+				exposure: 1,
+				transmissionResolutionScale: 1
 			};
 
 			let camera, scene, renderer;
@@ -210,6 +211,15 @@
 
 					} );
 
+				gui.add( params, 'transmissionResolutionScale', 0.01, 1, 0.01 )
+					.name( 'transmission resolution' )
+					.onChange( function () {
+
+						renderer.transmissionResolutionScale = params.transmissionResolutionScale;
+						render();
+
+					} );
+
 				gui.open();
 
 			}

+ 4 - 1
src/renderers/WebGLRenderer.js

@@ -193,6 +193,9 @@ class WebGLRenderer {
 		let _clippingEnabled = false;
 		let _localClippingEnabled = false;
 
+		// transmission render target scale
+		this.transmissionResolutionScale = 1.0;
+
 		// camera matrices cache
 
 		const _currentProjectionMatrix = new Matrix4();
@@ -1497,7 +1500,7 @@ class WebGLRenderer {
 			const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];
 
 			const activeViewport = camera.viewport || _currentViewport;
-			transmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );
+			transmissionRenderTarget.setSize( activeViewport.z * _this.transmissionResolutionScale, activeViewport.w * _this.transmissionResolutionScale );
 
 			//
 

粤ICP备19079148号