0

I try to implement a Volume Renderer with OpenGL and ray casting. Everything works well but I get a performance problem when I look in a negative direction. This means if I look in positive x direction (viewing vector 1, 0, 0) is the performance ok. But if I look in negative x direction (-1, 0, 0) the framerate goes down to 2-3 fps. I use a 3D texture to hold the data of im dataset. Is there maybe a problem with the caching of the texture on the GPU? Or what could be the problem that the framerate goes down, when I look in a negative direction?

It would be great if I get some tipps, what the problem could be.

4

1 回答 1

1

在这种情况下需要考虑两件事:

  • 内存访问模式

  • 纹理数据交换

GPU 的性能受到从内存访问数据的寻址模式的强烈影响。光线投射器将其光线从视图的前部投射到后部(或以相反的方向,取决于实现和内部混合模式),因此根据您从哪一侧查看 3D 纹理,您会获得完全不同的访问模式。这会产生非常大的影响。

3D 纹理会消耗大量内存。OpenGL 使用抽象内存模型,其中对纹理等对象的大小没有明确的限制。加载它们是否有效。如果驱动程序可以管理它,您可以加载大于适合 GPU 内存的纹理。实际上,GPU 内存是缓存用于 OpenGL 数据。如果您的 3D 纹理恰好大于可用的 GPU 内存,则 OpenGL 实现会在渲染时访问纹理数据。如果您的访问模式很幸运,这种交换处理非常适合“间隙”,并且可以在需要之前将纹理数据流式传输到缓存(我的意思是 GPU 内存),而不会停止渲染过程。然而,不同的访问模式(其他视图)不能很好地用于按需交换数据,从而破坏性能。

我建议您减小 3D 纹理的大小。

于 2013-05-29T09:52:01.630 回答