0

我最近在 OpenGL 中使用 3d 纹理。我意识到,当您使用 3d 纹理时,您必须大量使用 texture3d()。这几乎是一个gpu杀手。glsl 中是否有任何功能可以让我对 3d 纹理的 VOLUME 进行采样?因此,我可以执行以下操作,而不是调用 texture3D() 32768 次:

texture3DVolume(3dtexture, vec3(0.5, 0.5, 0.5), vec3(0.2, 0.2, 0.2));

其中样品0.5 0.5 0.5,体积0.2 0.2 0.2。

4

1 回答 1

0

否:正如您自己注意到的那样,这将涉及对所有音量进行采样。

在 2D 中,您可以使用总面积表。它使您能够计算只有 4 个样本的“盒子”内矩阵的所有值的总和;我猜这个概念很容易扩展到 3D。

请注意,您将有一个非常昂贵的预处理步骤;你只能有平均值和总和,没有其他花哨的东西,比如几何平均值或中位数。

以下是 AMD 对不同用例的一些解释:http: //developer.amd.com/media/gpu_assets/GDC2005_SATEnvironmentReflections.pdf

我想你也可以使用 mipmaps :对 2x2x2 体积进行采样,对第一个 mipmap 进行采样……但这对于任意采样位置来说是开箱即用的。

于 2012-09-27T08:09:47.307 回答