3D в играх: Полигоны
Полигон (Polygon) – это плоскость в евклидовом пространстве. Пространство имеет размерность три, соответственно, имеются три координаты: X, Y, Z. Условно их можно обозвать как длина, высота и глубина. В программном обеспечении для 3D нет единого стандарта относительно, так сказать, ориентации данных координат, хотя, как правило, координата X параллельна условном горизонту, т.е. это длина, а вот условной высотой может быть как Y так и Z. Соответственно, условной глубиной может быть как Z, так и Y. Но нам это не столь суть важно, примем для последующего материала представление, показанное ниже.

У полигона есть вершины, минимум три, максимум, теоретически, бесконечность. Практически максимум – много. Но в играх используются треугольные полигоны, т.е. полигон имеет три вершины. Почему именно три? Через три точки в пространстве можно провести только одну плоскость, что упрощает расчеты и позволяет избежать искажений (артефактов) на итоговой картинке связанных с тем, что вершины полигона могут лежать не в одной плоскости.
Однако в программах трехмерного моделирования принято пользоваться 4-х угольными полигонами, а вот 5-ти и больше, как правило, под запретом. Поэтому при моделировании приходится следить за тем, чтобы все 4 вершины полигона были в одной или почти одной плоскости. А как же игры? спросите вы. Полигон с 4-мя вершинами математически очень просто превратить в два треугольных с двумя общими вершинами, что и делается автоматически при экспорте в игровой движок.
На рисунке ниже показаны треугольный полигон и четырехугольный, условно разделенный на два треугольных. На изображении это прямоугольный треугольник и прямоугольный параллелограмм, но по факту полигон может иметь различные длины сторон, соответственно, и различные углы между ними. Хотя стараются, по возможности, все стороны делать приблизительно одинаковыми, это называется равномерная полигональная сетка.

Почему сетка? Из полигонов создаются трехмерные объекты для игр (и не только), и если рассматривать все эти полигоны издалека включив отображение сторон полигона, они же ребра, то все это похоже на сетку.
Вообще, полигон – это то, чего на самом деле не существует, это всего лишь математика. У него нулевая толщина. Это координаты трех (для игр, далее будем говорить только о треугольных полигонах, если не будет указано иное) точек в трехмерном пространстве. И то, как отображать эти несуществующие полигоны, — зависит исключительно от той или иной компьютерной программы. Как правило, существуют три основных вида отображения: каркасная сетка, полигональная сетка, «чисто» полигональное представление. На рисунке ниже даны все три вида.

При моделировании, тестировании и т.п. для закрашивания плоскости между вершинами полигона используется произвольный цвет, но зачастую это так называемый сермат, RGB 128,128,128. На нем удобно тестировать, в частности, освещение. Да и однородная заливка, в отличии от полновесных текстур, использует не так много ресурсов компьютера.
Приведенный выше рисунок показывает как, на самом деле, с помощью плоских поверхностей создаются объекты практически любой формы. Правило тут простое: чем меньше каждый полигон, тем более точно можно передать форму исходного объекта. Это как с мозаикой, про которую разговор был в первой части. Но и увеличивать до бесконечности количество полигонов тоже нельзя, так как это сказывается на производительности, ведь компьютеру желательно не менее 30 раз в секунду пересчитать положение каждой, по крайней мере видимой зрителю, вершины полигона. Но и эти расчеты лишь малая часть того, что видеокарта в сотрудничестве с ЦП делают для расчета финальной картинки. Но об этом мы поговорим в следующих частях.
Кроме координат вершин есть у полигона такое свойство как нормаль. Это вектор, перпендикулярный одной из сторон плоскости полигона. Так как это вектор, то у него есть направление. Это направление указывает лицевую сторону полигона, вернее его начало находится у лицевой стороны полигона. Нужна нормаль для наложения текстур и расчета освещенности. Так же хочу заметить, что математически полигон не имеет никакого отношения к тому, как он выглядит, т.е. к текстурам. Полигон отдельно, текстуры – отдельно.
Так вот, та сторона, из которой «выходит» вектор нормали — и определяет лицевую сторону полигона, поэтому с противоположной стороны полигон прозрачен при визуализации, вернее обратной стороны просто не существует. Именно поэтому когда игровой персонаж из-за некорректных коллизий проваливается сквозь текстуры, то почти все сверху кажется полупрозрачным – текстур, вернее обратной стороны у полигона не существует.
Ниже скриншот из игры Batman Arkham Knight.

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

