{"id":3881,"url":"\/distributions\/3881\/click?bit=1&hash=e456b64697230d93edcda0dd20f3c8aa5d4abd88effca1a7571a12fa6564c38a","title":"\u0413\u0435\u0439\u043c\u0434\u0435\u0432-\u043a\u043e\u043d\u043a\u0443\u0440\u0441, \u0433\u0434\u0435 \u043f\u0440\u0438\u0437\u044b: \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435","buttonText":"\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c","imageUuid":"a410dbd1-804c-54dc-84ea-e6227d71d9b4","isPaidAndBannersEnabled":false}
Gamedev
XYZ School

Статья 3/7 про сетку. Lowpoly, Highpoly и вертекс нормали

Это третья из семи статей из цикла про этапы пайплайна. Подписывайся на наш паблик в Вк или ФБ , чтобы не пропустить следующий выпуск.

Прошлая статья была про драфты.

Сегодня статья посвящена второму этапу пайплайна — сетке. А следующие статьи будут про развёртку, запечку, текстуры и подачу.

Сейчас мы разберём:

Что такое сетка, зачем она нужна и из чего состоит.

Как делать lowpoly и highpoly, как они связаны между собой.

— Какие моменты на этапе сетки влияют на свет, блики и развёртку.

— И немного поговорим об особенностях всех игровых движков, которые необходимо учитывать в работе.

Приступим!

Из чего состоит любая 3D модель

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

Прежде чем говорить о работе с lowpoly и highpoly давай разберём из чего состоят все модели и какие особенности игровых движков нужно знать.

Любая 3D модель состоит из:

⚫️ Точек (vertex, вертекс)

➖ Рёбер (edge, эдж)

⬛️ Плоскостей (tris, polygon, nGon, трис, полигон, эн-гон)

#1 Точки (вертексы)

Это простейший элемент модели.И на самом деле это не просто точка, а точка, у которой, помимо её координат в пространстве, есть ещё один важный параметр — направленность.

Записывай, у каждой точки (вертекса) есть 2 параметра:

Вот он, красавец, висит в бескрайнем космосе 3D пространства
  • Её положение в пространстве (по осям x, y, z)
  • Её направленность. Эта характеристика называется «вертекс нормаль».

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

У поведения света в игре есть свои особенности, которые влияют как на работу с сеткой, так и на все последующие этапы пайплайна. Давай разбираться вместе! Очень скоро ты узнаешь, как кокретно поведение вертекс-нормалей влияет на блик твоей будущей модели. Не торопись и читай внимательно, чтобы не запутаться.

#2 Рёбра (edge)

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

#3 Полигоны (polygons)

3 точки создают треугольник. Как ты помнишь из школьной геометрии, 3 точки создают плоскость.

В программах для моделирования полигон может состоять не только из трёх точек. Помимо треугольников, есть четырехугольник (quad/квад) и n-gons (нгоны, многоугольники). При желании, ты можешь создать полигон из любого количества точек.

Но, будучи трёхмерщиком, ты не должен забывать, что под капотом всех игровых движков и программ для 3D моделирования лежит одна особенность — в них всё состоит из треугольников. Поэтому когда ты сделал квад или нгон, то программа всё равно у себя глубоко в коде видит только треугольники.

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

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

Почему это важно?Помнишь, что у каждой точки есть своя вертекс нормаль, от которой зависит поведение света? Как мы говорили, алгоритмы триангуляции везде разные, поэтому есть вероятность что в твоей программе всё выглядит ок, но в движке внешний вид модели может отличаться.

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

Слева — плохая триангуляция, справа — хорошая. Видишь разницу?

Поэтому одна из задач создания игровой сетки — триангуляция. Мы переводим всё в треугольники руками и поэтому на 100% уверены в том, что блик будет везде одинаковым, но об этом чуть дальше в статье.

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

Такие полигоны называются непланарами (non-planar)

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

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

Поэтому, когда ты создаёшь самый примитивный объект в программе, например, куб, сразу создаётся 8 вертексов, 12 рёбер и 6 полигонов (которые делятся на 12 треугольников), а у каждого из вертексов есть вертекс нормаль, которая влияет на поведение света.

Несколько особенностей игрового света

1 Вертекс нормали влияют на видимость полигона

Как ты уже знаешь, у каждой точки полигона есть своя вертекс нормаль.Так вот, если нормаль направлена в твою сторону, то ты видишь полигон.

