Skip to content

Revert "TSL: Add MRT support for traaPass()" #31424

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 20 additions & 51 deletions examples/jsm/tsl/display/TRAAPassNode.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Color, Vector2, NearestFilter, Matrix4, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance, output, mrt, textureLoad, screenCoordinate } from 'three/tsl';
import { add, float, If, Loop, int, Fn, min, max, clamp, nodeObject, texture, uniform, uv, vec2, vec4, luminance } from 'three/tsl';

const _quadMesh = /*@__PURE__*/ new QuadMesh();
const _size = /*@__PURE__*/ new Vector2();
Expand Down Expand Up @@ -105,15 +105,6 @@ class TRAAPassNode extends PassNode {
*/
this._historyRenderTarget = null;

/**
* The MRT for the transfer step.
*
* @private
* @type {?MRTNode}
* @default null
*/
this._transferMRT = null;

/**
* Material used for the resolve step.
*
Expand Down Expand Up @@ -213,21 +204,29 @@ class TRAAPassNode extends PassNode {

// configure velocity

const currentMRT = this.getMRT();
const velocityOutput = currentMRT.get( 'velocity' );
const mrt = this.getMRT();
const velocityOutput = mrt.get( 'velocity' );

if ( velocityOutput !== undefined ) {

velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );
velocityOutput.setProjectionMatrix( this._originalProjectionMatrix );

} else {

throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );

}

// render sample

renderer.setMRT( currentMRT );
renderer.setMRT( mrt );

renderer.setClearColor( this.clearColor, this.clearAlpha );
renderer.setRenderTarget( this._sampleRenderTarget );
renderer.render( scene, camera );

renderer.setRenderTarget( null );
renderer.setMRT( this._transferMRT );
renderer.setMRT( null );

// every time when the dimensions change we need fresh history data. Copy the sample
// into the history and final render target (no AA happens at that point).
Expand Down Expand Up @@ -313,49 +312,19 @@ class TRAAPassNode extends PassNode {
this._sampleRenderTarget.texture.minFiler = NearestFilter;
this._sampleRenderTarget.texture.magFilter = NearestFilter;

const currentMRT = this.getMRT();

if ( currentMRT === null ) {

throw new Error( 'THREE:TRAAPassNode: Missing MRT configuration.' );
const velocityTarget = this._sampleRenderTarget.texture.clone();
velocityTarget.isRenderTargetTexture = true;
velocityTarget.name = 'velocity';

} else if ( currentMRT.has( 'velocity' ) === false ) {

throw new Error( 'THREE:TRAAPassNode: Missing velocity output in MRT configuration.' );

}

this._texturesIndex = currentMRT.getIndexes( this.renderTarget );

const transferNodes = {};

for ( const name in this._texturesIndex ) {

if ( name === 'output' ) {

transferNodes[ name ] = output;

} else {

const index = this._texturesIndex[ name ];

transferNodes[ name ] = textureLoad( this._sampleRenderTarget.textures[ index ], screenCoordinate );

}

}

this._transferMRT = mrt( transferNodes );
this._sampleRenderTarget.textures.push( velocityTarget ); // for MRT

}

// textures

const velocityIndex = this._texturesIndex[ 'velocity' ];

const historyTexture = texture( this._historyRenderTarget.texture );
const sampleTexture = texture( this._sampleRenderTarget.textures[ 0 ] );
const velocityTexture = texture( this._sampleRenderTarget.textures[ velocityIndex ] );
const velocityTexture = texture( this._sampleRenderTarget.textures[ 1 ] );
const depthTexture = texture( this._sampleRenderTarget.depthTexture );

const resolve = Fn( () => {
Expand Down Expand Up @@ -426,7 +395,7 @@ class TRAAPassNode extends PassNode {

// materials

this._resolveMaterial.colorNode = resolve();
this._resolveMaterial.fragmentNode = resolve();

return super.setup( builder );

Expand Down
27 changes: 0 additions & 27 deletions src/nodes/core/MRTNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,33 +112,6 @@ class MRTNode extends OutputStructNode {

}

/**
* Returns the indexes of the MRT outputs in the current render target.
*
* @param {RenderTarget} renderTarget - The render target to get the indexes for.
* @return {Array<number>} The indexes of the MRT outputs.
*/
getIndexes( renderTarget ) {

const textures = renderTarget.textures;
const indexLib = {};

for ( const name in this.outputNodes ) {

const index = getTextureIndex( textures, name );

if ( index !== - 1 ) {

indexLib[ name ] = index;

}

}

return indexLib;

}

setup( builder ) {

const outputNodes = this.outputNodes;
Expand Down
Loading