You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shader Graph中实现像素最大通道置1其余置0的最优方案问询

Shader Graph实现单通道最大化(最大通道设1,其余设0)

需求说明

需要对纹理的每个像素执行操作:将数值最大的通道设为1,其余通道设为0,示例如下:

通道格式输入值输出值
RGBA(0.5, 0.3, 0.4, 0.3)(1, 0, 0, 0)
RGBA(0, 0.8, 0.9, 1)(0, 0, 0, 1)

最优节点实现方案

你的思路本身已经非常高效,在Shader Graph里可以用最少节点完成,甚至还能进一步精简:

核心实现步骤(仅3个节点)

  1. 采样纹理:用Texture 2D节点获取目标纹理的RGBA向量输出。
  2. 取通道最大值:将纹理输出接入Component Max节点,得到所有通道的最大值m。这个节点能直接对向量的所有分量取最大值,不用拆分通道,节省操作。
  3. 批量比较赋值:用Vector Greater Than Or Equal节点,一端输入纹理的RGBA向量,另一端输入由m复制四次组成的向量(可以用Vector Constructor节点快速生成(m, m, m, m))。该节点会对每个通道逐一比较,输出的向量中,等于最大值的通道为1,其余为0。

替代简化方式

如果不想用Vector Constructor,也可以直接用Step节点:把m作为Step节点的Edge输入,纹理RGBA向量作为In输入,Step节点会直接对每个分量执行c_i >= m ? 1 : 0的操作,一步得到结果,节点数量更少。

说明

  • 以上两种方式的节点数量都控制在3个以内,性能开销极低,是Shader Graph里的最优实现。
  • 如题目假设,若存在多通道数值相同的情况,结果无需保证唯一性,该实现完全符合要求。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:10:28