Но есть одна особенностей игровых движков. Если вертекс нормаль направлена ОТ камеры, то полигон становится полностью прозрачным, невидимым.

Для удобства моделеров, программы умеют показывать полигоны вне зависимости от того, с какой стороны ты смотришь. Но можно включить backface culling, и тогда увидишь следующую картину:

Видишь? Внутренние грани куба при вращении камеры становятся прозрачными. Именно поэтому, если из-за бага игры ты оказался внутри здания, ты видишь сквозь него, потому что ты смотришь на обратную сторону полигона.

Все мы иногда сталкивались с таким багом. Теперь ты знаешь, почему так происходит.

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

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

2 Вертекс нормали влияют на блик каждого полигона

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

По-умолчанию, вертекс нормали перпендикулярны плоскости. Угол 90°.

Видишь, есть прямоугольник. Вертекс нормали расположены перпендикулярно.

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

Натяни на этот прямоугольник текстуру листика от дерева, главное, не забудь карту прозрачности. Потяни вертекс нормали в разные стороны и увидишь то, как прямоугольник преобразился.

Погугли tree leaf vertex normal, и найдешь много клёвых игровых лайфхаков

В игре у тебя просто 4 точки и файлик с текстурой. Это всего 2 треугольника, зато если ты покрутил вертекс нормали, то лист на дереве будет бликовать так, как будто это уже не прямоугольник. Выглядит так, будто у него гораздо более сложная форма.

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

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

3 Вертекс нормали влияют на жесткость граней

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

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

Если склеить нормали в одну — две стенки будут бликовать как одна плавная форма (на самом делее редактор оставляет только один вертекс, нормаль которого усредняет)

Записывай:

Объединение вертекс нормалей даёт гладкий блик.Такой блик появляется из-за мягкого ребра (софт эджа, Soft Edge).А если вертекс нормали направлены в разные стороны, то блик будет разделён, и между полигонами получится жесткая грань. Её называют хардом (Hard Edge).

Сначала все грани жесткие, затем часть граней делаем мягкими, а в конце все грани становятся мягкими

Сначала все грани жесткие, затем часть граней делаем мягкими, а в конце все грани становятся мягкими​

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

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

Правильные хард и софт эджи дают красивый блик, который подчёркивает нужные детали модели.

Например, здесь сначала вся модель покрыта жесткими эджами, и поэтому выглядит гранёной и несимпатичной. Затем мы сделали все эджи мягкими, и в части модели формы стали слишком мягкими + местами появились странные черные пятна. В конце я назначил автоматические харды и софты по углу в 60°, и тогда модель забликовала идеально!

​Кстати, вот такое забавное следствие этой технологии — 4 квадрата имеют такой же блик, как и цилиндр, потому что так устроена магия вертекс нормалей

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

​Особо часто вертекс нормали любят править в кино, чтобы блик был чистым и предсказуемым

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

Теперь ты знаешь, что вертекс нормали могут сделать объемный блик на плоскости. Они также могут сделать острый стык двух плоскостей гладким. И всё это потому, что вертекс нормали задают поведение света. Он отражается не как настоящие фотоны, а так как ты ему скажешь. Этот лайфхак лежит в основе работы над LowPoly. Если голова плавится — отдохни, выпей чаю, сложное позади. Готов двигаться дальше?

Чего мы хотим на этапе сетки?

Все зависит от пайплайна. В игровом ААА пайплайне нам нужно сделать 2 разные сетки: LowPoly и HighPoly.

На LowPoly мы хотим чтобы было минимум полигонов, максимум детализации и красивый блик. Есть старая добрая технология карт нормалей, которая позволяет тебе во много раз сократить количество полигонов, добавить на модель сотню мелких деталей и при этом вписаться в любые лимиты проекта

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

Сколько точек тебе нужно? Подумай и напиши на листочке ответ.

Правильный ответ — тебе нужно ровно 8 точек. И ещё нужен очередной трюк — запечка нормала.

Как работает трюк с запечкой?

Ты уже знаешь, что нормали есть у каждой точки твоей модели. И изменяя их, ты меняешь поведение света. Но нормали находятся именно у точки, нельзя просто взять и поставить только нормаль в произвольное место (есть еще фейс нормали — нормаль полигона, но по-факту это усредненная нормаль всех вертексов этого полигона).