Для совсем тонких предметов, таких как лист бумаги, применяется другой подход и зависит он от конкретного игрового движка. Например, может применяться специальный двухсторонний материал или отключаться параметр Backface culling, и в этом случае объект будет выглядеть одинаково с обеих сторон. (Подробнее про Backface culling можно почитать тут: Полигоны, свободная камера и MGS 5)
Теперь поговорим о том, какие бывают трехмерные полигональные модели.
3D модели принято делить на низкополигональные (low poly) и высокополигональные (high poly). Как несложно догадаться – разница в количестве полигонов, причем разница не абсолютная, а, как и все в нашем мире, относительная.
Высокополигональной можно назвать модель с самодостаточной геометрией, т.е. когда даже мелкие детали (в разумных, конечно, пределах) смоделированы с помощью полигонов и при этом модель выглядит достаточно правдоподобно даже без текстур. Непосредственно в играх high poly модели, как правило, не применяются, однако они необходимы в процессе разработки 3D игры, о чем будет рассказано ниже.
Высокополигональные модели применяются для статического рендеринга, например интерьерной визуализации или предметной, когда необходимо фотореалистичное качество и большие разрешения итоговой картинки. Для получения такого изображения используются специальные программы рендеринга и просчет одного кадра может занимать несколько десятков часов, поэтому в играх это неприменимо.
Низкополигональные модели применяются в основном в играх или для анимации, когда визуальный реализм не имеет первостепенного значения. Есть два основных способа получения низкополигональной модели: непосредственное моделирование с прицелом на малое количество полигонов или упрощение высокополигональной модели. То же справедливо и для high poly моделей (если не брать в расчет 3D сканирование): их получают путем усложнения и добавления полигонов низкополигональной модели, либо моделируют сразу из расчета максимально необходимого количества полигонов. Какой подход применятся в том или ином случае зависит от многих факторов, как то: геометрии самой модели, применяемого программного обеспечения, наличия похожих моделей, принятого в студии-разработчике порядка разработки, предпочтений 3D-художника и т.п.
Хочу особо обратить внимание на то, что разделение на high poly и low poly очень и очень относительно. Зависит от многих факторов, и одна и та же модель может быть как низкополигональной, так и высокополигональной. Например, для игры для ПК была разработана высокополигональная модель персонажа, затем из нее получили низкополигональную, условно, уменьшив количество полигонов в два раза. А позже решили портировать игру на мобильные устройства. И количество полигонов, опять же, условно, для этого сократили в четыре раза по сравнению с изначальной моделью, или в два раза по сравнению с моделью для ПК-версии игры. Ведь мобильные устройства мало того, что не такие мощные, как ПК, так еще и размер экрана не позволяет различить мелкие детали, поэтому такая высокая детализация, как для полноразмерного монитора, там попросту не нужна.
Ниже показаны сферы одинакового диаметра с различным количеством полигонов.

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

Как же получают 3D модели? Традиционно для этого используется полигональное моделирование в специальных программных пакетах, как то: 3ds Max, Maya, Cinema 4D и т.п. В последнее время к разработке также подключают программы для так называемой трехмерной лепки, к примеру ZBrush и 3D-Coat. Ну, и с развитием технологии 3D сканирования, модели получают путем этого самого сканирования с последующей оптимизацией полигональной сетки.
Если используется традиционное полигональное моделирование, то 3D художнику необходимо от чего-то отталкиваться. Для этого используются так называемые референсы, или, по-другому, изображения того, что необходимо смоделировать. Это могут быть фотографии (для реальных предметов или персонажей), концепт-арты (для вымышленных), или даже существующие объекты. К примеру, необходимо смоделировать существующие кубики Lego. Самая в данном случае хорошая идея – иметь их под рукой и моделировать, непосредственно вертя в руках эти самые кубики.
Ниже изображение референса и 3D модели (без текстур).

Теперь вернемся к вопросу: а зачем при разработке 3D игры иметь в наличии сразу две модели одного и того же объекта — high poly и low poly? Высокополигональная модель непосредственно в игре использоваться не будет, но она необходима для такого важного процесса, как запекание текстур. Так называют подготовку целого ряда текстур или, как их еще называют, карт. Это обычные файлы изображений (с необычными, на первый взгляд, рисунками в них) цель которых как можно реалистичнее представить модель в игре и взять на себя, так сказать, часть геометрии. По сути – это создание 3D иллюзии там, где добиться этого полигонами сложно, неподъемно по производительности или просто нецелесообразно.
Возьмем, к примеру, старую доску. В ней может быть множество трещин и мелких сколов. В реальности это перепад высот (или глубин) материала самой доски. И, по-хорошему, полигоны также должны повторять эти перепады. Но тогда модель может оказаться настолько высокополигональной, что никакое железо не потянет это количество полигонов. Поэтому для начала моделируют как можно более подробную высокополигональную модель этой самой доски, а затем с помощью специальных программ генерируют (запекают) карты высот, затенения и т.п. для имитации этих самых трещин и сколов на низкополигональной модели.
Ниже упрощенно схематически показано как смешивание запеченных с high poly модели карт, в сочетании с текстурой дерева, в результате дает реалистичное изображение.

