# TSL + MRT: Per-attachment blend functions?

**URL:** https://discourse.threejs.org/t/tsl-mrt-per-attachment-blend-functions/87783
**Category:** Questions
**Tags:** webgpu, tsl
**Created:** [October 28, 2025, 8:58pm UTC](https://discourse.threejs.org/t/tsl-mrt-per-attachment-blend-functions/87783 "2025-10-28T20:58:04Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![Adam\_Bodnar](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/adam_bodnar/32/64207_2.png) [@Adam\_Bodnar](https://discourse.threejs.org/u/Adam_Bodnar)
#### Post date: [October 28, 2025, 8:58pm UTC](https://discourse.threejs.org/t/tsl-mrt-per-attachment-blend-functions/87783/1 "2025-10-28T20:58:04Z")

</div>

Hi, I’m trying to do some advanced post processing that depends on rendering out “metadata“ to multiple color attachments. The most efficient way to accomplish my goals would be to configure different blending functions for each color attachment. (e.g. i might want an object to be visible in one attachment but not another). At a glance, none of the renderers, render targets, node materials, nor TSL’s `pass` or `mrt` nodes appear to support this.

Is this something the maintainers would be open to supporting? It’s something I’m willing to explore implementing. (Do all features need to be back-ported to WebGL?)

Naively, configuration via the `mrt` constructor as an optional second parameter that configures blend functions/modes seems like the most obvious API. Though, it’s not clear how this should interact with blending that is configured on each material.

---

<div class="post-metadata">

### Author: ![Mugen87](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mugen87/32/5645_2.png) [@Mugen87](https://discourse.threejs.org/u/Mugen87)
#### Post date: [April 11, 2026, 10:42am UTC](https://discourse.threejs.org/t/tsl-mrt-per-attachment-blend-functions/87783/3 "2026-04-11T10:42:52Z")

</div>

Per-attachment blend functions are supported since `r183`:

> <https://github.com/mrdoob/three.js/pull/32636>
>
> Related issue: https://github.com/mrdoob/three.js/issues/32570
> 
> \*\*Description\*…\*
> 
> The PR adds blending per attachment, which can be useful for custom applications; 
> 
> The bloom\_emissive example has been updated to support transparency using the new approach.
> 
> It's likely we'll use bloom\_emissive for something that utilizes HDR output; there are still points for visual customization, such as the relationship between the bloom's glow and the object's color, increasing the glow while preserving color nuance. The current example makes things more customizable, which is also a positive thing not only for this but for other things. 
> 
> \`\`\`js
> const mrtNode = mrt( {
> output: output,
> emissive: vec4( emissive, output.a )
> } );
> 
> mrtNode.setBlendMode( 'emissive', new THREE.BlendMode( THREE.NormalBlending ) );
> 
> scenePass.setMRT( mrtNode );
> \`\`\`