К сожалению, нормали ты можешь фиксить руками только там, где есть вертекс. А просто добавить нормаль внутри полигона не получится.

Зато есть клёвая технология Normal Map (карты нормалей). Это текстура, которая создаёт виртуальные вертекс нормали внутри каждого пикселя.

Вот обычный куб, самый простой.

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

Просто синий цвет. 128,128,255 RGB

А теперь открой фотошоп и добавь на него вот такую детальку:

В красном канале горизонтальный градиент, в зеленом канале вертикальный

А теперь смотри что будет, если этот Normal Map привязать к модели:

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

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

Ещё важный момент — никто не рисует Normal Map руками. Есть классные технологи запечки и рисования нормала. Скопируй этот куб в отдельный файл, замодель полигонами в нём любую детализаци. Получишь следующее:

Теперь у тебя есть 2 файла — просто куб. И куб с кучей деталей. В отдельных файлах.

Так вот, просто куб — это и есть твоя LowPoly модель. Именно её ты будешь вставлять в игровой движок. Она оптимизирована и в ней нет лишних полигонов. А есть HighPoly модель — это куб с кучей деталей.

Есть технология «запечки», которая позволяет перенести все вертекс нормали с детальной модели на лоуполи, и сохранить их в Normal Map. Тогда произойдёт чудо — у тебя всего 6 полигонов, а модель бликует как куб с кучей деталей!Очевидно, что эту технологию обожают в геймдеве!

Теперь ты понял!

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

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

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

Давай повторим: Только что ты узнал, что всё в трёхмерке сводится к точкам, ребрам и плоскостям. Это и есть составляющие любой 3D модели, вне зависимости в какой программе ты работаешь.

У каждой точки есть направленность. Она называется нормалью (Vertex Normal). Свет в 3д редакторе — это математическая абстракция, и блики высчитываются благодаря вертекс нормалям. Это называется шейдингом (shading). Если несколько вертексов одного полигона направлены в одну сторону — этот полигон будет бликовать как плоскость.

3 вида полигонов. Из этих ребят собирают все 3д модели в видеоиграх и кино.

Если все вертексы направлены в одну сторону, то полигонь будет бликовать как плоскость.Если они направлены в разные стороны, то бликовать будут по-другому.

Любые 3 точки, соединенные рёбрами образуют самую простую плоскость — треугольник. Но работать с треугольниками неудобно, поэтому умные дядьки сделали четырехугольники (квады) и многоугольники (n-gon).

​#триангуляция

На самом деле все полигоны в редакторе или движке — треугольники, но для простоты работы редакторы умеют отображать квады и многоугольники.

Для экспорта модели в видео игру ее надо обязательно триангулировать. Если довериться в этом вопросе движку — он может неправильно триангулировать не плоские полигоны и н-гоны и испортить блик на модели (шейдинг)

У каждого полигона есть две стороны — передняя и задняя. По умолчанию внутренняя сторона прозрачна (это называется backface culling), однако современные 3д программы умеют заливать цветом или материалом задние стенки.

Есть программы работающие на других технологиях, например воксели (Voxel) — «пиксели» в 3д пространстве, и CAD технологии — работающие на основе математики, но в видео играх они не используются. В этой статье мы будем говорить только о полигональном моделировании.

Фух, было потно это писать!

Теперь ты готов к работе с сеткой!

Виды сетки

Можно длого говорить про сетку, потому что работа над сеткой для игры, мобильной игры, кино или мультика будет отличаться. Но, как ты помнишь, мы пишем цикл по ААА-пайплайн, т.е. алгоритм, по которому моделят для всех топовых видеоигр. Поэтому мы сделаем акцент на оптимизации сетки для игровых движков.

Теперь пришло время оптимизировать сетку для игры!

В чём заключается оптимизация?

Драфт нельзя засунуть в игру.Как ты уже понял из первой половины этой статьи — с ним будет много проблем. Начиная с того, что движок может её неправильно триангулировать, заканчивая тем, что драфт может не вписаться в лимиты проекта.

Отсюда вытекает потребность в создании лёгкой модели, в которой всё из треугольников и минимум полигонов. Такая модель называется LowPoly.

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

Если следовать пайплайну, то всю детализацию — все скругления и детали мы делаем через технологию запечки HighPoly на Normal. Поэтому мы должны взять драфт, сделать его супер детализированным, а потом просто запечь эти детали и натянуть на LowPoly модель через Normal map.

