No Image

Что такое полигоны в играх

СОДЕРЖАНИЕ
11 просмотров
10 марта 2020

Полигональная сетка (жарг. меш от англ. polygon mesh ) — это совокупность вершин, рёбер и граней, которые определяют форму многогранного объекта в трёхмерной компьютерной графике и объёмном моделировании. Гранями обычно являются треугольники, четырёхугольники или другие простые выпуклые многоугольники (полигоны), так как это упрощает рендеринг, но сетки могут также состоять и из наиболее общих вогнутых многоугольников, или многоугольников с отверстиями.

Учение о полигональных сетках — это большой подраздел компьютерной графики и геометрического моделирования. Множество операций, проводимых над сетками, может включать булеву алгебру, сглаживание, упрощение и многие другие. Разные представления полигональных сеток используются для разных целей и приложений. Для передачи полигональных сеток по сети используются сетевые представления, такие как «потоковые» и «прогрессивные» сетки. Объёмные сетки отличаются от полигональных тем, что они явно представляют и поверхность и объём структуры, тогда как полигональные сетки явно представляют лишь поверхность, а не объём. Так как полигональные сетки широко используются в компьютерной графике, для них разработаны алгоритмы трассировки лучей, обнаружения столкновений и динамики твёрдых тел.

Математический эквивалент полигональных сеток — неструктурированные сетки — изучаются методами комбинаторной геометрии.

Содержание

Элементы моделирования сетки [ править | править код ]

Объекты, созданные с помощью полигональных сеток, должны хранить разные типы элементов, такие как вершины, рёбра, грани, полигоны и поверхности. Во многих случаях хранятся лишь вершины, рёбра и либо грани, либо полигоны. Рендерер может поддерживать лишь трёхсторонние грани, так что полигоны должны быть построены из их множества, как показано на рис. 1. Однако многие рендереры поддерживают полигоны с четырьмя и более сторонами, или умеют триангулировать полигоны в треугольники на лету, делая необязательным хранение сетки в триангулированной форме. Также в некоторых случаях, таких как моделирование головы, желательно уметь создавать и трёх- и четырёхсторонние полигоны.

Вершина — это позиция вместе с другой информацией, такой как цвет, нормальный вектор и координаты текстуры. Ребро — это соединение между двумя вершинами. Грань — это замкнутое множество рёбер, в котором треугольная грань имеет три ребра, а четырёхугольная — четыре. Полигон — это набор компланарных (лежащих в одной плоскости) граней. В системах, которые поддерживают многосторонние грани, полигоны и грани равнозначны. Однако, большинство аппаратного обеспечения для рендеринга поддерживает лишь грани с тремя или четырьмя сторонам, так что полигоны представлены как множество граней. Математически, полигональная сетка может быть представлена в виде неструктурированной сетки, или неориентированного графа, с добавлением свойств геометрии, формы и топологии.

Поверхности, чаще называемые группами сглаживания, полезны, но не обязательны для группирования гладких областей. Представьте себе цилиндр с крышками, такой как жестяная банка. Для гладкого затенения сторон, все нормали должны указывать горизонтально от центра, тогда как нормали крышек должны указывать в +/-(0,0,1) направлениях. Если рендерить как единую, затенённую по Фонгу поверхность, вершины складок имели бы неправильные нормали. Поэтому, нужен способ определения где прекращать сглаживание для того, чтобы группировать гладкие части сетки, также, как полигоны группируют трёхсторонние грани. Как альтернатива предоставлению поверхностей/групп сглаживания, сетка может содержать другую информацию для расчёта тех же данных, такая как разделяющий угол (полигоны с нормалями выше этого предела либо автоматически рассматриваются как отдельные группы сглаживания, либо по отношению к ребру между ними применяется какая-либо техника, как например разделение или скашивание). Также, полигональные сетки с очень высоким разрешением менее подвержены проблемам, для решения которых требуются группы сглаживания, так как их полигоны настолько малы, что нужда в них пропадает. Кроме того, альтернатива существует в возможности просто отсоединения самих поверхностей от оставшейся части сетки. Рендереры не пытаются сглаживать рёбра между несмежными полигонами.

