3

在现代硬件上绘制具有完整三角形 (GL_TRIANGLES) 的场景而不是仅绘制顶点 (GL_POINTS) 在性能上是否有任何差异?

GL_POINTS 的初始化如下:

glPointSize(1.0);
glDisable(GL_POINT_SMOOTH);

我有一个有点低端的显卡(9600gt),只绘制顶点可以在某些场景上带来 2 倍的 fps 增加。不确定它是否也适用于更新的 gpus。

4

2 回答 2

3

2x fps 增加

您丢失了 98% 的图片,并且仅获得了 2 倍的 fps 提升。这并不令人印象深刻。如果您考虑到您应该能够在任何体面的硬件上轻松渲染 300..500 fps(禁用 vsync 和少量优化),那可能不值得。

在现代硬件上绘制具有完整三角形 (GL_TRIANGLES) 的场景而不是仅绘制顶点 (GL_POINTS) 在性能上是否有任何差异?

好吧,如果你的场景有很多 alpha 混合和非常“重”的像素着色器,那么显然,将场景显示为点云会加快速度,因为要填充的像素更少。

另一方面,这种“优化”对于任何实际任务来说都是毫无用处的。我的意思是,如果您使用混合和着色器,您可能首先不想将场景显示为点列表,除非您正在执行某种调试渲染(使用glPolygonMode),并且在调试渲染的情况下,您可能会关闭着色器(因为很难看到阴影/照明点)并禁用照明。

即使您将点精灵用作粒子或其他东西,我也会坚持使用三角形 - 它们提供更多控制并且没有最大尺寸限制(与点精灵相比)。

我可以显示更多对象吗?

如果您想要更多对象,您可能应该首先尝试在其他地方进行优化。如果您停止尝试绘制不可见的对象(视野之外等),那将是一个可以提高性能的开始。

你有一个离相机很远的网格。100 万个三角形,你知道它总是在视野中。在这个密度比下,三角形不能大于一个像素,

当三角形小于一个像素并且有很多三角形时,您的网格开始看起来像垃圾并变成像素化的点混乱。会很丑。与禁用 mippimapping 和纹理过滤器然后渲染棋盘图案时的效果大致相同。使用点而不是三角形甚至可能会加剧效果。

:如果您有始终可见的 1 百万三角形网格,则您已经需要不同类型的优化。减少三角形的数量(细节层次、动态镶嵌或一些可以即时简化几何的解决方案),使用凹凸贴图(可能是视差贴图)来模拟甚至不在这里的额外几何细节,甚至将其变成静态背景或精灵。这样会好很多。尝试使用点来渲染它只会让它看起来很丑。

于 2013-08-16T15:03:49.293 回答
1

不,如果在两种模式下三角形的数量与其共享顶点的数量相似(考虑到正在使用的 glDrawElements 渲染命令),则渲染管道的几何部分将以大致相同的速度进行评估。您可以从绘制 GL_POINTS 中获得的唯一好处仅取决于您从不绘制面中获得的空白屏幕空间的百分比,因此仅在片段着色器级别。

于 2013-08-16T18:10:25.563 回答