Kaynağa Gözat

Inspector: Fix `TSLGraphEditor` raycasting and refactor primary pass retrieval (#34133)

sunag 23 saat önce
ebeveyn
işleme
59e44e5837

+ 30 - 23
examples/jsm/inspector/RendererInspector.js

@@ -128,34 +128,19 @@ export class RendererInspector extends InspectorBase {
 
 		if ( this.overdraw === true ) {
 
-			this._renderOverdraw( frame );
+			this._renderOverdraw();
 
 		}
 
 	}
 
-	_renderOverdraw( frame ) {
+	_renderOverdraw() {
 
-		const renderer = this.getRenderer();
-
-		if ( renderer === null ) return;
-
-		// first scene render of the frame; nested shadow / RTT passes come after
-
-		let primary = null;
+		const primaryPass = this.getPrimaryPass();
 
-		for ( const render of frame.renders ) {
+		if ( primaryPass === null ) return;
 
-			if ( render.scene.isScene === true ) {
-
-				primary = render;
-				break;
-
-			}
-
-		}
-
-		if ( primary === null ) return;
+		const renderer = this.getRenderer();
 
 		if ( this._overdrawMaterial === null ) {
 
@@ -165,13 +150,12 @@ export class RendererInspector extends InspectorBase {
 				colorNode: vec3( 0.25 ),
 				blending: AdditiveBlending,
 				depthTest: true,
-				depthWrite: true,
-				toneMapped: false
+				depthWrite: true
 			} );
 
 		}
 
-		const { scene, camera } = primary;
+		const { scene, camera } = primaryPass;
 
 		// raw render against black with no tone mapping, so the count stays linear
 
@@ -225,6 +209,29 @@ export class RendererInspector extends InspectorBase {
 
 	}
 
+	getPrimaryPass() {
+
+		const frame = this.getFrame();
+
+		// first scene render of the frame; nested shadow / RTT passes come after
+
+		let primary = null;
+
+		for ( const render of frame.renders ) {
+
+			if ( render.scene.isScene === true ) {
+
+				primary = render;
+				break;
+
+			}
+
+		}
+
+		return primary;
+
+	}
+
 	getFrame() {
 
 		return this.currentFrame || this.lastFrame;

+ 26 - 31
examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js

@@ -194,60 +194,55 @@ class TSLGraphEditor extends Extension {
 
 		renderer.domElement.addEventListener( 'pointerup', ( e ) => {
 
-			const frame = inspector.getFrame();
-
-			for ( const render of frame.renders ) {
-
-				const scene = render.scene;
-
-				if ( scene.isScene !== true ) continue;
+			const primaryPass = inspector.getPrimaryPass();
 
-				const camera = render.camera;
+			if ( primaryPass === null ) return;
 
-				if ( pointerDownPosition.distanceTo( pointer.set( e.clientX, e.clientY ) ) > 2 ) return;
+			const scene = primaryPass.scene;
+			const camera = primaryPass.camera;
 
-				const rect = renderer.domElement.getBoundingClientRect();
-				pointer.x = ( ( e.clientX - rect.left ) / rect.width ) * 2 - 1;
-				pointer.y = - ( ( e.clientY - rect.top ) / rect.height ) * 2 + 1;
+			if ( pointerDownPosition.distanceTo( pointer.set( e.clientX, e.clientY ) ) > 2 ) return;
 
-				raycaster.setFromCamera( pointer, camera );
+			const rect = renderer.domElement.getBoundingClientRect();
+			pointer.x = ( ( e.clientX - rect.left ) / rect.width ) * 2 - 1;
+			pointer.y = - ( ( e.clientY - rect.top ) / rect.height ) * 2 + 1;
 
-				const intersects = raycaster.intersectObjects( scene.children, true );
+			raycaster.setFromCamera( pointer, camera );
 
-				let graphMaterial = null;
+			const intersects = raycaster.intersectObjects( scene.children, true );
 
-				if ( intersects.length > 0 ) {
+			let graphMaterial = null;
 
-					for ( const intersect of intersects ) {
+			if ( intersects.length > 0 ) {
 
-						const object = intersect.object;
-						const material = object.material;
+				for ( const intersect of intersects ) {
 
-						if ( material && material.isNodeMaterial ) {
+					const object = intersect.object;
+					const material = object.material;
 
-							removeBoundingBox();
+					if ( material && material.isNodeMaterial ) {
 
-							boundingBox = new BoxHelper( object, 0xffff00 );
-							scene.add( boundingBox );
+						removeBoundingBox();
 
-							graphMaterial = material;
+						boundingBox = new BoxHelper( object, 0xffff00 );
+						scene.add( boundingBox );
 
-						}
+						graphMaterial = material;
 
-						if ( object.isMesh || object.isSprite ) {
+					}
 
-							break;
+					if ( object.isMesh || object.isSprite ) {
 
-						}
+						break;
 
 					}
 
 				}
 
-				this.setMaterial( graphMaterial );
-
 			}
 
+			this.setMaterial( graphMaterial );
+
 		} );
 
 	}
@@ -473,7 +468,7 @@ class TSLGraphEditor extends Extension {
 
 			await this.command( 'clear-graph' );
 
-			await this.command( 'set-root-material', { materialType: this._getGraphType( this.material ) } );
+			await this.command( 'set-root-material', { materialType: this._getGraphType( material ) } );
 
 		}
 

粤ICP备19079148号