为简单起见,让我们考虑球体。假设我有一个球体,在执行之前我知道半径、位置和三角形计数。假设三角形数量足够大(例如~50k 三角形)。
事先创建这个球体网格并将所有 50k 三角形流式传输到显卡会更快,还是发送单个点(表示球体的中心)并使用曲面细分和几何着色器构建球体会更快在 GPU 上?
如果我在不同的位置有 100 个这样的球体,它还会更快吗?我可以使用船体/几何着色器来创建可以与实例化结合的东西吗?
为简单起见,让我们考虑球体。假设我有一个球体,在执行之前我知道半径、位置和三角形计数。假设三角形数量足够大(例如~50k 三角形)。
事先创建这个球体网格并将所有 50k 三角形流式传输到显卡会更快,还是发送单个点(表示球体的中心)并使用曲面细分和几何着色器构建球体会更快在 GPU 上?
如果我在不同的位置有 100 个这样的球体,它还会更快吗?我可以使用船体/几何着色器来创建可以与实例化结合的东西吗?
镶嵌当然是有价值的。尤其是与高度图的位移相结合时。您的问题中描述的孤立环境不一定能完全回答您的问题。
在使用曲面细分之前,您需要知道您将成为 CPU 多边形/三角形绑定,因此需要开始使用 GPU 来帮助您增加游戏/场景的整体三角形。GPU 上的计算速度非常快,所以是的,如果你打算这样做的话,建议使用曲面细分多个细分级别……尽管有时我很高兴只从 200 个三平面上细分 3-4 次。
镶嵌主要用于环境/静态网格场景对象,这样您就可以在角色和其他移动/动画模型上花费您的 tri's,而不会受到 CPU 的限制。
Unity3D 和 CryEngine 等检查引擎用于曲面细分示例以帮助学习曲线。
我恰好同时在处理这个问题。
就 FPS 而言,在这种情况下,预先计算的方法会更快,因为您可以转储一个巨大的 50K 三角形球体有效载荷(与任何其他模型一样)并从那里在多个位置绘制它。
镶嵌方法会更慢,因为所有的三角形都是从一个公式生成的,每帧多次。