Добрый день, интересующийся читатель!
Решил попробовать на своём канале поделиться опытом и начать публиковать новую серию обучающих статей, посвящённых геймдеву. Начнём с азов, а если эта тематика вам понравится, то буду писать ещё, всё более и более углубляясь в увлекательную область разработки игр.
Итак, начнём с определения что же такое меш.
Меш (анг. Mesh) - это сетка полигонов, из которых состоит любой 3D объект в компьютерной графике. Полигон, в свою очередь, состоит из вершин (вертексов), рёбер (линий, соединяющих две вершины между собой) и граней (плоскости, образуемой между рёбрами). Во многих графических редакторах полигоном является многоугольник, чаще это четырёхугольник. Но игровой движок Unity производит так называемую триангуляцию каждого меша и разбивает полигоны 3D объекта на треугольники.
Поэтому в Unity полигоном считается именно треугольная плоскость с 3-мя вершинами.
Чтобы сделать более детализированный 3D объект, необходимо использовать большое количество полигонов, но, в то же время, чем больше полигонов на объекте - тем сложнее видеокарте его рендерить, что может привести к потере производительности. И хотя современные десктопные видеокарты способны рендерить до нескольких миллионов полигонов в кадре, без существенного снижения FPS, разработчикам игр всё же стоит стремиться, чтобы в кадре находилось около нескольких сотен тысяч полигонов, так как у игроков могут быть устаревшие видеокарты, да и к тому же далеко не только большое количество полигонов нагружает систему. Ещё должен рассчитываться свет, если он реалтаймовый, работать шейдеры, обрабатываться физика, игровая логика, и другие сопутствующие вычисления.
Поэтому, многим разработчикам приходится находить золотую середину, между детальностью меша и количеством полигонов, особенно если разрабатывается мобильная игра или заданы строгие системные требования, которым игра должна соответствовать.
Ниже представлен стандартный персонаж игрового движка Unity, состоящий из более чем 13 000 полигонов, что считается вполне нормальным для модели персонажа, даже можно и поменьше, около 10 000 на персонажа, так как в играх, как правило, используется множество различных других 3D объектов.
Однако, в игре такая модель будет казаться довольно простой и не детализированной, а увеличение количества полигонов, для того, чтобы добавить деталей модели, может привести к падению производительности.
К счастью, существуют различные способы повысить качество модели без повышения количества полигонов, один из них - карты нормалей.
Нормаль - это перпендикуляр к плоскости. При расчёте света, движок считывает нормаль каждого полигона, и в зависимости от его направления, относительно источника света, отображает затенение или освещение на поверхности объекта.
Карты нормалей позволяют предоставить движку информацию о несуществующих в меше небольших выпуклостей или впадин, которые будут учитываться при расчёте и отображении освещения и затенения.
После наложения карты нормалей на модель, персонаж стал выглядеть значительно детальней: на одежде появились складки и элементы костюма, а на лице и голове - брови и пряди волос. При этом количество полигонов в меше не увеличилось, и производительность сохранилась примерно на том же уровне, за исключением того, что теперь видеокарте придётся загружать в свою память дополнительную текстуру - ту самую карту нормалей. Но если у видеокарты памяти достаточно, то это не составит проблем.
Такие карты нормалей получают в специальных программах для 3D дизайнеров, путём считывания информации о нормалях реальных полигонов в высокодетализированной 3D модели, использование которой в игре недопустимо, из-за высокой нагрузки.
Сперва 3D художники создают очень детализированные и качественные модели с большим количеством полигонов. Используют их в рекламных рендерах или заставках, и снимают с них карту нормалей. Затем ухудшают модель, делая её низкополигональной (в ручную или с помощью специальных модификаторов), и применяют к ней карту нормалей, снятую с высокодетализированной модели. Тем самым получают хорошо выглядящую 3D модель, но с не таким большим количеством полигонов.
Этот и другие приёмы активно используют разработчики игр для получения хорошей и оптимизированной картинки.
На этом наша первая статья, посвящённая геймдеву, подошла к концу. Если вам она понравилась и вы бы хотели, чтобы я написал другие подобные статьи - то проголосуйте лайками и напишите в комментариях на какую бы тему вы хотели бы увидеть следующую статью.
От вашей активности зависит буду ли я писать подобные статьи дальше или нет.
Хорошего вам дня и низкополигональных, но качественных мешей в играх!