setup( builder ) {

		const textureNode = this.textureNode;
		const textureNodeOld = this.textureNodeOld;

		//

		textureNodeOld.uvNode = textureNode.uvNode || uv();

		const afterImg = Fn( () => {

			const texelOld = textureNodeOld.sample().toVar();
			const texelNew = textureNode.sample().toVar();

			const threshold = float( 0.1 ).toConst();

			// m acts as a mask. It's 1 if the previous pixel was "bright enough" (above the threshold) and 0 if it wasn't.
			const m = max( sign( texelOld.sub( threshold ) ), 0.0 );

			// This is where the after-image fades:
			//
			// - If m is 0, texelOld is multiplied by 0, effectively clearing the after-image for that pixel.
			// - If m is 1, texelOld is multiplied by "damp". Since "damp" is between 0 and 1, this reduces the color value of
			// texelOld, making it darker and causing it to fade.
			texelOld.mulAssign( this.damp.mul( m ) );

			return max( texelNew, texelOld );

		} );

		//

		const materialComposed = this._materialComposed || ( this._materialComposed = new NodeMaterial() );
		materialComposed.name = 'AfterImage';
		materialComposed.fragmentNode = afterImg();
		//

		const properties = builder.getNodeProperties( this );
		properties.textureNode = textureNode;

		//

		return this._textureNode;

	}
This method is used to setup the effect's TSL code.

@param {NodeBuilder} builder - The current node builder.
@return {PassTextureNode}