-1

我在 Unity 中遇到了一个问题,由于阴影投射,它阻止它在自上而下或等距视图中剔除相机外对象。

定向光是对角线的,因此在光线来自的方向上相机视图之外的任何物体都可能在相机视图中投射阴影。现在,实际上,几乎所有这些对象只会将它们的阴影投射到远低于地面的摄像机视图内,因此它们并不需要被渲染。然而,Unity 并不知道这一点,它无论如何都会渲染它们的阴影,从而显着降低性能。

在此处输入图像描述

我尝试通过遮挡剔除来解决这个问题。我在地面创建了一个巨大的平面,将其标记为静态,并为该对象烘焙了遮挡剔除,这样地下的任何东西都不会被渲染。不幸的是,这无济于事,所有那些其阴影可能进入地面下方相机视图的对象仍在渲染中。

另一种可能的解决方案是限制为每个对象生成阴影的范围。这些物体中的许多都非常低并且总是在地面上,所以我知道它们的阴影不可能超过 1-2 米。但是我找不到定义这样一个值的方法,以便统一可以使用它进行剔除。

关于如何克服这个问题的任何其他想法?

注意:整个场景是程序生成的,所以我不能使用静态遮挡剔除,除了地面本身。

4

1 回答 1

0

也许有关剔除过程的信息将帮助您了解您需要做什么:

  1. 当一个对象离开截锥体时,Unity立即剔除它,仍然存在的剩余 tris 立即属于阴影。
  2. 当一个物体离开平截头体时,它仍然会投射阴影。在内部,Unity 将对象投射阴影模式转换为“仅阴影”。这意味着对象本身被剔除,而不是阴影。
  3. 离开截锥体时,阴影不会立即被剔除,它们使用相机的视野、远剪切平面和定向光四元数的组合来确定何时剔除它们
  4. 没有镶嵌的巨大物体也会破坏遮挡
  5. 这都是编辑器明智的,构建通常会表现出完全不同的行为。

反过来,减少阴影级联、阴影距离、角度较小的定向光、相机透视和远剪辑平面都将有助于剔除过程和\或减少阴影的 tris 计数。

顺便说一句,遮挡剔除是一个有效的解决方案,如果不熟悉系统,它就不太容易使用。

于 2021-02-08T13:00:52.883 回答