subgroupMax
subgroupMax
对当前 GPU 子组内所有活跃调用的输入 e 执行“最大值”归约,并将结果广播返回给该子组。别名/同义:Subgroup Max、Wave Max、Warp Max(概念同义;TSL API 名称固定为 subgroupMax)。
核心优势
硬件子组级归约,吞吐高、开销低;无需显式循环、共享内存或屏障即可得到一致的组内最大值。
常见用途
子组内一致化判定(阈值/门控)
基于波前/warp 的条带或量化高光效果
快速获取局部最大亮度/强度作为混合或阈值因子
在片元或计算阶段做局部“最大响应”驱动
如何调整
仅接收一个标量输入 e(源码中通过 setParameterLength(1) 约束)。输出在同一子组内为常量,适合驱动 mix/step/阈值等节点。仅在后端支持“子组”功能时有效(如 WebGPU 启用 'subgroups',或具备相应 GL 扩展);在不支持的平台需准备降级路径(如直接使用 e 或改用更粗粒度的最大值)。若需对向量取最大值,请先提取或归并为标量后再传入。
代码示例
1<mesh>
2 <sphereGeometry args={[0.6, 128, 128]} />
3 {/* 子组最大值:使同一子组内的像素共享同一高光权重 */}
4 <meshStandardNodeMaterial
5 colorNode={
6 mix(
7 color(0x2e8b57),
8 color(0xffc107),
9 subgroupMax(
10 clamp( dot( normalWorld, vec3(0.5, 0.8, 0.2) ), 0.0, 1.0 )
11 )
12 )
13 }
14 roughness={0.35}
15 metalness={0.0}
16 />
17</mesh>