Ведь как мы различаем эти самые трещинки и сколы? По изменению яркости и цвета текстуры дерева благодаря тому, что свет по-разному отражается от неровностей поверхности, а кое-где и отбрасывает тень. К тому уже, в трещинах, как правило, накапливается грязь и т.п. Все это и позволяет нам отличить старую древесину от новой. Вот эти эффекты и запекаются в файлы изображений. Такой прием позволяет создавать довольно реалистичные объекты с использованием значительно меньшего количества полигонов. При отображении объекта в игре эти карты накладываются друг на друга по определенным алгоритмам, что и создает иллюзию наличия геометрии, которой на самом деле то и нет.
Правда, тут есть один недостаток: эффект лучше всего действует когда наблюдатель расположен под углом 90° относительно полигонов с такой вот имитацией дополнительной геометрии. С уменьшением или увеличением угла обзора «обман» становится виден все отчетливее и отчетливее. Но это неизбежная плата за возможность приблизить картинку к реализму, не превратив игру в неиграбельную.
Это мы забежали немного вперед, затронув тему текстур, но без этого трубно было бы объяснить необходимость на один игровой объект делать как минимум две модели.
Если уж мы говорим про 3D в играх, то следует обязательно упомянуть такую технологию, как LOD, сокращенно от Level of Detail, она же уровень детализации. Суть ее сводится к тому, что в зависимости от того, насколько тот или иной объект близко располагается от игрового персонажа, или какой процент высоты экрана занимает, то используются модели с различного рода детализацией. Опять же, все ради оптимизации. Чем ближе к виртуальной камере тот или иной объект, тем более детализированная модель подставляется. На практике часто количество таких моделей ограничивается тремя: для переднего, среднего и заднего планов. И обозначаются, как правило: LOD_0, LOD_1, LOD_2. Это все варианты низкополигональной игровой модели.

Различные варианты полигональной детализации могут создаваться как в сторонних программах, так и автоматическими игровыми движками (очевидно, не всеми). Причем автоматически в сторону упрощения геометрии, т.е. загруженный в игровой движок вариант по умолчанию воспринимается как LOD_0. Иногда в играх, особенно с большими открытыми мирами, можно заметить как изначально угловатый и неказистый объект вдруг скачкообразно «похорошел» — это произошла замена на более высокополигональный LOD.
Вот, наверно, вкратце и все про полигоны. Если остались необозначенные или нераскрытые моменты – пишите про это в комментариях.
По идее, далее необходимо продемонстрировать этот самый процесс полигонального моделирования, дабы наглядно показать, как это делается. И пример должен быть не очень простой, ради показа хотя бы нескольких приемов моделирования, но и не очень сложный, чтобы не нагонять сон на зрителя. Я думал-думал над предметом моделирования и пришел к выводу, что модель керосиновой лампы неплохо впишется в данную концепцию. Но, дабы не утомлять читателя, решил собственно процесс моделирования вынести в третью, или, если хотите, в 2,5 часть повествования, которую надеюсь опубликовать в ближайшем будущем.
Что такое полигональная графика?
Хотите больше узнать о полигональной графике? Для чего она используется? Как сделать что-то в этой технике? Да? Тогда вы настоящий дизайнер, готовый развиваться, и расти как профессионал!

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

Полигон (от греч. polýgonos – многоугольный), полигональная линия (математическая), ломаная линия, составленная из конечного числа прямолинейных отрезков (звеньев). Под полигоном также понимают замкнутую ломаную линию, т. е. многоугольник.
Где используются полигоны?
Ответ очевиден – в цифровой графике, конечно же! Это своего рода разновидность цифрового искусства. Изначально полигональная графика появилась в 3D моделировании для создания видеоигр. Благодаря низкому разрешению у таких объектов была высокая скорость рендеринга. Также отображение в виде каркаса позволяет экономить ресурсы компьютера и облегчает работу с моделью. Затем уже она стала популярна и в так называемой 2D графике.
В какой программе можно создавать полигональные изображения?
Если вы работаете в 3D, то для вас будет вполне естественно делать это в 3D max, Maya, или Cinema 4D. Последнее ПО настолько дружелюбно, что в нем может рисовать даже ребенок. В целом, полигональная графика достаточно проста в создании, особенно если сравнивать с архитектурной визуализацией или фотореалистичным рендерингом. Она напоминает ранние дни компьютерного моделирования и анимации с налетом современных техник. А так как ретро стиль всегда в моде, практически все дизайнеры создают ее с помощью старых приемов.
Как вы уже знаете, 3D модели создают с помощью полигонов. Чем больше полигонов, тем более детализованной будет модель. Во время финальной обработки (рендеринга) объекта он приобретает «гладкий» вид. Чем меньше полигонов вы используете на стадии моделирования, тем более абстрактным будет результат. Для выраженного эффекта можно отключить функцию сглаживания в настройках рендеринга, и тогда вы получите четкие грани. Здесь все зависит от эффекта, которого вы хотите достичь. Использование низкополигональной техники совсем не означает, что сцена будет простой. Вы можете использовать сложные текстуры, реалистичные настройки отражений и преломлений в окружающей среде и т. д. Полигональные фигуры очень напоминают оригами и сейчас находятся на пике популярности в графическом дизайне.
Также можно создавать полигональные шедевры в таких программах как Adobe Illustrator, CorelDraw и даже Adobe Photoshop. Эти программы, в отличие от специфичных 3D пакетов, хорошо знакомы большинству дизайнеров.
Историческая справка
А знаете ли вы, что полигональному дизайну предшествовало целое направление в искусстве? В начале XX века зародилось и стало невероятно популярным экспрессионистское течение. Появление фотографии только подстегивало художников, ведь теперь можно было запечатлеть образ детально, таким, какой он есть на самом деле. Экспрессионисты же напротив, стремились передать суть, настроение и характер объекта. Они намеренно уходили от деталей. В наши дни экспрессионизм не менее популярен как в живописи, так и в среде цифрового искусства.
Выдающиеся примеры
Вот несколько примеров современного цифрового искусства. Быть может, они впечатлят вас на создание новых шедевров:






Уроки

В этом уроке вы создадите мозаику в Adobe Illustrator, состоящую из полигонов. В этом несложном деле поможет бесплатный плагин – Scriptographer и ваше воображение.

Здесь вы научитесь создавать векторную полигональную мозаику из растрового изображения при помощи бесплатного веб инструмента Triangulator и Adobe Illustrator.

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

Этот урок так же подходит вам, если вы работаете в более ранних версиях Photoshop.

Подробный видео урок, который научит вас создавать трехмерные персонажи.
Заключение
Полигональная графика – это смесь ретро и футуризма. Стиль не подвластный времени, который можно видоизменять, индивидуализировать, и экспериментировать с ним до бесконечности. Это всегда смотрится стильно, модно и самобытно. Попробуйте поработать с полигонами, и вы поймете, что уже больше не можете без них. Будем рады, если вы поделитесь своими идеями на этот счет в комментариях!
Топология в 3D моделировании
Топология — это раздел математики, который изучает, грубо говоря, непрерывность форм. В трехмерной графике топология — это расположение полигонов создающее некоторый путь по поверхности полигональной сетки.
Топология относится к геометрическим характеристикам поверхности 3d сетки. Также можно встретить понятие «Polygon Flow» — поток полигонов, но расположение вершин и ребер сетки также играет важную роль в создании 3d моделей. Можно сказать, что по сути не существует четких стандартов или железных правил в работе с топологией. Это та сфера, успеха в которой можно достигнуть только посредством практики, анализа и наработки опыта, «насмотренности».
В чем-то топологию можно сравнить с изучением иностранного языка — да, вы можете приехать в другую страну не зная ее язык, но при этом определенно столкнетесь с проблемами и сложностями, не получите от поездки тот результат, который могли бы получить, если бы знали местный язык хотя бы на базовом уровне.
В принципе, это зависит от задачи стоящей перед художником.
В случае с hard surface моделированием хорошая топология позволит нам легче и быстрее вносить правки и менять геометрию модели, выбирать отдельные участки, работать с чистыми и аккуратными фасками, получать чистый финальный результат.
В случае с моделированием персонажей, либо существ, сетка будет деформироваться во время анимации, а это значит, что в этом случае правильная топология важна для корректной и чистой работы анимации, она облегчит жизнь аниматору и, опять же, позволит легко и быстро работать над правками и изменениями сетки модели.
Из всего этого можно сделать вывод, что чем чище и правильнее топология модели, тем легче нам контролировать и предсказать финальный результат, избежать неприятных артефактов, а также сэкономить себе массу времени исключив бесполезные действия из рабочего процесса.
Любая модель будет состоять из трех элементов — полигон, ребро, вершина (polygon, edge, vertex). Вы часто (всегда) будет слышать следующие обозначения — вертекс, эдж, полигон.
Вертекс — это позиция точки в трехмерном пространстве, которая определяется координатами X, Y, Z. Она может хранить в себе такую информацию как цвет, направление нормали, текстурные координаты. Несколько эджей и полигонов могут иметь один вертекс.
Эдж — это линия, которая соединяет два вертекса. Как и в случае с вертексом, несколько полигонов могут иметь общий эдж. Важно — лучше не называть их линиями и сразу привыкнуть к понятию edge (ребро).
Полигон — многоугольник. Состоит из трех или более вертексов, с замкнутым контуром эджей. Это как раз та самая форма, которая определяет поверхность трехмерной сетки. Polygon flow — помните такое понятие, верно?
Полигон также называют face — поверхность. Обычно 3d сетка содержит в себе от десятков до сотен и тысяч полигонов. Зависит от задачи, под которую мы делаем свою модель.
Всем известное понятие «оптимизация» в том числе включает в себя то, какое количество полигонов (а если точнее, то треугольников) включает в себя сетка, часто оно может быть жестко ограничено под требования проекта (в случае с играми). С каждым годом эти требования становятся все более размытыми, благодаря развитию вычислительных технологий. НО, это не единственный аспект оптимизации.
Полигоны имеют названия исходя из их количества сторон. Давайте выделим три вида, которые вы будете встречать чаще всего.
Triangle (tri, триангл) — трехсторонний полигон, иначе говоря треугольник. Вы будете очень часто встречать это понятие, так как треугольник это базовая форма полигона применяемая, например, движками. Также существует процесс триангуляции — разбиение квадов модели на треугольники, обычно мы делаем это перед выгрузкой модели на запекание, движки в свою очередь сами делают триангуляцию, если она не сделана заранее.
Quadrangle (quad, квад) — полигон с четырьмя сторонами. Это тот вид полигона, который мы должны знать, любить и уважать, так как он является основой нашей модели при создании ее сетки.
N-gon — это полигон с количеством сторон более чем четыре. Важно — если вы видите квад в котором пять вертексов, то это уже n-gon, несмотря на то что визуально он квадратный.
Существует ряд мнений среди 3d сообщества на тему применения n-gon и triangle полигонов в создании модели. На деле все зависит от ситуации и целей, с которой создается модель. Отдельная тема, это модели под анимацию, например персонажи. У них есть ряд своих, особых требований по применению полигонов в топологии. Давайте возьмем за основу следующий принцип — «То что я могу, не значит что так и надо», и будем стремиться к тому, чтобы строить свои сетки на quad — квадратных полигонах. Вспоминаем о том, что ровная и удобная сетка это залог простоты и скорости ее редактирования, квадратный полигон в этой ситуации — наш главный помощник. Безусловно, бывают ситуации, когда применяются другие типы полигонов, но это ситуативно, становится понятнее с опытом, и уже на конкретных примерах вам надо будет смотреть и принимать решение — какой полигон применить.
Полигон является планарным, если все его вершины лежат в одной плоскости, также треугольный полигон является планарным, так как три его вершины всегда будут лежать в одной плоскости. Большинство полигонов в ваших моделях будут планарные — лежать вершинами в одной плоскости. В свою очередь не планарным полигоном будет считаться такой полигон, в котором одна или более вершина не лежит в плоскости с остальными, создавая «загиб».
Работая с топологией стоит помнить о том, что существует процесс триангуляции моделей, мы говорили об этом выше. По сути это разбиение ваших квадов на треугольники диагональным ребром. Любой движок требует, чтобы модель была триангулирована для корректного ее отображения, либо делает это сам. В случае с не планарными полигонами это может создать артефакты на поверхности модели, так как триангуляция на таких полигонах может лечь произвольно, без учета их оси деформации. Это решается правкой триангуляции вручную — она должна идти вдоль оси деформации полигона которую вы заложили изначально при его деформации, а не по той логике которую выбрал движок.
Случай 1: вертекс выделенного полигона уведен вниз, что делает его не планарным, ребро триангуляции в показанной ситуации делает его выпуклым, получается переход вниз от ребра.
Случай 2: вертекс также уведен вниз, но ребро триангуляции лежит по другой оси, это создает перегиб и полигон становится вогнутым.
Subdivision surface — это алгоритм подразделения поверхностей, который создает гладкую поверхность из «грубой» полигональной сетки. Когда сетка подразделяется, она становится более плавной, ее детали принимают более финальный вид. Это преобразование является обратимым, только если вы не применили финальное сглаживание (например, перед выгрузкой high poly для запекания).
Слева направо: полигональная сетка, сетка с примененным SubD и control cage (контрольной клеткой), final smooth (финальное сглаживание).
Наиболее часто используемым алгоритмом subdivision surface является Catmull — Clark (CC SubD). Его разработали Эдвин Катмулл и Джеймс Кларк в 1978 году. Обратите внимание, насколько давно удачная идея стала инструментом актуальным до сих пор.
Если объяснять простыми словами, то суть его заключается в том, что по полигонам модели под SubD размещаются центроиды — вершины в центральных точках полигонов, далее они соединяются ребрами, оставшиеся вершины смещаются, чтобы снять напряжение — происходит «округление» формы. Этот алгоритм итеративен, то есть может повторяться раз за разом, наращивая количество подразделений. Таким образом, мы получаем high poly модель, и именно этот процесс нам надо учитывать при построении модели под SubD.
Схема подразделения полигонов по алгоритму CC SubD.
Слева: Эдвин Катмулл — американский инженер-мультипликатор, специалист по компьютерной графике, президент DisneyToon Studios, Pixar и Walt Disney Animation Studios, тьюринговский лауреат, член Национальной инженерной академии США, четырёхкратный лауреат «Оскара».
Справа: Джеймс Кларк — бизнесмен, технолог, миллиардер. Основал Silicon Graphics, Netscape Communications, myCFO, Healtheon, «Neoteris», «Sciences DNA», Shutterfly.
Чистая и аккуратная работа с топологией под subdivision surface, это залог того, что на выходе вы получите правильную модель без артефактов. Высокая плотность, хаотичность в построении сетки, разнобой в полигонах — все это может создать вам немало сложностей в процессе моделирования и превратить его в тяжелый изнурительный труд. А мы ведь хотим получать удовольствие от процесса и заниматься творчеством, а не разгребать нагромождение полигонов, верно?
PolyLoop — петля полигонов. Представляет собой набор последовательно и непрерывно связанных квадратных полигонов. Polyloop является важным элементом построения 3d модели, умение работать с петлями станет залогом вашего успеха. Сам по себе один полигон ничего не значит, так как мысля в таком формате мы не видим созависимостей, можем пропустить важные моменты в модели, либо допустить ошибки построения. Но замкнутая цепочка полигонов это мощный инструмент позволяющий мыслить и моделировать более комплексно. Вам стоит сразу, с самого начала стараться мыслить петлями, а не отдельными полигонами при создании своих сеток. PolyLoop позволяет вам точнее и равномернее распределять полигоны, выделять отдельные участки и редактировать модель, при применении SubD правильные PolyLoop подразделяются и сглаживаются лучше всего. Именно по этому вам стоит сразу, заранее планировать свою работу и стараться мыслить комплексно — правильное начало работы, это залог того, что на финальных этапах вы сэкономите себе немало времени и сил. В разных ситуациях PolyLoop по разному работают с SubD, именно поэтому вам необходима практика и наработка опыта, чтобы увидеть и запомнить разные ситуации. Посмотрите разные примеры сеток, попытайтесь увидеть эти петли, и вскоре поймете что действительно каждая модель состоит в первую очередь именно из них.
Простой пример PolyLoop — полигональной петли.
EdgeLoop — в свою очередь это петля из эджей (ребер). Как и с PolyLoop — петля ребер это разрезы, которые вы будете делать на модели, и они буду замыкаться. Правильная работа с размещением таких петель, это также залог чистой, легкой сетки которая будет корректно сглаживаться и легко редактироваться. Обратите внимание на изображение выше — там представлены как петли полигонов, так и петли ребер, по сути это неотделимые понятия, но каждое из них само по себе важно и может нести разную функцию, в зависимости от задачи. Также бывают ситуации, когда петля ребер заканчивается звездой (еще их называю «полюс»), об этом мы поговорим далее. Каждый EdgeLoop призван служить форме вашего объекта. Посмотрите на положение петель в своей модели и скажите себе — какие из них служат какой то функции, а какие нет. Это покажет вам, где вы сделали лишнюю работу. В работе с EdgeLoop также стоит мыслить именно петлями, а не отдельными ребрами.
Пример EdgeLoop — замкнутой петли ребер.
Звезда (pole, star, полюс) — это вершина в сетке, в которую приходит 3 и более ребер. В зависимости от ситуации это может быть как плохо, так и хорошо для вашей сетки. Неправильное размещение звезд может привести к артефактам на сглаженной модели. Если в вашей сетке есть звезды, то посмотрите откуда они взялись и несут ли в себе какую-то практическую функцию. Желательно избегать звезд в сгибах, складках и подобных сложных участках, так как при подразделении с большой вероятностью это повлияет на корректность отображения вашей поверхности. Это, опять же, тот случай, когда понимание таких моментов приходит с опытом и насмотренностью. Делайте топологию свой модели вдумчиво, смотрите на результат.
Ряд примеров того, в каких ситуациях появляются звезды.
E-pole — полюсы, которые состоят из пяти ребер, пересекающихся в одной вершине.
N-pole — полюсы, которые состоят из трех ребер также пересекающихся в одной вершине.
Hold edges (support edges, поддерживающие ребра) — подразделение поверхностей создает сглаженную поверхность модели. При помощи топологии мы можем контролировать силу сглаживания. Расстояние между ребрами определяет то, насколько сильно сгладится поверхность. Поддерживающие ребра призваны помочь нам удержать форму в тех местах, где это необходимо. Также во многих современных 3d редакторах есть такая функция, как Edge Creasing (иногда ее называют Edge Weighting или вес ребра) — заострение ребра. Эта функция позволяет задать «натяжение» на выбранных ребрах. В целом Hold edges также является очень мощным и многофункциональным инструментом, который можно и нужно использовать и знать, как он работает.
Пример применения hold edges слева направо: без поддержек, с обычными поддержками (support edges), edge creasing. Как видите, они дают очень разные результаты. Пробуйте и экспериментируйте с hold edges чтобы лучше понять, как они работают.
Два мира 3D-графики — твердотельный или полигональный
Если вы столкнулись с такими страшными словами «полигональная модель» или «твердотельное моделирование» и не понимаете смысла этих слов — то я вам сейчас попробую объяснить на пальцах.
Речь идет о том как сохранить в цифровом виде, внутри компьютеров, трехмерные объекты нашего мира. На сегодняшний день успешно сосуществуют два принципиально разных подхода: полигональный и твердотельный. И что б никого не обидеть, можно упомянуть еще третий вариант — облака точек. И все эти три способа хранения 3D-данных поддерживает формат файлов dwg.