Как видишь, у последней картинки «Модель в игре» вего 8 полигонов. А вся детализация сделана через Normal Map.

Надеюсь, ты понял принцип работы.

Если работаешь по пайплайну для игры, то на этапе сетки нужно сделать LowPoly и HighPoly с правильной топологией.

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

Как это сделать мы разберём прямо сейчас, а про запечку будет отдельная статья.

3 вида сетки

Есть три вида сетки: лоу-, мид- и хайполи

  • LowPoly — упрощённая и оптимизированная модель для игры с минимальным количеством полигонов.
  • HighPoly — максимально детализированная модель, которая нужна, чтобы перенести всю детализацию на LowPoly через Normal Map
  • MidPoly — компромис между бесконечно детализированными хайполи и оптимизированными лоуполи. Используется в основном для кино.

Давай разберём каждый из трёх видов по отдельности.

1. Low Poly

LowPoly для видео игры необходимо сделать максимально легким, с небольшим числом треугольников.

Все плоские детали рисуют в текстурах или на нормале, а геометрией отбивают только объекты, влияющие на силуэт. В игровом движке такая сетка всегда триангулирована.

Лоуполи для разных игр отличаются. На мобилках лоуполи очень легкая, 2к — 10к треугольников. На некоторых ААА проектах любят вшивать всю геометрию в огромные цельные формы, а на других каждую деталь отбивают отдельной геометрией. Есть проекты, где на главного персонажа выходит 50-60к треугольников, а бывают проекты по 250к треугольников на персонажа.

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

Лоуполи сильно зависит от технологии. На мобильной игре на важном объекте 5-7к полигонов. В старых играх важные объекты были в 10-15-20к полигонов. Сейчас игры легко тянут модели по 50-150к полигонов. Бывают и выше, по 200-300к полигонов на огромные модели, например, корабли/танки/дома. На лоуполи бывают разные правила. Одни модели делаются цельными кусками геометрии, другие разбиваются на детальки.

Картинка из интернета. Лоуполи с бампом (это как нормал, но чуть проще) и хайполи.

Откуда берётся лимит на лоуполи?

Допустим, технический директор высчитал ограничение на локацию в 10 млн полигонов и 200 материалов. Отсюда высчитывается. По 150-200 моделей. В среднем от 10 до 100к полигонов. Это ограничение взялось из производительности движка и железа, под которое делается игра. И, конечно же, без опытного технического директора такие лимиты не высчитать.

Как работает видеокарта?

Она рендерит в среднем по 60 кадров игры в секунду. В реальном времени. На 1 кадр она требует около 10 000 проходов для отрисовки всех моделей, текстур, частиц, эффектов, интерфейса, и прочего. Для этого видеокарта отправляет вызовы отрисовки (draw call) процессору. Процессор — узкое горлышко любого рендера, поэтому работа над оптимизацией часто сводится к оптимизации вызовов отрисовки (поэтому делаются конструкторы, атласы и прочие хитрости для ускорения рендера).

В общем, чем меньше полигонов на твоей модели, тем лучше себя чувствует движок игры. Важно понимать, что игровым движкам проще работать с меньшим количеством полигонов и кучей деталей на Normal Map, чем наоборот.

Есть крутые ролики про то, как работает видеокарта:

Вот еще несколько роликов:

Rise of the Tomb Rider: https://youtu.be/PiMyGHLIoXA

Как сделать лоуполи?

Запомни правила лоуполи:

  • На лоуполи важны только полигоны, которые влияют на силуэт и строят формы.
  • Элементы, которые не видишь — их надо удалять
  • Всё, что слишком угловато на силуете — скругляй. Иногда для этого надо добавить новую геометрию.
  • Все плоские детали, не влияющие на силуэт, рисуются через текстурыили на нормале.

Когда цилиндры кратны 4, а число сечений зависит от размера цилиндра.

Верхний ряд выглядит гармонично с одинаковой плотностью сетки, а на нижнем маленькие цилиндры слишком плотные, а большие недостаточно детальные.
  • Удаляй задние стенки у объектов.
  • А все пересекающиеся объекты немного утапливай друг в друга. Не стоит топить их сильнее — тогда ты впустую потратишь место на развертке, и не стоит их ставить впритык друг к другу — из-за особенности технологий может появиться зазор, через который шов будет уродливо бликовать.

