GPU 处理不可见的东西吗?

Does the GPU process invisible things?

我正在使用 Unity 5 制作游戏,它类似于我的世界。对于世界渲染,我不知道是否应该销毁我看不到的立方体或让它们不可见。 我的想法是摧毁它们,但每次它们变得可见时创建它们会占用太多处理器能力,所以我正在寻找替代方案,让它们不可见是可行的解决方案吗? 我将同时加载大量立方体,对于那些不熟悉 minecraft 的人,here 是一个屏幕截图,以便您理解。 这只是典型会话中同时呈现的内容的一部分。

与所有图形引擎一样,Unity 可以使 GPU 处理屏幕上不可见的几何图形。试图限制这一点的过程是剔除和深度测试:

  • 视锥体剔除 - 防止渲染完全位于相机查看区域(视锥体)之外的对象。 viewing frustum is defined by the near and far clipping planes and the four planes connecting near and far on each side. This is always on in Unity and is defined by your cameras settings。排除的对象 将不会发送到 GPU
  • 遮挡剔除 - 防止在相机视锥体内但被其他对象完全遮挡的对象被渲染。默认情况下未启用。有关如何启用和配置的信息,请参阅 Unity 手册中的 occlusion culling。被遮挡的对象不会被发送到 GPU
  • 背面剔除 - 防止渲染法线背对相机的多边形。这发生在着色器级别,因此 几何图形由 GPU 处理。大多数着色器都会剔除背面。请参阅 Unity shader docs 中的 Cull 设置。
  • Z-culling/depth testing - 防止看不到多边形,因为多边形距离相机比已经在该帧渲染的不透明几何体更远,从被渲染。只有完全不透明(无透明度)的多边形才会导致这种情况。深度测试也在着色器中完成,因此 几何图形由 GPU 处理。此过程可以通过 Unity shader docs.
  • 中描述的 ZWriteZTest 设置来控制

在相关说明中,如果您使用这么多几何形状相同的块,请确保您使用的是预制件。这允许 Unity 重复使用同一组三角形,而不是在场景中使用 2 x 6 x 数千个三角形,从而减少 GPU 内存负载。

将对象渲染为不可见或销毁它之间的中间立场是保留 C++ 对象,但将其从场景图中分离。

这将为您带来破坏它的所有渲染速度优势,但当需要将其放回原位时,您无需支付娱乐费用,只需将其重新连接到图中的正确位置即可。