天气纹理模型渲染速度比非纹理模型更快?我认为不是吗? 可能有什么不同,小或太高。
我正在为支持OpenGL的设备创建游戏。我想减少绘制调用和渲染时间。我是否更喜欢非纹理的彩色模型?
答案 0 :(得分:4)
在没有合理的情况下,纹理渲染会更快,而且可能会更慢。这完全取决于你的瓶颈所在。
从根本上说,当您使用纹理时,您的(片段)着色器中会进行纹理采样操作。这些操作通常由具有有限吞吐量的专用硬件单元执行。同样重要的是,他们显然必须访问纹理数据,这很容易成为瓶颈,取决于许多因素:
但一般来说,如果不需要纹理,你就不应该使用纹理。特别是如果着色器很简单,纹理很大,采样的内存带宽很容易成为渲染管道的瓶颈。
事情变得更有趣的是,如果在着色器中使用纹理和更多计算之间存在权衡。例如,对于某些相对复杂的照明方法,您可以选择使用存储在纹理中的预计算结果,或者每次都在着色器中执行完整计算。这些案件需要进行基准测试。现代GPU具有大量的原始马力,执行更多操作可能比纹理访问更有效。
答案 1 :(得分:2)
除非您正在使用 GLSL ,否则从设备的角度来看它是相同的(至少对于现代设备而言)。
粗糙的纹理和无纹理渲染速度之间应该没有区别,必须有足够的纹理单元,gfx可用的内存资源。如果没有,那么纹理会破坏性能。当您使用更大的纹理然后您的gfx可以处理并且必须在共享计算机内存和gfx卡之间交换时会发生这种情况。
影响性能的不是渲染本身,而是gl调用。例如,如果你使用像glTexCoord
这样的旧东西,那么单个调用就是那么慢。如果可以的话,可以使用数组或 VBO / VAO 对象来提高性能极大。
一个常见的初学者错误是在每次使用之前将纹理加载到gfx中而不是将其留在卡片中。我播种了很多次......甚至在我初学的时候我也是这样做的。要激活纹理,只需使用glBind(...)
调用,如果需要,可以设置纹理单元的几个参数,但只需 ONCE 将纹理加载到内存中。
渲染尝试尽可能少地切换纹理时,重要的是,如果可能的话,使用相同的纹理对所有几何进行渲染/分组。为此目的编写了一些 3D 网格文件格式,通常对于整个对象存在单个纹理,因此不需要不必要的纹理上下文切换。这也是为什么纹理地图集更快,回收质量更低的原因。在现代的 OpenGL 中,现在还有无绑定纹理,它可以消除glBind
调用以获得额外内存的纹理id参数。