【问题标题】:Efficient downsampling for post-processing effects in opengl 3.3opengl 3.3中后处理效果的高效下采样
【发布时间】:2013-04-29 11:48:46
【问题描述】:

我理解绽放/发光效果背后的想法:我们对纹理进行下采样以保持卷积核较小。现在我正在尝试实现它,我不太确定我应该走哪条路。

我的第一个想法是使用glGenerateMipMap 进行下采样。但是,我不能告诉它在 4 个步骤之后停止。这对我来说有点像黑匣子,据我所知,它可能会生成 10 张图像来对我的屏幕从 1024*768 到 1*1 进行采样。也许最后这些步骤很便宜,因为一切都已经那么小了,但也许它们不是。

我搜索了一下,发现很多人都在依赖 FBO,而不是 glGenerateMipMap。我熟悉 FBO,因为我使用延迟照明。我的第二个想法是简单地使用线性采样器将“四边形”渲染为更小的纹理。我会连续四次这样做,每次将宽度和高度减半。但是,我发现some people preferred 使用他们自己的片段着色器进行下采样而不是依赖GL_LINEAR,我想知道为什么;也许它更快?

有什么方法可以连续 4 次快速对全屏纹理进行下采样,同时保留每个版本?我不需要花哨的边缘保持采样算法,因为无论如何我都会模糊一切。

【问题讨论】:

    标签: opengl opengl-3


    【解决方案1】:

    我们对纹理进行下采样以保持卷积核较小。

    或者您只需首先以较小的分辨率渲染绽放/发光层。这样既节省了填充率,您也不必事后缩小。

    我的第二个想法是简单地将带有线性采样器的“四边形”渲染为更小的纹理。

    这并不是对所有内容进行下采样。它是采样点之间的线性插值,可能会产生伪影。

    【讨论】:

    • "bloom/glow 层" 这假设那里有一个“层”,而不仅仅是您渲染的 HDR 图像,您希望将bloom应用于.
    • 确实,我没有用于发光位的图层,只有一张 HDR 图像。渲染成更小的纹理应该会出现什么样的伪影?
    • @Niriel:如果采样数据包含的频率高于子采样频率的一半,则会出现典型的伪影。这就是您首先应用模糊内核的原因:它充当低通滤波器,因此二次采样不会产生莫尔条纹伪影或混叠(信号理论意义上的混叠,而不是“块状边缘”意义上的混叠,尽管在数学上这两种效果都是相关)。
    • 呃,当然!我脑子坏掉了。这正是我们使用 mipmap 的原因,我已经习惯了它们,我几乎忘记了平均不是线性采样器的一部分。我很高兴你让我的大脑回到正轨。那么,如果我调用glTexParameter(GL_TEXTURE_MAX_LEVEL) 获得4 个级别,然后生成mipmap,我会得到我想要的4 个图像吗?
    • @Niriel:确实是这样。您可以使用纹理级别参数控制 glGenerateMimap 创建的级别。
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多