所以我有一个游戏,我试图通过使用硬件功能来缩小纹理的尺寸以使它们模糊而伪装其中的光晕。

我希望使用的纹理位于渲染缓冲区中屏幕的大小是多少(不是2的幂)?

创建这些较低分辨率的最快方法是什么?
欺骗该软件制作微型地图?
另一个fbo在较小的尺寸上渲染纹理?

#1 楼

我认为渲染到降采样的FBO比生成Mipmap快得多。 glGenerateMipmap将生成完整的mipmap金字塔,这似乎很浪费:

https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenerateMipmap.xml

此外,只有OpenGL ES 3.0允许您在纹理化时手动选择mip级别:

https://www.khronos.org/opengles/sdk/docs/man3/html/textureLod.xhtml

从艺术上讲,这可能无法为您提供所需的外观。以我的经验,简单地进行下采样会产生颗粒感。我建议也进行一对一维模糊处理,如GPU Gems中的本文所述:

http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch21。 html

评论


$ \ begingroup $
哇!最后一个链接当场!事情看起来很好。但是,因为我是glsl程序员,所以他们拥有的代码对我来说毫无意义。值得庆幸的是,我在某个地方找到了两个密码。
$ \ endgroup $
–J.Doe
16年5月23日在6:44

$ \ begingroup $
以下是我的困惑,您究竟如何增加/减小模糊的大小?增加每个样本有多少个纹​​理像素,或者增加采样的纹理像素数量?并且您是否看到了基于辉光半径在for循环中执行此操作的任何良好代码?
$ \ endgroup $
–J.Doe
16年5月23日在6:46

$ \ begingroup $
“我认为渲染到降采样的FBO比生成mipmap快得多。glGenerateMipmap将生成完整的mipmap金字塔,这似乎很浪费:”当然,这可能取决于是否有自定义硬件?同样,考虑到整个MIP映射链在原始图像上的开销为33%,但第一个MIP映射级别为该开销的25%,其余部分的存储空间仅为8%。
$ \ endgroup $
–西蒙F
16年5月23日在12:13

$ \ begingroup $
好的,我在那儿讲得太宽泛了。在某些系统上,生成链的速度可能更快。
$ \ endgroup $
–user3412
16年5月24日在3:43

$ \ begingroup $
要增加模糊的大小,请增加采样像素的数量。看到这里的7x7模糊效果:software.intel.com/zh-CN/blogs/2014/07/15/…
$ \ endgroup $
–user3412
16年5月24日在3:48