Поэтому лучше всего по возможности перед запечкой переносить сложные формы в треугольники

Все не плоские четырёхугольники и многоугольники желательно превратить в треугольники вручную.

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

Т.е. на этапе лоуполи, это делать не обязательно, т.к. развёртку проще делать с квадратами, но потом этот момент нужно учесть.

Одна и та же модель с разной триангуляцией. Внизу лоуполи с нормал мапом. Как видишь, неправильная триангуляция ломает блик, если нормал был запечен в другой программе с другой триангуляцией.

2. High Poly

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

Запомни: на хайполи можно всё.

Хайполи не ограничено количеством полигонов. Главное ограничение — чтобы файл открылся у тебя на компе.

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

Когда нужно делать хайполи

В видеоиграх хайполи нужна для запечки нормала. Только для него.

Для сложных органических форм первым делают хайполи, а потом «ретопят» в лоуполи (обводят лоупольной сеткой, об этом сегодня говорить не будем, но вот короткая затравочка для тех, кому очень любопытно)

3 способа сделать хайполи

Это сабдив геометрия под запечку https://skfb.ly/6MDEM​

1) Cабдив (subD) — это создание хайполи через поддержки. Ты делаешь формы, накладываешь поддержки, они правильно скругляются, получается максимальная точность. Это старая и крутая технология, задача которой делать круглые фаски и гладкие формы.

Большинство трехмерщиков начинают изучать 3д именно с сабдива. Почему-то так принято вести большинство курсов по 3д. Мне кажется, что важнее научиться делать клёвые формы, и уже потом учиться сабдиву. Самое важное на сабдиве — понять, как строить лупы и кольца полигонов, чтобы они подчеркивали твою форму.

На левой модели полигональные кольца направлены без учета формы, а на правой они аккуратно обводят угол.​

2) Скульпт — необходимо, если у твоей модели мягкие формы, органика. Неточные, неровные формы. Складки, грибы, мягкие формы — смело лезь в СКУЛЬПТ. Это как пластилин, только в 3д. Скульпт делает сетку настолько плотной, что мнешь ее как пластилин в специальных программах (zBrush, mudbox, 3d coat). Главная особенность скульпта — можно работать с десятками и сотнями миллионов полигонов!

  • Есть еще воксельное моделирование в программах вроде 3D Coat и Polybrush — это тот же скульпт, но работающий чуть на других технологиях. Загугли если интересно.

3) CAD геометрия. Есть очень клевая софтина fusion360. Ее сделали для инженеров, чтобы они проектировали и собирали реальные мосты, машины, роботов и прочие штуки для реального мира. Но программа оказалась настолько удобной и клёвой, что в нее влюбились концепт художники. Чтобы делать роботов и железо.

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

  • Марвелоус дизайнер — прога для симуляции тканей. Сделана чтобы дизайнить одежду. Но оказалась настолько простой, что ее стали использовать в кино и играх.

Я не очень хочу останавливаться на теме хайполи — статья и без того огромной вышла, а хайполи — самая популярная 3D тема в интернете.В этой статье мы сделали упор на те моменты, которые в рунете довольно сложно найти. Главное, помни, что для видео игр хайполи делается только для того, чтобы запечь фаски.

3. Mid Poly

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

Пример мидполи сетки из Love Death and Robots. Она уже достаточно детальная, и рендерится вот так, а большей детализации ей делать не нужно.

Подведём итоги

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

К чему ведут провалы на этапе сетки?

— К плохой оптимизации и неаккуратному шейдингу.

— Плохую лоуполи даже текстуры не спасут.

— Ошибки с хардами и софтами испортят запечку и текстуры (об этом поговорим в статье про запечку поподробнее).

— Плохая хайполи с потягами и плохим шейдингом — пиши пропало, она не запечется.

— Хайполи и лоуполи должны совпадать. Они должны быть похожи друг на друга и покрывать друг друга. Иначе будут проблемы на запечке.

Что дальше?

Следующий этап пайплайна — делаем на лоуполи развёртку, чтобы можно было наложить на неё текстуры в самом конце.

А после развёртки мы будем запекать детализацию с хайполи на лоуполи.

Даты писать не будем — мы в них не попадаем (работы много, курсы, все дела, не успеваем статейки писать)

