Как корректно запечь свет для почти статической сцены?

Общие вопросы о Unity3D

Как корректно запечь свет для почти статической сцены?

Сообщение Shock 10 окт 2016, 18:25

Подскажите, пожалуйста. Допустим, у нас есть здание с видом сбоку, как последние X-Com, This War Of Mine, Fallout Shelter.

Изображение

У нас есть множество комнат, которые сами по себе статичны, но появляются в сцене не из редактора, а по вводу пользователя. Скажем, комнат может быть видно 40 штук, в каждой из них 5-10 точечных источников света. Допустим, у нас нету двигающихся объектов и мы можем запечь тени. Но свет хотим оставить для корректной работы Specular (камера относительно комнат двигается).

Тени лучше запекать в 3dmax или можно это сделать средствами Unity? Можете дать ссылку на статью о корректном способе?
Если мы отключим тени, то как ограничить влияние источников света на другие комнаты? У нас стоит рядом две комнаты, в одной зеленое освещение, во второй красное, как сделать, чтобы освещение "не покидало" предел комнаты? При этом по соседству может быть две одинаковые комнаты.

Целевая платформа - PC.
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

Re: Как корректно запечь свет для почти статической сцены?

Сообщение jetyb 11 окт 2016, 10:01

Запекать комнаты в отдельных сценах.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как корректно запечь свет для почти статической сцены?

Сообщение Shock 11 окт 2016, 20:48

Звучит как то, что мне идеально подходит, но как их потом в конечную сцену импортировать объект с запеченым светом?
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

Re: Как корректно запечь свет для почти статической сцены?

Сообщение ikhtd 12 окт 2016, 17:20

Можно делать лайтмапы в юнити. Кажись Windows-Lighting меню. Также есть функция загрузить новую сцену, при этом не удаляя старую. типа load add scene

У нас стоит рядом две комнаты, в одной зеленое освещение, во второй красное, как сделать, чтобы освещение "не покидало" предел комнаты?

мне кажется point light через стены не проходит.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как корректно запечь свет для почти статической сцены?

Сообщение Shock 12 окт 2016, 21:32

Через стены точечный свет не проходит если включены тени. А т.к. комнат у меня видно десятки и в каждой есть много источников, то это будет сильно тормозить, потому тени и хочу запечь.

Когда я импорчу сцену, то она будто мерджится с текущей, при этом корректно запеченный в сцене с комнатой свет в сцене-игре почему-то не отображается. Более того, я не совсем понимаю, как импортировать объект-сцену динамически скриптом? Вот создает пользователь одну-вторую-третью столовую. Как инстанциировать сцену с этой столовой с запеченным светом?
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

Re: Как корректно запечь свет для почти статической сцены?

Сообщение Shock 12 окт 2016, 23:28

Вот я создаю отдельную сцену для комнаты, запекаю свет, выключаю источники, чтобы поверить, что он точно запечен:

Изображение

Потом экспортирую сцену как пакет со всем содержимым:

Изображение

И когда в отдельном проекте импортирую пакет, то запеченого света нету:

Изображение

Более того, сцену нельзя использовать, чтоб инстанциировать ее со скрипта, а в префабе тоже слетает лайтмап
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

Re: Как корректно запечь свет для почти статической сцены?

Сообщение immeasurability 14 окт 2016, 18:37

если я не туплю, то помойму раньше можно было в тестуры запеченный свет сохранить и использовать как хочется Оо
сейчас смотрю и получается что запеченный свет работает только с теми объектами которые были сделаны на данной сцене, как так?

как вариант проще вообще запекать освещение в 3д программах, в основную текстуру и не парится, но возможно все таки это как то можно сделать в юнити
Discord era#6140

youtube.com/user/immeasurability/videos
Аватара пользователя
immeasurability
Адепт
 
Сообщения: 1097
Зарегистрирован: 08 авг 2013, 18:09

Re: Как корректно запечь свет для почти статической сцены?

Сообщение ikhtd 14 окт 2016, 18:47

https://docs.unity3d.com/ScriptReferenc ... itive.html

а лайтмапы это не свет, это только текстуры. когда загружаешь целую сцену текстуры сохраняются. а вот на префабе конечно нельзя сохранить лайтмапы. это так - чтобы в максе не запекать. конечно можно и в максе запечь.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как корректно запечь свет для почти статической сцены?

