Cloth. Используй с умом


Приветствую всех профессионалов и любителей компьютерной графики.
Сегодня мы с Вами поговорим о работе модификатора «Cloth» в не совсем привычной  для него роли. Роли укладчика проводов, шнуров и т.п. моделей, а также узнаем, какие секреты этот модификатор может хранить в себе. Но для начала хотелось бы сделать небольшое отступление.
Все мы с Вами неоднократно слышали о таком термине как физическая корректность: Физически корректный шейдер, физически корректная симуляция, физически корректный рендер и т.д. В общем, независимо от сферы деятельности, будь то игровая индустрия или сфера дизайна все кругом стремятся к этой самой физической корректности. Ну а что такое физическая корректность применительно к интерьерной визуализации?  Бытует распространённое мнение дескать фотореал (физ.корректность) – это слагаемое трёх компонент: качественная геометрия, корректный шейдер + освещение. И с этим трудно не согласиться. 
На сегодняшний день добиться убедительного фотореализма в сценах задача не совсем тривиальная, но вполне достижима. Однако итоговая картинка не будет полной, если в ней будут отсутствовать мелкие детали дополняющие общую композицию. К ним можно причислить провода от различных электроприборов, шнуры, кабели всевозможные шланги и т.д. Сегодня наверное ни один интерьер спальни нельзя представить без тумбочки на которой бы не располагалась лампа. У этой лампы естественно имеется шнур, ведущий к розетке. Но очень часто на итоговых картинках подобные нюансы опускаются.
Мы сегодня постараемся ликвидировать пробел в этом вопросе и научимся реалистично укладывать разные соединительные элементы в интерьере.
Приступим помолясь!
Для работы нам понадобятся:
  •                           Вилка, розетка, провод в прямолинейном виде (с корректными текстурными координатами);
  •                Сцена интерьера, которую для демонстрации этого урока мне любезно предоставила визуализатор Олеся Ульянова. За что ей огромнейшее спасибо!:
я позволил себе внести в этот интерьер некоторые детали

