所有像素的高效像素着色器总和

时间:2010-05-31 14:53:27

标签: c# wpf hlsl pixels pixel-shader

如何使用HSLS像素着色器有效地计算图像中所有像素的总和?我对Pixel Shader 2.0感兴趣,我可以调用它作为WPF着色器效果。

3 个答案:

答案 0 :(得分:6)

有一个更简单的解决方案,不使用着色器:将图像加载为纹理,创建一个mipmap链并读回最后一个mipmap(1x1像素)的值。这个技巧在游戏中广泛用于计算,例如,场景的平均亮度(为了应用HDR色调映射)。如果你重视简单性和效率而不是准确性,这是一个很好的技巧。

答案 1 :(得分:3)

假设您要在图像中求和r / g / b通道值(并假设您可以销毁原始像素) - 这是我的部分解决方案:

  1. 每个第10个像素将计算10个相邻像素的平均颜色,并将此平均颜色放在图像上。
  2. 然后在每个第10个像素的CPU端和
    Pix_Value*10
  3. 在这种情况下,与仅在CPU端汇总像素值相比,我们可以获得大约10倍的加速。

答案 2 :(得分:-1)

WPF中的效果更适合产生视觉效果。听起来你想要将它们用于不同类型的计算,为此你需要将图像结果视为数据,这需要RenderTargetBitmap,无论如何都要在软件中完成。 您可能希望查看为GPGPU设计的这些项目。

Accelerator

Brahma

OpenTK我不知道OpenTK中OpenCL绑定的状态。其他技术如DirectCompute和CUDA也值得一看。