模糊立方图像

6
有什么办法可以实现吗?现在我有一个动态生成的立方体贴图,我将其用作圆环上的反射纹理。
分别模糊每个面不会奏效,对吧?因为靠近边缘的像素不会从它们的邻居中获得模糊影响。
也许我应该再创建一个FBO,在其中绑定“展开”立方体贴图到屏幕上,应用基本的模糊着色器,然后将该模糊纹理分成6个面?不确定如何进行“分离”部分。
1个回答

6

模糊立方贴图?那非常困难。

要进行数学上正确的高斯模糊,您需要将其转换到频域(球面谐波),在那里应用低通滤波器,然后执行反向变换。这不是一项简单的任务。

如果近似足够,可以按照以下步骤操作。

  1. Create an empty destination cubemap.
  2. For each face F of your cube, render the face F and the neighboring pixels from the other 4 faces like this:

     ___________
    |\         /|
    | \       / |
    |  \-----/  |
    |  |     |  |
    |  |  F  |  |
    |  |     |  |
    |  /-----\  |
    | /       \ |
    |/_________\|
    

    The amount of neighboring pixels depends on blur radius.

  3. Apply your favorite blur algorithm.
  4. Copy F to the destination cubemap.
  5. Repeat 2-4 for each face.

1
哇...我明白这可能是为了实现“球形正确”的结果,但它是否真的可以与在“平面”立方体贴图上进行简单高斯模糊并计算接缝处相邻像素的特殊情况区分开来呢? - Kos
1
@Kos:第二个建议不是球形正确的,它会在面的中间更模糊。此外,这是处理接缝处相邻像素的最简单方法。 - Yakov Galka
我理解这并不正确。我的问题是,“它是否在视觉上看起来不正确”?例如,Phong-Blinn镜面光照模型并不“正确”,但仍然很好看。 - Kos
你可以使用自适应模糊核,该核朝角落方向变大。或者更好的方法是,将模糊核制作成当前处理像素在立方体贴图面上高斯分布圆盘的投影。 - datenwolf
@datenwolf为什么不把这个放到答案里呢? - Felix K.
1
@FelixK.:因为我的个人标准要求实际提供实现。而且根据立方体贴图的大小,基于FFT的方法可能会更高效(有CUDA和OpenCL FFT实现可供使用)。 - datenwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接