Формат полигональной сетки может определять и другие полезные данные. Могут быть определены группы, которые задают отдельные элементы сетки и полезны для установления отдельных подобъектов для скелетной анимации или отдельных субъектов нескелетной анимации. Обычно определяются материалы, позволяя разным частям сетки использовать разные шейдеры при рендере. Большинство форматов сетки также предполагают UV координаты, которые являются отдельным двухмерным представлением полигональной сетки, «развёрнутым» чтобы показать какая часть двумерной текстуры применяется к разным полигонам сетки.

Представления [ править | править код ]

Полигональные сетки могут быть представлены множеством способов, используя разные способы хранения вершин, рёбер и граней. В них входят:

  • Список граней: описание граней происходит с помощью указателей в список вершин.
  • «Крылатое» представление: в нём каждая точка ребра указывает на две вершины, две грани и четыре (по часовой стрелке и против часовой) ребра, которые её касаются. Крылатое представление позволяет обойти поверхность за постоянное время, но у него бо́льшие требования по памяти хранения.
  • Полурёберные сетки: способ похож на «крылатое» представление, за исключением того, что используется информация обхода лишь половины грани.
  • Четырёхрёберные сетки [неизвестный термин] , которые хранят рёбра, полурёбра и вершины без какого-либо указания полигонов. Полигоны прямо не выражены в представлении, и могут быть найдены обходом структуры. Требования по памяти аналогичны полурёберным сеткам.
  • Таблица углов, которые хранят вершины в предопределённой таблице, такой что обход таблицы неявно задаёт полигоны. В сущности, это «веер треугольников», используемый в аппаратном рендеринге. Представление более компактное и более производительное для нахождения полигонов, но операции по их изменению медленны. Более того, таблицы углов не представляют сетки полностью. Для представления большинства сеток нужно несколько таблиц углов (вееров треугольников).
  • Вершинное представление: представлены лишь вершины, указывающие на другие вершины. Информация о гранях и рёбрах выражена неявно в этом представлении. Однако, простота представления позволяет проводить над сеткой множество эффективных операций.

Каждое из представлений имеет свои преимущества и недостатки. [1]

Выбор структуры данных определяется применением, необходимой производительностью, размером данных, операциями, которые будут выполняться. К примеру, легче иметь дело с треугольниками, чем с многоугольниками общего вида, особенно в вычислительной геометрии. Для определённых операций необходимо иметь быстрый доступ к топологической информации, такой как рёбра или соседние грани; для этого требуются более сложные структуры, такие как «крылатое» представление. Для аппаратного рендеринга нужны компактные, простые структуры; поэтому в API низкого уровня, такие как DirectX и OpenGL обычно включена таблица углов (веер треугольников).

Вершинное представление [ править | править код ]

Вершинное представление описывает объект как множество вершин, соединённых с другими вершинами. Это простейшее представление, но оно не широко используемое, так как информация о гранях и рёбрах не выражена явно. Поэтому нужно обойти все данные чтобы сгенерировать список граней для рендеринга. Кроме того, нелегко выполняются операции на рёбрах и гранях.

Однако, сетки ВП извлекают выгоду из малого использования памяти и эффективной трансформации. Рисунок 2 показывает пример параллелепипеда изображённый с использованием ВП сетки. Каждая вершина индексирует её соседние вершины. Заметьте, что последние две вершины, 8 и 9 сверху и снизу параллелепипеда, имеют четыре связанных вершины, а не пять. Главная система должна справляться с произвольным числом вершин связанных с любой данной вершиной.

Для более детального описания сеток ВП см. Smith (2006)(англ.). [1]

Список граней [ править | править код ]

Сетка с использованием списка граней представляет объект как множество граней и множество вершин. Это самое широко используемое представление, будучи входными данными типично принимаемыми современным графическим оборудованием.

Список граней лучше для моделирования, чем вершинное представление тем, что он позволяет явный поиск вершин грани, и граней окружающих вершину. Рисунок 3 показывает пример параллелепипеда в виде сетки с использованием списка граней. Вершина v5 подсвечена, чтобы показать грани, которые её окружают. Заметьте, что в этом примере у каждой грани обязательно 3 вершины. Однако это не означает что у каждой вершины одно и то же количество окружающих граней.

