Quellcode durchsuchen

SSAAPassNode: Make clear color handling more consistent. (#33478)

Michael Herzog vor 1 Monat
Ursprung
Commit
c221387d9d
2 geänderte Dateien mit 14 neuen und 27 gelöschten Zeilen
  1. 13 25
      examples/jsm/tsl/display/SSAAPassNode.js
  2. 1 2
      examples/webgpu_postprocessing_ssaa.html

+ 13 - 25
examples/jsm/tsl/display/SSAAPassNode.js

@@ -1,9 +1,8 @@
-import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
+import { AdditiveBlending, Color, Vector2, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
 import { uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
 
 const _size = /*@__PURE__*/ new Vector2();
-
-let _rendererState;
+const _clearColor = /*@__PURE__*/ new Color();
 
 /**
  * A special render pass node that renders the scene with SSAA (Supersampling Anti-Aliasing).
@@ -61,22 +60,6 @@ class SSAAPassNode extends PassNode {
 		 */
 		this.unbiased = true;
 
-		/**
-		 * The clear color of the pass.
-		 *
-		 * @type {Color}
-		 * @default 0x000000
-		 */
-		this.clearColor = new Color( 0x000000 );
-
-		/**
-		 * The clear alpha of the pass.
-		 *
-		 * @type {number}
-		 * @default 0
-		 */
-		this.clearAlpha = 0;
-
 		/**
 		 * A uniform node representing the sample weight.
 		 *
@@ -114,8 +97,6 @@ class SSAAPassNode extends PassNode {
 		const { renderer } = frame;
 		const { scene, camera } = this;
 
-		_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
-
 		//
 
 		this._pixelRatio = renderer.getPixelRatio();
@@ -130,6 +111,12 @@ class SSAAPassNode extends PassNode {
 		this._cameraNear.value = camera.near;
 		this._cameraFar.value = camera.far;
 
+		const currentRenderTarget = renderer.getRenderTarget();
+		const currentMRT = renderer.getMRT();
+		const currentAutoClear = renderer.autoClear;
+		const currentClearColor = renderer.getClearColor( _clearColor );
+		const currentClearAlpha = renderer.getClearAlpha();
+
 		renderer.setMRT( this.getMRT() );
 		renderer.autoClear = false;
 
@@ -186,7 +173,6 @@ class SSAAPassNode extends PassNode {
 
 			}
 
-			renderer.setClearColor( this.clearColor, this.clearAlpha );
 			renderer.setRenderTarget( this._sampleRenderTarget );
 			renderer.clear();
 			renderer.render( scene, camera );
@@ -200,6 +186,8 @@ class SSAAPassNode extends PassNode {
 				renderer.setClearColor( 0x000000, 0.0 );
 				renderer.clear();
 
+				renderer.setClearColor( currentClearColor, currentClearAlpha );
+
 			}
 
 			this._quadMesh.render( renderer );
@@ -228,9 +216,9 @@ class SSAAPassNode extends PassNode {
 
 		}
 
-		//
-
-		RendererUtils.restoreRendererState( renderer, _rendererState );
+		renderer.setRenderTarget( currentRenderTarget );
+		renderer.setMRT( currentMRT );
+		renderer.autoClear = currentAutoClear;
 
 	}
 

+ 1 - 2
examples/webgpu_postprocessing_ssaa.html

@@ -194,8 +194,7 @@
 
 				}
 
-				ssaaRenderPass.clearColor.set( newColor );
-				ssaaRenderPass.clearAlpha = params.clearAlpha;
+				renderer.setClearColor( newColor, params.clearAlpha );
 
 				ssaaRenderPass.sampleLevel = params.sampleLevel;
 

粤ICP备19079148号