Unity 6.3
0 онлайн 102 гостей 3 в системе
Вход
Освещение Шаг 72 из 173

Загрузка световых зондов в нескольких сценах

Unity обновляет данные Светового Пробела по-разному в зависимости от того, как вы загружаете или выгружаете Сцены.

Unity использует LightProbes C# объект для хранения данных Light Probe для всех загруженных сцен. LightProbes объект содержит внутреннюю структуру данных — тетраэдральную тесселяцию. Unity использует её в расчётах, определяя, как Light Probe освещают GameObject.

При загрузке или разгрузке Scene, Unity автоматически обновляет объект LightProbes, чтобы содержать позиции и коэффициенты всех Световых Проб во всех загруженных сценах. Однако, обновляет ли Unity тетраэдральное тесселляционное изображение зависит от того, как вы загружаете или разгружаете Scene.

Когда вы загружаете Scene с LoadSceneMode.Single, Unity автоматически обновляет тетраэдрическую тесселяцию как часть процесса загрузки, потому что новые данные светового зонда полностью заменяют предыдущие данные светового зонда.

Когда вы загружаете Scene с LoadSceneMode.Additive, или выгружаете Scene с UnloadSceneAsync, Unity не обновляет автоматически тетраэдральное тесселляционное изображение, потому что новые или удаленные данные светового зонда должны быть пересчитаны — что является вычислительно дорогостоящей операцией, и могут быть последующие сцены для загрузки или выгрузки после этой операции.

Поэтому Unity предоставляет вам событие needsRetetrahedralization, которое позволяет вам решать, когда рететраэдрировать новые данные светового зонда. Например, если вы добавочно загружаете пять новых сцен, вы не хотите рететраэдрировать данные пять раз, один раз после загрузки каждой сцены. Вместо этого вы хотите рететраедрировать данные только после того, как все пять сцен загружены и все новые данные светового зонда готовы.

Если Unity выполняет расчеты с использованием устаревшей тетраэдрической тесселляции, результаты не учитывают никаких вновь загруженных или разгруженных Световых зондов. Это означает, что Световые зонды могут не освещать GameObjects, как ожидалось, и вызовы LightProbes.CalculateInterpolatedLightAndOcclusionProbes() или LightProbes.GetInterpolatedProbe() могут возвращать неожиданные результаты.

Чтобы заставить Unity обновить тетраэдрическую тесселяцию, вы можете вызвать LightProbes.Tetrahedralize или LightProbes.TetrahedralizeAsync(). Эти функции заставляют Unity обновить тетраэдрическую тесселяцию данными из всех Световых Проб для всех загруженных Сцен.

Обновление тетраэдральной тесселляции является CPU-интенсивным, и воздействие CPU увеличивается с количеством Световых Проб. Если вы загружаете и выгружаете несколько Сцен, и вы испытываете воздействие на производительность от обновления тетраэдральной тесселляции, то, возможно, выгодно отложить обновление до загрузки или выгрузки определенного количества контента или до того времени, когда воздействие CPU не будет влиять на производительность вашего приложения.