Создание поверхностей, сделанных в реальном мире из материалов подверженных изгибу и деформации, вполне реальная задача для Cloth.
Для начала еще раз повторю, что Cloth это всего лишь модификатор, позволяющий поверхности изгибаться и деформироваться. Но его основным отличием от других модификаторов является способность впитывать в себя стек, подобно губке. При стандартном моделировании вы постепенно двигаетесь от низа стека к его вершине, можете вносить изменения внизу по стеку получая нужный результат вверху. Но если в стеке есть Cloth, то он становиться его вершиной, и поток изменений идет в него как снизу, так и сверху, даже от других Cloth. А стек в данном случае можно сравнить «с карточной колодой, которую можно тасовать и раскладывать как угодно вам, но при этом все карты будут работать на вашего Джокера Cloth.»
На форуме возникла тема: «Как можно быстро смоделировать подобный столик?»
Судя по референсу и по безрезультатным поискам в сети, такого стола не существует. Ни размеров, ни материала, из которого он сделан, не удалось определить таким образом. При создании модели придется опираться только на реф.
Итак, предположим, что модель согнута из заготовки прямоугольной формы. Исходя из того, что эргономичная высота стола 750мм., прикинем остальные размеры...
Получилось следующее: длина столешницы ≈ 1400мм. + длина изогнутой ножки ≈ 3000мм., ширина полосы ≈ 500мм.
По этим параметрам создаем плоскую форму.
Добавляем сегментов по длине нашей будущей «ножки» и по ширине полосы. Для дальнейшего удобства в работе выделим вершины основания.
На уровне подобъектов переносим нашу полосу на уровень 750мм по глобальной оси Z, сохранив тем самым нулевую координату у пивота объекта.
Наша заготовка готова к деформации. Накидываем Cloth. В связи с отсутствием Ground в самом модификаторе для подобных объектов по умолчанию добавляем в симуляцию большой плейн с нулевой координатой по оси Z, указываем в свойствах объектов Collision Object, Depth = 1000mm. и Offset, Dyn.Fric., Static Fric. = 0.
Часто на форуме всплывают темы о том, что ткань не симулируется, а в лучшем случае ведет себя как фанера. На поверке оказывается, что полотно очень маленькое, и ведет оно себя адекватно для своих размеров. Этим и воспользуемся прежде всего в нашей симуляции. Но уменьшать саму модель не будем, воспользуемся параметром cm/unit. В моем случае, так как работаю в мм., могу уменьшить его только в 10 раз, изменив 0,1 на минимально возможный 0,01. Т.е. для симуляции модель стала в 10 раз меньше реальных размеров. Стоит при этом учесть, что все параметры для полотна, задаваемые всегда в см., тоже уменьшаем в выбранное число раз.
Назначим группы:
1. tabletop - из вершин столешницы со свойством preserve.
2. base - из вершин основания ножки со свойством drag.
Небольшое отступление...
Для многих оба свойства групп идентичны и служат для блокировки вершин, но это не так.
Drag - блокирует вершины группы в положении в момент назначения свойства. Но если для группы разрешена коллизия с твердым объектом, то Depth и Offset будут влиять на положение этих вершин. Но когда влияние исчезает, сетка восстанавливается.
Пример:
Анимированная сфера будет деформировать полотно, у которого группа Drag из всех вершин.
Preserve - блокирует группу в положении низа стека. На ее положение не будут влиять никакие силы симуляции, и именно это дает дополнительные возможности управления.
Пример:
У горизонтального плейна группа Preserve из двух рядов вершин.
Симуляция
Внизу стека масштабируем (увеличим) все вершины плейна по оси X и продолжим симуляцию.
Внизу стека масштабируем (уменьшим) все вершины плейна по оси Y и продолжим симуляцию.
Отключим масштабирование по оси X и продолжим симуляцию.
Как можем заметить, полотно у нас остается неизменным по форме (с чекером это будет заметнее), меняется только положение вершин группы. Применимо к контролю за симуляцией очень интересное свойство, особенно для анимации.
В свойствах объекта table указываем Cloth. Из дефолтных параметров изменим только Bend, Stretch, Compress и Thickness.
Bend - сопротивление изгибу, увеличиваем до нужной жесткости полотна к изгибу.
Stretch и Compress - сопротивление еджей к растяжению и сжатию соответственно. Указываем одинаковые значения, подбираем минимально возможные при текущем Bend, чтобы при симуляции не лезли артефакты. Минимальное значение необходимо для избавления от эффекта «вялого галстука» по dedora.
Thickness - толщина ткани, задаем исходя из того, какие значения будут указаны в модификаторе Shell, учитывая измененный cm/unit.
В моем случае Bend = 1000, Stretch и Compress = 20, Thickness = 0,25см.
Не многие знают о существовании интерактива в Cloth - подуровень Faces. Можно и с его помощью симулировать нужную форму, но это крайне неудобный в большинстве случаев инструмент, а главное - не дающий никакой точности в управлении. Поэтому скручивать ножку будем через вершину стека. Описание процесса можно найти в этом блоге : Сворачиваем ткань .
Подворачиваем половину «ножки» под столешницу.
Закручиваем основание на -90 по X.
Докручиваем основание и ставим на место.
Используя интерактив, подтягиваем полигоны к нужному положению, фиксируем форму, заблокировав необходимые вершины, и уточняем их положение через вершину стека. В финале заблокированные вершины лучше перенести с края полосы для устранения явных потяжек, образующихся на нем из-за маленького значения Stretch и Compress.
При финальной симуляции Stretch и Compress удалось уменьшить подбором до 9. Получилось довольно прилично.
Накидываем Unwrap UVW, делаем развертку и задаем толщину Shell.
Упс! Не таким ли способом была создана модель с рефа?
......................
Но как бы не было похоже, модель далека от оригинала, а именно полное соответствие ему и является основой хорошего моделинга. Значит попробуем еще раз, дополнив алгоритм дополнительными инструментами контроля и управления. Еще раз делаем анализ референса….
По тому, как лежит текстура на модели, и по финальной развертке уже созданной модели, можно сделать заключение, что изначальное полотно не является прямоугольником, а имеет лекальную форму. Именно поэтому пришлось скручивать параметры полотна Stretch и Compress до допустимого минимума.
Также простая изначальная сетка даст возможность точнее управлять не только формой и размерами полотна, направлением эджей, но позволит точно контролировать симуляции.
Удаляем у созданного столика стек до базового объекта. Для исключения деформации столешницы при смузе задаем разные группы сглаживания полигонами. Добавляем пять эджей по длине «ножки» и сразу на уровне подобъектов переносим нашу полосу на уровень 750мм по глобальной оси Z.
Прежде чем двигаться дальше, наносим проекционные координаты с помощью UVW Map - Planar по второму каналу. В Unwrap UVW по второму каналу порежем все еджи. Рисуем маску и настраиваем материал. Это необходимо для удобного контроля вершин по сетке базового объекта при управлении симуляцией. Коллапсим стек.
Накидываем Turbo smooth с интерацией 4 и сглаживанием по группам (чтобы не исказить столешницу при редактировании).
В итоге мы получили некое подобие модификатора FFD только plane, и всего 16-ю вершинами, 22-мя эджами и 7-ю полигонами можем неплохо контролировать форму и размеры полотна.
Только этим мы займемся позже. А сейчас почистим лишние лупы по ширине полотна.
Еще одним UVW Map (wood) с первым каналом настраиваем отображение текстуры дерева.
Так как еджи на базовом объекте нарезались коннектом, в базовом объекте подтягиваем их примерно в положение на рефе.
Cloth и далее все точно по схеме первой части блога до финального Unwrap UVW.
Самое время поместить референс на фон и настроить вид с камеры по нему, свет, визуализацию.
Да-а-а! До оригинала совсем далеко. Без правок и редактирования не обойтись.
Рассмотрим доступные возможности редактирования и управления:
Прежде всего это вершина стека. Сложить и скрутить ткань, подвернуть ее, завязать узлом, точно уложить или повесить в нужное место - нет совершенно никакой необходимости делать все это через симуляцию. Макс имеет множество инструментов и возможностей по такие задачи, симуляцию в данном случае применяем только для финального расправления полотна. Полезна вершина стека и для точного редактирования расположения вершин групп Drag. Если это удобнее вверху стека, можем сделать выделение вершин для групп, переместить модификатор выделения под Cloth и захватить выделение через Get Stack Selection. Cloth очень не любит пересечения ткани, поэтому в работе требует особой аккуратности, но если все-таки такое происходит, то релакс сетки через вершину стека во многих случаях спасает положение.
Теперь ближе к нашему столику, который требует доработки, ведь сетка была переделана не просто из прихоти.
Столешница столика оказалась шире и короче, чем предположил в начале, да еще и место перехода в ножку - это трапеция. Так как все вершины столешницы в группе Preserve, достаточно отредактировать их положение в базовом объекте, и при симуляции они займут свое место. Пример подобного поведения уже приводился выше.
Сделанное ранее заключение, что изначальное полотно не является прямоугольником, а имеет лекальную форму, пока проигнорируем. «Ножка», помимо лекальности, сужается к основанию. Исправляем это либо в базом объекте, либо добавив сверху него нужный модификатор (например FFD 2x2x2). Также, исходя из сделанных правок, необходимо скорректировать положение затронутых изменением вершин, относящихся к группам Drag.
ВАЖНО!!! Для того, чтобы изменения, сделанные для полотна, вступили в силу, необходимо отключить внизу стека все, что использовалось для управления симуляцией и не относится к форме полотна, сохранить и перезагрузить сцену или воспользоваться скриптом Copy Paste, захватив и заменив все объекты участвующие в симуляции. В противном случае редактирование затронет только группы Preserve. Ниже по тексту, где необходима данная операция, я буду вставлять Grab Shape Canvas. Странно, что в самом Cloth не предусмотрели такой возможности, хотя в Garment Makert подобная функция присутствует - Mesh It and Preserve.
Заблокировав центральные вершины по перечным еджам ножки базового объекта, которые мы легко можем обнаружить, благодаря сделанному отображению в материале. Корректируем направление сетки, разворачивая эти еджи в режиме Сonstraints - Edge у базового объекта или перемещая их вершины в нужное место. Grab Shape Canvas.
Разумеется, перемещая эти же еджи по оси X, можно отредактировать длину сегментов между ними, можно где-то подтянуть излишки, где-то добавить длинны и расслабить натяжение. При необходимости блокируем вершины по еджам, выделение которых удобно сделать в Edit Poly, перенеся его затем в Cloth. Grab Shape Canvas.
Подгонка по текстуре. Как уже упоминалось выше о подобии модификатору FFD, изменение положения поперечных еджей ножки у базового объекта позволяет добиться лекальной формы. А модификатор UVW Map (wood) дает возможность контролировать процесс визуально в окне проекции. Также перед симуляцией потребуется Grab Shape Canvas. Можно и не захватывать форму полотна, а оставить это как развертку. Но для этого редактировать в добавленном над базовым объектом Edit Poly, который при сохранении отключаем.
После удачного редактирования можно повысить Stretch и Compress. Но надо признать, что процесс такой подгонки очень муторный, требует хороших навыков и опыта.
Но все же максимально уйти от эффекта «вялого галстука» можно, только имея правильную по форме лекальную сетку(полотно). Как можно было заметить, из-за малых значений Stretch и Compress полотно при симуляции само стремится к правильной форме, только побочно возникают неприятные потяжки, особенно у заблокированных вершин.
Поэтому в завершении небольшой лайфхак.
Для симуляции нам потребуется Ground. Создавать новый не будем, заставим существующий работать сразу на два Cloth. Накидываем на Ground Edit Poly и на уровне подобъектов помещаем плоскость на 750мм., по высоте.
Назначаем объекту table модификатор Cloth(lifehack).
Добавляем в него Ground как Collision Object и указываем для table в свойствах объекта Cloth. Настраиваем параметры для ткани, Ground и для симулятора, как на скрине ниже.
Добавляем группу tabletop из вершин столешницы со свойством preserve.
Отключаем Cloth и захватываем состояние Reset State.
Симуляция до полного успокоения ткани. Разумеется, при необходимости полотно можно подтянуть под задачи.
Edit Poly. Разгладим релаксом сетку ножки.
Edit Poly. Детачим сетку в объект table(lifehack).
Отключаем оба Edit Poly и Cloth(lifehack), включаем Cloth.
Под UVW Map (wood) назначаем Morpher и привязываем состояние к table(lifehack). Grab Shape Canvas.
Теперь наше полотно имеет форму table(lifehack), это видно по тому, как легла на него текстура.
Чтобы убедиться в этом, можно запустить симуляцию, оставив блокировку у вершин столешницы и основания. Форма изменилась, но осталась подкрученной.
Подобрав значение Stretch и Compress и управляя объемной формой, симулируем «накрахмаленный галстук» !!! )))
Опускаю описание процесса подгонки по рефу. Во-первых, это будет уже скучно, а исходя из описанного выше, надеюсь, не составит сложности сделать это самостоятельно, задействовав серое вещество.
В итоге после редактирования получилась вот такая модель столика.
P.S. Маленькое дополнение....
Как из такой сплайновой формы
получить такую сетку.
Добавляем вершин.
Разбиваем нужные.
Garment Maker и немного шитья. Незабываем поднять Seam tolerance.
Подбираем плотность.
Бридж еджей.
Удаляем лишние полигоны и разворачиваем оставшиеся.
Удачи!