【问题标题】:Recommendations for clipping an entire scene in Unity在 Unity 中裁剪整个场景的建议
【发布时间】:2019-08-25 17:43:39
【问题描述】:

我正在寻找将整个统一场景剪辑到一组 4 个平面的方法。这适用于 AR 游戏,我希望能够放大地形,但仍然只占用桌子上给定的空间(即:不延伸到桌子的边缘)。

到目前为止,我已经根据需要对地形和水效果进行了裁剪:

上面显示了一个更大的地形被裁剪到桌子的大小。其他场景对象没有被剪裁,因为它们使用未修改的标准着色器。

这是一张在编辑器中显示地形裁剪的图片。 您可以看到地形可见部分周围的剪裁平面,并且其他对象(树木等)没有被剪裁并出现在桌子边缘之外。

我完成它的方式涉及向每个着色器添加参数以定义剪切平面。这意味着自定义我想要剪辑的每个着色器,这在我只考虑地形时很好。

虽然这可行,但我不确定它是否适合数百个场景对象。我需要修改我正在使用的任何着色器,然后我必须为每个对象在每次更新时设置额外的着色器参数。

我不是 Unity 方面的专家,我想知道是否还有其他不基于“每个着色器”的方法可供我研究?

最终目标是在某个平面的范围内渲染场景。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    一种简单的方法是使用 Box Colliders 作为飞机两侧的触发器。然后,您可以使用 OnTriggerEnter/OnTriggerStay 关闭停留在触发器中的对象的渲染器,并使用 OnTriggerExit 打开它们。

    您也可以使用Bounds.Contains

    【讨论】:

    • 嗯!!好点子。甚至没有想到这一点。它们会出现/消失,但我想如果我愿意的话,我也可以根据盒子体积重叠来淡化它们。这对树木很有用,但对于像大型基地这样的东西来说可能不太好。谢谢!仍然有兴趣知道是否还有其他方法:)
    • 根据您的相机设置,您可以使用相机剪辑平面或某种形式的遮挡剔除。除此之外,我想不出另一种不涉及着色器的方法。
    • Dave,你知道有什么技术可以很好地使用最终的相机缓冲区,而不是每个项目上的单独着色器吗?也许我实际上需要尝试单独的方法并测试性能差异 - 除了维护噩梦(必须自定义着色器)它可能会起作用。
    • 你也许可以用相机着色器/相机效果来做,但我不擅长用着色器告诉你具体怎么做,对不起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2020-10-11
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多