gpt4 book ai didi

opengl - 使用 OpenGL/GLSL 的 HDR Bloom 效果渲染管线

转载 作者:行者123 更新时间:2023-12-04 12:53:26 31 4
gpt4 key购买 nike

我已经使用 OpenGL 和 GLSL 集成了bloom HDR 渲染......至少我认为!我不太确定结果。

我遵循了英特尔网站上的教程:

https://software.intel.com/en-us/articles/compute-shader-hdr-and-bloom

关于高斯模糊效果,我严格遵循以下网站上有关性能的所有建议:
https://software.intel.com/en-us/blogs/2014/07/15/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms

根据第一个网站:

“然后将亮通输出缩小一半 4 倍。每个缩小的亮通输出都使用可分离的高斯滤波器进行模糊处理,然后添加到下一个更高分辨率的亮通输出中。最终输出是 1/4 大小的布隆。在色调映射之前采样并添加到 HDR 输出中。”

这是布隆管道(上面的图片来自 NSight NVIDIA Debugger)。

在我的测试中窗口的分辨率是 1024x720(为了这个算法的需要,这个分辨率将缩小 4 倍)。

第1步:

光照 channel ( Material channel +阴影 mask channel +天空盒 channel 的混合):

enter image description here

第2步:

将高光信息提取到明亮 channel 中(准确地说,生成了 4 个 mipmaps 纹理(“然后将明亮 channel 输出缩小一半 4 倍”-> 1/2、1/4、1/8 和最后 1/2 )):

enter image description here

第 3 步:

“每个缩小的亮通输出都用可分离的高斯滤波器模糊,然后添加到下一个更高分辨率的亮通输出中。”

我想准确地说双线性过滤是启用的 (GL_LINEAR) 并且上面图片上的 pexilization 是将纹理调整到 NSight 调试器窗口 (1024x720) 上的结果。

a) 分辨率 1/16x1/16 (64x45)

“1/16x1/16 模糊输出”

enter image description here

b) 分辨率 1/8x1/8 (128x90)

“1/8x1/8 缩小的明亮 channel ,结合 1/16x1/16 的模糊输出”

enter image description here

“1/8x1/8 模糊输出”

enter image description here

c) 分辨率 1/4x1/4 (256x180)

“1/4x1/4 缩小的明亮 channel ,结合 1/8x1/8 的模糊输出”

enter image description here

“1/4x1/4 模糊输出”

enter image description here

d) 分辨率 1/2x1/2 (512x360)

“1/2x1/2 缩小的明亮 channel ,结合 1/4x1/4 的模糊输出”

enter image description here

“1/2x1/2 模糊输出”

enter image description here

为了达到所需的 mipmap 级别,我使用 FBO 调整大小(但也许使用在初始化时已经调整大小的单独 FBO 会更聪明,而不是多次调整相同的大小。你怎么看这个想法?)。

第四步:

色调映射渲染 channel :

enter image description here

在此之前,我想对我的工作提出外部建议。正确与否?我不太确定特别是关于第 3 步(缩小和模糊部分)的结果。

我觉得模糊效果不是很明显!但是我使用了一个 35x35 的卷积核(我认为就足够了:))。

但我真的对 pdf 上的一篇文章很感兴趣。这是布隆管道的演示(演示与我应用的演示非常相同)。

enter image description here

关联:

https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCMQFjAA&url=https%3A%2F%2Ftransporter-game.googlecode.com%2Ffiles%2FRealtimeHDRImageBasedLighting.pdf&ei=buBhVcLmA8jaUYiSgLgK&usg=AFQjCNFfbP9L7iEiGT6gQNW6dB2JFVcTmA&bvm=bv.93990622,d.d24

正如你在图片上看到的那样,模糊流血效果比我的强得多!你认为作者使用了几个卷积核(更高分辨率)?

我不明白的第一件事是高斯模糊算法如何使第三张图片上的其他颜色与白色(灰度值)不同。我非常仔细地(高变焦)观察明亮的图片(第二张),所有像素似乎都接近白色或白色(灰度)。有一件事是肯定的:明亮的纹理上没有蓝色或橙色像素。那么我们如何解释从图 2 到图 3 的这种转变呢?这对我来说很奇怪。

我不明白的第二件事是图片3、4、5和6之间的模糊渗色效果差异很大!在我的演示中,我使用了 35x35 卷积核,最终结果接近这里的第三张图。

您如何解释这种差异?

PS:请注意,我使用 GL_HALF_FLOAT 和 GL_RGBA16F 像素内部格式来初始化布隆渲染 channel 纹理(所有其他渲染 channel 都初始化为 GL_RGBA 和 GL_FLOAT 数据类型)。

我的程序有问题吗?

非常感谢您的帮助!

最佳答案

模糊的小分辨率纹理似乎不够模糊。我认为过滤器的宽度(不是样本数,而是样本之间的距离)或帧缓冲区大小存在问题。

假设您有 150x150 的原始 fbo,这是一个 15x15 缩小版的布隆。并且您使用 15x15 模糊滤镜。

模糊的高分辨率版本会影响明亮部分周围的 7px 笔划。
但是在模糊低分辨率图像时,内核的宽度实际上会影响整个图像区域。在低分辨率下,7px 笔画意味着 - 整个图像区域。因此,模糊低分辨率版本中的所有像素都会对最终合成图像产生一些影响。因此,高分辨率模糊图像会对明亮部分周围的 7px 笔划产生模糊,而低分辨率模糊图像会在整个图像区域产生相当大的差异。

你的低分辨率图像看起来不太模糊,因为它们的贡献仍然保持在明亮部分周围 35/2px 的范围内,这是错误的。

我希望我设法解释出了什么问题。究竟要改变什么,可能是视口(viewport)大小,同时模糊低分辨率图像,但我不能 100% 确定。

关于opengl - 使用 OpenGL/GLSL 的 HDR Bloom 效果渲染管线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419153/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com