gpt4 book ai didi

c# - 如何使对象/层忽略附近的裁剪平面?

转载 作者:行者123 更新时间:2023-11-29 19:21:09 24 4
gpt4 key购买 nike

我正在为 Google Daydream 开发游戏,那里使用的相机真的很令人困惑 - 当场景开始时,它们的所有参数都设置为相同的值。最初我遇到了进一步的对象网格相互剪裁的问题。我发现解决这个问题的方法是将 nearClippingPlane 设置为更高的值。这导致了下一个问题,即由于 nearClippingPlane 距离太远,我的飞船驾驶舱没有完全渲染。我试图创建另一个只渲染驾驶舱的相机,但由于我之前提到的,它不起作用(相机表现得很奇怪),当我通过脚本设置它时,它也无法正常工作。

因此,我需要更改对象的某些属性,而不是相机。我找到了 this但它只适用于 farClippingPlane(否则就完美了)。你知道如何在不添加第二个相机的情况下忽略一个对象/图层的 nearClippingPlane 吗?

最佳答案

关于进一步的对象网格裁剪,这可能是由于 z-fighting 造成的:https://en.wikipedia.org/wiki/Z-fighting

请注意,默认情况下,Unity 中的 Daydream 将使用 16 位深度缓冲区。这可以通过播放器设置 -> 其他设置 -> 虚拟现实 SDK -> Daydream 访问。

切换到 32 位深度缓冲区可能允许您使用较小的 nearClippingPlane 值渲染驾驶舱中的对象和远处的对象。然而,这主要是一种缓解措施,您可能仍会遇到裁剪问题,尽管问题要小得多。此外,这样做还会对性能产生影响,因为您将深度缓冲区使用的内存和带宽加倍。

您应该能够像您尝试的那样使用多个摄像头。创建一个“Cockpit”和“Environment”相机,驾驶舱相机使用相机的 Depth 属性进行渲染。这将首先渲染环境,您可以忽略驾驶舱内的所有对象。这样做的好处是您可以将近平面推出很远。

接下来,将驾驶舱摄像机设置为仅清晰深度。您可以将驾驶舱摄像机设置为仅包含可能位于驾驶舱内的物体。现在渲染器将保留环境,但允许您使用两个不同的深度范围。请注意,这对移动设备也有性能影响,因为多个渲染过程会导致额外的内存传输,并且您还需要在渲染过程中清除深度缓冲区。

您可能需要考虑为您的对象创建单独的图层,例如“驾驶舱”和“环境”,以防止事物被渲染两次。

Sample scene with two cameras, note the difference in near/far values

关于c# - 如何使对象/层忽略附近的裁剪平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com