В чем разница?
Если мы просто измерим расстояния до отдельных точек на окружающих нас предметах и сохраним их координаты, то мы получим «облако точек». Облако — это просто модное слово, с небом оно не связано, имеется ввиду, что точек много. Ничего, кроме координат точек и (может быть) ее цвета, у нас нет. По такой записи невозможно восстановить все поверхности предметов, но можно приближенно представить себе как оно выглядело. Именно облако точек составляют современные лидары (лазерные радары на самоуправляемых авто), 3D-сканеры, Face-id в яблочных телефончиках. AutoCAD тоже уже умеет хранить эти данные не в виде неудобных отдельных точек, а целым облаком (Point Cloud). Это полезная информация, но по ней не нарисуешь мультик и не сделаешь чертежи. Если смотреть из далека, то точки сливаются в сплошной фон. И это похоже на то, что видели наши глаза. Но как только в приближаете это облако по ближе на экране — точки расползаются в пространстве и вы видите, что между ними ничего нет — мы сохранили слишком мало точек. И их всегда будет мало, как ни старайся.

И теперь нам предстоит по этим точкам построить модель, которую можно будет приближать. Самый простой способ — заполнить пространство между точками плоскостями. Плоская фигура, ограниченная несколькими точками на языке математиков называется полигон. Но на самом деле из всех возможных полигонов в 3D графике используется только один, самый простой — треугольник. Берем ближайшие 3 точки на поверхности нашего объекта и чисто условно говорим — а вот между ними я буду считать, что тут все плоское и это это сплошной треугольник, без дырок и выступов. И вот мы уже чудесным образом получили Полигональную модель. Для хранения в компьютере такой модели нам достаточно запомнить координаты вершин треугольников. Это просто и быстро. Пересчитать эти координаты для различных точек зрения — тоже просто. Исходное облако точек можно очень сильно подсократить — ведь многие точки оказались на одной плоскости. Если не заморачиваться раскраской, то на экране мы увидит множество линий соединяющих точки по типу рыбацкой сети. Вот так и называют полигональные модели в AutoCAD — Сеть = Mesh или устаревший вариант Многогранная сеть = Polyface Mesh.