Для рендеринга грань обычно посылается в графический процессор как множество индексов вершин, и вершины посылаются как позиция/цвет/структуры нормалей (на рисунке дана лишь позиция). Поэтому изменения формы, но не геометрии, могут быть динамически обновлены просто переслав данные вершины без обновления связаности граней.

Моделирование требует лёгкого обхода всех структур. С сеткой использующей список граней очень легко найти вершины грани. Также, список вершин содержит список всех граней связанных с каждой вершиной. В отличие от вершинного представления, и грани и вершины явно представлены, так что нахождение соседних граней и вершин постоянно по времени. Однако, рёбра не заданы явно, так что поиск всё ещё нужен, чтобы найти все грани, окружающие заданную грань. Другие динамические операции, такие как разрыв или объединение грани, также сложны со списком граней.

Читайте также:  10 Минутная почта с паролем

«Крылатое» представление [ править | править код ]

Представленное Брюсом Баумгартом в 1975, «Крылатое» представление явно представляет вершины, грани и рёбра сетки. Это представление широко используется в программах для моделирования для предоставления высочайшей гибкости в динамическом изменении геометрии сетки, потому что могут быть быстро выполнены операции разрыва и объединения. Их основной недостаток — высокие требования памяти и увеличенная сложность из-за содержания множества индексов.

«Крылатое» представление решает проблему обхода от ребра к ребру и обеспечивает упорядоченное множество граней вокруг ребра. Для любого заданного ребра число исходящих рёбер может быть произвольным. Чтобы упростить это, «крылатое» представление предоставляет лишь четыре, ближайшие ребра по часовой и против часовой стрелки на каждом конце ребра. Другие рёбра можно обойти постепенно. Поэтому информация о каждом ребре напоминает бабочку, поэтому представление называется «крылатым». Рисунок 4 показывает пример параллелепипеда в «крылатом» представлении. Полные данные по ребру состоят из двух вершин (конечные точки), двух граней (по каждую сторону), и четыре ребра(«крылья» ребра).

Рендеринг «крылатого» представления графическим оборудованием требует генерирования списка индексов граней. Обычно это делается только когда изменяется геометрия. «Крылатое» представление идеально подходит для динамической геометрии, такой как подразделение поверхностей и интерактивное моделирование, так как изменения сетки могут происходить локально. Обход вокруг сетки, что может пригодиться для обнаружения столкновений, может быть эффективно выполнено.

См. Baumgart (1975) для подробностей (англ.) [2]

Сводка представлений сеток [ править | править код ]

Операция Вершинное представление Список граней «Крылатое» представление
V-V Все вершины вокруг вершины Явно V → f1, f2, f3, … → v1, v2, v3, … V → e1, e2, e3, … → v1, v2, v3, …
E-F Все рёбра грани F(a, b,c) → , , F → , , Явно
V-F Все вершины грани F(a, b,c) → Явно F → e1, e2, e3 → a, b, c
F-V Все грани вокруг вершины Поиск пары Явно V → e1, e2, e3 → f1, f2, f3, …
E-V Все рёбра вокруг вершины V → , , , … V → f1, f2, f3, … → v1, v2, v3, … Явно
F-E Обе грани ребра Сравнение списков Сравнение списков Явно
V-E Обе вершины ребра E(a, b) → E(a, b) → Явно
Flook Найти грань с данными вершинами F(a, b,c) → Пересечение множеств v1,v2,v3 Пересечение множеств v1,v2,v3
Размер памяти V*avg(V,V) 3F + V*avg(F,V) 3F + 8E + V*avg(E,V)
Пример с 10 вершин, 16 граней, 24 ребра:
10 * 5 = 50 3*16 + 10*5 = 98 3*16 + 8*24 + 10*5 = 290
Рисунок 5: сводка операций представлений сеток

В представленной выше таблице, явно указывает на то, что операция может быть выполнена за постоянное время, так как хранятся непосредственные данные; сравнение списков указывает на то, что для выполнения операции должно быть выполнено сравнение двух списков; и поиск пары указывает на то, что должен быть выполнен поиск двух индексов. Обозначение avg(V,V) означает среднее число вершин, соединённых с заданной вершиной; avg(E,V) означает среднее число рёбер соединённых с заданной вершиной, и avg(F,V) — среднее число граней, соединённых с заданной вершиной.

