Сделаете глубокий вдох, расслабьтесь и постарайтесь на время освободиться от всего, что вы знали и умели при работе с тканями.
Готовы ? Тогда начинаем...
Постарайтесь вспомнить все что Вы умеете в полимоделинге, особенно той его части, которая не меняет топологию сетки. Это нам очень пригодится!
Модификаторы. Мы пользуемся ими постоянно. Разными, под разные задачи.
Модификаторы сети Edit Poly, Edit Mesh - основа полимоделинга.
FFD - наверно самый часто используемый, где только он не возникает.
Bend - гнем все что требуется.
Twist - скручиваем где надо и где не надо.)
Push - поднимаем поверхность.
Spherify - делаем из объекта шарик.
и Т.Д.
Cloth - модификатор полотна. Добавляет поверхности объекта заданные физические свойства и позволяет ей взаимодействовать с другими объектами и силами в сцене.
Да, это всего лишь модификатор ! Основным свойством Cloth является то что он запоминает поверхность такой, какой она была в момент назначения модификатора. И как бы не менялась форма объекта при симуляции, какие бы, всегда понятные для Cloth изменения, не происходили в стеке, эта поверхность останется неизменой.
На что в первую очередь стоит обратить внимание при создании штор, и это то, чего не хватает во многим моделям? Почти все шторы висят у стены, следовательно первое что мы сделаем - это плоскость которая послужит нам ограничителем имитирующем стену. При необходимости подобный ограничитель мы можем установить и с лицевой стороны, чтобы ограничить глубину шторы. Стоит помнить что нормали этих объектов должны быть направлены в сторону полотна.
В примере рассмотрим вариант сборки со встречными складками.
Начинаем моделинг со сплайновой формы, который будет являться сечение верха нашей шторы. В горизонтальной плоскости создаем сплайн следующего вида (внизу для наглядности показана его структура) и длинной по ширине будущей шторы ( в примере 830 мм. по оси X )
Убираем в сплайне интерполяцию (1) и екструдим его на нужную высоту (2) с необходимой сегментацией(3). Длину сегмента сделаем по высоте сборки. Чтобы проекционные координаты соответствовали форме полотна, указываем что они будут (4) в реальных размерах (5), при необходимости в последствии сделаем упаковку в анврапе.
Конвертируем в Editable Poly и уплотняем сетку в местах складок сборки коннектом (1) эджей (2).
Заготовка полотна готова. Сделаем копию объекта и присвоим в названии литеру _morph, скопированный объект скрываем он нам потребуется позже. Накидываем Cloth и указываем что curtains будет полотном, а Plane001 объектом твердой коллизии. В свойствах полотна зададим толщину ткани 2 мм. (1) (параметры полотна всегда в см.), увеличим силу отталкивания (2) и немного понизим скейлинг по оси U (3).
Для чего мы уменьшали скейлинг? Cloth ненавидит пересечения сетки и вершины имеющие одно пространственное положение ( вершины - только для полигональной сетки, к Garment Maker не относится ) Поэтому первой молниеносной симуляцией с демпфированием (1) мы немножко разведем их. Разумеется с отключенной гравитацией (2) и самоколлизией (3)
Теперь необходимо создать группу для блокировки. Edit Poly в вершине стека и через Graphite Tools выделяем вершины в местах сшивания складок.
Перетаскиваем Edit Poly под Cloth (1) и переносим выделение (2). Добавляем к выделению весь верхний ряд вершин, создаем группу (3) (4) и блокируем ее (5). Укажем что у группы будут отличные от полотна свойства (6) и оставим их по дефолту. Это сделаем для того что между некоторыми вершинами расстояние меньше чем заданная толщина полотна.
Для того чтобы полотно имело возможность провиснуть используя FFD 2х2х2 уменьшим его на 30 мм. по оси X. ( Важно! Тоже самое нам необходимо проделать и с объектом curtains_morph ). Провисание между точками крепления к карнизу мы зададим сами, не будем полагаться на волю случая. Используя Soft Selection опускаем серединку.
И оставив выделение зададим рандомность модификатором Noise.
Сделаем релакс исключив из него заблокированную группу.
Переносим изменения в Cloth (1) (2) Не забываем про отображение вершины стека (3), отключаем вершину стека (4), включаем гравитацию (5) и самоколлизию (6), в свойствах полотна вернем скейлинг по оси U к дефолтному (7). Запускаем симуляцию (8), В процессе симуляции чтобы ускорить просчет полезно делать переключения на Simulate Local (damped) чтобы успокоить инерцию.
При достижении желаемого результата останавливаем симуляцию. Соединяем наши швы, которые мы развели перед симуляцией. Для этого поднимаем выделение с первого Edit Poly и делаем морф к объекту curtains_morph.
Вот собственно полотно с запланированной сборкой готово. Как Вы понимаете вариант сборки напрямую зависит от созданного в самом начале сплайна, так что сделать можно любую.
Можно было бы завершить на этом повествование, но остается ощущение какой-то незавершенности.
Дополним наш урок еще немного. Опустим низ шторки на пол.
Создаем плоскость пола. Уплотняем сетку низа шторы уже известным способом.
На все три объекта накидываем новый Cloth.
С помощью FFD вносим рандомность в складки.
Укладываем низ на плоскость любыми инструментами и так как нам этого захочется, хоть до последней складочки! Инструментов в Максе предостаточно.
Переносим деформации в Cloth. Блокируем верх у шторки.
Симулируем, сначала с демпфированием чтобы полотно расправилось, затем как удобно.
Аналогичным способом делаем подхват. Если сборка на подхват сложная, то работу лучше разбить на несколько этапов. В процессе работы удобнее фиксировать вершины в области подхвата. На финальном этапе, если в этом возникает необходимость, можно добавить к симуляции объект имитирующий подхват. Он может быть как и твердым так и полотном с необходимыми свойствами.
Ну вот наверно и все.
Рабочий файл с открытым стеком в 2010 формате Вы можете забрать тут.
В заключение хочу добавить:
Данный алгоритм прекрасно подойдет не только для моделирования с нуля, и разумеется не только для штор. Вы можете также дорабатывать с его помощью уже готовые модели под свои нужды!
Совершенствовать, дополнять, менять данную схему можно бесконечно, получая более качественный результат и ускоряя процесс симуляции. Все будет зависеть только от опыта работы в Максе, понимания самого алгоритма и полета фантазии.
Удачи!