OpenGL - 高比例值表现差劣

6
我正在观察我的OpenGL程序,它是用C#/OpenTK/core-profile编写的。当使用大约1M个顶点的高度图显示曼德博集数据时,性能取决于视图矩阵的比例值(它是正交的,所以我需要缩放)。数据使用VBO进行渲染。渲染过程包括光照和阴影映射。我的猜测是着色器在低比例值时会出现某些“错误”,因此需要一些错误处理。有什么提示可以给我吗?
示例:

也许你应该在游戏开发网站上发布这个问题,以获得最好的回答。我并不是说这个网站上没有热情的程序员可以帮助你,只是也许你会有更好的成功机会。值得一提的是:我记得有这样一句话:最好将所有的世界对象放在一个[2 x 2 x 2]的盒子里。也就是说,任何维度上的最低坐标应为-1,最高坐标应为1,以获得最佳结果。那应该是你的“对流层”。你可以把天空盒(如果有的话)放在那个“对流层”之外。 - Eduard Dumitru
这可能是一个原因。这些值的范围在0到1024之间,所以我会调整它们的大小并再次尝试。 有没有可能将问题移动到游戏开发中? - freakinpenguin
我想这可能会有所帮助:什么是迁移,它是如何工作的?。由于我还没有达到3000分,因此我无权执行迁移操作。不过,也许目标站点已经有了这样的问题,请先查找一下。 - Eduard Dumitru
感谢提供链接,但不幸的是,游戏开发不在迁移列表中。我创建了一个“其他”标记,希望管理员能够帮助解决。 - freakinpenguin
最后,您可以在那里重新阐述您的问题并在此处删除它。 - Eduard Dumitru
1
对我来说完全合理。随着几何图形覆盖的屏幕空间越大,超绘制变得更加昂贵。你尝试过深度优先预处理吗?我保证,如果你用一些简单的东西替换你的片段着色器,比如gl_FragColor = gl_FragCoord;,你的帧率会飙升(当然,它看起来也会非常奇怪,但那是另外一回事了)。当更多的几何图形覆盖屏幕时,你的片段着色器就会变得更加昂贵(更多的覆盖面积-->更多的采样片段)。早期深度测试可以在一定程度上缓解这个问题。 - Andon M. Coleman
1个回答

15

这并不是什么不寻常的事情。在较低的比例尺下,您的网格不会覆盖屏幕的大部分区域,因此不会产生太多的片段。在更大的比例尺下,整个屏幕都被您的网格覆盖,更糟糕的是,过度绘制成为一个巨大的因素。

在这种情况下,您受到片段限制,减少片段着色器的复杂性应该有所帮助,并且进行Z预处理以减少过度绘制也会有所帮助。


1
这在我的脑海中是有意义的;-) 说实话,我认为片段着色器会被同样频繁地调用;无论视图矩阵的比例因子如何。 - freakinpenguin
2
不,绝对不是这样的。如果片段着色器以相等的频率运行,无论屏幕上的点有多小,它都会消除很多混叠现象,但我们必须重新思考片段的真正含义。实际上,片段只是帧缓冲区中像素的构建块,因此某个对象生成的片段数量与其在屏幕空间中覆盖的像素数量成比例 :) - Andon M. Coleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接