Обозначение «V → f1, f2, f3, … → v1, v2, v3, …» показывает что для выполнения операции необходим обход вокруг нескольких элементов. К примеру, чтобы получить «все вершины вокруг заданной вершины V» используя список граней, нужно сначала найти грани вокруг заданной вершины V используя список вершин. Затем, из этих граней, используя список граней, найти вершины вокруг них. Заметьте, что «крылатое» представление хранит почти всю информацию в явном виде, и другие операции всегда обходят сначала ребро, чтобы получить дополнительную информацию. Вершинное представление — единственное представление, которое в явном виде хранит соседние вершины заданной вершины.

С увеличением сложности представлений (слева направо в сводке), количество информации, хранящейся в явном виде, растёт. Это даёт более прямой, постоянный по времени, доступ к обходу и топологии различных элементов, но ценой увеличения занимаемой памяти для сохранения индексов надлежащим образом.

Как общее правило, сетки использующие список граней используются всякий раз, когда объект должен рендериться с помощью аппаратного обеспечения, которое не меняет геометрию (соединения), но может деформировать или трансформировать (позиции вершин), например в рендеринге статичных или трансформируемых объектов в реальном времени. «Крылатое» представление используется когда геометрия изменяется, например в интерактивных пакетах моделирования или для вычисления подразделённых поверхностей. Вершинное представление идеально для эффективных, комплексных изменений в геометрии или топологии, пока аппаратный рендеринг не важен.

Другие представления [ править | править код ]

Потоковые сетки хранят грани упорядочено, но независимо, чтобы таким образом сетку можно было пересылать по частям. Порядок граней может быть пространственным, спектральным, или базированным на других свойствах сетки. Потоковые сетки позволяют рендерить очень большие сетки даже тогда, когда они ещё загружаются.

Прогрессивные сетки передают данные о вершинах и гранях с повышающимся уровнем детализации. В отличие от потоковых сеток, прогрессивные сетки дают общую форму целого объекта, но на низком уровне детализации. Дополнительные данные, новые рёбра и грани, прогрессивно увеличивают детализацию сетки.

Нормальные сетки передают постепенные изменения сетки как множество смещений нормалей от базовой сетки. С помощью этой техники, ряд текстур отображает желаемые нарастающие изменения. Нормальные сетки компактны, так как для выражения смещения нужно лишь одно скалярное значение. Однако, техника требует ряд сложных трансформаций чтобы создать текстуры сдвига.

Файловые форматы [ править | править код ]

Полигональные сетки могут храниться во множестве файловых форматов:

Здравствуйте, уважаемые читатели Render.ru. Меня зовут Олег, моего коллегу соавтора зовут Владимир, и я являюсь Game Low-Poly моделлером. В данной статье мне бы хотелось бы познакомить вас с азами создания игровых моделей.
Данная статья будет в первую очередь полезна начинающим, но будет интересна и ветеранам индустрии.

Преамбула

Данная статья вынашивалась мною достаточно давно.
В последнее время очень большое число людей направило свой взор в сторону игровых моделей, но, к сожалению, обладая замечательными навыками в создании Hi-poly и Mid-poly моделей, многие совершенно не имеют представления о Low-poly. Как итог, модели получаются хоть и красивыми, но совершенно негодными для дальнейшего использования.
Часто от начинающих игровых художников можно услышать фразу: « Модель делалась для себя, над оптимизацией не задумывался», она является в кроне неверной.
Построение Low-poly модели начинается именно с определения, а зачем же она собственно нам нужна?
В данной статье я хотел бы рассказать именно о различных направлений, в которых используются игровые модели, и о их весьма специфичных требованиях.

Терминология

Вертекс (Vertex, прим. перевод: Вершина) — вершинная точка пространственной фигуры. Имеет набор атрибутов, таких как координаты в 3D пространстве X,Y,Z, и в 2D пространстве U,V.

Грань (Edge, прим. перевод: Грань) – линия, ограниченная двумя вертексами. Содержит координаты образующих ее вертексов, и собственные координаты, являющиеся суммой координат вертексов.

Полигон (Polygon, прим. перевод: Многоугольник) — общее название плоских фигур геометрии. Один полигон минимум состоит из одного треугольников. Состоит из вертексов соединенных гранями.

