Группы сглаживания
Моделер в 3D Studio MAX, особенно занимающийся низко-полигональным моделированием, должен чётко представлять себе, что такое группы сглаживания (Smoothing Groups). Понимание и использование групп сглаживания — есть большой шаг новичка моделера к профессионалу.
Группы сглаживания — это свойство, которое имеет каждый треугольник (face) любой полигональной модели в 3D Studio MAX. Знакомство с группами сглаживания лучше всего провести на примере Editable Mesh.
Создайте любой примитив, например, Box, и преобразуйте его в Editable Mesh. В закладке Modify выберите любой подобъект поверхности (Face, Polygon или Element), например, Face. При этом в свиток добавится дополнительная панель свойств поверхности (Surface Properties). Здесь нас интересует раздел, называющийся Smoothing Groups. Этот раздел как раз и работает с группами сглаживания.
С помощью кнопок с числами от 1 до 32 мы можем строить различные комбинации группы сглаживания для выделенных треугольников редактируемой полигональной модели.
Выделяя различные треугольники на сторонах Box’а, можно заметить, что каждая сторона имеет свою группу сглаживания. Кнопки на панели, соответствующие битам группы сглаживания, находятся в нажатом состоянии.
Почему именно из 32-х значений строятся группы сглаживания в 3D Studio MAX?
Ответ прост. Для хранения информации об одном совпадении группы сглаживания достаточно одного бита. Для комбинации таких совпадений используется одно 32-х битовое число (DWORD). Кнопка на панели, например, с номером 18 отвечает за 18-й бит этого числа. Больше никаких ритуальных соображений по этому поводу не существует.
Отсюда можно заметить, что сами числа на кнопках ничего конкретного для моделера не символизируют, используются они только для ориентира.
В чём же смысл групп сглаживания?
Рассмотрим изображение трёх сфер. Эти сферы различаются только группами сглаживания для своих треугольников, всё остальное, например, материал и количество полигонов, у них одинаковое. Как же можно достичь такого эффекта?
Рассмотрим два треугольника, не лежащих в одной плоскости, то есть нормали у этих треугольников не совпадают. Но во время просчёта нам часто необходимо, чтобы не было видно чёткой границы между этими двумя треугольниками. То есть во время закрашивания, произошло сглаживание. Так вот, это сглаживание происходит между треугольниками с общими вершинами, у которых хотя бы один бит в группах сглаживания совпадает.
Посмотрим ещё раз на рисунок с тремя сферами. Первая сфера здесь во всех полигонах имеет одинаковую группу сглаживания с выделенным общим (любым) битом, у второй — все полигоны имеют пустую группу сглаживания, то есть не выделен ни один бит, у третьей — треугольники в каждом слое имеют свою уникальную группу сглаживания, не совпадающую ни в одном бите с группами сглаживания в треугольниках соседних слоёв.
Иногда для моделера возникает задача, как бы сделать видимое разделение между частями полигональной модели на их стыке, то есть по рёбрам. Модель на рисунке является одной цельной замкнутой полигональной моделью. Все видимые разделения на подобъекты сделаны за счёт геометрии и групп сглаживания.
Работа с группами сглаживания.
С кнопками с числами в разделе Smoothing Groups немного разобрались. Можно добавить только, что если вы выделяете несколько полигонов, у одних из которых проставлены биты в группах, а у других соответствующие биты не проставлены, то кнопки с этими битами будут пустыми, без чисел.
Кнопка Select By SG позволяет выделять все треугольники, с указанными битами групп сглаживания.
Кнопка Clear All выключает все биты групп сглаживания для выделенных треугольников.
Кнопка Auto Smooth работает с выставляемым числом, находящимся справа от кнопки. Это число показывает отклонение нормалей треугольников в градусах. При нажатии на эту кнопку все выделенные треугольники, у которых отклонение нормалей меньше указанного числа, станут «сглаженными», за счёт выставления соответствующих групп сглаживания.
Где ещё встречаются группы сглаживания.
Модификатор Edit Mesh. Аналогично EditableMesh.
Модификатор MeshSmooth. В свитке Parameters есть раздел Surface Parameters.
Если выделить только Smooth Result, что происходит по умолчанию, то полученный объект полностью будет сглажен по группам сглаживания. Убрав этот флаг, мы можем оставить информацию о группах сглаживания с предыдущих уровней модификаторов, что скажется так же на гладкой закраске модели. Так же можно разделить сглаживание, выставив Smoothing Group, что повлияет на форму результирующей модели, при нескольких итерациях деления сглаживаемой модели.
Работает для выделенных треугольников с предыдущих уровней модификаторов. То есть эти треугольники могут быть выделены, например, в модификаторе Edit Mesh или модификатором Mesh Select. Что делает этот модификатор, можно понять по аналогии с EditableMesh.
Что можно добавить для разработчиков игр.
Достичь аналогичного эффекта сглаживания можно другим способом, когда все треугольники имеют одинаковую группу сглаживания. Видимость границ достигается путём дублирования точек. То есть два соседних треугольника не имеют общих точек, просто соответствующие точки имеют одинаковые координаты. Кстати, именно такие дублированные точки должны попадать в игровой движок, различаясь только своими нормалями. Но поскольку моделеру неудобно самому разделять эти точки, этим должна заниматься программа экспорта из 3D Studio MAX, пользуясь данными из групп сглаживания.
Напоследок, всем желаю успешного низко-полигонального моделирования!
Источник
Вместо ликбеза: Smoothing Groups в 3Ds MAX
Описание основ работы с группами сглаживания (Smoothing Groups) в 3Ds MAX.
Отдельная благодарность Коту Зловреду (а на аватарке Брейн, все хотят обмануть) и Cutter за предоставление моделей для урока. Без этих моделей статья вышла бы намного позже.
Добрый день, друзья. С вами снова я, Lord Beowulf. После написания первой части своего туториала по луку, я подумал, что мне не хватит 1-2 курсов уроков, что бы рассказать о некоторых проблемах, возможностях и особенностях процесса 3D моделирования, о которых я знаю, и знание которых может пригодиться вам в работе. Поэтому я решил написать этот урок, логически не связанный с моей основной серией уроков. В нем я более детально остановлюсь на вопросе — группы сглаживания (Smoothing Groups) в 3Ds MAX.
Для начала давайте внимательней рассмотрим свиток Smoothing Groups в модификаторе Editable Poly.
Большую часть свитка занимает собой таблица с числами от 1 до 32 — это собственно наши группы сглаживания. Если какие-то графы без чисел — вы выбрали полигоны нескольких групп сглаживания.
Если вы выбрали полигоны, входящие в 1 группу — графа будет выделена.
Снизу от таблицы с группами сглаживания находится функция Select By SG(Smoothing Groups). Название говорит само за себя — выбрать полигоны по группам сглаживания. Давайте щелкнем по этой функции. Я построил примитив цилиндр, поэтому у меня групп будет немного. Вы можете использовать любую модель. Щелкнув по функции, у нас отроется таблица, похожая на таблицу в свитке Smoothing Groups, только в новой будет значительно меньше граф.
В ней отображаются только существующие группы сглаживания. Один щелчок ЛКМ выделяет группу. Один щелчок по выделенной группе — делает её не активной. Выделите одну любую группу и нажмите OK. Вы можете видеть, что все полигоны данной группы сглаживания выделились. Если вы выделите две группы сглаживания, то, соответственно, будут выделены полигоны обеих этих групп.
Функция Clear all, исходя из названия, очищает параметры сглаживания всех выбранных полигонов.
Следующая любимая всеми функция — Auto Smooth. Плюсы её бесспорны. Выделил полигоны, нажал на Auto Smooth — получил сглаживание без особой возни.
Последняя функция представляет собой поле с числом — это угол сглаживания. Чем оно (число) больше, тем на больший угол искривления воздействует сглаживание. Минимальное значение — 0, максимальное — 180. Данная функция относится только к автоматическому сглаживанию. Числа в этом окне являются градусами, в диапазоне которых будет проводиться сглаживание. Например, угол между полигонами в стандартном максовском цилиндре — 30 градусов. Выделив полигоны окружности цилиндра, поставив число 30 и нажав на Auto Smooth, мы получим сглаженную поверхность. Если поставить число 29, то ничего не произойдет (в данном случае). Углом между полигонами является внешний угол между ними, а не внутренний. Схематично углы изображены на скриншоте.
Угол между полигонами «трубы» и «крышки» — 90 градусов. То есть, если мы поставим количество градусов — 89, то сгладятся только полигоны окружности. При этом граница между основанием и окружностью будет не тронута.
Если мы поставим 90 градусов или больше — сгладится и она.
Как вы понимаете, автоматическое сглаживание вполне применимо на практике. Но уже при сглаживании сложных поверхностей предпочтительно от него отказаться. Либо выделять отдельно группу полигонов, применять автоматическое сглаживание с нужным углом, затем выделять следующую группу и т.д. Это тоже вариант, но разницы между применением групп сглаживания и автосмуфтом в таком случае практически нет. По сути, вы и назначаете отдельную группу отдельным полигонам, только с помощью другой функции.
Стандартное сглаживание объекта с формой, сложнее примитива происходит следующим образом — выделяются полигоны, им назначается группа сглаживания, выделяются следующие полигоны и т.д. Если хотите, чтобы угол между полигонами был отчетливо виден (кромка лезвия, ребро жесткости на нем, резкая складка на ткани, и т.д.), то, если вы используете автосмуфт, ставите число со значением меньше угла между полигонами, а если вы используете группы сглаживания — назначаете этим полигонам разные группы.
Часто при моделировании и последующем сглаживании объекта встает задача “частичного” выделения ребра – то есть, чтобы на части протяженности ребер угол между полигонами был четко выделен, а затем полностью сглаживался. Пример – складки на одежде либо сочленение механических объектов, типа точка соединения рукояти пистолета и дужки вокруг спускового крючка.
За следующий пример благодарю пользователя Кот Зловред, который любезно предоставил часть своей модели, на которой можно продемонстрировать возможности групп сглаживания.
На скриншоте отчетливо видно сочленение между дужкой и рукоятью. Дело в том, что ребра самой дужки должны быть четко обозначены. При этом она должна плавно переходить в рукоять. Просто так такого эффекта не добьешься – так или иначе, будут видны ребра в ненужных местах. Тем не менее, выполнить поставленную задачу не является чем-то сложным. Для начала, разберем метод на примитивах.
Построим цилиндр. Я хочу, чтобы четыре нижних ребра былы отчетливо видны. Для этого я сделаю следующее. Выберу группу полигонов и присвою им одну группу сглаживания.
Затем я выделяю все полигоны, кроме шести нижних (выбранных ранее в предыдущем действии) с каждой стороны (то есть не выделяю только те полигоны, между которыми должно быть отчетливое ребро)
Присваиваю им вторую группу сглаживания. Верхним полигонам в итоге было присвоено две различных группы сглаживания. Читаются обе и никаких стыков между ними поэтому не видно. Зато нужные мне ребра лежат между группами сглаживания и отчетливо отображаются.
То есть, группы сглаживания в данном случае как бы идут внахлест друг на друга. При этом, ребра, которые должны выделяться, являются стыком двух (трех и т.д.) групп. Получается довольно интересный результат.
Возьмем меньшую площадь сглаживания
Я хочу, чтобы два ребра с правой стороны были отчетливо видны. Сначала я выделяю все полигоны нашего многострадального цилиндра кроме двух, которые образуют интересующее меня ребро. Затем я выделяю эти два полигона, а так же те, которые их окружают, дабы убрать остальные не нужные мне не сглаженные углы.
Получаем достаточно забавный эффект из ничего. Не нужно извращаться ни с дублированием вершин, ни с дополнительными полигонами, которые необоснованно утяжеляют нашу модель. Просто две группы сглаживания, которые дают такой эффект что в рендере в 3D max, что на движке игры, так как любой движок читает параметры групп сглаживания.
Теперь же вернемся к нашему пистолету, дабы продемонстрировать применение этого способа не в вакууме, а в реальной ситуации. Напомню, благодаря Коту Зловреду, я имею такую вот модель
Далее я расскажу, как решить проблему с плавным переходом и острыми углами в данной ситуации. Я буду сглаживать только проблемный участок у рукояти, а не всю имеющуюся модель.
Для того, чтобы правильно все сделать, сначала нужно выделить эти полигоны и назначит им 1 группу сглаживания.
Не совсем то, верно? Углы на рукояти отчетливо видны.
Затем выделим следующие полигоны и назначим им другую группу.
Уже другое дело. Углов там, где не надо нет, зато углы на дужке отчетливо видны, чего мы и добивались.
Следующий пример применения групп сглаживания мне предоставила уважаемая Cutter, за что ей благодарность. Этот пример является достаточно иллюстративным, так как модель представляет собой одежду, экспортированную из другой игры. (Инквизиция, как я понимаю. Или Ведьмак). На данном примере я продемонстрирую, как можно сгладить данную полноценную модель. Так же данный пример отлично показывает все косяки, которые часто вызывает экспорт из игры.
Итак, я открыл модель, конвертировал её в Edit Poly, присмотрелся и увидел, что имею дело вот с таким вот угловатым ужасом.
Для теста решил накинуть группу сглаживания, но что я вижу? Безрезультатно, модель никак не меняется! В чем дело, как дальше жить, кто виноват и что делать? Виноват в данном случае экспорт из игры. Дело в том, что при экспортировании модель зачастую разбивается на составные элементы и один полигон представляет собой отдельный элемент. Если так, то у полигонов нет общих граней, а раз так, то и сглаживать нечего. Для того чтобы понять, так это или нет, я решил перейти на уровень редактирования вершин, выделил все вершины корсета и применил функцию Weld на самом малом значении (0.01)
До применения Weld. Обратите внимание на количество вершин. Что-то здесь не так!
После применения функции Weld. MAGIC!
После этого я решил сделать тоже самое с воротником и лифом.
1029 вершин? В это мне верится больше. К сожалению, косяки в модели не ограничиваются только этим. И если вы решаете выкладывать в виде плагинов для игр серии TES экспортированные откуда-либо модели, прошу, выискивайте их (косяки). Это ну очень омерзительные вещи. Поскольку урок не об этом я укажу на некоторые из них на заметку вам и к этому возвращаться не буду.
Для выявления косяков поступаем просто и нудно – выделяем вершины. Смотрим, сколько их должно быть. Смотрим, сколько их есть на деле. Если их больше, чем надо – ищем косяк.
Номер один. Суть в том, что там скрыто еще 2-3 полигона. Просто удалите 1 из вершин, отсутствие которой потревожит меньшее количество полигонов (желательно всего один) и достройте эти полигоны. Так же в некоторых случаях, когда в модели присутствуют элементы без толщины (то есть просто плоскости) типа бахромы сверху корсета, может случиться, что полигоны будут вывернутыми и как следствие не отображаться. Для ликвидации этого перейдите в режим редактирования элементов и выделите эти участки. Они будут выделяться как отдельные элементы. После выделения нажмите на функцию Flip (полигоны станут видимыми в старых версиях 3D MAX, в новых же станут светлее). Затем примените функцию Weld. Всё, косяки исправлены, теперь перейдем к сглаживанию.
Сначала, я уберу сглаживание, которое установилось после “сшивания” всех вершин. Сейчас я просто на скриншотах покажу, как я расставил группы и что из этого получилось. Итак, начнем.
Сначала разберемся с воротником и корсетом.
Первая группа сглаживания.
Третья и четвертая группы у меня разделены по причине, которую я описывал выше – я решил, что шов спереди по центру ворота будет выглядеть неплохо, поэтому и расположил группы именно так.
Переходим к последней части модели.
Первая группа
Опять же, чашку корсета и бахрому я разделил на 2 группы, так как считаю, что между ними должен быть заметный угол.
Третья и четвертая группы аналогичны
Пятая группа представляет собой полигоны торцевой части бахромы
Шестая группа – внутренняя часть верха ворота. Вернее, её часть. Да, с воротом я так же сделаю заметным угол спереди в центре.
И, наконец, девятая, последняя, группа.
Вот и все, группы сглаживания для модели назначены. Если вы исправили косяки в топологии, то она готова к текстурированию, либо к экспорту в игру, если это всё уже сделано.
Итог моих мучений вы видите на скриншоте.
На этом наша беседа на тему групп сглаживания подходит к концу. Надеюсь, мой урок помог вам разобраться в этой теме. Если возникли вопросы, с радостью отвечу на них в комментариях, на форуме или в личке.
Прежде чем закончить, я бы хотел бросить своеобразный клич. Данная статья – проба пера моей идеи, которая представлена в виде написания уроков на различные частные темы типа групп сглаживания и т.д., в которых не излагается методика создания готовой модели, а освещается более конкретно небольшие темы, которые могут вызвать сложности или вопросы. Нужны ли такие статьи? Как их лучше организовать? Излагайте идеи так же на форуме TesAll, в комментариях к уроку или мне в личку. Ну и естественно темы для уроков будут формироваться либо учитывая мои личные наблюдения, что вызывает затруднения, либо с помощью ваших вопросов.
На этом у меня всё, надеюсь на ваше участие. Спасибо за внимание, удачи!
Источник