如何在Unity3D中遮挡灯光?


9

首先,我拥有Unity Pro。

我一直在寻找遮挡灯光的方法,现在已经有一段时间没有出现了,以提高性能。我遇到的主要方法是使用BecameVisible()并测试相机的视锥。

我的主要问题是,如果玩家正在观看一个被灯光照亮的区域,我仍然希望该灯点亮。

目前,我正在使用一种方法来检查照明区域是否在相机的视锥中,但是问题是有时视锥中的光没有被玩家实际看到(例如,玩家与玩家之间的墙)。我已经尝试过对它们进行光线投射,但是对于实际的照明区域,您永远无法获得足够的详细信息(我能想到的最好的方法是使用renderer.bounds.extent和renderer.bounds.center来计算灯光的最大照明点)。

有谁知道Unity Pro中遮挡灯光的简单方法吗?还是您能告诉我一种使用我正在谈论的相机支点方法的好方法?


1
您可以检查相机的视锥与光线的视锥是否相交,但我希望已经这样做了。
Archy

1
在Unity Pro中,OcclusionCulling也应该处理灯光。
Archy

好吧,我的画家说遮挡剔除不适用于灯光。因此,我可能只是将各种光源设置为已经设置的遮挡区域中的遮挡物?
蒂莫西·威廉姆斯

尽管我需要将其在360度范围内工作,但诸如检查相机和使视锥光锥彼此抵触之类的工作仍可能起作用。
蒂莫西·威廉姆斯

尽管我和艺术家都做了尝试,但遮挡剔除似乎不适用于灯光。我到底会怎样遮挡灯光?
蒂莫西·威廉姆斯

Answers:


1

您可以编写自己的脚本来遮挡灯光。像这样附在主相机上的东西:

List<Light> Lights = new List<Light>();
const float OccludeDist = 100;
void Update()
{
    foreach (Light light in Lights)
    {
        if ((transform.position - light.transform.position).sqrMagnitude > OccludeDist * OccludeDist))
        {
            light.enabled = false;
        }
        else{
            light.enabled = true;
        }
    }
}

您还可以检查该点是否在相机的Y轴上的角度内(其他轴只会给您带来痛苦)。角度要大一些,可能是相机的平截头角的2倍,这样当它们照亮相机视图中的区域时,灯光就不会关闭。如果您选择添加此其他优化(可能没有必要),请确保将距离用作最重要的阶段,因为它的成本要低得多。


尼斯和简单:)
火焰山Ⱬỏḿƀíé
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.