Подписывайся на наш паблик в Вк или ФБ, чтобы не пропустить следующий выпуск.

Жди продолжение!

0
71 комментарий
Написать комментарий...
Wizaryx

Отличная статья для новичков. На ДТФ такого не хватает - все заполонили обзоры и новости фильмов и игр

Ответить
Развернуть ветку
Егор Соколов

И фото кодзимы и какой-то рандомной японки.

Ответить
Развернуть ветку
1 комментарий
GKLeight

Полезная статья!

Единственное, везде (включая этот туториал), где пишут про нормали, забывают сделать дополнительный упор на то, что карта нормалей, это всего лишь текстурная карта, которая позволяет шейдеру имитировать освещенность пикселей. Грубо говоря,, освещенность пикселя домножается на значения из с карты нормалей.

Это принципиально важный момент в понимании работы технологии: Normal map это НЕ виртуальные vertex normal'и, это карта, которая засветляет или затеняет пиксели на уровне шейдера. С реальными вертекс нормалями она не имеет ничего общего, имхо, опасно приводить в пример вертекс нормали - это дает неверную ассоциацию.

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

Новичкам кажется, что нормал - это волшебная штука, дающая объем. Что в корне не верно(когда-то, у меня на понимание этого ушло слишком много времени, потому что об этом как-то не принято писать в туторах, что в 2005 , что сейчас). Это просто текстурная карта, которая для некоторых ракурсов позволяет обмануть наш мозг,  по факту, просто затеняя/засветляя пиксели. 

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

Ответить
Развернуть ветку
Катерина Буракова

Совершенно верно. Я как человек, впервые севший за 3Д редактор пару недель назад, не совсем поняла, на что действует карта нормалей там, где нормалей нет (посередине полигона). Спасибо за комментарий! 
А статья хороша, много тонкостей узнала

Ответить
Развернуть ветку
1 комментарий
Darkusoid

Вот ради чего стоило вводить подписки на дтф, теперь можно быть спокойным, что ничего не пропущу:)

Ответить
Развернуть ветку
Severomor

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

Ответить
Развернуть ветку
XYZ School
Автор

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

Ответить
Развернуть ветку
lamurchik

Да прям вот так и не печется никто. Срезают 5к в тыщу, хотя можно в 500. Или делают сразу яблочки по 16 поликов, как в Одиссее. Еслиб пеклись - игры делали бы по 10 лет. Сейчас слишком много ассетов в одном проекте. 

Правило 80 - 20 используют почти все и везде, кроме самых энтузиастов. 

Ответить
Развернуть ветку
YourFan
 о которых еще не так давно даже мечтать не могли

2000 год - 1 ядро с 500 Mhz процом.
2019 год - 2 ядра с 1500 Mhz процом.
Ух, за 20 лет производительность CPU стало аж в 6 раз выше! 
И даже, если пропускная способность GPU стала в 20 раз выше, то +100500 геометрии в кадре (а еще и тесселяция и жирные вертексы с PBR-текстурами) уделывает этот прогресс с полпинка.

Ответить
Развернуть ветку
1 комментарий
Anthony

количество геометрии в кадре возросло.  

https://legacy.3drealms.com/max/walkthrough/images/wt/maxp/110001.jpg

Ответить
Развернуть ветку
Sidzaru

"Смотри на гифку и увидишь..."
Какую гифку?

Ответить
Развернуть ветку
XYZ School
Автор

дтф не умеет в гифки. А их мы в вк использовали (вся статья в гифках) https://vk.com/@xyz_gamedev-statya-pro-setku

Ответить
Развернуть ветку
3 комментария
SILA SVETA

Игорец, ты сам пишешь статьи или для этого есть специально обученный человек? Можешь как нибудь написать пост или статью как делают Wrinkle мапы для игр? Типа анимируемых складок на одежде персонажа во время ходьбы, ещё эти карты как то цепляют к лицам персонажей, для создания более реалистичных мимических выражений.

Ответить
Развернуть ветку
klopizh

Так это обычный блендинг 

Ответить
Развернуть ветку
22 комментария
Igor Dyatlov

Я в них совсем не силен, так что статью такую не жди

Ответить
Развернуть ветку
2 комментария
Sigurd

Очень интересная статья, Игорь, спасибо. А у вас нет в планах рассказать об использовании 3Д сканирования как альтернативе рисованию моделей с нуля?
Ох я бы такое почитал...