Рассматривать мы будем самый простой и очевидный вариант применения модификатора Cloth – симуляция через драйвер формы. Напомню, что такой вид симуляции здорово экономит ресурсы компьютера, а следовательно сокращается и время самой симуляции.
(для лучшего понимания этого урока я бы посоветовал ознакомиться со следующим материалом (Винтовые лестницы Приёмыи методы работы. Cloth.Приемы и методы работы.(продолжение):

            1.   В центр заготовки для будущего провода «Wire 1» помещаем драйвер формы «Driver 1» с необходимым количеством сегментов. Чем больше, тем лучше, но увлекаться особо не стоит:

2.           Используя модификатор «SkinWrap» привязываем основную форму провода к «родителю»:


3.           На драйвер формы назначаем модификатор «Cloth» и во вкладке «Object Properties» указываем, что это у нас Cloth- объект, но чтобы он вёл себя не совсем как «тряпка» повышаем его сопротивляемость к изгибанию – параметр «Bend», остальные свойства не трогаем:

Далее, мы вовлечём в процесс такое замечательное свойство модификатора «Cloth» как способность вбирать в себя изменения произведённые вверху стека. Как правило, «Cloth»  корректно воспринимает подобные манипуляции (все виды трансформации, модификаторы «Push», «Relax», «FFD», «SkinWrap»  и т.д.)не связанные с изменением количественного состава геометрии.  

1.     Вверх стека нашего драйвера «Driver 1» назначаем модификатор «Edit Poly». С его помощью мы размещаем оба конца драйвера (крайние его вершины) в тех местах, где они и должны быть в итоговом варианте – это входы в вилку и лампу, а остальное полотно драйвера посредствам инструмента «Scale» сплющиваем до такого состояния, чтобы его было легко контролировать. В итоге у нас получится что-то не совсем на первый взгляд вразумительное, но лиха беда начало:

2.     Далее, необходимо перенести эти изменения в сам «Cloth». Обязательно нужно следить за тем, что бы при захвате состояния в модификаторе была активна кнопка «Show End Result». Без неё захват состояния (как говорится) не состоится:

Алгоритм данной возможности построен таким образом, что при захвате состояния в модификатор, оно (состояние) плюсуется к тому, которое было произведено вверху стека. Поэтому объект деформируется дважды и при серьёзных преобразованиях (как в нашем случае) может значительно менять своё положение. Это легко решается отключением верхней части стека (до «Cloth»), у нас это всего один модификатор «Edit Poly»:

        Следующим шагом будет фиксация тех конечных вершин драйвера, которые мы ранее разместили возле розетки и у лампы. Ведь мы же не хотим, чтобы наш провод улетел в неизвестном направлении, правильно?  «Полёт» должен быть управляемым.
3.     Переходим на уровень подобъектов «Group» и выделив рамкой соответствующие вершины создаём группу, даём ей название и фиксируем вершинки командой «Drag»:

4.     Теперь необходимо добавить в симуляцию Collision – объекты. Это действие лучше осуществлять не через вкладку «Object Properties» , а последовательным выбором каждого объекта через кнопку «Add Objects», расположенную в самом низу панел «Object».Ну и соответственно так же как мы делали это для Cloth – объекта, указываем, что все эти элементы являются  Collision – объектами с установленными параметрами взаимодействия.
Здесь стоит упомянуть о единицах измерения сцены, которые в случае с «
Cloth» являются критичными. В данной сцене используются сантиметры, отсюда и такие значения в полях «Depth» и «Offset». Если Вы пользуетесь миллиметрами, скорее всего эти поля будут заполнены целыми числами.

Теперь всё готово к запуску симуляции
5.     Жмём кнопку «Simulat Local» и наблюдаем за тем, как нечто бесформенное извиваясь змейкой начинает отдалённо напоминать самый обычный провод. Постепенно это сходство становится всё более выразительным и общая форма обретает более естественный вид.

Стоит добавить, что если нам что-то не нравится в текущей «укладке», в любой момент времени мы можем остановить симуляцию и подредактировать дайвер формы через вершину стека. Точно так, как мы это делали до симуляции.
Опять же, редактирование через вершину стека не единственный способ правки симуляции. Многие забывают, что у модификатора «Cloth» помимо уровня подобъектов «Group» имеется ещё два – «Panel» и «Face».
Уровень «Panel» работает в связке с «Garment Maker»,поэтому его мы рассматривать не будем, а вот уровень «Face» в данном случае для нас весьма интересен.
На этом уровне подобъектов мы можем менять положение драйвера перемещая выделенные полигоны в сетке в реальном режиме времени:

Таким простым, но затейливым способом можно укладывать не только провода различных электроприборов, но и всевозможные шланги, верёвки и даже гофрированные объекты. Но об этом чуть позже. А пока давайте детальней рассмотрим получившийся продукт симуляции. Мы видим, что он получился (в некоторых местах) слегка плоским, хотя в наших ожиданиях он совершенно справедливо должен быть объёмным по всей своей длине т.к. мы его таковым изначально и создавали:



Если посмотреть на другую модель, созданную ранее (во время подготовки урока) тем же способом, мы не увидим в ней столь серьёзных искажений, объём на месте и общий её внешний вид не вызывает у нас критических нареканий:

Так в чём же дело, что не так с нашей моделью? Забегая немного вперёд стоит сказать, что это вполне предсказуемый результат. После симуляции с использованием драйвера – искажения неизбежны. Есть два варианта решения данной проблемы.Мы сразу рассмотрим основной метод, а второй способ будет проиллюстрирован в качестве альтернативы первому. Итак. 
Основной метод
 На предыдущем скриншоте Вы наверняка обратили внимание на тот момент, что у исходного провода в стеке присутствует дополнительный модификатор «Cloth». И именно он делает основную «погоду» в решении вопроса ликвидации искажений. А в разбираемом нами примере в стеке исходного объекта (провода) имеется только модификатор «SkinWrap». Изначально наши действия не были исчерпывающими и сделано это было умышленно с целью последовательной подачи информации. А вот теперь пришло время поведать о тех тайнах, которые «Cloth» способен хранить в себе )).
Одной из ключевых возможностей данного модификатора является способность хранить ту форму, которую он запоминает в момент своего назначения в стек модификаторов. Как это выглядит на практике?
Если в стек изначально прямолинейного объекта (до применения к нему всевозможных трансформаций) назначить модификатор «
Cloth», то последний может успешно хранить в себе (за семью замками) эту форму и в нужный для пользователя момент «включать» функцию «Возврат к исходной форме». Нет, конечно же стопроцентного возврата к исходной форме не произойдёт (хотя 
«Cloth» будет очень стараться сделать это), зато искажённая форма исходного объекта примет естественный вид. Именно для запоминания исходной формы объекта в его стек (ещё до применения каких либо действий) накладывается модификатор «Cloth». 
Как же эта функция работает?
За «Возврат к исходной форме» отвечает раздел «Keep Shape», а именно расположенные в этом разделе два параметра: «Bend» и «Stretch»:

Первый отвечает за сохранение углов м/у гранями сетки, а второй за длину рёбер. Т.е. они стараются выпрямить текущую форму объекта, вернуть её в то состояние, которое модификатор запомнил в момент своего назначения. По умолчанию значения у этих параметров выставлены в максимум (100%). И нас это вполне устраивает, поскольку нам нужно вернуть утраченные позиции - объём. 
Но прежде чем приступать к отвоёвыванию «былой мощи», необходимо вооружить войска – забрать в «Cloth» текущее состояние драйвера, которое как мы помним посредствам «SkinWrap» передаётся и самому проводу. Т.е. если сейчас отключить верхний модификатор «SkinWrap» провод просто напросто вернётся в прямолинейное состояние.
Поэтому действуем тем же способом, который мы апробировали в начале урока:

как мы уже отметили ранее, нас вполне устраивают дефолтные настройки раздела «Keep Shape»? Дело остаётся за малым  – включить эту функцию. Осуществляется это во вкладке «Object»:

Запускаем симуляцию и наслаждаемся результатом:

    Мы только-что на практике убедились в том, насколько просто и удобно использовать
Cloth – симуляцию, применительно к не самой заурядной задаче. Но это не предел совершенства, при желании мы можем повысить реалистичность имеющегося результата.  Для этого достаточно призвать на помощь другой интересный модификатор,  имя которому «Loft».
Альтернативный метод
 Располагая корректно уложенным драйвером нашего провода, мы может снять с него сплайновую форму (кнопка «Create Shape»), которую в последствии будем использовать как заготовку для функции «Path» в модификаторе «Loft», а сечение можно взять с прямолинейной части провода. В результате, благодаря расширенным возможностям «Loft» мы достигнем дополнительной убедительности в уложенном ранее проводе, а так же получаем абсолютно корректное сечение без искажений.
Итак приступим.

1.     Добавляем в стек Драйвера модификатор «Edit Poly». Делим объект на две части продольным ребром и снимаем с него сплайновую форму. Точно также поступаем и с сечением нашего провода:

Получаем две сплайновые формы: «Сечение» и «Путь».

2.      На «Путь» накидываем модификатор «Loft» и в качестве формы указываем наше «Сечение». Как результат, получаем адекватную фору провода, но с «адской» плотностью сетки:

В настройках самого модификатора«Loft» нас в основном будут интересовать только две вкладки «Skin Parameters»  и «Deformations».
В первой вкладке разбираемся с плотностью сетки, оптимизируем её (насколько позволяют эти настройки). Во-второй добавляем «перекрученности» проводам. В результате имеем вполне убедительный результат.
У меня получилось так:

Но вернёмся к «Cloth» и рассмотрим ещё пару похожих примеров, в которых герой нашего блога проявляет себя с самой лучшей стороны.
Как уже было сказано ранее, предлагаемый способ укладки подходит не только для простых проводов, но и для более сложных форм.
Рассмотрим пример с установкой шланга на лейку душа:
Здесь будем использовать гибкий шланг в гофрированный латунной оболочке и наша задача заключается в аккуратном «подключении» его к лейке.
Геометрия такой модели в плане реализации не представляет большой сложности. Из сплайнового примитива «Helix» создаётся спиралевидная форма с одним полным оборотом и полученный элемент тиражируется на необходимую длину шланга. А вот с точки зрения симуляции  такой заготовки, есть некоторые нюансы.
Дело в том, что в при изгибании подобного шланга в реальном мире, деформации внешних рёбер спирали не происходит. Однако, если попытаться реализовать такой изгиб в 3d – пространстве, искажений не избежать. И чем острее угол изгиба, тем заметнее они становятся. И именно здесь явных конкурентов у «Cloth» снова нет.
В этом примере мы воспользуемся уже рассмотренным нами способом устранения искажений, но с некоторой оговоркой.
Помимо того, что «Cloth» способен хранить в себе информацию об исходной форме объекта и в нужный момент задействовать механизм возврата к этому состоянию, он это ещё может делать очень деликатно. Т.е. если модификатору указать на конкретные участки сетки, то он будет обрабатывать (восстанавливать форму) только их. И именно эта особенность модификатора нам потребуется в реализации следующего примера.
Итак, приступим.
Возьмём стандартную душевую кабину и заменим имеющийся в ней шланг на другой – собственного производства:
Всё лишнее можно срыть. Механизм подачи воды перенесём правее, чтобы максимально  «заострить» угол изгиба у будущего шланга.
В нашем распоряжении, как и в предыдущем примере имеется прямолинейный вариант шланга «Hose» (1,5 м.) и находящийся в одной плоскости с ним драйвер формы «Driver (Hose)».
Алгоритм наших с Вами действий практически ни чем не будет отличаться от предыдущего примера, но в данном случае мы будем изначально действовать полноценно, т.е. сначала добавим исходной модели модификатор «Cloth», а уже затем приступим к остальным манипуляциям

    1.     Размещаем в стеке объекта «Hose» модификатор «Cloth»:

2.      Поверх «Cloth» размещаем модификатор «SkinWrap» и привязываем шланг к драйверу.

Далее, сразу перейдём к результату симуляции, поскольку остальные действия повторяют хронологию из первого примера. Нас интересует участок с изгибом. И как видно на первый взгляд симуляция прошла вполне успешно. Однако, как и предполагалось искажений избежать не удалось:

Именно на данном этапе нам и необходимо воспользоваться описанным выше качеством модификатора и именно для этого в первом пункте мы размещали «Cloth» в стек исходной формы шланга:
1.       Активировав объект «Hose», через вершину его стека забираем в «Cloth» текущее состояние драйвера «Driver (Hose)». После чего модификатор «SkinWrap» можно отключить или вовсе удалить, он свою работу сделал.

Тем самым мы передали «хранителю» исходной формы дополнительную информацию о текущем состоянии объекта, а оно благодаря драйверу изменилось.
 «Cloth» принял эти изменения к сведению и теперь во всеоружии готов начать симуляцию объекта «Hose». Нам лишь остаётся дать команду модификатору включить функцию «Возврат к исходной форме» и тем самым подтянуть её (форму) в нужных (проблемных) местах. Но как это сделать, ведь если мы  вот так  просто «в лоб» активируем галку «Use Target State», то «Cloth» со всей своей цифровой самоотверженностью будет стараться вернуть исходную форму всему объекту. А нам нужно, чтобы свою форму восстановили только внешние рёбра спирали. Так как же поступить? Помните фразу про деликатную обработку?
Всё достаточно просто, нам нужно создать группу вершин относящихся к тем самым внешним рёбрам спирали и указать «Cloth», что восстановить форму нужно только у этой части геометрии. 
Итак, как это сделать?
1.     Для начала нам необходимо создать выделение нужной части геометрии. Это удобно делать на самом нижнем уровне стека («Edit Poly»), поскольку объект имеет прямолинейную форму и любые манипуляции с выделением подобъектов осуществляются очень легко и доступно (хотя в конкретном случае со спиралью это непринципиально):

2.     Переходим в модификатор «Cloth» на уровне подобъектов «Group» принимаем созданное на нижнем уровне стека выделение вершин, создаём группу и даём ей логическое название:

3.     Да и не забываем фиксировать концы шланга:

4.     Теперь, для группы «Keep Shape» нужно назначить восстановление формы. Делается это во вкладке «Group Parameters»:

   Это и есть та самая деликатная настройка поведения Cloth – объекта. Теперь при запуске симуляции, форма нашего шланга слегка «подтянется» и примет более естественный вид.  
Запускаем симуляцию:

Для восстановления формы достаточно нескольких секунд симуляции, хотя в некоторых случаях может потребоваться чуть больше времени, всё зависит от конкретной задачи.

Ну и в довесок ко всему вышесказанному замолвим словечко о связке «Path Deform» + «Cloth».
Суть такой связки заключается в доработке «Cloth_ом» уже готовой формы (полученной при помощи модификатора «Path Deform»).
Для примера из базы 3ddd.ru можно взять вот такой пылесос и заменить ему шланг на более презентабельный (без претензий к автору модели):

За основу была взята обычная прямолинейная гофра, отмоделенная при помощи базовых инструментов + сплайновая форма выполняющая роль «пути» для гофрированной заготовки


Как и в предыдущем примере до применения к этому объекту каких-либо трансформаций в его стек был добавлен модификатор «Cloth» –  «хранитель формы», а уже потом «Path Deform»:

Далее, путём нехитрых манипуляций «натянули» гофру на сплайн и получили вот такой шланг. Причём, если к нему внимательно присмотреться, то в глаза бросаются серьёзные искажения формы.

 А инструментами способными «победить» подобные артефакты  «Path Deform»  не располагает, поэтому был применён этот же алгоритм «деликатного» восстановления состояния. В результате у нас получилась вполне корректная модель с правильными изгибами, близкими к реальным.

Сегодня мы с Вами познакомились с весьма привлекательной методикой укладки проводов и не только их. Использовать ли её в своём рабочем процессе каждый решит сам. Но преимущества данного подхода на мой субъективный взгляд налицо.
 При владении даже начальными навыками работы с Cloth – симуляцией, укладка такого рода объектов становится простой, быстрой и наглядной. Я бы даже сказал поведение моделей очень близко к физически корректному, а это немаловажный фактор в достижении фотореализма в своих проектах, о чём мы и говорили с Вами в начале урока.
На этом моё повествование можно считать законченным.
 Вам всего доброго, хорошего настроения и здоровья)))
_______________________________________________________________________________

1 комментарий: