更多顶点或更多绘制调用?

时间:2014-03-08 02:48:25

标签: opengl unity3d

我为Unity开发了基于GL的2D UI框架。它瞄准批处理顶点并尽可能少地进行绘制调用。出于某种原因,我正在将路径渲染功能(如moveTo,lineTo,curveTo,.. etc)集成到其上。

路径可以填充,概述或两者兼而有之。 Unity支持QUADS,TRIANGLES,TRIANGLE_STRIP和LINES作为GL开始方法。

由于Unity中缺少线宽设置,LINES不是绘制轮廓的选项。所以,我将使用其他选项之一。我非常熟练,能够处理所有其他选项的顶点,颜色和uv映射的计算。

我的框架基于QUADS,在我阅读有关Unity优化的文章后,我为一次绘制调用限制了900个顶点。可以在https://docs.unity3d.com/Documentation/Manual/DrawCallBatching.html

找到

现在,我的问题是,

如果我使用TRIANGLE_STRIP进行路径绘制,每次完成路径段时都应该调用GL.End。如您所知,这是STRIP的本质。这对于尽可能地使用最小顶点是完美的。不幸的是,这个选项显然会增加绘制调用以达到路径复杂性。

如果我使用QUADS或TRIANGLES,我将能够保持批处理顶点,并且绘制调用的次数将尽可能少。但正如您猜测的那样,该选项将增加顶点数至少4或5次。

所以,我需要你的实验和专业知识。对我来说哪一个是最好的选择?

1 个答案:

答案 0 :(得分:0)

我的经验是,大多数显卡更容忍增加顶点数量和绘制调用次数。

在我的一些测试中(这实际上取决于特定的设置)从~150到约300个绘制调用对最终FPS产生了巨大影响,同时将每帧的顶点数量移动到每帧几百万个几乎没有任何影响。