Ответить
Развернуть ветку
Igor Dyatlov

Может быть однажды
кто знает

Ответить
Развернуть ветку
Здравый франт

Про направленность точек не знал, но очень часто сталкивался и даже фиксил)

Ответить
Развернуть ветку
Nomad Tablet

Спасибо, очень информативно!

Ответить
Развернуть ветку
Giorgio N

Интересно, не думал, что триангуляция так важна для игр. Наоборот бесила, что на Скетчфаб иногда загружалась триангулированная модель, хотя в Максе ставил отмену триангуляции. Сейчас в Блендере, всё чётче в этом плане. Кстати нормал понравилась самому рисовать, конечно не слишком сложный, но для лоу-поли моделей подходит.

Ответить
Развернуть ветку
klopizh

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

Ответить
Развернуть ветку
Мельнеченко Олег

@XYZ School  Спасибо за статью!, познавательно.
На всей статье споткнулся только на объяснении цилиндров - на изображении представлены сечения цилиндра плоскостью перпендикулярной оси цилиндра, как понять фразу "сечения пропорциональны диаметру", по какому параметру? если имелось ввиду сечение осевое  - оно уже равно диаметру. Думаю имелось ввиду "диаметр должен быть пропорционален длине грани(ребра) цилиндра". Тогда вопрос - с помощью каких инструментов создавать цилиндры с правильными пропорциями, и как понимать - где потребуется цилиндр с 32 гранями, а где с 8 ?

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
1 комментарий
XYZ School
Автор

Большие цилиндры должны быть на 32 сечения (грани) и больше, например водонапорная башня в игре может быть на 48 сечений — изи. А вот небольшой цилиндр, например перила на лестнице, стоит делать с меньшим числом сечений. Это зависит от размера цилиндра. Если сделать цилиндр радиусом в 1 метр на 12 граней — все игроки будут видеть очень угловатый диск, а если сделать крохотную чашку на 120 граней — это будет слишком дорогая чашка для движка, и тех директор спасибо не скажет

Ответить
Развернуть ветку
Антон Богасевич

Многа букафф, но Сцуко интересно 🤔

Ответить
Развернуть ветку
Владимир Кондратьев

Хорошая статья, потомм почитаю.

Ответить
Развернуть ветку
Влад Морозов

Нихуя не понял, но интересно!

Ответить
Развернуть ветку
orga nizm

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

Ответить
Развернуть ветку
XYZ School
Автор

Вообще есть
последняя треть почти вся про лоуполи топологию
но про сабдив топологию мало — эта тема очень заезженная, а статья итак огромная, и я решил ей пожертвовать

Ответить
Развернуть ветку
Snowball Snowball

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

Ответить
Развернуть ветку
Snowball Snowball

Ну и воксели и brep ограниченно все-таки применяются в играх. для вокселей как пример Claybook, там в принципе нету треугольников, насколько мне известно, все на signed distance field'ах. А кадовский brep можно тоже использовать как часть пайплайна, например, через динамическую тесселяцию

Ответить
Развернуть ветку
Denis Kuandykov

Ох боюсь если детально описывать суть нормалей и вершин, то статья бы про них одних  вышла в 2 раза всего текста тут.

Ответить
Развернуть ветку
Остин Пауэрс

Опечатка: "Очень скоро ты узнаешь, как коНкретно поведение вертекс-нормалей влияет на блик твоей будущей модели. Не торопись и читай внимательно, чтобы не запутаться."

Ответить
Развернуть ветку
SypSvary

меня учитель пиздил кнутом за кривую сетку

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Михаил Меняйлов

Так, отдохнул, почитал, а теперь можно и вернуться в Icem сетки для расчетов пилить.

Ответить
Развернуть ветку
Руслан Мустафаев

Сегодня я узнал много нового. Теперь на графику в играх я буду смотреть еще более иначе. Спасибо, было интересно 😊

Ответить
Развернуть ветку
Alexey

Часть изображений не загружается, отдает 503 :(

Ответить
Развернуть ветку
Павел Соболевский

как все качественно и понятно написано, спасибо за статью, огромный труд сделали! спасибо

Ответить
Развернуть ветку
Dmytry Fedorov

Очень крутая статья! Все по делу и с позитивом, как я люблю! :) Спасибо

Ответить
Развернуть ветку
Читать все 71 комментарий
null