Unity3D'deki ışıklar nasıl kapatılır?


9

Öncelikle Unity Pro'ya sahibim.

Performansı artırmak için bir süredir görülmediklerinde ışıkları tıkamak için bakıyorum. İçinde koştuğum ana yöntemler BecameVisible () kullanmak ve kamera frustumunu test etmekti.

Benim asıl sorun, eğer oyuncu ışıkla aydınlatılacak bir alanı görüntülüyorsa, hala ışığın yanmasını istiyorum.

Şu anda aydınlatılmış alanın kamera frustumunda olup olmadığını kontrol eden bir yöntem kullanıyorum, ancak sorun bazen ışıklar oyuncu tarafından görünmeden (örneğin, onlar ve oyuncu arasındaki bir duvar) frustumda. Onlara tekrar denedim ama gerçek aydınlatılmış alan için yeterince ayrıntılı olamazsınız (en iyi şekil ışıktan maksimum yanan noktaları hesaplamak için renderer.bounds.extent ve renderer.bounds.center kullanıyordu).

Unity Pro'da ışıkları kapatmak için kolay bir yol bilen var mı? Ya da bahsettiğim kamera dayanak yöntemini kullanmanın iyi bir yolunu söyleyebilir misiniz?


1
Kamera frustum ve ışıklar frustum'un kesişip kesişmediğini kontrol edebilirsiniz, ancak birlik zaten bunu yapıyor.
Archy

1
Unity Pro'da, OcclusionCulling ışıkları da işlemelidir .
Archy

Pekala, sanatçı Occlusion Culling'in ışıklar için işe yaramayacağını söylemişti. Bu yüzden, muhtemelen şimdiye kadar kurduğum tıkanıklık alanlarında çeşitli ışık kaynaklarımı tıkayıcı olarak ayarladım?
Timothy Williams

360 derecelik bir şekilde çalışmam gerekse de, kamerayı ve diğerlerine karşı hafif frustum'u kontrol etmek gibi bir şey işe yarayabilir.
Timothy Williams

Oklüzyon ayıklama, sanatçının ve benim denediklerimize rağmen ışıklarla çalışmıyor gibi görünüyor. Bir ışığı tam olarak nasıl tıkarım?
Timothy Williams

Yanıtlar:


1

Işıkları kapatmak için kendi komut dosyanızı yazabilirsiniz. Ana kameraya bağlı böyle bir şey:

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;
        }
    }
}

Ayrıca noktanın kameranın Y ekseninde bir açı içinde olup olmadığını da kontrol edebilirsiniz (diğer eksenler size sadece acı verir). Açı ile biraz cömert olun, belki kameranın hayal kırıklığının 2 katı, böylece kamera görünümündeki alanları aydınlatırken ışıklar kapanmaz. Bu ek optimizasyonu (muhtemelen gerekli olmayacak) eklemeyi seçerseniz, mesafeyi geniş faz olarak kullandığınızdan emin olun çünkü çok daha az maliyetli olur.


Nice and simple :)
Junáḿíṅḡ Ⱬỏḿƀíé
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.