【问题标题】:iOS (iPhone) High Precision Texture OutputiOS (iPhone) 高精度纹理输出
【发布时间】:2012-01-03 02:18:25
【问题描述】:

我正在尝试从大图像(大约 2048 x 2048)创建亮度值的直方图,我正在关注 this method 在 GPU 上计算直方图。

本质上,它归结为为每个像素创建一个点,并在该点通过顶点着色器进行纹理采样,然后将值 1 /(像素数)输出到一维纹理 (256 x 1)。如果您将混合模式设置为 glBlendFunc(GL_ONE, GL_ONE) 这将意味着您的一维纹理最终会累积有效的直方图。

但是,根据我的经验,当像素数合理时,输出纹理的精度不足以增加 1/像素数。

有没有办法将 iPhone 上的纹理精度提高到可以适应这种精度提高的程度?

【问题讨论】:

  • 我正在研究同样的问题!你能告诉我你是如何用更高精度输出对局部直方图求和的吗?我不太明白论文中的“收集”步骤是如何工作的。如果您能简要介绍一下渲染步骤,我将不胜感激!

标签: ios opengl-es opengl-es-2.0


【解决方案1】:

目前,iOS 上的 OpenGL ES 不支持渲染到精度高于每个颜色通道一个字节的纹理。见render to floating point texture under iOS。您需要将每个 bin 增加 1,这意味着您的着色器将输出 1/256。

为了防止饱和,您似乎可以使用您引用的论文第 2.2 节(“Bin 内容累积的精确考虑”)中描述的技术。也就是在局部直方图中分配像素,最后做一个聚集。

【讨论】:

  • 谢谢泰勒!我正在研究同样的问题——“最后聚集”到底是什么意思?对局部直方图求和的第二个渲染通道如何能够使用更高精度的输出? (假设我们在最终/合并的直方图中仍然需要 256 个 bin)。
  • 没问题!聚集阶段不会使用混合求和,而是会在片段着色器中使用浮点精度求和。因此,如果您渲染到多个局部直方图,该聚集着色器将从它们中的每一个中采样以生成最终的直方图。浮点值可以打包成 RGBA 颜色以避免输出中的精度问题,因为不使用 alpha 混合。
猜你喜欢
  • 2017-10-23
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多