Данный урок посвящен созданию 3d моделей для игровых движков: моделированию, развертке и текстурированию.
Прежде, чем перейти непосредственно к созданию моделей, необходимо кратко рассказать о такой технологии как «теория физического шейдинга», которая применяется в большинстве современных игр и присутствует во многих актуальных игровых 3d движках.
Технология физического шейдинга «Physically Based Shading» (PBS) предназначена для реалистичной передачи материала 3d модели непосредственно во время игры. Благодаря этой технологии объекты в играх выглядят примерно так, как бы они выглядели в реальной жизни.
Материалы (дерево, сталь и т.д.) отражают от своих поверхностей свет по-разному, и суть PBS заключается в передаче максимальной реалистичности этого отражения. Например, если к 3d модели применен материал стали, на которой местами присутствует грязь или царапины, то и отражение света от них будет различаться.
Как же движок понимает, каким образом отражать какую-либо часть поверхности? Для этого создают специальные карты, в которых содержится информация об отражении от конкретного участка объекта.
Карта «Diffuse» – это текстура поверхности материала, его внешний цвет, рисунок. До появления технологии PBS в играх, на ней стремились изобразить не только максимально реалистичную поверхность объекта, но и присутствующие блики и рельеф. В PBS же, она содержит только максимально естественный цвет поверхности (обычно достаточно бледный и тусклый), а за визуализацию бликов и рельефа в данной технологии отвечают совсем другие карты.
Карта нормалей содержит информацию о рельефе объекта. С её помощью создают несуществующие детали на поверхности низкополигональной модели: вмятины, выпуклости, болты и т.д. Используя данный прием, отпадает необходимость в моделировании большого количества деталей, что сокращает число полигонов и при этом получается замечательный результат рельефа.
Технология выглядит следующим образом: сначала создаются высокополигональная (High-Poly) и аналогичная низкополигональная (Low-Poly) модели, затем с High-Poly снимается карта нормалей и накладывается на Low-Poly модель. Благодаря этому приёму существенно экономятся ресурсы компьютера.
Карта высот так же содержит информацию о рельефе и представляет собой, обычно, черно-белую текстуру. Чем светлее на ней участки, тем они выше на 3d модели, чем темнее – ниже.
Данная карта отвечает за отражение поверхности. С её помощью движку указывают, какой участок модели более блестящий, а какой менее. Как и в предыдущем случае, обычно она, черно-белого цвета. Принцип работы, аналогичен, чем светлее участки на текстуре, тем больше от них отражение.
Карта непрямого освещения поверхности предназначена для эффекта затенения и углубления в углах 3d модели, для придания большей выразительности. Данного вида освещения в природе не существует.
Выше перечислены не все карты, но самые основные. Для создания же большинства материалов достаточно и вовсе три: «Diffuse», «Normal» и «Specular». Моделирование моделей для игровых движков ориентировано на корректное отображение на них данных карт.
Так как процесс текстурирования достаточно сложен и требует много времени, то целесообразно упомянуть о некоторых программах, которые помогут очень сильно сэкономить и время и энергию.
Данные программы содержат уже готовую библиотеку с различными материалами. Они так же позволяют добавлять на выбранный материал различные эффекты (царапины, вмятины, грязь и т.д.). После настройки в них материала до желаемого результата произойдет сохранение всех необходимых карт.
В качестве примеров можно привести следующие программы: «3D-Coat», «Substance Painter», плагин для «Photoshop» «Quixel SUITE!». Плагин «Quixel SUITE!» дает возможность не только автоматически создать нужный материал с различными эффектами, но и нарисовать при помощи инструментов «Photoshop» очень четкий и ровный рельеф на модели «Normal Map». Поэтому данный плагин очень актуален, так как качественное запекание нормалей на текстурах небольшого размера для многих является настоящей головной болью.
Так же следует отметить, что PBS в разных движках работает по-разному, поэтому каждая модель требует индивидуальной настройки для выбранного движка, но общий принцип у всех одинаков: различные карты отвечают за различные свойства материала.
Как было отмечено выше, обычная схема создания 3d моделей для игровых движков выглядит следующим образом. Создается высокополигональная модель, обычно при помощи скульптинга, затем с неё снимаются карты нормалей и переносятся на аналогичную низкополигональную модель, которой уже произведена развертка, после чего производится текстурирование.
Поэтому перед 3d моделлером, после создания High-Poly модели встает очередная не менее важная задача: моделирование и оптимизация Low-Poly модели. Обычно 3d моделлер получает техническое задание, в котором уже указано рекомендуемое количество полигонов для модели.
В связи с тем, что компьютерные игры достаточно требовательны к ресурсам «железа», то общий принцип игрового моделирования состоит в том, чтобы получить наилучшее качество 3d модели при минимально возможном количестве полигонов. Но под «минимально возможным количеством» здесь понимается число полигонов правильной топологии. Потому что можно создать модель с малым количеством полигонов так, что нагрузка от неё будет сильнее, чем от аналогичной модели с большим количеством полигонов, но с правильной топологией.
У движков различные требования к игровым моделям: одни работают только с треугольными полигонами, например «Unity3D» или «NeoAxis 3D Engine», а другие, такие как «Blender Game Engine» могут работать и с многоугольными.
При моделировании для движков с многоугольными полигонами, желательно, чтобы модель состояла преимущественно из четырехугольников. Идеальная форма полигона – это квадрат. Треугольников и многоугольников должно быть по минимуму. Длинных полигонов следует избегать, как и со слишком острыми углами.
Так же рекомендуется, чтобы в модели было как можно меньше вершин, с большим количеством исходящих ребёр. Оптимальные вершины – это вершины, от которых отходят четыре ребра, расположенные под прямыми углами.
Следует отметить, что вышеприведенные требования, конечно, не всегда возможно реализовать. Например, если вершины четырёхугольного полигона не получается расположить в одной плоскости, то целесообразно разбить его на два треугольника, а, если возможно уменьшить количество полигонов через расположение ребер не под прямыми углами (но не слишком острыми), то целесообразно это сделать.
Движки, работающие с треугольными полигонами, обычно при импорте сами разбивают многоугольники на треугольники. Но, при этом может произойти существенное нарушение, как UV развертки, так и геометрии, например при анимации. Поэтому, рекомендуется перед экспортом, если уж не полностью модель доработать до треугольных полигонов, то хотя бы проработать проблемные места. Так же, карту нормалей, желательно снимать с модели уже с треугольными полигонами, чтобы избежать появления различных артефактов.
В игровых проектах допускаются объекты с раздельными мешами и даже пересекающиеся между собой. Но, рекомендуется, все-таки делать сетку объекта цельной. Дело в том, что даже, если в ней будет больше полигонов, нагрузка будет меньше, чем от объекта с отдельными мешами с меньшим количеством полигонов. К тому же не редко объекты с несколькими тысячами полигонов, но с отдельными мешами экспортируются в движок с ошибками (а то и вовсе не экспортируются), а цельные – без ошибок даже с полигонами в несколько раз больше.
Поэтому, если есть возможность соединять меши, то лучше это сделать. Для простых же игр, не требовательных к ресурсам, можно не тратить время и силы, а сделать объект с отдельными мешами, и даже аккуратно пересекающимися.
Если объекту необходимо произвести качественное снятие карты нормалей, то одной группой сглаживания не обойтись. Мало групп сглаживания – плохо, но и их избыток, так же будет препятствием для снятия карты.
Помимо нужного числа полигонов для модели в техническом задании, так же содержатся требования к количеству и качеству текстурных карт для неё, которые были рассмотрены выше. Но, чтобы эти карты корректно отображались, модель должна иметь не только правильную топологию, но и качественную развертку. Рассмотрим некоторые важные правила её реализации.
Так как не всегда возможно использовать текстуры большого разрешения, то необходимо разумно использовать текстурное пространство развертки, то есть компоновать её части ближе друг к другу. «Разумно», не означает максимально близко, так как, например при запекании текстур многие 3d программы закрашивают на несколько пикселей дальше границ развертки. В итоге, при сильно близком расстоянии частей развертки, их окраска может пересечься. Поэтому расстояние между UV шеллами необходимо соблюдать не менее 5 пикселей.
Располагать развертку желательно по вертикали и горизонтали. Это относится как к частям развертки, так и непосредственно её сетке. Части развертки с похожими цветами, лучше располагать рядом друг с другом.
Если же на текстуре осталось много свободного места, например, после развертки вытянутых моделей, то для экономии ресурсов, на этой же текстуре можно развернуть ещё одну модель, желательно, с аналогичным материалом.
Чем будет меньше размеры текстур и их число, тем лучше для производительности. Желательно чтобы их размеры были кратны 2, а ещё лучше, чтобы имели квадратную форму, базирующуюся от размера 8х8, например, 256х256, 512х512, 1024х1024 и т.д.
Необходимо соблюдать пропорцию при развертке. Но, если на какой-либо части модели много мелких деталей, которые нужно отобразить, то вместо увеличения размера текстуры, целесообразно увеличить эту часть на текстуре (но не рекомендуется увеличивать её более чем в два раза).
Моделям, у которых присутствуют карты нормалей, развертку желательно «разрезать» по группам сглаживания, иначе блики могут отображаться некорректно. Следует так же учитывать и то, что чем меньше будет швов на развертке, а, следовательно, её частей, тем лучше.
Без теней игровые уровни выглядят не реалистично и не атмосферно. Поэтому когда тени необходимы, а ресурсы не позволяют их использовать от всех объектов, то производят запекание текстур вместе с тенями и в таком состоянии экспортируют в игровой движок. Динамические же тени оставляют только у малого числа важных объектов, например, у главных персонажей.
Те объекты, которые располагаются вдали, не требуют ни качественной детализации, ни текстур, ни анимации, так как они не будут видны. Если же, к ним главный герой может подойти, то применяют прием изменения их геометрии (текстур, анимации) при приближении к ним – LOD-оптимизация.
То есть, например, для камня у ног игрока целесообразно использовать много полигонов, когда же камень будет находиться на расстоянии, допустим, 20 метров, то количество его полигонов можно автоматически уменьшать, вдалеке и вовсе камень можно превращать почти в куб или менять на изображение. Очень дальние модели (участки территории), необходимо и вовсе прятать и подгружать по мере приближения к месту их расположения.
Этот прием требует создания дополнительных низкополигональных моделей, но при разработке игр с большими локациями без него не обойтись.
В заключении следует отметить, что создание и оптимизация 3d моделей для игровых движков, особенно с реализацией анимации, достаточно сложный процесс, но очень интересный.
Перепечатка и использования данного материала без прямой обратной ссылки категорически запрещена!