localId
localId
在计算着色器中,为工作组(Workgroup)内的每一次调用(线程)提供一个唯一的、从 (0,0,0) 开始的三维整数坐标,解决了并行计算中“我是谁”的核心问题。
核心优势
作为数据并行处理的基石,它使得成百上千的线程能够区分彼此,从而被分配去处理大型数据集(如纹理、缓冲区)中不同的部分,是实现 GPU 通用计算(GPGPU)的关键。
常见用途
作为计算全局坐标(globalId)的基础,用于程序化纹理生成。
作为数组索引,用于访问和更新粒子系统或大型缓冲区中的特定元素。
在图像处理(如卷积)中,作为局部偏移量,用于在高速共享内存中协同访问邻域数据。
作为三维局部坐标,用于读取或修改体素(Voxel)网格中的数据。
如何调整
localId 是一个由 GPU 提供的只读内置变量,其值无法直接调整。但可以通过将其值进行可视化来理解其效果:将 localId 除以工作组大小进行归一化,并作为颜色输出。这将在每个工作组内形成一个从黑到亮的颜色渐变,清晰地展示出局部坐标系。
代码示例
1const normalizedId = localId.xy.div( workgroupSize );
2const color = vec3( normalizedId.x, normalizedId.y, 0 ); // 将局部坐标可视化为颜色