Як вимкнути світло в Unity3D?


9

По-перше, я володію Unity Pro.

Я шукав оклюзійні світильники, коли їх деякий час не оглядають, щоб поліпшити продуктивність. Основними методами, з якими я натрапив, були використання BecameVisible () та тестування камери фрустуму.

Моя основна проблема полягала в тому, що якщо гравець переглядає ділянку, яка буде освітлена світлом, я все одно хочу, щоб світло було увімкнено.

В даний час я використовую метод, який перевіряє, чи знаходиться освітлене місце у камері, але проблема полягає в тому, що іноді вогні знаходяться у фрустумі, але насправді не видно гравцем (наприклад, стіна між ними та програвачем). Я спробував передати їм радіопередачу, але ви ніколи не можете отримати достатньо детальної інформації про фактично освітлену область (найкраще, що я міг зрозуміти, було використовувати renderer.bounds.extent і renderer.bounds.center для обчислення максимальної освітленої точки від світла).

Хтось знає про простий спосіб в Unity Pro прикурити світло? Або ви могли б сказати мені хороший спосіб використовувати той метод опори камери, про який я говорив?


1
Ви можете перевірити, чи перетинаються камери та ліхтарі, але я думаю, що це вже робить єдність.
Архів

1
У Unity Pro OcclusionCulling теж повинен керувати світлами.
Архів

Гаразд, мій художник сказав, що Окклюзія Кулінг не працюватиме на світло. Тож я, мабуть, просто встановив свої різні джерела світла як оклюзії в областях оклюзії, які я вже створив?
Тімоті Вільямс

І щось на кшталт перевірки камери та легкого фрустуму проти інших може працювати, хоча мені потрібно, щоб вона працювала в 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 рази більше, ніж у фокусі камери, щоб світло не вимикалося, коли вони освітлюють ділянки в межах зору камери. Якщо ви вирішите додати цю додаткову оптимізацію (яка, мабуть, не буде необхідною), переконайтеся, що ви використовуєте відстань як широку фазу, оскільки це набагато дешевше.


Приємно і просто :)
Ḟḹáḿíṅḡ Ⱬỏḿƀíé
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.