Unity3Dでライトを遮る方法は?


9

まず、私はUnity Proを所有しています。

パフォーマンスを改善するために、ライトがしばらく表示されていないときにライトを遮ることを検討してきました。私が遭遇した主なメソッドは、BecameVisible()を使用してカメラ錐台をテストすることでした。

私の主な問題は、プレーヤーがライトで照らされるエリアを表示している場合でも、ライトをオンにしたいということでした。

現在、照明領域がカメラの錐台にあるかどうかを確認する方法を使用していますが、問題は、プレーヤーが実際には見えない(例:それらとプレーヤーの間の壁)照明が錐台にあることです。私はそれらにレイキャスティングを試みましたが、実際の照明領域の詳細を十分に得ることはできません(レンダラー。バウンド.extentとrenderer.bounds.centerを使用して、ライトからの最大照明点を計算するのが最善でした)。

Unity Proでライトを遮る簡単な方法を知っている人はいますか?または、私が話していたカメラの支点方式を使用する良い方法を教えていただけませんか?


1
カメラ錐台と照明錐台が交差するかどうかを確認できますが、Unityはすでにこれを実行していると思います。
Archy

1
Unity Proでは、OcclusionCullingもライトを処理する必要があります。
Archy 2013

私のアーティストは、オクルージョンカリングはライトでは機能しないと言っていました。だから私はおそらく、すでに設定したオクルージョン領域にオクルーディーとしてさまざまな光源を設定するだけでしょうか?
ティモシーウィリアムズ

そして、カメラと光錐台をお互いにチェックするようなものも機能するかもしれませんが、360度で機能する必要があります。
ティモシーウィリアムズ

アーティストと私が何を試しても、オクルージョンカリングはライトでは機能しないようです。どのくらい正確に光を遮りますか?
ティモシーウィリアムズ

回答:


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倍にします。この追加の最適化を追加することを選択した場合(おそらく必要ではないでしょう)、コストがはるかに低いため、距離をブロードフェーズとして使用してください。


ニースとシンプルな:)
燃えるⱫỏḿƀíé
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.