Per aspera ad astra или RoadMap по вашей будущей игре. Godot 4 C# Часть 10 "Немного о графике и 3Д моделировании".
Что касается основных функциональных элементов игры - мы с вами разобрались. Для создания простой игры этого будет достаточно. Как вы заметили, я практически не затрагивал графическую составляющую движка.
Теперь, когда мы знаем базовые принципы и можем построить на этой основе блокаут ( игра без графики ), можно переходить к графике.
Итак, мы хотим создать 3D персонажа, что же нам понадобится? Как можно догадаться, недостаточно просто набросать фигур в Blender. Персонаж создаётся в несколько этапов.
Этап первый - Mesh.
Сначала подготавливается оболочка персонажа, которая представляет собой полигональную сетку (или, как её принято называть, mesh).
Можно заморачиваться с геометрией вытягивая сетку вручную, можно создавать из разрозненных фигур, а можно использовать скульптинг. Вариантов масса.
После создания сетки выполняется процесс ретопологии.
Ретопология необходима для оптимизации персонажа под использование в игровом движке ( превращает high-poly в low-poly модель ).
Например, вы создали персонажа из различных фигур, которые в процессе были приведены к нужному виду. В результате такой работы получается сетка с внутренними полигонами, оставшимися от этих фигур.
Если посмотреть на счётчик полигонов, их количество может достигать миллионов. Если загрузить такую модель в игру, скорее всего, возникнут фризы, так как движок будет вынужден просчитывать всю геометрию персонажа.
В процессе ретопологии мы создаём правильную низкополигональную "оболочку" для модели. Затем эта оболочка отделяется от высокополигональной модели и становится оптимизированной версией сетки.
Графика в любом движке работает не с полигонами ( четырехугольник ), а с трисами ( четырехугольник движком конвертируется в треугольник ), поэтому оценивать сложность модели лучше в трисах ( грубо говоря один полигон = два триса ).
Что касается низкополигональных моделей, то их размер будет соответствовать приблизительно таким параметрам и зависеть от платформы:
- Мобильные игры - 5 000 – 20 000 трисов. Персонажи, окружение
- ПК/Консоли - 10 000 – 50 000 трисов. Детализированные объекты
- VR-приложения - 7 000 – 30 000 трисов. Для стабильного FPS
- Фоновые объекты - 500 – 5 000 трисов. Деревья, камни
Этап второй - UV-развёртка.
Она позволяет разделить персонажа на зоны, чтобы текстуры правильно накладывались на модель. Этот процесс можно сравнить с выкройкой костюма.
Этап третий - Запекание карт.
Далее выполняется запекание карт (Normal map, Ambient Occlusion и др.), что позволяет перенести детали с high-poly модели на low-poly версию. Этот этап добавляет объемности модели, создавая дополнительные тени и шероховатости.
При этом недостаточно создать только одну текстуру цвета (Albedo) - необходимо подготовить несколько карт, каждая из которых отвечает за определённые свойства материала (PBR или Physically Based Rendering):
- Albedo (Base Color) - основной цвет без теней и освещения (диффузная карта). Определяет цвет кожи, металла, ткани.
- Normal Map - симулирует мелкие детали без увеличения полигонов (выступы, впадины). Используется для пор кожи, швов одежды, царапин.
- Roughness Map - определяет степень матовости (0) или глянцевости (1) поверхности. Например, полированный металл vs ржавчина.
- Metallic Map - указывает, какие области являются металлическими (1), а какие - диэлектриками (0). Применяется для металлических доспехов vs кожаных ремней.
- Ambient Occlusion (AO) - добавляет тени в складках и местах, куда не проникает свет. Например, затемнение под воротником или в складках одежды.
- Height Map - используется для параллакса или тесселяции (рельефа). Применяется для кирпичных стен, коры дерева.
- Emission Map - создаёт эффект свечения (например, глаза робота, неоновые вывески). Используется для лампочек, магических эффектов.
Этап четвертый - Текстурированние.
После этого персонажа нужно затекстурировать. Можно использовать одну текстуру для каждой части персонажа, но это много весит и дорого по производительности. Поэтому создаем атласы текстур для оптимизации, когда все находится на одной текстуре.
Как видите задача достаточно сложная, а это мы только подготовили оболочку персонажа. Если это какая-то мебель ( статика ), то ее можно уже будет загрузить и использовать в игре.
С 2D-персонажами в этом плане проще - нужно "всего лишь" нарисовать множество спрайтов ))).
Итог: прежде чем добавлять модель персонажа или какого либо объекта в игру, необходимо подумать о производительности используемой модели. Это поможет избавить себя от вопроса "Почему игра лагает, я же добавил только домик и человечка?".
Спасибо за внимание!