Лого vc.ru

Визуальные эффекты в Unity 5 — опыт разработчиков игры Pollen VR

Визуальные эффекты в Unity 5 — опыт разработчиков игры Pollen VR

Вместе с Unity ЦП публикует истории разработки игровых проектов, созданных на базе популярной технологии. Расскажите о своём кейсе, чтобы попасть в рубрику.

Сегодня в рубрике — интервью с сооснователем и генеральным директором студии Mindfriend Games Вилле Кивисто о графических возможностях нового движка Unity 5 и разработке игры для шлемов виртуальной реальности Pollen VR.

Поделиться

Какие возможности Unity 5 вы использовали при разработке Pollen VR, чтобы достичь такого высокого визуального качества?

Самые замечательные возможности Unity 5 — это шейдинг, основаный на законах физики (physically based shading, PBS), и освещение в режиме реального времени, их мы использовали в полном объёме. У нас были карты материалов для каждой поверхности, а особенности дизайна игры требовали динамического освещения окружения.

С новыми алгоритмами глобального освещения все предметы и поверхности выглядят просто великолепно, а в сочетании с отражённым светом создаётся полное ощущение реальности. Разработка компьютерной игры ААА-класса требует огромного количества памяти, поэтому наличие 64-битного редактора было очень кстати. С Unity 4 у нас была масса сбоев из-за нехватки памяти, но, слава богу, те времена прошли.

Какие инструменты вы использовали для создания листвы?

Листва — довольно простой эффект GPU-частиц. Гораздо интереснее то, как мы добились её правильного освещения. Поскольку Graphics.DrawProcedural не интегрируется в Unity, а новый CommandBuffer API не поддерживает вычислительные шейдеры (compute buffers), нам пришлось придумать нестандартное решение.

У нас есть куб, размеры которого соответствуют границам листвы, поэтому мы знаем, что всякий раз, когда виден куб, листва также нуждается в визуализации. И теперь каждый раз, вызывая OnWillRenderObject() для куба, мы визуализируем частицы из вычислительного шейдера в два render target'а за один проход с MRT и с настройками текущей камеры визуализации.

Одна текстура содержит информацию о диффузной и roughness-составляющих, другая о нормали и глубине.

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

Из-за того, что все листья являются GPU-частицами, их анимация обходится дёшево. Но это не просто статичная сетка, они должны реалистично реагировать на окружение (естественно, с некоторыми ограничениями).

Есть какие-нибудь технологии или рабочие процессы, которыми вы можете поделиться с нашими читателями?

Для нас всё замечательно работало, что называется, «из коробки». Значения по умолчанию обеспечивают хороший баланс между временем «запекания» света и его качеством. Используя их, мы постоянно старались достичь наилучшего качества, не слишком обращая внимание на скорость «запекания» освещения. Но наша автоматическая система сборки масштабировала полученные результаты так, что качество GI только улучшалось.

Используете ли вы сочетание освещения в реальном времени и «запечёного» света?

Дизайн наших игр требует, чтобы всё освещение было сделано в реальном времени. В игре нет ни одного статичного лайтмапа.

В Unity 4 мы справлялись с этим ограничением, размещая десятки естественных источников света вокруг сцены и таким образом моделируя глобальное освещение. Это было ужасно, потому что и разработка, и техническая поддержка отнимали очень много сил и времени. Вдобавок, нам никак не удавалось избежать утечек света сквозь стены.

К тому же, из-за множества источников света значения 'Draw Calls' и 'Fillrate' становились слишком высокими, а это, в свою очередь, плохо сказывалось на частоте кадров. Когда мы перешли на бета-версию Unity 5, мы стали использовать Enlighten и ликвидировали все фальшивые источники света в GI. Всё сразу стало лучше выглядеть и быстрее работать, а GI стал отлично справляться с отключением и анимацией источников света в реальном времени.

Нам также пришлось создать собственную систему отображения Cubemap с проекцией сцены и со всем остальным. Она неплохо работала, но при этом задействовались десятки специальных шейдеров, и возможностей редактора постоянно не хватало. Мы очень рады, что новые Reflection Probes в основном заменили эту нашу систему. Они не требуют трудоёмкой технической поддержки и значительно упрощают рабочий процесс.

Как вы достигли эффекта свечения в коридорах?

В ходе разработки игры мы использовали несколько объёмных эффектов. Для прожекторов нам понравилась реализация Роберта Купиша, надёжная и дающая очень хороший объём. Из-за универсальности прожекторов их удобно использовать для подсвечивания тумана наверху.

В некоторых разделах игры вы можете встретить эффекты «объёмной жидкости», для которых мы использовали Fluidity из Asset Store. Мы применяли этот инструмент для всех масштабов: от маленьких искр до комнаты, наполненной горящим газом. Это выглядит потрясающе.

На открытом пространстве мы использовали наш собственный способ постобработки объёмного тумана, мы хотели, чтобы игрок почувствовал плотность атмосферы Титана.

Какие инструменты вы используете для генерации PBR-текстур?

