- PVSM.RU - https://www.pvsm.ru -
Совсем недавно вышел Unity 5, в котором куча всего нового и непонятного, а документацию сотворить пока еще не успели.
В силу своей работы технических художником мастером на все руки, мне пришлось бросить все и срочно сделать UP проекта на Unity 5. Не так давно Apple обязала разработчиков создавать 64-битные приложения.
Открыв проект в новой версии, вы увидите… ничего, ну или почти ничего. Unity 5 не понимает старые шейдеры с альфой и просто заливает их черным или белым, кто как писал.
Старый Beast ушел в историю и свет придется перепекать.
Ниже вся собранная информация по вопросу: перевод мануала и туториала с офф.сайта Unity3D, и кое-какие заметки (по настройкам) от меня.
Посвящается всем перешедшим на Unity 5.
Полезные ссылки:
Почему ваши старые и самописные шейдеры не работают [1];
Официальный туториал по шейдерам [2].
Описание
Новый стандартный Unity Shader для каждой платформы собирается отдельно, то есть не используемые поля не идут в итоговый шейдер. Оптимизация шейдера производится по целевой платформе, когда стандартный шейдер билдится, происходит 2 важные вещи:
Параметры стандартного шейдера разделены на три раздела:

Rendering mode — режим визуализации (прозрачный, полупрозрачный, просто текстура или цвет).
Main Maps — группа свойств описывающая главную текстуру и ее свойства.
Для свойства Albedo, Metallic и Emission — текстура является опцией и НЕ обязательна.
Для свойства Albedo и Emission — можно задать цвет, но для Emission цвет задать нельзя при scale равном нулю.
Secondary Maps — группа свойств, описывающая вторую текстуру, накладываемую на главную.
Пример использования показан на ткани с узором, где Main Maps имеет цвет и текстуру, в Secondary Maps накладывает узор, типа вышивки, и его текстуру.
Я нашла некоторую документацию по GI, но каких-то рабочих настроек там не присутствовало. Поэтому я перевела то, что мне удалось найти и попробовала разные настройки запечения. Все настройки получены эксперементальным путем и чтением мануалов [3] с офф.сайта, блога и форума [4].
Для меня было полезно скачать проект деревня викингов [5].
На данный момент я работаю над полноценным 3D проектом, но для планшетов. У меня статические тени, лайтпробы и источник света, тип света Directional, а настройки запечения Mixed.
Первый сюрприз, у вас на в LocalSettings сидит 10Гб кэш. Посмотреть на это безобразие можно меню Edit -> Preferece…

Самостоятельно он не удаляется, надо чистить руками.
О первом бэйке:
У меня система на SSD 256Гб, поэтому я перенесла кэш на обычный хард, честно говоря разницы в скорости бэйка я не заметила, а там генерируется достаточно много текстур. Первый бэйк сцены на 100к поликов, при полностью дефолтных настройках, сгенерил 200 карт (light+dir) общим весом 1Гб (процесс шел на i7-4770, оперативы 32 гига и 24/7 часов). Естественно все это коту под хвост.
Сейчас Unity использует технологию Enlighten глобального освещения в реальном времени (GI).
Использует динамический GI для прямого освещения и теней, они рассчитываются в реальном времени используя GPU (графический процессор) устройства.
Real-time GI необходимо предварительно рассчитать, при этом вы не получите Lightmap, как это было в Beast, скорее всего получится LightmapSnapshot. Эта штука много весит поскольку содержит слепок ваших Lightmap. В билд этот LightmapSnapshot попадет уже в другом размере, что там происходит я не знаю.
По понятным причинам я не могу показать проект, над которым работаю, поэтому использую проект с деревней, далее Window -> Lighting, вкладка Scene.
Сразу оговорюсь, что эта сцена запекается буквально полчаса, на все, и это действительно круто.

Запечение происходит в 2 этапа, в первом 11 стадий, во втором 15. Для Baked GI клинит на 5/11 Clastering, 7/11 LightTransport, 4/15 Bake AO, 6/15 Bake Visibility и 12/15 BakeInderect.
Свет должен быть Baked или Mixed, что позволит плавно переключаться между запеченными и рассчитываемыми в реальном времени режимах GI.
Свойства Skybox и Sun не являются обязательными и могут оставаться пустыми.
SkyBox — свойство для имитации неба или фона задника.
Sun — при использовании SkyBox, здесь можно указать направления света или «солнца» (или какой-либо большой, удаленный источник света, освещающий сцену). Если этот параметр не используется (None), то DirectionLight в сцене будет считаться «солнцем».
Ambient Source — источник рассеянного света Ambient Light, который освещает все в сцене (правильное определение несколько сложнее). Он может быть 3 типов:
Ambient Intensity — яркость Ambient Light, регулируется от 0 до 1.
Ambient GI — свойство доступно, когда включен режим Precomputed Realtime GI и Baked GI. Позволяет выбрать способ (Precomputed Realtime или запеченный/Baked GI), который будет использоваться для рассеянного света.
Reflection Source — источник отражений. Позволяет указать, следует ли использовать Skybox для эффектов отражения (по умолчанию) или же выбрать Cubemap. Если Skybox выбран в качестве источника, то дополнительная опция предоставляется установить его разрешение для расчета отражений.
Reflection Intensity — степень воздействия Cubemap или Skybox отражений на сцену.
Reflection Bounces — сколько раз отражение объекта отразится, уместно вспомнить зеркальный коридор.
Realtime Resolution — устанавливает количество текселей, которые будут использоваться на единицу длины для объектов, освещенных в реальном времени GI. Обычно это значение примерно в десять раз ниже, чем разрешение запеченных. Может быть не целым, например 0,5.
CPU Usage — определяет насколько можно грузить CPU в редакторе при запекании текстур в реальном времени.
Baked Resolution — устанавливает количество текселей (например, «texture pixels»), которые будут использоваться на единицу длины для объектов, освещенных BakedGI. Для быстрого протопипирования лучше использовать значения в диапазоне 1-4.
Baked Padding — расстояние на текстуре между запеченными объектами в текселях.
Compressed — будет ли сжиматься текстура, займет меньше места, но возможны артефакты.
Ambient Occlusion — относительная яркость поверхностей в Ambient occlusion т.е. затемнения на внутренних углах. Более высокие значения показал более высокую контрастность между затененными и освещенными местами. Это применяется только к Idirect (непрямому) освещению, рассчитанному системой GI.
Final Gather — когда опция включена, окончательные свет получаемый в расчете GI будет иметь то же разрешение, что и запеченные карты освещения.
Следующие параметры влияют на отраженный свет в режимах Realtime и Baked GI mode: рассеянный Ambient, отраженный свет Light Bounces и излучение Emissive материалов, но не отражение.
Indirect intensity — масштабирует интенсивность Indirect light. Scene Window -> Irradiance здесь можно посмотреть Indirect light.
boost — насколько сильно свет отражается от одной поверхности к другой. Отраженный свет умножается на это значение, стандартно равно 1.
Directional Mode — по сути указывает нужно ли сохранять информацию Directional и Specular в лайтмапы при Baked GI mode.
Atlas size — размер лайтмап при запечении Baked GI mode. Обычно ставлю 1024px.
В Skined Mesh Renderer теперь добавилось новое свойство — Lightmap Parameters [8], это свойствj отвечает за группировку объектов, например внутри помещения и снаружи, по уровням или сценам, то как зададите вы или автоматически.

Мои низкие настройки для быстрого бэйка.
Для Baked Tag и System Tag числовое значение не является существенным, объекты используют один и тот же лайтмап, если они имеют одинаковое значение тага.
Directional lightmaps хранят больше информации о освещении окуржающения, чем обычные карты освещения. Шейдеры могут использовать эту особенность для получения дополнительных данных о поступающем свете, чтобы лучше рассчитать отраженный/испускаемый свет. Это происходит за счет использования текстурой большего объема памяти и shading time.
Можно выбрать один из 3-х режимов: Non-directional, Directional and Directional with Specular. Все три поддерживают realtime и запеченные лайтмапы.
Non-directional: flat diffuse.
Самый простой режим использующий одну лайтмапу, хранит инфо о том сколько света излучает поверхность, предполагая ее diffuse.
Объекты имеют NormalMap или отражающие свет, будут показаны как diffuse, но в остальном показаны корректно.
Directional: normal-mapped diffuse
Этот режим добавляет вторую лайтмапу, которая хранит доминирующее направление поступающего света и и множитель пропорциональный тому, сколько света в первой лайтмапе поступает по доминирующему направлению. Остальное рассчитывается, если бы свет поступал равномерно (по сфере). Эта информация позволяет рассчитать NormalMap, но при этом материал останется diffuse.
Directional with Specular: full shading
Как и в предыдущем, здесь используется 2 дополнительные латмапы: свет и направление, но здесь они разделены пополам. Левая сторона сохраняет прямой свет, правая — непрямой. Отличие состоит в том, что свет хранится в виде incoming intensity (освещенность). Эта информация позволяет использовать шейдеры похожие на BRDF-шейдеры, которые обычно зарезервированны для освещения в realtime, в результате можно получить материал с воздействием непрямого света.
Двойные карты освещения (Dual lightmaps) — позволяют использовать отражающие поверхности (specular), карты нормалей (normal mapping).
Directional использует вдвое больше памяти по сравнению с Non-directional и имеет более высокую shading cost.
Directional with Specular использует вдвое больше памяти по сравнению с Directional.
Надеюсь на конструктивные замечания, возможно, я в чем-то не права. Буду благодарна за советы.
Автор: JenAnty
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/unity3d/86334
Ссылки в тексте:
[1] шейдеры не работают: http://docs.unity3d.com/Manual/UpgradeGuide5-Shaders.html
[2] туториал по шейдерам: https://www.youtube.com/watch?v=fD_ho_ofY6A
[3] мануалов: http://docs.unity3d.com/Manual/GlobalIllumination.html
[4] форума: http://forum.unity3d.com/forums/global-illumination.85/
[5] деревня викингов: http://u3d.as/bqF
[6] примерно такой: http://i.gyazo.com/43851ac06ffc97fb53d275354a003eb7.png
[7] примерно так: http://i.gyazo.com/6b1e94e54cb53748d1d2443013ea3674.png
[8] Lightmap Parameters: http://docs.unity3d.com/Manual/LightmapParameters.html
[9] Directional Lightmapping: http://docs.unity3d.com/Manual/LightmappingDirectional.html
[10] Источник: http://habrahabr.ru/post/253527/
Нажмите здесь для печати.