Вместо ликбеза: Smoothing Groups в 3Ds MAX

К комментариям
02.05.2015 — 19:07
Автор: Truewolf

Описание основ работы с группами сглаживания (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, в комментариях к уроку или мне в личку. Ну и естественно темы для уроков будут формироваться либо учитывая мои личные наблюдения, что вызывает затруднения, либо с помощью ваших вопросов.

На этом у меня всё, надеюсь на ваше участие. Спасибо за внимание, удачи!

Lord Beowulf, для Tesall.ru

Автор: Lord Beowulf