Adobe Photoshop и Quixel Suite, а также некоторые референсные материалы. У нас есть собственная «экспериментальная площадка», где художники могут опробовать модели в разных условиях освещения.

Делали ли вы какие-то модификации к новому Standard Shader от Unity? Если да, то расскажите немного об этом.

Поскольку наша база не привязана к единственной точке во времени и пространстве, нам нужно по-разному её визуализировать. Так как мы являемся маленькой инди-студией, у нас нет ресурсов, чтобы начать работу над множеством ассетов, которые к тому же выглядят по-разному в зависимости от «возраста».

Поэтому мы решили сделать расширенную версию нового стандартного шейдера, которая добавит материалам «зернистости». Самое лучшее — то, что это работает для всех объектов и с новым вариантом, и мы можем получить именно ту зернистость, которая нужна для конкретного материала. Всего один шейдер и несколько строчек кода — и мы можем изменить изображение по своему усмотрению.

В данный момент Unity не поддерживает внедрение пользовательского кода в Standard Shader. Поэтому мы просто скопировали встроенный шейдер и сохранили наш код во включённых файлах, написав несколько #include в нужных местах.

Что вы использовали для антиалиасинга?

Поскольку MSAA не слишком хорошо справляется с отложенным рендерингом, нам пришлось прибегнуть к постобработке. Единственное, что мы выбрали, — это SMAA, так как этот инструмент обеспечивает красивое и чистое решение с хорошей производительностью. Несмотря на то, что он может потерять субпиксель или временное сглаживание, конечный результат достаточно хорош даже в Oculus Rift.

Новая графика Unity 5 демонстрирует нам безупречное качество, а как насчёт производительности?

Новый основанный на MRT отложенный алгоритм Unity 5 увеличивает частоту кадров на 30% по сравнению с двойным прохождением Legacy. При этом может сильно увеличиться 'draw calls', и рендеринг за один проход помогает снизить число этих вызовов.

Поскольку для нас очень важна виртуальная реальность (мы рекомендуем поиграть в Pollen с Oculus Rift), необходимо, чтобы частота кадров была как можно более высокой. Поэтому мы поддерживаем максимальное количество опций, задавая такие визуальные настройки, которые соответствуют ожиданиям игроков.

С максимальными настройками Pollen может по максимуму разогнать вентиляторы на вашем GPU, но также вы можете немного снизить настройки и играть на старом GPU и Oculus Rift.

Поделитесь каким-нибудь советом по оптимизации таких больших сцен.

В Unity очень эффективно работает функция Occlusion Culling, она справляется почти со всем, что нам нужно. Однако она оперирует только с визуализацией и делает это только в игровом режиме.

Мы потратили массу времени, добиваясь, чтобы всё было корректно с физической точки зрения, будь то книги, баскетбол, микроволновка или груша, в игре было огромное количество физических объектов. К сожалению, Umbra не особенно помогала нам с физикой, поэтому пришлось написать собственную систему portal/culling.

Комнаты нашей лунной станции разделяются защитными дверями, и мы написали простую портальную систему, основываясь на этих дверях. Она отключает все комнаты, которые игрок не может видеть. Это помогло нам с физикой и даже с Umbra, так у неё стало меньше работы. В редакторе мы также активировали одну-единственную комнату, это позволяет поддерживать 'draw calls' и 'poly count' на низком уровне и быстро отзываться на команды редактора.

Почти всё остальное делает Unity 5, нам не потребовалась дополнительная оптимизация для больших сцен, всё и так прекрасно работало.


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

Статьи по теме
Олег Придюк, Game Insight: Особенности разработки мобильной тактической стратегии X-Mercs06 июля 2015, 13:33
Кейс: История разработки Unity-игры «Боевые Овцы» для телевизоров Samsung Smart TV02 июля 2015, 18:12
Теоретические основы физически верного рендера в Unity18 июня 2015, 12:41
Популярные статьи
Показать еще
Комментарии отсортированы
как обычно по времени по популярности

UE мощнее в плане визуала.

0

А чтобы получить качественные god rays (light shaft) ненадо никаких раализация мануальных, всё уже есть, настраивайте только красиво и оптимально:

0

Возможность комментирования статьи доступна только в первые две недели после публикации.

Сейчас обсуждают
Андрей Малолин

Так начинающему или совсем без опыта работы?

Почему в Санкт-Петербурге сложно найти дизайнера интерфейсов
0
Константин Фанки

Что за Codewise? Кто нибудь слышал про них до этого рейтинга?

Avito оказалась единственным российским представителем в рейтинге Deloitte Technology Fast 500
0
Den Neustroev

Складывается впечатление, что вы из Avito.

Avito оказалась единственным российским представителем в рейтинге Deloitte Technology Fast 500
1
Gregory Golovanov

У нимакс вполне себе московский ценник

Почему в Санкт-Петербурге сложно найти дизайнера интерфейсов
0
GaLL

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

Почему в Санкт-Петербурге сложно найти дизайнера интерфейсов
0
Показать еще