OpenGL使用3D纹理时性能不佳
我尝试用OpenGL和光线投射实现一个体积渲染器。一切都很好,但当我从消极的角度看问题时,我会遇到性能问题。这意味着如果我朝正x方向看(查看向量1,0,0),性能就可以了。但是如果我从负x方向看(-1,0,0),帧速率会下降到2-3fps。 我使用3D纹理来保存im数据集的数据。GPU上的纹理缓存是否有问题?或者,当我朝负方向看时,帧速率下降会是什么问题OpenGL使用3D纹理时性能不佳,opengl,glsl,volume-rendering,Opengl,Glsl,Volume Rendering,我尝试用OpenGL和光线投射实现一个体积渲染器。一切都很好,但当我从消极的角度看问题时,我会遇到性能问题。这意味着如果我朝正x方向看(查看向量1,0,0),性能就可以了。但是如果我从负x方向看(-1,0,0),帧速率会下降到2-3fps。 我使用3D纹理来保存im数据集的数据。GPU上的纹理缓存是否有问题?或者,当我朝负方向看时,帧速率下降会是什么问题 如果我能得到一些TIPS,那就太好了。问题是什么。 < P>在这种情况下,有两件事要考虑:< /P> 内存访问模式 及 纹理数据交换
如果我能得到一些TIPS,那就太好了。问题是什么。 < P>在这种情况下,有两件事要考虑:< /P>
- 内存访问模式
- 纹理数据交换
我建议您减小3D纹理的大小。可能是通过3D体积进行光线跟踪的问题。我看不出有什么理由期望这样做很快,因为你可能会对每个片段进行几十次纹理访问。我知道我对每个片段进行了很多纹理访问,我已经实现了一些优化功能。当光线具有正方向时,我的光线投射速度很快。所以GPU可以处理这么多的内存访问。我已经将Mig和Mag过滤器设置为GL_NEAREST,性能会稍微好一点,但并不完美。将3D纹理更改为纹理缓冲区对象是否会更有效?我认为纹理数据交换不是问题所在。我分析了渲染期间GPU的内存,加载纹理后有足够的可用内存。我认为内存访问模式可能是正确的想法。我可以用OpenGL更改或影响内存访问模式吗?我找不到任何关于它的信息。@user1844213:你对此无能为力。帧缓冲区上的片段被GPU/驱动程序组合硬编码或硬连线处理的顺序,在光线投射器中,只需选择处理光线的方向。某些直接体渲染样式可以前后处理并提前终止(每光线),而其他样式只能前后处理,并且必须在体积内处理整个范围。您可以获得更快的GPU;)射线子采样也会产生很大的影响;它是我遇到性能问题时打开的一个“旋钮”。