Для полноценного фотореализма нам конечно понадобиться сохранить картинки для раскраски каждого треугольника (текстуры), научиться скруглять углы, научиться рисовать шероховатые поверхности и еще много чего. Но все это умеют делать современные видеокарты и поэтому процесс прорисовки и вращения происходит настолько быстро, что можно делать интерактивные 3d-игры. Именно такие Полигональные модели используются для всех фотореалистичных картинок и мультиков. Их легко искажать, трансформировать, анимировать. Да, в них не может быть гладкой сферы, но это и не важно — хитрые приемы «замылят» глаза публике и никто почти не заметит сети и грани. А что будет если разрезать полигональную модель? Внутри-то у нее ничего нет! Мы просто увидим обратные стороны треугольников — то же тело изнутри. Хм, но в реальном мире так не бывает. И тут мы подходим к концепции твердого тела.
Само название «твердотельное» моделирование (solid modeling) происходит от идеи, что программа при любом разрезе такой модели, должна опять замкнуть поверхности и изобразить какое-то однородное внутренне заполнение этой модели. Но на самом деле концепция твердотельного моделирования немного сложнее. Дело не только в том, что мы видим внутри, а дело в том что теперь поверхности каждого объекта мы запоминаем, не как множество треугольников, не как Сеть, а как сплошную непрерывную поверхность, описываемую математически. Надо запомнить плоский полигон? Нет проблем — описание будет состоять из математической формулы плоскости в 3d и плюс еще такими же формулами записанные 3d-контуры границ этой поверхности — линии или кривые. Для каждого типа поверхностей свои формулы, для каждого типа кривых — свои. AutoCAD знает формулы для плоскости (объект Region), для цилиндра, конуса, сферы, тора (объект Surface) и для произвольно изогнутых поверхностей — хоть волны, хоть спирали — все можно описать формулами. При этом в файле dwg сохраняются только коэффициенты из этих формул. Все точки поверхности программе надо рассчитывать, используя сложные формулы. Каждое «твердое тело» может состоять из множества поверхностей (граней), которые должны быть идеально состыкованы кривыми линиями (ребрами). А точки стыковки ребер, называются вертексами. Принципиальное отличие твердотельной модели от полигональной, не в том что программа создаст новые грани на разрезе, а в способе описания поверхностей, в поверхностях сложной формы, которые теоретически можно приближать бесконечно долго — и вы всегда будете видеть плавные формы, а не ломаные полигоны. Правда, жизнь накладывает свои ограничения. но в теории так. Возможность построить модель с любой заданной точностью — это именно то, что и надо инженерам. Это позволит делать точные расчеты массы и прочности. Это позволит изготавливать детали на высокоточном оборудовании и получить реально работающие механизмы.
Достоинства и недостатки
Теперь вы знаете, что «твердотельный» — это не про замороженные трупы 🙂 Теперь можно разобраться, почему используются обе системы моделирования.
Полигональная модель — это прежде всего упрощенная модель. Быстрота отображения здесь на первом месте. Абсолютно все 3d-программы могут хоть как-то работать с полигональными моделями. С полигонами (и только с ними) работают все программы для дизайнеров и аниматоров. Всем известные 3DS-Max, Maya, Blender — это чисто полигональные программы, никакой инженерной логикой и твердотельностью там и не пахнет. И не надо — задачи там другие. К сожалению есть программы, которые «косят» под инженерные, но работаю только с угловатыми полигонами. Например, SketchUp. Вполне пригодны полигональные модели для печати игрушек на 3d-принтерах. Для таких задач их точности вполне достаточно.
Программы полигонального моделирования как правило содержат простые средства для искажения формы объектов. У них всегда много способов наложения текстур, тонкие и сложные настройки рендеринга для достижения максимального фотореализма. Есть возможности делать анимации.
Недостаток полигональной модели — низкая точность. Можно конечно наращивать количество треугольников. Но тогда простота и скорость отрисовки пропадает. Серьезные расчеты делать на такой модели нельзя. Описать процесс изготовления детали, по ее форме тоже не получится — тут вообще нет ни цилиндров ни конусов — сплошные треугольники.
В AutoCAD можно открыть модели, импортированные из 3DS-Max и тому подобных программ. Но результат вас не порадует. Как правило пользователи этого класса программ не заботится о точности размеров, рисуют, тыркая в произвольные места экрана, без привязок, и не напрягаются, когда объекты заезжают друг внутрь друга, оставляют щели между полигонами. Это все происходит из-за отношения к полигональной модели как к эскизу. Чисто для красоты картинки, но не для дела. Для CAD-программ полигональные модели инородны, работа с ним не оптимизирована. Сложные сети из тысяч и сотен тысяч полигонов прекрасно крутятся в Max, но дико тормозят в AutoCAD. Старые «Многогранные сети» вообще даже нельзя нормально обмерить — привязки на них не работают. Преобразовать штатными средствами в твердое тело тоже не получится. Кстати, насчет преобразования — обратите внимание на мою программу «Сеть в солид» — во многих случаях это спасение.
Преимущества твердотельного (то есть математического) моделирования очевидны — точность, возможность расчетов, экспорт в CAM для точного изготовления на ЧПУ. Они гораздо ближе к законам физики поэтому только их используют для автоматизации инженерных расчётов, анализа и симуляции физических процессов, проверки и оптимизации изделий.
Недостатков тоже хватает. Прежде всего это вычислительная сложность. Формулы для расчета положения каждой точки могут быть неимоверно сложными. Даже простые операции требуют много расчетов. Например, когда мы отображаем на экране полигональную модель, то на всех краях в любом ракурсе мы видим ее ребра. Это простые линии, которые очень легко рисовать. Но у твердого тела могут быть выпуклости, которые мы видим в некоторых ракурсах как край тела. Там нет ребра! Например, у сферы вообще нет ребер, но мы же ее видим, видим четкий край — окружность. Такие «виртуальные» края называются силуэтами. Вращая модель, вы заставляете программу очень быстро пересчитывать формулы поверхности, чтоб вычислять все новые и новые силуэты.
Еще одна проблема проистекает из того, что все 3d-игры сделаны, конечно, на полигональной графике. Поэтому все видеокарты, 3d-ускорители работают только с ней. И значит, чтобы показать любую твердотельную модель на экране программа должна сначала полностью рассчитать все формулы, ребра, силуэты; затем преобразовать все это в треугольники-полигоны и только после этого можно передать работу вашей дорогой видеокарте. Видеокарта справится мгновенно, картинка сразу появится у вас перед глазами — для нее это пустяк. Но вся подготовительная работа ляжет на центральный процессор. А в случае AutoCAD — на одно единственное ядро этого процессора. Это долго. Именно по этому ваш компьютер так легко крутит неимоверно сложные проекты в 3Ds-Max и так тяжело, с тормозами, рывками, глюками, проворачивает маленький твердотельный кусочек этого проекта в AutoCAD. И кроме того в полигональной графике придумано множество ухищрений для ускорения отрисовки — сразу отбрасываются слишком мелкие полигоны, легко отсеять задние (невидимые) объекты и их грани. А в твердотельной модели надо просчитать по честному все-все, что вы напихали в модель, каждый невидимый крошечный винтик.
Вспомните об этом, когда будете выдавливать спиральную резьбу на саморезах, конусы в глухих отверстиях. Весь этот мусор никогда не виден и ничего не дает для удобства и точности изготовления модели. Но он непрерывно грузит процессор и тормозит вашу работу. Оно вам точно надо? Расчет конуса в 100 раз дольше, чем плоского дна отверстия. А расчет солида вытянутого из сплайна вообще неописуем формулами — приходится прибегать к методу постепенных приближений. И чем больше размер изделия, тем больше итераций (приближений) надо для достижения заданной точности. Подумайте дважды, прежде чем прорисовывать внутренности профилей и труб, вставлять модели фурнитуры из сотен и тысяч поверхностей, моделировать каждую дырочку на перфорированных решетках.
Какие программы используют твердотельное моделирование.
Все, что я тут писал про AutoCAD, в полной мере касается и всех его клонов, всех легких CAD-систем: BricsCAD, NanoCAD, ZWCad, GStarCAD. Но не только. Все полноценные инженерные программы используют твердотельный подход к моделированию. Параметрические программы среднего класса сложности, такие как SolidWorks, Inventor, и тяжелые, такие как ANSYS, CATIA, NX, Pro/ENGINEER — тоже конечно твердотельные. В параметрическом проектировании полигональный подход вообще не возможен. А в чем тогда разница прямого и параметрического моделирования? О! Это отличная темя для бесконечных споров! Я думаю посвятить этому отдельную статью.