gpt4 book ai didi

opengl - 大型模型上的每个顶点着色与每个片段着色

转载 作者:行者123 更新时间:2023-12-04 18:43:32 24 4
gpt4 key购买 nike

我是 GLSL 的新手,正在编写一个小应用程序,该应用程序将显示 3d 模型并有一些用户输入来旋转、缩放等。模型相当大(例如 600 万个顶点,1500 万个面)。现在,我正在使用逐顶点着色,并且在我的个人电脑上性能还可以。但我可能需要使用更大的模型(有 10-1500 万个顶点)。

我的问题与 per-vertex 和 per-fragment 着色之间的性能比较有关。从严重的资源以及搜索网络,我得出的结论是,每个片段着色具有更好的输出,尤其是对于镜面高光,但其性能较低,因为它对多边形的每个像素而不是每个顶点进行计算(如每个顶点着色)。

也许我的想法完全错误,但是如果顶点数很大,我是否应该期望每个片段着色运行得更快,例如在我的情况下(6-1000 万个顶点)?每个片段着色的性能是否取决于绘制到屏幕的像素数,而每个顶点着色则不是?

最佳答案

片段着色的性能取决于在屏幕上绘制的片段数量,包括那些因某些三角形与其他三角形重叠而发生过度绘制而被绘制两次或更频繁的片段。
Z 缓冲可以以某种方式减少过度绘制,但并不完美。延迟(或轻预 channel )着色在相对便宜的 Z channel 期间可能仍然存在 overdraw ,但或多或​​少使实际着色部分与屏幕面积严格成比例,而不管某些三角形是否重叠(或其中有多少个)。

顶点着色(以及后续阶段)的性能主要取决于顶点的数量(以及一些其他细节,如果您有几何着色器或曲面分割着色器处于事件状态)。通常,现在大多数应用程序不受顶点处理的限制。像这样的数百万个顶点通常不是问题(当然,不绘制看不见的东西总是更好)。
然而,随着三角形变小(接近 2x2 片段四边形的大小),更高的顶点数会导致额外的片段着色工作(当然还有组装/光栅化工作和 ROP),但没有任何改进的视觉质量,有时甚至由于时间混叠而质量较差。
这与实际处理的顶点数量没有太大关系,而是与单个三角形的屏幕面积变小有关。

因此,您应该有一个 LOD(细节级别)系统,以确保没有太多太小的三角形(例如在远处的特征上),如果这些大模型是建筑物或类似的,您可以考虑使用门户系统剪掉对可见结果没有贡献的整个几何层次结构。

关于opengl - 大型模型上的每个顶点着色与每个片段着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com