Сообщение jetyb 14 окт 2016, 21:26

https://docs.unity3d.com/ScriptReferenc ... tings.html
https://docs.unity3d.com/ScriptReferenc ... pData.html
https://docs.unity3d.com/ScriptReferenc ... Index.html

Текстуры лайтмэпов вроде хранятся в папке рядом со сценой.
Запечь текстуры, запомнить их а потом вручную их назначить для объектов на общей сцене.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как корректно запечь свет для почти статической сцены?

Сообщение Shock 15 окт 2016, 22:52

как вариант проще вообще запекать освещение в 3д программах, в основную текстуру и не парится, но возможно все таки это как то можно сделать в юнити

В Diffuse не получится - все таки мне нужны еще корректные отражения

Application.LoadLevelAdditive

Загружается без лайтмапов(

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

Когда загружаю Аддитивно сцену, то ЛайтМапа слетает "The loaded level has a different lightmaps mode than the current one. Current: 1. Loaded: 2. Will use: 1."
Почему "конечно"? Мне как раз кажется, что раз это просто текстуры, то должно как-то сохраняться в префабе и оно. Разве не для такого нужен префаб?

Текстуры лайтмэпов вроде хранятся в папке рядом со сценой.

Да, есть такие.

Запечь текстуры, запомнить их а потом вручную их назначить для объектов на общей сцене.

Я не совсем понимаю, как использовать то, что вы дали. Совет звучит довольно реалистично, но пока реализация ускользает от меня.
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22

Re: Как корректно запечь свет для почти статической сцены?

Сообщение ikhtd 15 окт 2016, 23:27

лайтмапы должны быть бейкнуты на всех сценах. только бейкнутые лайтмапы сохранятся на добавочной сцене. они бейкаются там где то по пол часа - в том же меню windows- Lighting. бейкнутые и без CG. кеш CG отключать и вобще бейкать самым простым способом. рефлекшн и даже риалтайм тени не оставлять на сцене.

Пробуй вот такие настройки Lighting.
ИзображениеИзображение
То есть риалтайм GI обязательно отключить. И потом если что то пойдет не так, можно еще
General GI заменить на non Directional - это будет самый простой вариант лайтмап. И на самый крайний случай поменять все материалы сцены со Standard 5-рочных на Legacy со старой версии 4-ки
И еще, когда к примеру импортируешь бейкнутую сцену с лайтмапами в новый проект, то вначале подожди какое то время, чтобы оно пересчитало свет на сцене в новом проекте.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как корректно запечь свет для почти статической сцены?

Сообщение jetyb 17 окт 2016, 09:06

Запечь текстуры, запомнить их а потом вручную их назначить для объектов на общей сцене.

Я не совсем понимаю, как использовать то, что вы дали. Совет звучит довольно реалистично, но пока реализация ускользает от меня.

Чего непонятного? Есть общий класс LightmapSettings, хранящий массив всех лайтмэпов. У каждого Renderer есть lighmapIndex - индекс лайтмэпы элемента в этом массиве, по индексу и определяется лайтмэпа объекта.

Если запечь освещение в сценах-комнатах, то там автоматически настроятся эти данные. Остается собрать из них общую базу лайтмэпов и переназначить индексы элементов всех комнат в общей сцене.
Делается это скриптом через API, немного напрячь мозг придется, но ничего сложного тут нет.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Как корректно запечь свет для почти статической сцены?

Сообщение Shock 18 окт 2016, 04:42

Огромное спасибо, кажется, получилось. Думаю, окончательной точкой был совет:
То есть риалтайм GI обязательно отключить.


Правда, потом нельзя двигать статит обьекты, но решилось отключением статика после запекания света. Как результат - сцена со Спекуляром, корректным запеченным освещением и единого активного источника

Изображение

Комнаты двух цветов - две разных сцены, которые экспортировались в сцену-цель и располагались динамически скриптом.

Еще раз огромное спасибо всем, вы мне очень помогли.
Последний раз редактировалось Shock 19 окт 2016, 02:30, всего редактировалось 1 раз.
Аватара пользователя
Shock
UNIт
 
Сообщения: 77
Зарегистрирован: 10 окт 2016, 18:22


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11