Треугольник (Triangle) — является базовой фигурой любой модели. Состоит из трех вертексов соединенных тремя гранями.

Квадрат (Quadrilaterals, прим. перевод: квадратный полигон) — Полгигон состоящий из четырех вертексов.

Триангуляция (triangulation) — Процесс разделения полигона на треугольники.

ЛОД (LOD, Level of Detail прим. перевод: Уровни детализации) — набор моделей применяемых с отдалением и приближением игровой камеры.

Примечание: К сожалению, современные методы отрисовки не предполагают использование полигонов состоящих из более чем из трех вертексов. Такие полигоны триангулируются игровым движком, и уже в последствии обрабатываются видеокартой, именно по этой причине рекомендуется самостоятельно триангулировать сетку. Существуют и другие способы отрисовки, но, к сожалению, они не универсальны для различного компьютерного железа, по этой причине сейчас не используются.

Игровые разделы

Читайте также:  Что такое внешняя ссылка в excel

Игровых жанров существует несметное множество, стратегии, шутеры, ролевые игры, квесты, интерактивные новеллы, платформеры, квесты, и многие другие жанры, и множество их под жанров.
Для каждого жанра существуют свои требования к моделям, но есть кое-что, что объединяет их всех — положение игровой камеры, а если быть более точным, то процент занимаемой моделью площади на экране. В дальнейшем, для упрощения мы будем использовать термин положение камеры.
В первую очередь сетка Low-poly модели будет зависеть от положения игровой камеры. Чем ближе игрок может рассматривать модель, тем плотнее должна быть сетка.

Соответственно из всего сонма жанров мы можем выделить для себя всего три направления, наиболее характерно отличающиеся по положению камеры:

– FPS (First Person Shooter) — игра от первого лица, для камеры расположенной ближе всего к игроку и игровому окружению. Основной особенностью данного направления является возможность игрока увидеть в максимальном приближении любую деталь, расположенную на игровом уровне, именно по этой причине в играх от первого лица самая высокая плотность сетки. Ярким и представителем данного направления являются Wolfenstein: The New Order (Crysis3, Fallout 4). Модели для такого типа игр доходят до 25к треугольников, но в целом используются куда как более скромные версии. Так, в вышеупомянутом Wolfenstein, немецкий солдат вместе со всей системой повреждений укладывается всего в 14 333 треугольника.

Чуть более детально: Тело 7.410, Голова 2.222, Глаза 128, Шлем 888, Маска 760, Лицевая броня [намордник] 678, Челюсти 238, система повреждений разбитая на пять частей: ч1 — 476, ч2 — 356, ч3 — 199, ч4 — 219, ч5 — 759. Краткий итог, из полного постоянно видимого комплекта: 12086 треугольников.

Состав текстур: Normal Map с Ambient Occlusion в альфа канале, Specular, Diffuse map. Разрешение немного нестандартное: у тела 3840х3840, у головы 1920х1920, у каски, объеденной с намордником 1920х1920, маска 960х960, система повреждений 960х960, глаза 512х512.

– TPS (Third Person Shooter) — игра от третьего лица, для камеры расположенной на плече игрока, либо на небольшом от него отдалении. В данном разделе игрок чаще и ближе всего наблюдает на экране своего персонажа, а вот приблизить камеру к окружению уже крайне затруднительно. Из современных представителей можно привести в пример нашумевший The Last of Us (Tomb Raider, Uncharted и многие другие). Модели главных персонажей в такого рода играх отличаются высокой плотностью сетки, и большой детализацией, но редко превышают цифру в 40к треугольников.
Рассмотрим модель Элли, из вышеупомянутой игры: Общий полигонаж составляет 31.535.

Детально: Голова 7.164, Волосы 6.054, Торс 5.851, Кисти рук 2.664, Ноги 2.549, Башмаки 1.758, челюсть 547, резинка для волос 359, рюкзак 2.693, ресницы 426, лакрима 558, глаза 912.

Состав текстур: Normal Map, Specular, Diffuse map и Ambient Occlusion для лица. Разрешение классическое: у тела 1024х1024, у головы 1024х1024, волосы 1024х512, ноги 1024х1024, челюсть и руки 512х512, башмаки 512х512, рюкзак 512х512, глаза 256х256, лакрима 128х128.

