Создание The Blacksmith: подготовка сцен, шейдинг и освещение
В предыдущих статьях из этой серии мы рассказывали о команде создателей ролика The Blacksmith, а также о его художественном оформлении. Теперь мы рассмотрим создание ролика с технической точки зрения и затронем аспекты подготовки сцен, шейдинга и освещения в Unity 5.
Тестирование и работа с различными версиями движка
Мы приступили к созданию ролика на ранних альфа- и бета-версиях Unity, стабилизировали его на версии 5.0.b22, а со временем обновили весь проект для финальной версии Unity 5.
Используя для создания контента сырой движок на стадии разработки, неизбежно сталкиваешься с нестабильностью и низкой эффективностью процессов. Каждую неделю мы стояли перед выбором: обновить движок до версии с исправленными ошибками или пропустить обновление, чтобы не нарушать работу команды.
Например, для упорядочения камер и анимации мы использовали секвенсор Director в составе инструментария Storytelling, который на тот момент находился на начальной стадии разработки. Чтобы добавить этот функционал в проект, мы должны были регулярно мержить его с основной версией движка вплоть до самого релиза.
Наша команда, ответственная за выпуск контента, сообщает об ошибках и запрашивает новый функционал у соответствующих отделов. Но затем нам остается только надеяться, что разработчики исправят баги и добавят новые фичи. В противном случае нам приходится искать обходные пути. Дело в том, что помимо нашего фидбека разработчики Unity получают отзывы от многих пользователей и, как правило, сами определяют приоритетность задач.
Подготовка сцен
На одном из первых этапов создания The Blacksmith мы набросали геометрию сцен в сером материале.
Для создания прототипов нам очень пригодились пакеты из Asset Store, например Better Rocks and Cliffs от Quantum Theory. Благодаря им мы сразу же начали работу над внешним видом объектов и очень скоро получили хорошие результаты:
Нам нужны были широкие возможности для настройки художественных эффектов для каждого шота. Поэтому мы добавили в редактор Unity компонент Scene Manager, позволяющий группировать объекты по шотам. С его помощью мы смогли включать и отключать объекты для отдельных камер, а также изменять их свойства: расположение, масштаб, материал и т. д. Более того, для каждого шота были настроены уникальные параметры света, а система Global Illumination обеспечила мгновенную смену освещения в реальном времени.
Физически точный шейдер (PBS) в Unity достаточно прост в использовании и настройке. Мы работали с ним на всех этапах создания проекта. Написание отдельного шейдера для кожи не входило в список наших задач, поэтому мы ограничились стандартным шейдером:
Одним из основных преимуществ встроенного шейдера в Unity 5 является возможность гибкой настройки и расширения в соответствии со спецификой проекта. Скачать его можно по ссылке: http://unity3d.com/get-unity/download/archive (в открывающемся меню «Загрузки» выберите для вашей платформы «Встроенные шейдеры»). Взяв его за основу, вы можете без труда создавать уникальные шейдеры для ваших проектов, как и мы – для нашего ролика. Ниже мы представим несколько примеров.
Мы добавили во встроенный шейдер функцию распознавания уникальных шейдеров. Для этой модификации мы сделали две версии: для окружения (например для учета атмосферного рассеяния) и для персонажей, более сложную (для учета уникальных теней и карт морщин). В последней мы слегка усовершенствовали UI, добавив слайдеры для карты отражений.
Чтобы сделать мимику антагониста более реалистичной, мы добавили в проект карты морщин на основе блендшейпов. В каждом фрейме наш компонент определял блендшейпы с наибольшим влиянием и соответствующим образом компоновал текстуры нормалей и затенений на стадии пререндера. Затем модифицированный стандартный шейдер семплировал и распаковывал нормали и затенения из буфера экранного пространства вместо обычных слотов материалов.
Для некоторых шотов мы хотели сделать мягкую растительность и найти простой способ разнообразить её. С этой целью мы разбили весь процесс на 2 этапа и расширили встроенные в Unity функции создания растительности. С помощью небольшого инструмента PaintJob мы автоматизировали процесс добавления любой статичной геометрии в мир с временным ландшафтом. В сочетании с набором простых правил, контролирующих процесс, это позволило нам генерировать слои растительности на мешах поверхности земли, вокруг объектов и на крышах домов. Для рендеринга мы собрали все эти данные в уникальном компоненте для сортировки относительно точки обзора, семплинга глобального освещения и управления выборочным рендерингом и уровнем детализации.
Мы разделили освещение для персонажей и окружающего мира на несколько слоев и назначили лампам соответствующие culling-маски. Таким образом мы получили больше контроля над каждым слоем. Похожий подход обычно применяют в киноиндустрии, настраивая освещение в зависимости от расположения актеров в кадре.
Чтобы улучшить внешний вид персонажей, мы использовали дополнительные локальные источники света для смягчения теней (неосвещенных участков) на их лицах.
В демо-ролике The Blacksmith мы сделали акцент на персонажах и использовали очень много шотов крупным планом. Поэтому было очень важно, чтобы тени были в достаточно высоком разрешении. Поэтому специально для теней персонажей мы добавили отдельную текстуру.
Оригинальный перевод статьи на сайте habrahabr.ru.
Источник!