Связка Cloth + mCloth.
Термоядерная смесь, позволяющая совместить возможности по контролю и управлением процессом симуляции первого со скоростью и объемом решаемых задач второго. В данной связке mCloth служит именно для ускорения процесса симуляции и используется либо в вершине стека, либо как модификатор для симуляции драйвера.
Если в модели не используются швы, достаточно поместить mCloth в вершине стека (над Cloth). Сам процесс работы будет выглядеть следующим образом:
- делаем необходимые манипуляции с тканью используя возможности Cloth или используя стек.
- расслабляем сетку локальной симуляцией с демпфированием.
- переходим в mCloth и поднимаем состояние полотна с низа стека (Reset Initial State => Reset Simulation) и симулируем.
- принимаем изменения в Cloth (Set Initial State => Erase Simulation) при отображении состояния вершины стека.
- отключаем отображение вершины стека или mCloth и снова расслабляем сетку.
-повторяем цикл необходимое количество раз до получения желаемого результата.
Немного сложнее будет выглядеть алгоритм при использовании швов. В данном случае нам потребуется драйвер. Перед использованием связки нам надо симулировать модель в Cloth до совмещения деталей по швам. После чего снимаем полученную сетку в новый объект который у нас и будет драйвером. У него необходимо свелдить вершины по швам. Привязываем исходный объект через Skin Wrap к драйверу. Это позволит нам в нужный момент захватить форму драйвера в Cloth или Garment Maker. Прямой цикличности работы между объектами в данной схеме не получится, при любом редактировании исходного нужно будет создавать новый драйвер. Поэтому весь цикл, описанный выше мы перенесем на драйвер, выстроив там свою связку Cloth + mCloth. Зачем такие сложности? Может они и лишние, но одно останется бесспорным – mCloth научился шить (если можно так сказать).
Шьем без Garment Maker.
Конечно шить увлекательное занятие! Но настраивать множество швов делая дополнительные вырезы и детали крайне неблагодарное занятие. Например такие детали как карманы, рюши, оборки и прочие элементы отделки легко можно сделать и другим способом используя Skin Wrap.
Готовим все детали будущей модели разными объектами (для дальнейшего удобства в использовании). Например для одежды - полочки, спинку, рукава и воротник делаем одним объектом (основа) через Garment Maker со швами. Всю отделку - другим или другими.
Назначаем на все объекты Cloth.
При необходимости симулируем и редактируем элементы отделки до необходимого нам начального состояния (делам сборки у карманов и рюшей, закладываем выточки оборок) и размешаем их на основе.
Привязываем отделку к основе через Skin Wrap.
Симулируем основу.
Принимаем у отделки в Cloth состояние из Skin Wrap (Set Initial State => Erase Simulation), блокируем группы вершин в местах «швов» и симулируем исключив основу.
Может где-то мы потеряли физическую корректность, но в скорости выиграли в разы. И не только в процессе симуляции, но и в процессе подготовки. Хотя для пытливых умов и эта задачка по силам, решение есть и заключается в использовании дополнительного скининга!
Grab Target State – сохраняем состояние для восстановления.
Разумеется это нестандартное применение захвата, которое пользую постоянно в случаях когда не использую его по прямому назначению.
Конечно можно сохранить сам файл и если что-то не понравилось вернутся к нему. Но ... Это путь потерять все изменения в настройках симулятора, полотна и групп которые были произведены после сохранения.
Делаем захват (Grab Target State), отключаем его использование (Use Target State) и совершенно спокойно продолжаем работу.
При необходимости возврата к захваченному состоянию включаем его отображение (Show Target State) и восстанавливаем его для работы (Set Initial State => Erase Simulation). Отображение (Show Target State) отключаем и работаем дальше.
Ретопология.
О ретопологии было написано не мало и все способы имеют место быть. Но у большинства из них, которые основаны на привязке новой сетки к полотну в состоянии плоских панелей, есть один недостаток – несовпадение вершин в местах стыковки швов, и не только пространственное, но и количественное.
Решаем эту проблему небольшим дополнением к процессу.
Сохраняем сетку полученную с использованием Garment Maker в отдельный файл и подгружаем к нашей сцене. Делаем это для того, чтобы сохранить настроенные швы. Приводим ее в состояние плоских панелей (Flat Panel).
Регулируем плотность сетки до нужного размера ребер по периметру полотен. Переводим в Poly => Выделяем все эджи => Remove или Backspace => Выделяем все полигоны => Inset с нужным для края значением => При необходимости редактируем край внутренних полигонов.
Используя свои знания и навыки или информацию полученную из ранее описанных способов по ретопологии допиливаем внутренние полигоны.
Скиним полученную сетку к плоским панелям. Востанавливаем объем. Вуаля!!! Все вершинки на месте, или почти на месте. Небольшое увеличение параметра велда полностью решает проблему.
Дополнение для пытливых умов!
Делаем сплайновую выкройку => Garment Maker => Настраиваем швы => Cloth => Отключаем использование швов (Use Sewing Spring) => Reset State => Вуаля! Но топология сетки осталась прежней, прискиненный объект связь не потеряет. Дальше додумываем сами. )
Cloth – хранитель формы.
Тут как раз речь пойдет о применении Target State по его прямому назначению – сохранение углов между полигонами и длинны ребер. Процентное отношение влияния на эти величины задается в разделе Keep Shape свойств полотна или групп. Где Bend – величина для углов, а Stretch – для длинны ребер.
Невозможно при работе с драйверами избежать искажений исходной формы, причем чем дальше находятся вершины объекта от сетки драйвера тем критичнее будут деформации. И снова на помощь придет Cloth!
Прежде чем скинить сетку, готовим наборы выделения для будущих групп для блокировки. Назначаем Cloth.
Делаем объект тканью. Захват состояния необязателен, т.к. он нам нужен изначальный, достаточно лишь включить его использование (Use Target State). Настраиваем его использование как описано выше.
Скиним и проверяем на отсутствие ненужный пересечений при изменении формы драйвера. Если такие пересечения присутствую, удалям Skin Wrap и редактируем форму в нужных местах (оптимально – поджать ее поближе к сетке драйвера тем же FFD), делаем это через вершину стека и по завершению переносим изменения в Cloth. Удаляем вершину стека. Снова скиним и проверяем. При удовлетворительном результате переносим изменения в Cloth и отключаем вершину стека.
Осталось только симулировать предварительно заблокировав нужный группы. В большинстве случаев в параметрах симулятора убираем гравитацию и самоколлизии, также можно уменьшить параметр cm/unit для лучшего результата.
Кроме устранения искажений формы и приведения ее к изначальному состоянию мы получаем бонус в качестве коллизий.
Как пример для применения:
Можно насыпать Mass FX горку яблок, или еще чего-нибудь. А можно насыпать тем же Mass FX яблоки на конус развернутый в плоскость а потом поднять его. Наверно так проще контролировать форму горки, да и вес у модели значительно уменьшится.
Загнуть и искривить дорожку усыпанную гравием.
Да мало ли что еще…
Использование низа стека.
Данный алгоритм в чем-то сродни описанному выше, но имеет другое построение. Он больше подойдет при создании органики.
Основой алгоритма является уже не раз упомянутое в предыдущих уроках свойство Cloth запоминать сетку такой, какой она была в момент назначения.
Для полного понимания два простых примера. Дополнять и наворачивать алгоритм каждый будет в меру своей «испорченности».
Нам потребуется один готовый цветок (стебель, листья, бутоны) и мы соберем из него букет. Цветок может быть не одним объектом, а системой с ригом, но это уже для опытных. Для более простого понимания в примерах он будет одним.
Пример первый:
Модель цветка. Первое что делаем это готовим наборы выделения вершин для последующего управления через группы. Основные группы – группы для блокировки например стебля и оснований у цветов и листьев.
Переименовываем объект исходя из его назначения (morph target). Делаем копию, это будет объект для размещения (flower).
Самый удобный способ собирать букет полностью контролируя его форму и пересечения – это собирать его из объектов приближенных к форме цилиндра. Следовательно приводим flower к такой форме максимально уложив листья по стеблю и собрав бутоны. Затем делаем n-ое количество копий и собираем из них букет удобным для нас способом. Главное это минимальное искажение стебля.
Когда форма букета готова выделяем все объекты и морфим (Morpher) их к morph target с нужным процентом. Если требуется дополнительная рандомность – можно перевести нужные Morpher в уникальные и задать свой процент, или потом настроить отличные свойства для полотна или групп. Не пугаемся результата, движемся дальше. Cloth. Делаем объект тканью, настраиваем свойства полотна, группы и симулятор. Удаляем модификатор Morpher и приводим состояние к низу стека (Reset State).
Симуляция.
Пример второй:
Модель цветка. Готовим наборы выделения вершин для последующего управления через группы. Основные группы – группы для блокировки например стебля и оснований у цветов и листьев.
Переименовываем объект исходя из его назначения (morph target). Делаем копию, это будет объект для размещения (flower).
Самое удобное собирать букет полностью контролируя его форму и пересечения – это собирать его из объектов приближенных к форме цилиндра. Следовательно приводим flower к такой форме максимально уложив листья по стеблю и собрав бутоны.
Собираем букет используя Hair and Fur (или чем-то подобным), где нордом указываем flower. Переводим полученный результат в мешь (Hair -> Mesh) и переименовываем полученный объект (flower 01). Но мы не сможем сделать морф flower 01 к morph target так как это совершенно другая сетка. Меняем нод в Hair and Fur на morph target и снова переводим в мешь (morph target 01).
Дальше все по описанной уже выше схеме:
Морфим (Morpher) flower 01 к morph target 01 с нужным процентом. Cloth. Делаем объект тканью, настраиваем свойства, группы и симулятор. Если требуется дополнительная рандомность настраиваем отличные свойства для групп. Удаляем модификатор Morpher и приводим состояние к низу стека (Reset State).
Симуляция.
Всё-ё-ё!