– Strategy — игры с максимальным отдалением камеры. Крайне интересный раздел, требующий экономии абсолютно на всем. Основная особенность — обилие малых объектов на экране. Самым известным представителем является все же Starcraft 2 (Homeworld: Deserts of Kharak и многие другие). Для данного раздела характерна максимальная экономия на всех объектах. Баталии из сотен анимированных юнитов в одних играх и тысячах в других , множество объектов окружения, ландшафт, все это создает огромную нагрузку на компьютер конечного пользователя.
Все остальные игры будут являться в той или иной степени смешением данных разделов.
2,5 D Game мы подробно рассматривать не будем, так как она близка к TPS, с одной лишь особенностью — камера в таких играх зафиксирована в одном положении, и может быть лишь приближена и отдалена от игрового действа, поэтому для статичных объектов рисуется только видимая половина, а для анимированных (в случае целесообразности, этот пункт мы рассмотрим чуть позже) используются группы материалов.

Игровые планы

Разобравшись с глобальным положением камеры, и определив ее типичные использования в играх, мы с вами выделили для себя три основных направления. Но и в самой игре расстояние от камеры до различных объектов может сильно отличаться.
Условно, игровое пространство можно разбить на четыре плана.

1. Объекты расположенные на экране в максимальном приближении. В данном разделе кроется все оружие, отображаемое на экране игрока (FPS), и игровые персонажи (TPS).

Из-за того что игрок постоянно наблюдает модели данного плана, для них допускается плотная сетка. Но есть одна маленькая особенность, и скрывается она в различных группах материалов для таких моделей.
Итак, рассмотрим классический случай.
Дано: модель пистолета, револьверного типа, с общим числом треугольников 6.810. В постоянной видимости у игрока только часть наружного меша, если выделить ее, то мы получим всего лишь 3.060 треугольников, остальную часть модели игрок увидеть не может. Что бы не загружать всю модель в память, а подгружать нужные элементы поэтапно, игровая модель подготавливается с учетом нанесения на нее двух и более материалов: материал группа для постоянно видимого участка (на картинке желтым), и материал группа для участка видимого только во время анимации (на картинке красным).

Соответственно, на краткий миг анимации перезарядки и появляется на экране ранее скрытый объект. Это позволяет значительно сэкономить постоянные затраты памяти.

Примечание:
–разбивку на материал группы не всегда целесообразно применять, например, когда не видимая часть модели обладает малым полигонажем.
– экранная модель, будь это модель игрока, или модель оружия, имеет две версии: собственно экранная с максимальной детализацией, и мировая модель, где к сетке применяются требования как к объектам нижеописанных игровых планов.

2. Анимируемые объекты второго плана, а именно: персонажи, и противники.

В данном разделе кроются модели монстров, неигровых персонажей, крупных анимированных объектов играющих важную роль в повествовании. Сетка для таких объектов в разы менее плотная чем для объектов первого плана.
Как вы уже могли заметить, сетка не равномерна для всей модели, наиболее плотными участками являются: лицо, волосы, и кисти рук, участки сгибов (локтевые участки, колени, плечи, тазобедренный участок). Связано это в первую очередь с большим числом костей используемых для анимации данных частей тела.
Сетка для анимируемых органических моделей, а так же механических с изгибаемыми элементам преимущественно выполнена кольцами из квадратных полигонов (впоследствии триангулированных). Выполняют сетку именно так, для компенсации сжатий и растяжений сетки (проявляющейся в сжатии, растяжении и перегибах текстуры).

3. Интерактивные объекты.

Объекты, с которыми непосредственно взаимодействует игрок. Требования к сетке таких моделей аналогично требованиям статических моделей — максимальная оптимизация сетки. Подобные модели часто анимируются более грубыми средствами — вращение и сдвиг отдельных блоков.
Аналогично первому плану, некоторые детали могут быть скрыты от игрока, и их следует отделять материальными группами.

4. Элементы локации:

В современных играх предполагается построение уровня из заранее подготовленных моделей (Unreal Engine, Unity). Для левел дизайнера подготавливается набор моделей, состоящий из различных панелей, крупноблочных объектов, плитки и многого другого, размещаемого непосредственно на уровне. Все эти объекты должны быть максимально оптимизированы, ибо являются наиболее многочисленными.
Необходимо отметить, что современные игровые движки могут отрисовывать миллионы треугольников, но сильно ограничены по числу активных объектов. Так в Unreal Engine проявляются первые признаки заторможенности при всего 1000 объектах на экране, при этом не имеет значение степень детализации данных объектов. Именно по этой причине, после построения уровня в редакторе, его необходимо поэлементно укрупнить в различные объекты, не забывая про разделение на материал группы.
На изображении ниже приведен пример игрового уровня с высокой плотностью сетки. Как вы можете заметить, элемент уровня имеет цилиндрическую форму, что приводит к значительному увеличению полигонажа относительно стандартных уровней.

Читайте также:  Homtom ht3 pro дисплей

Численность объектов

Степень детализации сетки зависит не только от положения камеры, но и от числа объектов на экране.
Сетка для часто повторяющихся объектов, например для травы, листьев, должна быть максимально простой.
Геометрия крупных часто повторяющихся объектов, находящихся на различном расстоянии от игрока должна иметь несколько ЛОДов, для облегчения нагрузки на видеокарту (Деревья, скалы, другие объекты)
Так же следует отметить, что для интерактивных объектов часто променяют уровни детализации (LOD).
Смысл ЛОДа — в создании дополнительной более низкополигональной модели, подменяющей оригинальную на больших расстояниях от камеры. Такие модели следует изготавливать с учетом возможного повторного использования текстур от нулевого ЛОДа. К сожалению, карту нормалей повторно использовать невозможно.
Наиболее простой алгоритм получения материала для ЛОДов — перепекать все карты непосредственно с нулевого ЛОДа.
К сожалению, у ЛОДов есть побочный эффект — в игровых движках они учитываются как отдельная модель, и они занимают дополнительное место в графической памяти.
Для сложных единичных объектов, решение о необходимости ЛОДов принимается в зависимости от максимального расстояния, с которого они должны быть видны.

Частые ошибки при создании игровых моделей

Мы с вами рассмотрели на что следует обращать внимание и как классифицировать вашу игровую модель. Разобрали основные требования к игровым моделям, а теперь мне бы хотелось вам рассказать об основных ошибках, допускаемых как профессионалами, так и новичками.

1. Сохранение не формообразующих высоту вертексов.

Данная ошибка является самой грубой и наиболее распространенной у новичков. На модели допускается сохранять только вертексы создающие основную форму модели, в крайних случаях возможно сохранение защитных бордеров (дополнительный лупс препятствующий искажению нормалей), а так же лупсов обеспечивающих симметрию развертки, но необходимо трезво оценивать их необходимость.

2. Несоразмерность детализации.

Как уже ранее говорилось, плотность сетки должна напрямую зависеть от возможности приблизить камеру к объекту.
На изображении ниже можно увидеть яркий пример несоответствия размеров кнопки и платы. плата предназначенная для установки в дверную кнопку выполнена из 1020 треугольников, при условии что теоретически на экране может занимать максимум 128х256 пикселей. Подобная плотность сетки недопустима.

Стоит так же отметить, что не следует делать сетку плотной на сложно доступных для обозрения участках.

3. Утечка нормалей

При запекании нормалей на цилиндрах, часто сталкиваешься с довольно неприятными последствиями — кольца расположенные на теле модели теряют свою форму.
Связано это с особенностью расположения нормалей и Smooth-group.

На изображении представлены различные сочетания Smooth-group, положений крышки Low-poly модели относительно Hi-poly.

1) Hi-poly модель, с которой и запекается карта нормалей.

2) Простая Low-poly, с одной Smooth-group, крышка в уровне Hi-poly. На данной модели при фронтальном расположении камеры мы наблюдаем заметное искажение кольца и фаски, при наклонной камере дефекты становятся незаметными. Подобный тип игровой содели следует применять для малых объектов и при условии расположения камеры под углом.

3) Простая Low-poly, с одной Smooth-group, крышка ниже Hi-poly. Проблемы аналогичны п. 2. дополнительно подчеркивается вредная фаска.

4) Простая Low-poly, с двумя Smooth-group, крышка в уровне Hi-poly. На данной модели при фронтальном расположении камеры мы не наблюдаем никаких искажений, при наклонной камере проявляются грани модели. Подобный тип игровой модели следует применять для малых объектов и при условии расположения камеры фронтально.

5) Простая Low-poly, с двумя Smooth-group, крышка ниже Hi-poly. Проблемы аналогичны п. 2. дополнительно теряется фаска.

6) Более сложная Low-poly с фаской и с одной Smooth-group. На данной модели любом положении камеры мы наблюдаем остаточные незначительные эффекты искажения. Подобный тип игровой модели следует применять для крупных объектов.

7) Более сложная Low-poly с фаской и с двумя Smooth-group. На данной модели при фронтальном расположении камеры мы не наблюдаем никаких искажений, при наклонной камере проявляются грани .

Методику построения лоуполи модели и выбора Smooth-group следует принимать в зависимости от положения игровой камеры. Если мы чаще наблюдаем объект фронтально, то лучше использовать случаи № 4, 7.
Если мы наблюдаем объект чаще под углом, то лучше использовать случай № 2.
Если объект обозревается игроком со всех сторон, то наиболее адекватным будет являться случай №6.

4. Оптимальность сетки

Очень часто при создании игровой модели, забывают про плотность сетки на разных участках модели.
Так отверстия в дуле орудия и участки ввода одной геометрии в другую, обладает тем же числом вертексов, что и сам ствол, что не соответствует его размеру, и лишний раз подчеркивает низкополигональность вашей модели. Рекомендуется при уменьшении размеров геометрии соответственно уменьшать плотность сетки, а при увеличении — увеличивать. Так же рекомендуется на участках пересечения разной геометрии повышать плотность сетки, что бы избежать «проглядывания» геометрии

На изображении ниже представлены два цилиндра с одинаковым числом треугольников.

5. Лишняя геометрия

Не следует допускать появления легко сводимой в карту нормалей геометрии на модели. Лучше свободные вертексы направить на улучшение других форм модели.

Интересные Факты

1.Вершинный Shader.

В игровых моделях, полигонаж считается в треугольниках, но данный расчет не отображает реальной картины.
Каждый 3D художник в своей жизни хотя бы раз пользовался Smooth-group (для Blender модификатор edge split). Особенностью применения данных функций, является умножение числа вертексов для создания Smooth поверхностей. Так же следует отметить, что Shaderы отрабатывают не по треугольникам, а именно по вершинам, что приводит к большей сложности вычислений на моделях, состоящих из большего числа Smooth-group.
Именно поэтому рекомендуется создавать игровые модели в одной Smooth-group, прибегая к разделению только в редких случаях.
Полностью отказаться от использования множественных Smooth-group к сожалению невозможно, ибо это приведет к резкому росту активного полигонажа модели. Каждый раз при подготовке Игровой модели, следует взвешивать, что лучше использовать: защитные бордеры (дополнительный лупс по периметру опасной зоны), либо Smooth-group.

2. Развертка модели

Одним из критериев качества модели является степень заполнения разверткой текстурного пространства.
Разворачивать модели рекомендуется с минимально необходимым числом швов, по все той же причине порождения дополнительных вертексов, и появлении текстурных швов на модели.
С появлением таких редакторов как Substsnce painter, практически исчезло требование по удобочитаемости развертки.
Стоит повторить классику: всегда проверяйте соразмерность различных элементов развертки. Два кусочка незначительно отличающихся по разрешению, но находящиеся вплотную к друг другу сильно портят визуальное восприятие модели.

3. Требования движка.

При разработке модели необходимо учитывать так же специфические требования движка.
К примеру, у Unreal Engine отличается Tangent space, что приводит к некорректной работе карты нормалей: проявляются швы, перекручиваются нормали. Соответственно в моделях приходится закладывать дополнительные защитные бордеры, препятствующие проявлению дефектов.
И еще один пример из далекого 2004 г. Одна из самых технологичных игр того времени, DooM 3 обладала крайне специфичным Tangent space, и нормали было возможно запечь только в нем самом (за исключением плоских).
Подобные особенности характерны для всех движков без исключения. Просто так их все описать невозможно, необходимо детально изучить движок под который вы работаете.

RPI.su — самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected] . Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.

Комментировать
11 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector