opengl - GL_POINTS 在现代硬件上的性能

标签 opengl 3d gpu

在现代硬件上,使用完整三角形 (GL_TRIANGLES) 绘制场景与仅绘制顶点 (GL_POINTS) 在性能上有什么不同吗?

GL_POINTS 的初始化方式如下:

glPointSize(1.0);
glDisable(GL_POINT_SMOOTH);

我有一个有点低端的显卡 (9600gt) 并且仅绘制顶点可以在某些场景中将 fps 提高 2 倍。不确定它是否也适用于更新的 GPU。

最佳答案

2x fps increase on

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

Is there any difference in performance between drawing a scene with full triangles (GL_TRIANGLES) instead of just drawing their vertices (GL_POINTS), on modern hardware?

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

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

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

I can display more objects?

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

you have a mesh which is very far away from the camera. 1 million triangles and you know it is always in view. At this density ratio, triangles can't be bigger than a pixel,

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

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

关于opengl - GL_POINTS 在现代硬件上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275075/

相关文章:

python - Tensorflow 如何使用我的 GPU?

performance - 我的 Theano 程序真的在使用 GPU 吗?

opengl - 是否可以将着色器变量声明为输入和输出?

c++ - 带交错缓冲区的 OpenGL glMultiDrawElementsIndirect

C++ OpenGL 照明只照亮某些墙壁

graphics - 为什么单个深度缓冲区足以满足这个 vulkan 交换链渲染循环?

programming-languages - 计算机图形 : Raytracing and Programming 3D Renders

java - 创建一个 List<Point3D> ,添加点并使用 glDrawArrays 进行绘制

3d - x264/ffmpeg 中的 h.264 MVC 3D 支持

cuda - 一维纹理内存限制