【问题标题】:Does the GPU process invisible things?GPU会处理看不见的东西吗?
【发布时间】:2015-04-05 14:10:58
【问题描述】:

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

【问题讨论】:

  • Minecraft 不会渲染被其他方块遮挡的面 - 当世界无法正确渲染区块时,您有时会看到这一点(您可以看到区块内部的洞,例如洞穴和熔岩湖但其余部分是不可见的)。您需要确保不会渲染被遮挡的面部,否则您将无缘无故地花费大量时间进行渲染。 Unity 可能会执行背面剔除,这意味着背对相机的面不会被渲染,但是当您使用多个立方体时,它可能无法理解如何剔除几何体。
  • 我也不确定您在 Unity 中对渲染器的控制程度 - 您可能需要编写一个插件(我没有使用它,所以我不知道)
  • 感谢@Charleh 的回答,我已经知道你说了什么,这正是我的问题,如果我应该销毁它们,我应该使用哪种方法来避免渲染玩家看不到的块或使它们不可见。

标签: performance unity3d gpu


【解决方案1】:

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

  • 平截头体剔除 - 防止完全超出相机观察区域(平截头体)的对象被渲染。 viewing frustum 由近端和远端剪裁平面以及在每侧连接近端和远端的四个平面定义。这在 Unity 中始终处于启用状态,由您的 cameras settings 定义。排除的对象不会被发送到 GPU
  • 遮挡剔除 - 防止在相机视锥内但被其他对象完全遮挡的对象被渲染。默认情况下未启用。有关如何启用和配置的信息,请参阅 Unity 手册中的 occlusion culling。被遮挡的对象不会被发送到 GPU
  • 背面剔除 - 防止渲染法线背对相机的多边形。这发生在着色器级别,因此几何图形由 GPU 处理。大多数着色器都会剔除背面。请参阅Unity shader docs 中的Cull 设置。
  • Z 剔除/深度测试 - 防止由于距离相机比已在此帧渲染的不透明几何体更远而无法看到的多边形被渲染。只有完全不透明(不透明)的多边形会导致这种情况。深度测试也在着色器中完成,因此几何图形由 GPU 处理。此过程可以通过Unity shader docs 中描述的ZWriteZTest 设置来控制。

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

【讨论】:

  • 感谢您的回复,但它没有回答我的问题。不过确实有帮助,非常感谢您的提示。
  • 好吧,如果你使用遮挡剔除几乎可以解决隐藏立方体的渲染负载。使用预制件通过为每个立方体重复使用相同的多边形来解决内存使用问题(我假设您有一组可以在不同颜色的块上重复使用的材料)。也许我不太了解您的要求……您还有什么其他顾虑或目标?
  • 此外,如果您想尝试自己的方法,或补充内置的遮挡剔除,您可以在空间上将您的世界细分为四叉树(2d 网格)或八叉树(3d 网格)并放置每个叶节点(包含所有环境立方体)在层次结构中的单个父游戏对象中。然后定期运行您自己的计算以确定哪些树节点被隐藏(被遮挡或在摄像机视图后面)并停用父游戏对象......然后它们将不会尝试渲染并且脚本将不会运行。
  • 您的回答确实解决了我的问题,对此我非常感谢。尽管如此,它并没有回答我特别提出的问题,即“GPU 会处理不可见的东西吗?”这只是为了解决您关于我为什么没有将您标记为正确答案的问题的回复。如果我有足够的声誉,我仍然会投票给你:C
  • 我不认为 Unity 的遮挡剔除在这里会有用,因为它需要与场景一起烘焙,所以不会覆盖以编程方式放置的对象(我的世界)
【解决方案2】:

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

这将为您提供销毁它的所有渲染速度优势,但当需要将其放回原处时,您无需支付娱乐费用,只需将其重新附加到图表中的正确位置即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2014-09-28
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多