3d модели игровых персонажей
Создание 3D-моделей для мобильной игры: опыт Playkot
Сложности работы с аутсорсерами и ограничения платформы.
На конференции DevGAMM 2017 разработчики Age of Magic из компании Playkot рассказали о создании 3D-моделей персонажей для мобильной игры на всех этапах разработки: от идеи до оптимизации. Редакция DTF расшифровала выступление.
Даниил Козловский: Я арт-лид в проекте Age of Magic. Это игра для мобильных устройств от Playkot, которая напоминает карточную. Но у нас настоящие герои со своими способностями и внешним видом. Их можно собирать и прокачивать в сюжетной кампании, PvP и других активностях.
Сегодня мы поговорим о том, как создаются персонажи. Из слайда видно, что это многоступенчатый процесс, который требует экспертиз и работы большого количества специалистов.
Самое сложное для нас — это создание арта. В игре порядка 70 персонажей и производство каждого из них занимает 1-1,5 человеко-месяца. Производственный процесс завязан на сотрудничестве с аутсорсерами, что накладывает определённые риски, ведь идея должна быть максимально понятной для тех, кто работает вне основной команды.
В нашем случае всё начинается с технического задания от геймдизайнера. Оно даёт нам базовое представление о том, что это за персонаж, его истории и способностях. Наш геймдизайнер прикладывал визуальные референсы, чтобы лучше показать, как он представляет себе героя.
Мы начинали поиск с маленьких скетчей сразу поверх арены. Ключевая цель — найти тот образ, задуманный геймдизайнером. Иногда для этого приходится нарисовать много персонажей.
При переходе от 2D к 3D моделлер может неправильно уловить пропорции, исказить характер или силуэт. Поэтому мы стали использовать 3D-скетч — быстрый, черновой «скульпт», который делает сам концепт-художник в программе ZBrush. На его пропорциях и силуэте будет базироваться финальная модель. Скетч делают без лишних деталей и подробных текстур.
Имея на руках такую модель, мы сразу можем осмотреть её в игре. ZBrush позволяет оптимизировать количество полигонов в ней с нескольких миллионов до нескольких тысяч. На этом этапе, пока не начался долгий и дорогой процесс изготовления финальной модели, ещё можно что-то поправить.
Мы получаем 3D-скетч на пятый день работы над персонажем, а готовый продукт — только через месяц. Весь период производства модели мы спокойны за её качество и за то, как она впишется в мир игры.
Иногда с помощью 3D-скетчей мы создаём прототипы анимаций, чтобы продумать некоторые нюансы. Такие черновики позволяют нам также увидеть некоторые неожиданные проблемы с дизайном героев.
Например у нас есть персонаж, которого зовут Магнус. Мы предполагали, что его крылья будут постоянно раскрыты. Но на арене они перекрывали других героев. Тогда мы решили, что крылья Магнуса будут появляться в процессе анимации и атак.
Однако 3D-скетчи не дают полной информации о дизайне персонажа: многие нюансы костюма (такие как узоры на броне или мелкие детали) здесь либо отсутствуют, либо сделаны очень приблизительно. Нам важно максимально информировать аутсорсеров. Поэтому мы ставим наши модельки в подходящую позу и обрисовываем их, чтобы были видны цвет, фактура, материалы, дизайн одежды и так далее.
В конце производственной цепочки мы имеем отличное техническое задание для тех, кто будет работать над героем дальше. Оно состоит из описания героя, 3D-скетча, детализированного 2D-арта, тестовых анимаций и раскадровок. Такой подход позволяет минимизировать риски на следующих этапах создания модели.
Антон Ивичев, глава 3D-продакшна: я расскажу, что идёт после 3D-скетча и какие критерии качества мы предъявляем к финальной высокополигональной модели.
Во-первых, она должна передавать пластику и стилизацию форм скетча. Кроме того, нужно сохранить характер персонажа. Для нас также важно сделать узнаваемый силуэт, чтобы все персонажи хорошо смотрелись на разных устройствах.
Мы используем классический принцип разделения на три уровня детализации. Первый — большие узнаваемые формы, не насыщеные деталями. Второй — средние детали, дополняющие силуэт и обогащающие персонажа, а третий — мелкая детализация. Она имеет большое значение на экране развития героев, где игрок может увидеть персонажей в полном размере.
У высокополигонального «скульпта» более 20 миллионов полигонов, а на его создание уходит пять дней. Здесь помогает использование заранее заготовленных деталей (таких как руки и ноги) и то, что многие модели делаются на аутсорсе.
Следующий этап — создание упрощенной версии героя. В Age of Magic она состоит из 4-6,5 тысяч полигонов. Именно эту модель позднее добавят в игру, поэтому необходимо продумать точки артикуляции и оптимизировать её с сохранением визуального качества.
Дальше идёт этап «запекания», в результате которого мы получим карту нормалей, передающую рельеф персонажа. Обе версии модели изначально делаются в одной позиции в программе xNormal. Мы выставляем область «запекания» и получаем фиолетовую карту — нормаль.
Теперь можно приступать к текстурированию. Здесь мы не ограничиваем художников какой-то программой — в любой из них можно достичь необходимого результата. Исходные текстуры делаются в 4К, а в игру они попадают в разрешении 1024px. В движке они собираются в шейдер, и мы получаем финальный результат.
Затем идет риггинг, а потом — скиннинг — привязка низкополигональной модели к скелету. На первом этапе автоматизировать процесс помогут скрипты, а на втором— плагин ngSkinTools.
Для оптимизации мы используем влияние двух костей на один вертекс — вершину полигона. Такой подход хорошо показывает себя в мобильных играх и, как правило, работает на всех персонажах.
Однако у Магнуса «гнулись» крылья, когда он их открывал. Сейчас мы планируем проводить тесты, чтобы посмотреть, как сильно пострадает производительность при использовании влияния четырёх костей на один вертекс.
Дмитрий Лебедев, ведущий программист: я коротко расскажу о технических деталях, с которыми мы сталкиваемся при разработке и внедрении персонажей в игру.
Начнем со сборки. На мобильных устройствах «размер» приложения влияет на скорость загрузки, на то, как быстро разряжается телефон или планшет и на то, как много людей скачают вашу игру. Если взять готовые ассеты, то каждый персонаж будет «весить» около 73 мегабайт. Умножаем это на 70 героев и получаем порядка пяти гигабайт. Это слишком много для мобильной игры.
Для компрессии непрозрачных текстур на устройствах от Apple мы выбрали PVRTC. Этот метод даёт хорошее сжатие. Текстуры с альфа-каналом мы используем только для эффектов. Они проигрываются быстро, поэтому тут тоже можно использовать PVRTC. Однако если вам критично качество, то можно выбрать другой формат, использовать специальный шейдер и упаковывать «альфу» отдельно от основной компоненты, а можно оставить полноцветную текстуру и уменьшить её размер.
В случае с Android всё гораздо сложнее. На этой операционной системе работает множество устройств, для каждого из которых оптимален свой формат компрессии. Мы собираемся написать специальный скрипт, который займётся созданием сборок на разные устройства. Для этого в Unity есть возможность выбрать Texture Compression. Скрипт же позволит Google Play проверять все возможные версии приложения, и предлагать ту, которая поддерживается устройством.
Следующий момент — это MIP-текстурирование. Оно помогает снизить нагрузку на графическое ядро, устранить «шумы» и положительно влияет на энергопотребление.
Для компрессии анимации и звука мы используем встроенные средства Unity. Инструмент Keyfame Reduction даёт очень хороший результат: он «сжимает» исходные данные в шесть-восемь раз. Если важен момент проигрывания звука, то мы используем Vorbis, потому что MP3 запускается с задержкой порядка 30 миллисекунд.
В итоге каждый персонаж занимает до 5 мегабайт. 70 героев в таком случае будут «весить» около 350 мегабайт.
В Unity все данные загружаются и инициализируются в едином потоке. Из-за большого количества персонажей, мы разбиваем все игровые элементы на максимальное количество частей и не создаём прямых ссылок. Кроме того, мы подгружаем только то, что нужно приложению в данный момент.
Нас не удовлетворяло качество быстрых шейдеров для мобильных устройств в Unity, а стандартные проигрывали по скорости. Мы старались обойтись как можно меньшим количеством проходов рендеринга, поэтому разрабатывали шейдинг в рамках специфики каждой отдельной сцены.
Мы отказались от постпроцессинга, но встроили соответствующие этапы в шейдер. Вместе с настройками освещения это позволяет добиваться разных «погодных эффектов» или смены времени суток на арене.
Несмотря на все попытки оптимизировать игру, всё равно будут устройства, на которых приложение будет «тормозить». Для таких платформ мы уменьшили размеры карт теней и отключили сглаживание.
После ряда плей-тестов стало понятно, что невозможно предусмотреть все идеи геймдизайнеров, поэтому я не мог заранее написать универсальную модель умений и способностей. Нужна была система, которая позволит гибко настраивать персонажей. В качестве основы мы выбрали язык собственный разработки. Таким образом мы сможем вносить исправления в уже готовый продукт. На создание рабочей системы ушло около четырех месяцев.
Вопрос из зала: Можете ли вы подробнее рассказать о сроках выполнения работ на каждом этапе?
Даниил Козловский: Процесс создания концепт-арта у нас занимает неделю или полторы, в зависимости персонажа. Этому, конечно, предшествуют некоторые дизайнерские поиски.
Антон Ивичев: на высокополигональный «скульпт»уходит примерно пять дней, а низкополигональный — четыре. Ещё столько же времени тратится на текстурирование и риггинг. Анимация и скиннинг требуют примерно неделю.
Моделинг 3D-персонажа: советы начинающим специалистам
Сегодня предлагаем поговорить о нюансах моделинга 3D-персонажа, технологиях, без которых не обойтись, возможных сложностях и достоинствах профессии. В моделировании есть три основных направления, включая моделирование органических объектов, моделирование твердотельных объектов и процедурное моделирование. Кстати, меня зовут Роман Цыганов, я основатель компании Antix и спикер курса “Профессия 3D-художник” на образовательной платформе Skillbox. В портфолио Antix работы для Warner Bros, HBO, Tencent, PUBG и Game of Thrones.
В целом, этот список немаленький даже для начинающих. Но все начинается с программы ZBrush. Она предоставляет моделлеру специализированную кисть, которая способна рисовать штрихами с глубиной, «лепить» объект. Кроме того, в этой же программе можно этот объект сразу и разукрашивать. Результат работы виден сразу.
Но это не все, далее переходим в другую программу на выбор:
Но если он будет сделан без учета анатомии, то монстр, не говоря уже о положительном персонаже, будет выглядеть крайне неубедительно. Такой персонаж будет восприниматься и выглядеть искусственным, что недопустимо. Наши объекты в игре, фильме или рекламе должны иметь реалистичные антропоморфные отсылки/детали.
» data-image-author=»Ирины Лейкхтер» data-image-src=»https://leonardo.osnova.io/faa45f69-e2a4-539c-88d3-dd530fc3ded6/»>
Работы студентки Skillbox
О программных инструментах и анатомической смекалке мы поговорили. Теперь самое время вспомнить об аппаратном обеспечении, которое является инструментарием любого специалиста по 3D-моделингу.
Я могу дать несколько универсальных рекомендаций:
Читайте специализированную литературу, новости, статьи. Нужно держать руку на пульсе для того, чтобы оставаться в тренде. Порой некоторые техники, которые специалист осваивает сегодня, через 2-3 года становятся неактуальными, так что требуется постоянно обучаться чему-то новому.
Ну и, наконец, старайтесь работать так, чтобы каждая последующая модель была сложнее предыдущей в исполнении. Таким образом будете прогрессировать, развиваться вы, будет развиваться и ваше портфолио, что крайне важно при трудоустройстве в индустрии.
Создание игровых 3D-моделей «для бедных»: путь инди
Вы когда-нибудь задумывались о том, как работает небольшая инди-студия, занимающаяся разработкой видеоигр?
Создавать игры с очень маленьким бюджетом можно, но для этого необходима смекалка, много труда и ещё больше любви к своему делу.
Мы — небольшая команда из Польши. Нас всего три человека, но полный рабочий день занимаются проектом всего двое.
Сегодня мы расскажем о процессе создания персонажей для нашей игры «The end of the Sun». Имейте в виду, что показанные в статье скриншоты взяты из проекта, который пока находится в разработке.
Этот текст посвящён только статичным элементам персонажей: мы расскажем, как сканировали персонажа и одежду, как создавались дополнительные элементы, а также о том, как мы настроили движок Unity, чтобы получить такие скриншоты:
Но начнём с начала. Прежде чем приступать к работе, мы подготовили список свойств, необходимых нашим персонажам:
В статье мы расскажем только об одном персонаже в молодом и пожилом состоянии, потому что в нашей игре очень важен сюжет и мы не хотим портить удовольствие игрокам.
Итак, составив список, можно приступать к работе над графикой.
1. Фотограмметрия лица и подготовка трёхмерного тела
Актриса в процессе фотограмметрии.
Фотогра… что?
Мы начали со сканирования лица нашей модели с помощью метода фотограмметрии. Это тема для отдельного поста, но немного подробнее о нём можно узнать на нашем youtube-канале.
Обратимся к Википедии:
Фотограмметрия — научно-техническая дисциплина, занимающаяся определением формы, размеров, положения и иных характеристик объектов по их фотоизображениям.
Другими словами: фотограмметрия — это способ восстановления 3D-глубины по нескольким фотографиям (или множеству снимков) для создания трёхмерной виртуальной модели, выглядящей как объект в реальном мире.
В крупной AAA-студии с большим бюджетом для сканированимя персонажа используется множество камер. Они располагаются вокруг актёра и делают кучу снимков примерно в одинаковое время…
… Но что если у нас есть только одна камера?
Да, здесь возникает проблема, и как же мы её решили? Сканы, созданные таким образом, будут хуже, чем при работе со множеством камер, но этого достаточно для нас, чтобы создать базовую форму лица и запечённую высококачественную текстуру. Это «инди-способ» создания фотограмметрии.
Мы сделали множество попыток, поэтому вот советы по созданию снимков только одной камерой:
Актёр или актриса не должны двигаться, пока вы не закончите делать снимки лица. Они не могут даже моргать и дышать. (Съёмка обычно занимает около 10-20 секунд, но этого всё равно сложно добиться)
Нам приходилось очень быстро делать снимки с разных сторон актрисы. Для этого мы использовали режим серии фотографий (burst mode). Иногда возникали проблемы с фокусировкой, но так снимки сделать быстрее всего, чтобы актриса оставалась неподвижной.
Лучше посадить актёра на кресло с подлокотниками, так проще сидеть неподвижно.
Мы делали снимки только с передней части актрисы. На скриншотах можно увидеть фотографии и сзади, но в финальном скане мы их не использовали. В целом для создания скана необходимо всего 8-10 хороших фотографий спереди.
Хорошо также использовать с камерой поляризационный фильтр, потому что он уменьшает засветы на коже, что улучшает форму модели и текстуру.
Для такой схемы используйте не менее четырёх софтбоксов, чтобы улучшить текстуру и снизить объём постобработки.
Используйте как можно более высокую скорость затвора, чтобы избежать размытия в движении, а также как можно меньший размер диафрагмы (я имею в виду f.5 и выше), чтобы получать на фотографиях широкий диапазон фокусировки. Именно для этого нужны как минимум четыре очень мощных софтбокса. Разумеется, ISO должно быть как можно меньше, чтобы избежать шума.
Для анализа фотографий и создания модели мы использовали ПО Photoscan 3D. Вот как выглядит облако точек после обработки фотографий:
Облако точек и визуализация схемы расположения фотографий.
Как видите, здесь есть фотографии сверху и снизу персонажа, но сейчас я могу сказать, что мы не рекомендуем их делать. Гораздо лучше сделать примерно 8-12 хороших фотографий передней части лица (дуги от левого до правого уха). Это даёт намного более качественные результаты для текстуры и модели. Единственный недостаток в том, что шею модели нужно создавать вручную, но это небольшая проблема.
После создания облака точек мы перерабатываем его в трёхмерную высокополигональную модель:
Уже выглядит лучше, правда? Но на 3D-модели видно много шума:
Он возникает по следующим причинам:
— Размытие движения при очень быстром создании снимков
— Микродвижения нашей актрисы (да, даже перемещение лица на 1 миллиметр приводит к подобному шуму)
Большинство из вас наверняка думает, что это выглядит ужасно, и вы правы. Именно поэтому мы сделали ещё несколько шагов.
Теперь можно сделать операцию под названием «ретопология». Это техника создания 3D-модели более простой и оптимальной формы на основе высокополигональной модели.
Вот как это выглядит на практике:
Это делается потому, что показанная выше модель содержит более миллиона треугольников. Обычный компьютер для работы с частотой кадров 30-60 fps способен обрабатывать 5-6 миллионов. (Эта информация даётся просто для общего понимания, на самом деле, на производительность влияет множество других аспектов.) То есть в игре может отображаться всего несколько моделей с таким количеством треугольников.
Ещё один важный аспект ретопологии — это создание гладкой модели лица, готовой к лицевой анимации. Для выполнения ретопологии мы используем ПО Topogun 2.
Вот наша модель лица после ретопологии (мы отполируем её позже, после текстурирования):
Затем мы запекли (в сленге 3D-графики это означает просто подготовку/создание) текстуру лица с помощью наших фотографий, Эта операция выполняется почти автоматически. Именно поэтому мы решили использовать фотограмметрию — модель лица и хорошая текстура делают наш персонаж естественным.
Хм, тут ещё многое предстоит сделать — как видите, в текстуре есть небольшие ошибки. Ещё одна небольшая проблема заключается в отсутствии задней части головы и глаз.
Поэтому следующим этапом будет создание неотсканированных элементов и элементов, которые невозможно отсканировать, например ресниц, волос, глаз. Поэтому давайте узнаем, как это делается. Мы используем ещё один программный пакет под названием Cinema 4D. В этом ПО мы можем создать остальные части модели и усовершенствовать её текстуру.
Отлично, выглядит намного лучше. Прежде чем мы начнём работать над текстурой, необходимо создать тело с костями для анимирования. (Об этом в нашем блоге будет отдельный пост.)
Немного поискав, мы обнаружили отличный способ создания 3D-тел для наших отсканированных лиц. Мы используем для этой задачи бесплатное для коммерческого использования ПО Make human. С помощью этого софта можно создать целое тело, даже с лицом и скелетом. Достаточно просто передвигать ползунки, пока не получишь нужный результат, к тому же у него будет скелет, совместимый с движком Unity 3d.
Поэтому всего за несколько минут мы получили целое тело с отличной топологией и даже весами, готовое к анимированию! (Если вы не понимаете, о чём я говорю, то прочитайте второй пост об анимировании персонажей, который скоро выйдет!) Это очень полезное ПО.
Единственная проблема в том, что нам нужно уничтожить часть модели, отрезав от тела голову (звучит страшновато). Нам нужно это сделать, чтобы заменить её отсканированной моделью.
Самое важное здесь то, что благодаря ПО Make human у нас есть веса на костях, подготовленные к анимированию.
Нам достаточно просто добавить кости лица, чтобы иметь возможность анимирования лицевых эмоций или для синхронизации движений губ с диалогами. Но об этом скоро будет следующий пост в нашем блоге.
На создание правильной системы лицевых костей может уйти целый день (да, я знаю, на лице не кости, а мышцы, но так они называются в 3D-графике).
Разумеется, для создания красивых текстур нужно ещё и много труда. Мы используем Frequency Separation Technique в Photoshop для устранения засветов и ретуши кожи. Так создаётся рабочий процесс, хорошо подходящий для устранения из текстур ненужного освещения (даже когда это отсканированная модель камня, а не человеческого лица). Вам тоже стоит попробовать этот процесс. (В интернете есть множество информации о Frequency Separation.)
Финальная Albedo-текстура выглядит так: (простите, но до выпуска игры мы не хотим выкладывать текстуру большого разрешения)
А вот как выглядит модель с уже наложенной albedo-текстурой.
Теперь мы добавляем зубы, язык и глаза:
Вот как выглядит готовая модель из соединённых вместе отсканированного лица и тела с готовой текстурой (цензура наложена, чтобы можно было делиться картинкой в соцсетях).
Готовый внешний вид 3D-тела и лица.
2. Создание волос головы и ресниц реального времени.
Я написал эту главу, потому что создание волос, работающих и хорошо выглядящих в видеоигре — это довольно широкая тема. Наверно, одни из самых красивых волос вы могли видеть в AAA-играх. Мы — инди, поэтому не можем тратить столько же времени на один аспект наших персонажей, как большие компании.
Поэтому мы создали волосы из полигонов с наложенной на них текстурой с прозрачностью.
Как это работает? Сначала мы моделируем полигоны в форме волос, а затем располагаем их на голове персонажа и перемещаем/распределяем с помощью инструментов 3D-моделирования. (В нашем случае Cinema 4D.) Также можно сделать это в генераторе сплайнов — создать сплайн с динамическим мешем вдоль него, тогда манипулирование волосами упростится.
Итак, все причёски создавались из таких частей:
Волосы без материала выглядят так:
Вот причёска с наложенной готовой текстурой:
А вот как выглядит причёска со скриншотов, которая показана в начале поста.
Как видите, мы можем менять причёски, поэтому нет никаких проблем, например, в добавлении пожилому персонажу причёски молодого.
Разумеется, при создании волос мы используем Photoshop и BodyPaint 3d для отрисовки полос на волосах и элементов разных форм. Вы можете использовать любое другое ПО, но было бы здорово, если бы в нём присутствовал режим просмотра альфа-прозрачности в реальном времени. Тогда вы точно будете видеть, что делаете (а не только серые полосы на голове персонажа).
Текстура волос выглядит следующим образом:
Albedo-текстура волос с прозрачностью
Чтобы придать волосам естественность поведения, мы пробовали использовать на меше волос компонент ткани Unity 3d, чтобы добавить небольшой эффект ветра или гравитации, но подробнее об этом в другом посте.
3. Создание пожилых версий персонажей
«Girl you’ll be a women soon»
Как я говорил выше. в нашей игре можно встретить персонажей в разные стадии их жизни. Это добавляет интереса для игроков, а также заставляет нас выполнять дополнительную интересную работу.
Я покажу, как мы сделали красивую девушку намного старше. Мы просмотрели множество видео, картинок и интернет-страниц о том, как стареет человеческое тело.
Дело не только в морщинах, свою форму меняет всё лицо человека. Подробнее об этом можно прочитать например здесь.
В статье я расскажу о технической стороне вопроса. Итак, сначала мы завершили 3D-модель молодого персонажа со всеми костями. Это очень важно, потому что на подготовку скелета и добавление весов уходит очень много времени. После этого мы просто скопировали её и начали работать с копией модели. Благодаря такому рабочему процессу нам не нужно заново заниматься оснасткой (риггингом) пожилой версии персонажа, потому что в ней используется та же система скелета. Это гораздо важнее в движке. Подобная система ускоряет загрузку и выгрузку ресурсов, потому что мы загружаем/выгружаем только нужное нам.
Итак, сначала мы изменяем базовый меш и опускаем некоторые части лица к земле, как это делает при старении мать-гравитация. Нос, щёки, брови, уши. Но мы не слишком увлекаемся, потому что модель имеет те же лицевые кости, что и модель молодого персонажа. (То есть при слишком сильном изменении базового меша могут возникнуть проблемы.)
Только деформация меша
Затем мы наносим скульптингом крупные морщины и детали в каком-нибудь ПО для скульптинга. Например, вы можете воспользоваться бесплатным Scupltris. Затем мы запекаем их в текстуру, называющуюся картой нормалей. Почему? Потому что она даёт нам показанный ниже результат без добавления лишних треугольников в модель. (Чтобы ваш PC смог справиться с её обработкой.) Также мы создаём карту нормалей некоторых деталей на основании текстуры кожи, а затем смешиваем их вместе.
Меш плюс карта нормалей
Наконец, мы добавляем морщины на albedo-текстуру (текстуру с базовым цветом). Мы сделали снимки нескольких пожилых людей, а затем добавили к модели морщины с помощью смешения в Photoshop.
Меш плюс карта нормалей крупных деталей и albedo-текстурой старой кожи
Итак, в результате в коже нашей модели пожилого персонажа используется карта нормалей деталей и albedo-текстура. Мы также подготавливаем текстуру подповерхностного рассеяния (subsurface scattering, эффект просвечивания света сквозь кожу) и specular-карту, но в том, что вы видите на экране, используются только albedo и карта нормалей (смешанные в одну карта нормалей крупных деталей + карта нормалей деталей).
Здесь мы можем видеть следующие части:
2. Карту нормалей крупных деталей, основанную на вылепленных деталях модели.
3. Карту нормалей крупных деталей, смешанную с деталями кожи, созданными из albedo-текстуры.
Пожилой персонаж выглядит гораздо лучше в движке Unity 3D, где мы используем подходящие шейдеры:
А вот соединённые в Photoshop две версии персонажа (размещённые в движке в одном месте)
4. Сканирование для персонажей настоящей одежды.
Итак, мы добрались почти до конца, но чтобы добиться финального внешнего вида персонажа, предстоит ещё многое сделать.
Мы отсканировали множество разной одежды. Техника сканирования похожа на сканирование лица или других объектов, но теперь это можно делать медленно, обычно одежда не движется (ветер или пробегающие мимо кошки бывают очень надоедливыми, особенно когда даже небольшое перемещение может испортить часы работы).
Мы не смогли подобрать советов или готовых решений по правильному сканированию одежды, потому вот наши советы о том, что нужно и чего нельзя делать:
— Самое важное — закрепить конструкцию, чтобы одежда была неподвижной; ещё лучше расположить одежду в устойчивой T-позе. Что это значит? Это поза с широко расставленными руками, стандартная позиция для персонажей игр, к которым применяется анимация. Также в такой позе лучше всего сканировать одежду.
Для этого мы купили манекен. Нам не удалось сразу найти манекен в T-позе, поэтому съёмка под руками была очень сложной, а ещё больше работы требовалось на совмещение 3D-моделей отсканированной одежды с руками, опущенными вдоль тел персонажей. Изначально система выглядела так:
Наш первый манекен с опущенными вниз руками
… поэтому мы модифицировали его, чтобы он поднял руки. Мы сделали новые руки из ПВХ-трубы. Вот как теперь выглядит наш «трубонекен» в T-позе:
У этого манекена руки сделаны из ПВХ и он поставлен в T-позу
Мы можем снимать эту трубу, чтобы упростить одевание манекена.
Ну ладно, это отлично, но зачем на нашем пластмассовом друге эти чёрные точки?
Это потому, что поверхность очень блестящая, а скрипты сопоставления точек в фотограмметрии очень не любят блестящих вещей, но обожают точки и характерные особенности, поэтому мы нанесли маркером так много точек. Это позволило нам лучше сопоставлять позиции фотографий в ПО, чтобы получать более качественные сканы одежды.
Вот как выглядит на нём одежда, в данном случае меховая (в T-позе):
— Второй по важности аспект при создании одежды с помощью фотограмметрии — не забывать делать снимки под руками и снизу одежды. Вот сколько фотографий нам пришлось сделать, чтобы создать достаточно хороший скан этой одежды:
Здесь можно увидеть облако точек сканирования:
— Некоторые виды одежды очень сложно сканировать, например, с длинным мехом или из очень блестящих материалов, поэтому иногда проще их не сканировать, а создавать вручную.
Например для улучшения внешнего вида этого меха мы создали дополнительные элементы меха с альфа-каналом прозрачности. Это аналогично тому, что мы делали с волосами персонажей.
Красная часть — это элементы меха, созданные вручную с альфа-каналом
Вот как это выглядит без текстуры
— Некоторые типы объектов сканировать проще, например, эта матовая юбка выглядит очень хорошо, потому что сделана из матового материала. Также здесь мы использовали HDR-снимки, чтобы получить больше информации в тенях и засветах, но hdr-фотограмметрия занимает кучу времени. Почему? Потому что каждый снимок нужно делать со штатива, иначе фотографии будут размытыми. Теперь представьте уровень раздражения, когда спустя час работы одна из наших кошек просто прыгнула на этот мех. Нам пришлось всё начинать с начала.
Выглядит хорошо, правда? В целом чем больше времени ты тратишь на скан, тем лучше результат получаешь, и меньше занимаешься постобработкой.
— Ещё одни элементы, которые лучше делать вручную, а не сканировать — это пояса. Мы создавали их вручную. Мы сделали так, чтобы текстуры зацикливались, чтобы даже при небольшом разрешении текстур качество в игре было высоким.
— Венок тоже делался аналогично волосам, с использованием прозрачности. Он ещё не готов, но его видно на скриншотах:
Ну, на этом пока всё об одежде.
5. Соединение всего в игровом движке.
Ранее я говорил, что мы используем движок Unity 3D. Расскажу о том, какие шейдеры и настройки мы использовали, для того чтобы модель выглядела как на скриншотах.
Для всех элементов персонажей мы сейчас используем бесплатный Alloy Shader. Мы выбрали его, потому что в нём есть всё необходимое нам, особенно опция растворения для каждой вариации шейдера и многие другие опции в сегментах. Вы можете использовать любой другой шейдер, но мы пользуемся Alloy (кроме того, он бесплатен).
Различное положение света даёт интересные эффекты
— Кожа: для этой части персонажей мы используем шейдер кожи с эффектом подповерхностного рассеяния и передачей света. Что такое эффект подповерхностного рассеяния? Это симуляция фактора прохождения освещения сквозь кожу. Посмотрите на сделанные нами снимки:
Вот как выглядит подповерхностное рассеяние на руке в реальном мире
Как видите, освещение (если оно достаточно сильное) проходит сквозь кожу.
Это придаёт очень естественный внешний вид, особенно при слабом освещении. Можно увидеть, как этот эффект ведёт себя в The End of the Sun на примере этого gif и показанных выше скриншотов. (Учтите, что пока у модели даже нет specular-текстуры и Subsurface-карты, поэтому на финальном этапе она будет выглядеть немного лучше.)
— Глаза: как известно, глаза — зеркало души. И это правда — очень сложно придать персонажу естественный вид, не сделав его глаза идеальными. Глаз — это не просто сфера. Он плоский там, где находится радужная оболочка, а зрачок даже ещё ниже. Именно поэтому мы используем шейдер Parallax. Это поверхность, создающая иллюзию того, что глубже есть что-то ещё, и она даёт очень хорошие результаты!
Глаза с дополнительной прозрачной сферой большего размера для эффекта дальнего отражения
Глаза без этой сферы.
Более того, теперь мы можем управлять расширением зрачков, и в катсценах это создаёт очень естественный вид (немного пугает, когда зрачок максимально расширен, но для фэнтезийных целей этот эффект всё равно полезен).
— И последнее: поскольку мы используем один скелет для всех версий одежды и тел, то можем без всяких проблем превратить молодого персонажа в пожилого или поменять его одежду. Это создаёт отличные возможности по созданию кинематографических сцен, а также замечательно оптимизирует игру.
Вот так мы можем смешивать элементы созданного таким образом персонажа.
— Для одежды мы используем двухсторонний шейдер, чтобы можно было видеть её с обеих сторон.
— Для волос мы используем специальный двусторонний шейдер с гладкими прозрачными краями.
6. Окончательные результаты
Под катом представлена полная галерея того, как выглядит финальная версия персонажа в движке Unity 3D: (но он по-прежнему находится в разработке)