В предыдущих статьях из этой серии мы рассказывали о команде создателей ролика The Blacksmith, а также о его художественном оформлении. Теперь мы рассмотрим создание ролика с технической точки зрения и затронем аспекты подготовки сцен, шейдинга и освещения в Unity 5.


Тестирование и работа с различными версиями движка

Мы приступили к созданию ролика на ранних альфа- и бета-версиях Unity, стабилизировали его на версии 5.0.b22, а со временем обновили весь проект для финальной версии Unity 5.

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

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

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

Подготовка сцен

На одном из первых этапов создания The Blacksmith мы набросали геометрию сцен в сером материале.



Для создания прототипов нам очень пригодились пакеты из Asset Store, например, Better Rocks and Cliffs от Quantum Theory. Благодаря им мы смогли сразу же начать работу над внешним видом объектов и очень скоро получили хорошие результаты:



На основе раскадровки, сделанной на пре-продакшене, мы выполнили первую итерацию камер, приблизительно обозначив нужные шоты, и тут же составили список ресурсов, необходимых для каждого из них. В то же время полным ходом велась работа над артом для 3D-моделей персонажей.
Нам нужны были широкие возможности для настройки художественных эффектов для каждого шота. Поэтому мы добавили в редактор Unity компонент Scene Manager, позволяющий группировать объекты по шотам. С его помощью мы смогли включать или отключать объекты для отдельных камер, а также изменять их свойства: расположение, масштаб, материал и т.д. Более того, для каждого шота были настроены уникальные параметры освещения, а система Global Illumination обеспечила мгновенную смену освещения в реальном времени.
Шейдинг
Физически точный шейдер (PBS) в Unity достаточно прост в использовании и настройке. Мы использовали его на всех этапах работы над проектом. Написание отдельного шейдера для кожи не входило в список наших задач, поэтому мы ограничились стандартным шейдером:
(вставить скриншот)
Антагонист – Скриншот из Unity Editor
Одним из основных преимуществ встроенного шейдера в Unity 5 является возможность его гибкой настройки и расширения в соответствии со спецификой проекта. Скачать его можно по ссылке: http://unity3d.com/get-unity/download/archive (в раскрывающемся меню «Загрузки» для вашей платформы выберите «Встроенные шейдеры»). Взяв его за основу, вы можете без труда создавать уникальные шейдеры для ваших проектов, как и мы – для нашего ролика. Ниже мы представим несколько примеров.
Мы добавили во встроенный шейдер функцию распознавания уникальных шейдеров. Для этой модификации мы сделали две версии: для окружения (например, для учета атмосферного рассеяния) и более сложную для персонажей (для учета уникальных теней и карт морщин). В последней мы слегка усовершенствовали UI, добавив слайдеры для карты отражений.

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

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

Шейдер волос – Скриншот из Unity Editor (нажмите, чтобы увеличить изображение).
Для некоторых шотов мы хотели сделать мягкую растительность, а также найти простой способ разнообразить ее. Для этого мы разбили весь процесс на два этапа и расширили встроенные в Unity функции создания растительности. С помощью небольшого инструмента PaintJob мы автоматизировали процесс добавления любой статичной геометрии в мир с временным ландшафтом. В сочетании с простым набором правил, контролирующих этот процесс, это позволило нам генерировать слои растительности на мешах поверхности земли, вокруг объектов и на крышах домов. Для рендеринга мы собрали все эти данные в уникальном компоненте для сортировки относительно точки обзора, семплинга глобального освещения и управления выборочным рендерингом и уровнем детализации.
(вставить скриншоты)

Освещение
Мы разграничили освещение для персонажей и окружающего мира на несколько слоев и назначили лампам соответствующие culling-маски. Таким образом, мы получили больше контроля над обоими слоями. Похожий подход обычно применяют в киноиндустрии, настраивая освещение в зависимости от расположения актеров в кадре.
Чтобы улучшить внешний вид персонажей, мы использовали дополнительные локальные источники света для смягчения теней (неосвещенных участков) на их лицах.

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

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

Что касается отражений в воде (в океане и лужах на берегу), мы хотели, чтобы они выглядели как можно четче в точке соприкосновения объекта с отражающей поверхностью и постепенно становились все размытее по мере удаления от объекта. В итоге мы добавили в шейдер шаг свертки с учетом глубины и возможностью настройки данных в зависимости от гладкости поверхности. Полученные данные затем импортировались в стандартный шейдер, заменив кубические текстуры отражений на новые уникальные текстуры.

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

Комментарии (0)