如果3d表面被另一个3d表面遮挡,这是否会影响性能和渲染速度?

我们有一个3D角色,他的前臂上戴着一副手套,可以打开和closures的可见性。 创建两个版本的arm,一个没有额外的三角形隐藏在手镯下方会更好吗? 或者我们可以只有一个模型作为单独的对象,可以打开和closures?

隐藏的三角形对渲染有什么影响,还是完全被引擎忽略? 更新: PS我们正在使用Unity 3D。

我的答案,就像克罗姆的答案一样,这取决于它。

如果有大片多边形被另一个物体阻挡,挑选完全模糊的物体可能是一个好主意。 假设你正在看一个由两个三角形组成的墙,在它后面有几个由几千个多边形组成的对象。 如果你绘制所有的东西,你会浪费宝贵的GPU时间。 但是通过剔除墙后的对象,可以将数千个多边形的绘制调用变成只有两个多边形的绘制调用。 在这个理论情况下,你可能不会看到性能上的巨大差异,因为几千个多边形对于GPU来说没有任何意义。 但是,当应用到更大的场景时,性能增益会非常显着。

相反的,也许更接近你的情况,当处理less量的多边形被遮盖时,虽然在技术上可以稍微快一点来绘制一个模糊的多边形被删除,增益将是微小的,几乎肯定是看不见的。 另外,你将不得不通过在替代模型中加载来考虑内存增加。 (或者模型,假设你对角色的每个区域都有不同的区域)

具体来说,就你而言,挑选less数多边形不太可能为你做很多事情,但是做一个ABtesting来确定这是否正确是明智的。

一般来说,如果你知道你的对象不会显示,你不应该把它发送到显卡。

在CPU上剔除会消除一些由GPU完成的工作。

对于几个多边形,可以发送它们(就像Krom Stern所建议的那样),但根据我的经验,如果在这里开始做几个多边形,并且在那里只有很less的多边形,那么最终可能无用地向GPU发送多个多边形,将不得不花时间来认识到它不需要工作。

因此,一个好习惯是不要发送它们。

对于一个低多边形纹理模型来说,一般来说,在它手上再多一些三角形不应该是一个问题(性能明智)。 当然,这一切都取决于你的模型的大小,但我猜我们在这里谈论合理的卷。 如果你把手套永久性地固定在手上,并且开启/closures其可见性,那么当不可见时,每一个尊重自己的引擎都不应该把它的三角形发送给GPU(或者对它进行任何处理)。 如果可见的话,那么双手和手套将被发送到GPU(除非手套的大小足以覆盖整个手部,并且手部网格与模型的其余部分是独立的网格并且引擎支持这种剔除)。

所以,是的,这取决于情况,但对于大多数情况下,我可以做的,性能不应该是一个问题。

也就是说,除了performance之外,还应该考虑一些其他的东西。 这些解决scheme的实现简单性和可扩展性。

例如,如果只打一个角色而只有一个手套,则建模者应该相当容易地创建手的两个版本。 这样做的好处是,你将避免潜在的视觉伪影(他们可能发生),它可能是一个更简单的解决scheme(尤其是在你只看到手的FPS情况下)如果你的情况是,你可能有许多不同的字符,可能会穿不同types的战书,你可能需要把东西附在手上(以避免产生无尽的组合)。 如果你已经有办法把东西附在角色的手上(武器,药水),那简单的方法就是用同样的方法把手套附在上面。

只是说…

这取决于。

性能的不同取决于填充率限制,绘制多边形的顺序和早期的Z检验。 例如,如果您的引擎渲染器的填充率受限,并且您从远至近几次绘制累积图层,则每次都会从您的预算中吃掉。 这就是为什么从近处到远处绘制不透明的几何graphics是有益的,所以早期的Z检测可以发生并跳过“昂贵”的重复部分。 它是如何发生在你的确切的引擎,很难说,他们在这样的细节是完全不同的。

现在还有一些更真实的问题可以通过保持模型“清洁”来减轻:

  • Z战斗,如果这些层非常接近彼此
  • 多边形碰撞/穿透,如果这些骨骼与皮肤animation
  • 一致的AO,如果你打算在arm模型中烘烤不同的AO

和缺点:

  • 额外的工作,使现在2个模型,而不是一个
  • 额外的代码path来支持它们的切换
  • 额外的时间加载和内存使用2个模型,而不是一个

回答你原来的问题 – 最好的select是testing和衡量性能差异。 可能它们是微不足道的,相比之下所有其他的游戏,几百个多边形几乎没有任何东西。