3D графика в играх, просто и с примерами
Привет. Я хочу рассказать из чего состоит 3D графика в играх. Я разберу лишь некоторые темы, которые по большей части относятся конкретно к работе 3D художников, а разбор этих тем будет очень поверхностным, без сложной теории и терминологии с наглядными примерами из игр.
Я написал это для тех, кому хоть немного интересно как устроена компьютерная графика в играх, а еще наверное для начинающих или желающих начать изучение 3D графики и геймдева в целом.
Начать наверное стоит с того что вообще такое 3D Модели.
Самое краткое и простое объяснение которое я смог бы дать: Объект состоящий из координатных точек, находящихся на трех осях XYZ, соединенных между собой ребрами и трехугольными плоскостями (полигонами), на эти плоскости, при помощи двумерных координат UV проецируются текстуры, это только малая часть того из чего состоит 3D модель, но основная.
3D Модели в играх разделяют по разному, я лично разделяю их так:
Модули - это такой вид моделей, предназначенный для сбора больших объектов (расположенных в игровом мире). Чаще всего из них собирают здания, коридоры уровней, пещеры, комнаты. Сборка объектов из модулей проходит в игровом движке, а не в 3D редакторе.
Пропсы - Объекты вроде стола, стула, урна, скамейка, фонарный столб, бочка, шкаф, контейнер - все это элементы окружения и их называют пропсами, они могут быть отдельными объектами, а иногда из нескольких деталей для вариативности.
Растительность - Можно было бы отнести это и к пропсам, но растительность немного сложнее, у них есть анимации или сложные шейдеры которые дают им подвижность. Растительность тщательней оптимизируют, в основном лодами - об этом я расскажу ниже.
Интерактивные или важные объекты - Объекты с которыми игроки могут взаимодействовать, сюда можно отнести и оружие, элементы снаряжения, экипировки, пульт управления или что то в этом роде. На них игрок чаще смотри, поэтому на них заостряют больше внимания чем простым пропсам.
Персонажи - Люди, животные, роботы, все что выполняет хотя бы примитивные команды и анимацию.
Помимо этого, есть еще и другие типы моделей, не предназначенных для использования в играх, вроде фотосканов, скульптинг, CAD модели
В современных играх модели окрашиваются полноценным материалом с несколькими текстурами, а не просто одной текстурой как думают некоторые игроки. Исключение - это игры со стилизованной графикой.s
Каждая текстура отвечает за определенные свойства. Так выглядит большинство физически корректных материалов:
Normal Map - передает рельеф, она никак не влияет на геометрию модели, влияет лишь только на то, как с этой поверхностью ведет себя свет.
Base Color или Albedo - текстура цвета, эту карту называют по разному а иногда она отличается и содержанием, помимо цвета на эту карту еще могут добавить тени.
Roughness - черно-белая маска, по ней определяется где у материала будет шероховатая поверхность, а где глянцевая.
Есть еще карты, но эти три наиболее часто используемые. Есть карта металлических свойств Metallic, есть карта Emissive - на ней обозначены участки свечения, Displacement - изменяет геометрию и создает реальный рельеф, Ambient Occlusion - мелкие затенения в углах геометрии. и еще много других.
Тема того как устроен PBR (physically based rendering) очень большая, в интернете ее разбирали подробно и неоднократно, здесь я оставлю лишь короткое описание.Не всем, но возможно многим известен тот факт что модели и текстуры в играх используются по несколько раз, знаете ли вы насколько часто это происходит? Больше всего речь будет именно об этом, о том как игровые ассеты повторяются, как это прячут и зачем.
О модулях.
Модели сделанные чтобы собирать из них большие объекты. Представьте что у вас есть конструктор, но вместо мелких деталей и кубиков - цельные объекты: стена дома, окно, дверь, объекты в одном экземпляре, если вам нужно больше окон, дверей и стен то вы их копируете.
Как выглядят модули в деле, пример из игры Dishonored. Посмотрите на фасад голубого дома, паттерн облупившейся краски повторяется на всех этажах, кроме первого и последнего. Я считаю, что средние этажи сделаны одним и тем же модулем, потому как 3D художник не допустил бы таких повторов, если бы делал дом целиком.
Все здание (снаружи) состоит из такого списка моделей:
- Фасад первого этажа
- Фасад средних этажей
- Последний этаж с крышей (возможно раздельно)
- Несколько вариаций окон, включая открытые
- Несколько вариаций козырьков
- Мелкие детали, провода, крючки, трубы.
Из малого количество модулей можно сделать множество разных объектов, но чем меньше модулей - тем сильнее заметна их повторяемость. Вот еще здание из Dishonored, здесь видны те же козырьки, иной фасад, но повторения более явные.
Трудно назвать игру в которой не используется модули в той или иной степени.
Вот коридорный онлайн шутер Warframe, попробуйте оценить сколько здесь уникальных моделей:
Я насчитал как минимум 15, вместе с пропсами, некоторые объекты могут быть разделены на еще меньшие модули, поэтому на глаз точно не скажешь.
Одежда, прическа, бороды, голова и тело это отдельные модели которые комбинируются для создания новых неписей. Если у Геральта или другого персонажа открыта шея и присмотреться к ней во время анимаций, то можно заметить как иногда выступает шов от разделенной геометрии, что странно, в ведьмаке он есть даже у сюжетных персонажей, хотя у них целиком уникальная внешность, видимо благодаря этому мододелы провернули такое:
О том какие преимущества дает модульность:
- Экономия времени при создании контента. Художникам не приходится создавать множество разных коридоров или персонажей, они делают это в движке, уже из готовых деталей, правда от этого немного теряется уникальность.
- Экономия места на диске, модель и текстуры имеют один набор файлов, они не создаются дважды при копировании в игровом движке.
- Кастомизация. Благодаря этим модулям можно создавать множество вариантов объектов или персонажей.
Крутим, перемещаем, уменьшаем и прячем.
Различные манипуляции с одной моделью могут дать ей новый вид. При работе с моделями, в распоряжении Дизайнера уровней есть три простых инструмента: поворот, масштабирование, перемещение. Пример: Есть модель для окружения, скопируем ее, перевернем вверх ногами, затем увеличим размер, часть модели спрячем под землей и вот у нас на локации два почти разных объекта.
В Dishonored есть локация, королевская кунсткамера, с большими чучелами сов, размерами больше человека, там их было несколько штук, на одной видно составные части, сова разделена на три модели, тело и крылья.
А теперь другая локация, кабинет таксидермиста, все та же модель совы, отделили крылья и уменьшили в размерах, тело спрятали внутрь стеллажа и вот новый пропс.
5 лет назад, интернет обсуждал что в Skyrim'e маленькие столики это вкопанные в землю шкафы. Кто-то всерьез считал что это халтура, что от этого страдает оптимизация, а кого то даже бесил факт обмана.
эти 30 - 50 полигонов спрятанных под землю, повлияют на оптимизацию меньше чем еще одна модель для столика.
Одна текстура на двоих.
Частая практика, когда один материал может нести в себе текстуры для нескольких моделей. Например, у нас есть 3D модели инструментов, целый набор, зачем для каждой отвертки делать отдельный материал, это просто нерационально, если конечно нет задачи сделать каждый инструмент высоко детализированным и уникальным.
Overwatch, карта Кастильо, много домов на заднем и переднем плане, у каждого разные окна, маленькие, большие, дверцы балкона и полукруглые окна. Вот только все это разнообразие окон сделано из одного материала с разрешением текстур 128x512 px, а различие в формах придают за счет манипуляций с UV Разверткой.
Такое происходит часто с объектами одного или похожего типа.
Еще один пример, на карте есть много линий с узорами или грязи вдоль стен, это все декали - что это такое я опишу ниже. Такую текстуру иногда называют атласом, в данном случае это скорее атлас декалей.
В мобильных играх переиспользование материалов просто колоссальное, там часто делают стилизованную графику, где вся текстура это просто заливка цветом, с такой графикой можно обойтись 2 - 3 материалами на весь проект. Модель
Бывает что наоборот, на одну и ту же геометрию накладывают разные текстуры, можно получить новый объект или модуль, не создавая еще одной геометрии - но подобное делается редко, в первую очередь стараются минимизировать количество используемых текстурных материалов, игровая модель без этих материалов весит почти ничего.
В Dishonored, внутри помещений можно найти ободранные обои, используются одни и те же модели, им меняют текстуру лицевой стороны.
В играх, примерно 70% всех файлов это текстуры, как я уже писал раньше, чем чаще мы их переиспользуем - тем меньше будет весить игра. Если в сцене материал повторяется, то расходуется гораздо меньше ресурсов видеокарты. Все вышеперечисленное является главными аспектами в оптимизации игр.
Декали.
То что избавляет от следов оптимизации. Поверх часто повторяемых текстур накладывают другие. Текстура с альфа каналом (прозрачностью), чаще всего наложенная на один полигон, или методом проецирования. Пятна грязи, крови, подтеков, пыли, мелких деталей, болтики, дыры от пуль, трещины в стенах и ранее упомянутые тексты. Они нужны чтобы добавить на уровне детализации, разбавить повторяющиеся текстуры и объекты.
В Overwatch почти все декали кроме графити наносят через полигоны, здесь это видно особенно, текст отдалился от стены и парит в воздухе, если ставить полигоны слишком плотно друг к другу, то те начнут "драться" за отрисовку, появятся визуальные баги, правда тут с расстоянием они переборщили.
Вот интересный пример использования декалей. У дверных проемов есть небольшая впадина, вот только стена там идеально ровная а текстуры тайловые. Вблизи, особенно у пола можно заметить чем она создается
В Dishonored абсолютно все декали нанесены методом проецирования, тут например виден небольшой баг с определенного ракурса, облупившаяся краска падает на железную трубу. Кстати, присмотритесь к стене, видно как часто повторяется грязь на стене, тайлинг (об этом ниже), если бы не декали, это было бы еще заметней. Декали так же как и все остальное в игре, неоднократно переиспользуется.
Симметрия не только для красоты.
Тут скорее речь больше пойдет об overlapping'e. Что такое overlapping: схожая геометрия может использовать общий участок текстуры, полигоны в 2D накладываются друг на друга.
Пример, винтовка Эш из Overwatch выглядит симметрично с двух сторон, поэтому у нее одна текстура на обе стороны. Но можно пойти еще дальше, динамит имеет 6 одинаковых деталей и все под одним участком
На динамите можно увидеть надписи которых нет на текстуре, текст очень плохо дружит с симметрией, его буквально отзеркаливает, поэтому текст добавляют отдельно, как декали.
Оверлаппинг сильно экономит место на текстуре, его применение играет важную роль в создании игровых моделей. Если бы модель не имела симметричных элементов, пришлось бы жертвовать качеством или увеличивать количество используемых материалов. Даже если концепт модели почти весь асимметричен, то стараются добавлять повторяющиеся элементы
БОБ! Не стой в А позе! Небольшой ремешок и заплатка, все остальное у Боба зеркально:
Да, в данном случаи это А поза а не Т, между ними есть небольшая разница при создании анимации.
Тайловые текстуры и их смешивания.
Тайловая текстура или бесшовная текстура - это те текстуры которые можно растягивать на большие объекты, при помощи манипуляций с UV. Как только текстура заканчивается, она без видимых швов начинается с другого конца. Чем больше мы будем растягивать эту текстуру по модели, тем сильнее будут заметны ее повторения, чтобы снизить частоту этих повторов, тайловые материалы смешивают друг с другом в игровом движке, разными методами, чаще всего по Vertex Color - где цвета назначенные на вершины геометрии, выступают в качестве маски, по которым и смешиваются материалы, так же маской может служить и другая текстура, в первом случае нам придется увеличить число вершин, а во втором добавить еще одну текстуру.
Лучше всего смешивание тайловых материалов можно увидеть на земле и на стенах больших зданий
Более наглядный пример можно найти где нибудь в игре с открытой локацией, где видно землю без травы.
Я часто замечаю как новички в 3D пытаются текстурить большие объекты, здания через уникальные материалы, без использования тайлов, они удивляются почему текстура получается
такой размытой и шакальной при разрешении в 4к. Текстурирование зданий делается в преимущественно в движке при помощи бесшовных текстур их смешивания и декалей. Если нужен именно уникальный материал то придется очень часто использовать overlapping и увеличить полигонаж для швов.
Я вот думаю написать отдельную статью на тему методов текстурирования, разобрать то как смешивают материалы, используют тайлы, overlapping и декали для текстурирования разных объектов вроде зданий на заднем плане так и важных предметов в руках персонажей.
LOD'ы.
Level of Detail. Модели теряют свой уровень детализации по мере увеличения расстояния между объектом и камерой, снижается количество полигонов. Раньше лоды делали исключительно вручную, 3D художник создавал парочку упрощенных моделей одного объекта, сделать это несложно, просто сам факт того что в проекте росло число моделей да и к тому же трата времени. Сейчас в движках есть технологии которые генерируют лоды автоматически, применяется не всегда, из за своих минусов, бывает что автоматика слишком сильно "мнет" модель.
Случаи когда лоды не используют:
- Игрок не будет видеть объекты на больших расстояниях, только вблизи, такое может происходить в коридорных шутерах.
- Объект очень большой и часто находится в центре внимания, если он будет переключатся на упрощенную модель, это будет очень заметно.
- Объект и без того низкополигональный, если это простая коробка, то добавление лодов будет не рационально.
в Overwatch я заметил что лоды применяются только к персонажам и оружию, остальное не изменяется или происходит это слишком незаметно.
Анимация
Rigging - Процесс подготовки модели к анимации, создание оснастки, джоинтов или проще говоря скелета. Между скелетом для анимации и реальным скелетом внутри живых существ мало что общего, мы двигаемся благодаря мышцам, персонажи при помощи костей. Кости или джоинты есть далеко не только на персонажах, они применяются и в одежде для симуляции, в оружии, на любых других подвижных деталях.
Записанная анимация или же процедурная применяется именно к костям, а те уже в свою очередь двигают привязанные к ним вершины модели. Привязку вершин к скелету делает 3D моделлер/аниматор, этот процесс называется Skinning.
Я хотел добавить анимации того как это работает, но я уже дошел до лимита изображений, да и вообще эта тема тоже очень большая и всего тут не расскажешь одним постом.
Анимации как и другие игровые файлы также неоднократно переиспользуют, если персонажи имеют схожее телосложение для этого.
В Ведьмаке есть краснолюды и низушки, они одного роста отчего им дали общий риг и анимации, только низушки имеют более худощавое телосложение, это отражается на их популярной позе сложа руки, ладони низушек не касаются плеча.
У этих двух рас вообще довольно скудный набор поз и анимаций, не то что у людей, вот где угнетение.
Завершение
Как я и писал выше, это лишь поверхностный разбор с примерами, без сложной теории, дело в том, что каждая упомянутая тема содержит в себе очень большое количество информации. Возможно я сделаю более широкую версию статьи, но в другом месте, так как тут есть ограничения по блокам и картинкам, в зависимости от того как оценят.
Думаю у вас еще останутся вопросы, на какие то вопросы вы сможете сами найти ответы погуглив термины из моей статьи или спросите в комментариях, если знаю то отвечу.