Метод симуляции, который я опишу ниже, годится для любых длинных 3D волос в 3ds Max, сделанных любым способом.
Сначала смотрите, что у меня получилось (ролик я рендерил VRay'кой в Максе на вот этом компе, на каждый фрейм (1280x720) уходило от 9 до 26 минут в зависимости от количества волос в кадре):
Теперь коротко о том, как я это сделал, а дальше я по каждому пункту пройдусь более подробно.
- Всю причёску я разделил на несколько частей (слоёв, которые лежат один над другим).
- Набросил на каждый слой модификатор HairMesh Link (этот шаг нужен только, если вы тоже используете плагин HairFarm для создания волос).
- Открыл Marvelous Designer 3 (MD3) и создал 4 слоя ткани по такому же принципу, как я разделил всю причёску в 3ds Max.
- Просимулировал эти слои ткани. Вот что получилось:
- Импортировал кеш просимулированной ткани в 3ds Max.
- Привязал (с помощью модификатора Skin Wrap) каждый MeshLink к соответствующему слою просимулированной ткани.
Теперь по каждому пункту подробно.
1. Как я делил 3D причёску на части.
Как видно на скриншоте ниже, я сделал 4 слоя. Верхний (голубой) крепится ко всей макушке, нижний (зелёный) крепится по периметру черепа на уровне уха, следующий (жёлтый) крепится еще ниже, а самый нижний (оранжевый) - у основания шеи.
Каждый слой причёски - это отдельный объект.
2. Модификатор HairMesh Link.
Модификатор
Таким образом, создав копию волос, я потом смогу её анимировать с помощью чего угодно. Будь то ткань из внешнего редактора или мягкий объект MassFX, любой модификатор Макса или кости. В общем, потенциал вы поняли.
По такому же принципу работает модификатор Skin Wrap. Когда вы один объект (к примеру, это низкополигональный объект, который проанимирован костьми), привязываете к другому (высокополигональному объекту), чтобы он двигался так же, как и низкополигональный.
3. Как я создавал слои ткани в MD3.
Сначала я пошил что-то наподобие шапочки, которую с помощью Pin'ов присоединил намертво к голове, чтобы она не сдвигалась во время анимации/симуляции:
Для этого я выбрал инструмент Box Pinning (показан на картинке выше) и выбрал все вершины шапочки. Потом кликнул по выбранным пинам правой кнопкой мышки (ПКМ) и выбрал пункт Attach Pin to Avatar (присоединить шпильки к аватару).
Дальше, я так вырезал 4 лоскута ткани, чтобы они точно походили по размерам на слои причёски из пункта 1. Чтобы это было удобнее делать, я импортировал причёску (вернее, ту полигональную копию, которую создал мне модификатор HairMesh Link, или которую можно сделать вручную с помощью модификатора HairMesh to Poly) в MD3 в качестве еще одного аватара (File -> Add -> Avatar).
Но просто куски ткани не могут имитировать причёску - они ведь плоские, а волосы (даже те волосы, что я поделил на слои) - создают объём. Поэтому для боковых граней я включил эластичность в свойствах (Elastic On):
Это позволило мне:
- Придать каждому слою ткани такой объём, как и у слоёв моих 3D волос.
- Позволить волосам в процессе анимации немного распрямляться (ведь в причёске у меня волосы немного вьются, а значит во время резкого движения должны выпрямляться, а потом подскакивать).
Т.е. по сути, я стянул свои кусочки ткани резинкой по периметру. При этом я следил, чтобы объём, ширина и высота каждого лоскута ткани совпадали с этими же параметрами конкретного слоя волос в спокойном состоянии (т.е. пока персонаж стоит в А-позе, которая от Т-позы отличается только тем, что руки немного опущены вниз, чтобы было удобнее шить одежду на плечах).
4. Как я симулировал ткань, чтобы она напоминала волосы.
Чтобы движение ткани походило на движение волос, я в свойствах ткани указал такие параметры как на скриншоте слева.
За основу я взял готовый материал R_Chiffon_CLO_v1 (где R - сокращённо от Real - реальный) и подправил почти все параметры так, чтобы ткань очень легко растягивалась как по горизонтали, так и по вертикали (Stretch-Weft и -Warp = 1), но при этом немного хуже гнулась, чем шифон (Bending-Weft и -Warp =20). Зато увеличил параметр, который отвечает за сильную деформацию (Buckling Ratio = 90) и уменьшил параметр жёсткости (Buckling Stiffness = 1). И, конечно же, сделал ткань невесомой, уменьшив её плотность (Density = 1).
После нескольких тестов, я понял, что слои ткани сильно разлетаются один относительно другого, а это нереалистично выглядело на волосах. Поэтому, я в некоторых местах сшил лоскуты ткани (места сшивания видны на первом скриншоте из пункта 3).
Дальше я загрузил в MD3 все объекты, с которыми должны были взаимодействовать волосы (каждый объект, как новый аватар): второго персонажа, тело и голову девочки (чьи волосы я симулирую), одежду обоих персонажей.
Также я подключил к каждому аватару кеш с анимацией (чтобы они двигались) - File -> Import -> Maya Cache (или Point Cache 2).
Потом настроил качество симуляции. Настройки я уже не помню на память, а в файле с проектом они не сохраняются. Но помню, что это были низкие настройки качества, поскольку на высоких настройках, ткань вела себя как ткань, а не как волосы.
Подробно о настройках качества симуляции читайте в моей статье про секреты Marvelous Designer.
5. Как я экспортировал слои ткани из MD3 в 3d Max.
Когда симуляция ткани в MD3 закончилась, я экспортировал OBJ ткани и анимационный кеш (File -> Export -> Point Cache 2).
В 3ds Max'е я импортировал геометрию ткани из файла OBJ и набросил на неё модификатор Point Cache, чтобы подгрузить анимационный кеш.
Но здесь получилась засада. Ведь мне нужны были отдельно каждый слой ткани, а MD3 экспортировал мне все слои в одном файле и одним объектом. Чтобы это исправить, я создал еще три копии этой тканевой причёски (с модификатором Point Cache вверху) и на каждую набросил модификатор Edit Poly. Теперь мне осталось только зайти в каждый из четырёх модификаторов Edit Poly и (на уровне полигонов) удалить лишние слои так, чтобы у меня получилось 4 отдельных объекта с разными слоями в каждом (как показано на втором видео в начале статьи).
6. Как я привязывал проанимированную ткань к волосам.
Я поочерёдно брал каждый полигональный объект (который создал модификатор HairMesh Link) и набрасывал на него модификатор Skin Wrap, с настройками показанными ниже:
Понятно дело, что полигональные объекты HairMesh Link и проанимированный слой ткани должны были максимально совпадать.
Вышеприведённые параметры влияния на деформацию я выбрал экспериментальным путём. Т.е. именно такие параметры (по моему мнению) наиболее реалистично передавали движение ткани на движение волос.
Подпишитесь на обновление блога (вот 3 причины для этого).
Всё!
Если у вас волосы сделаны каким-то другим методом (а не плагином Hair Farm), то выполняете все пункты кроме второго. А потом, в конце, вам нужно привязать ваши управляющие объекты (у вас это могут быть сплайны, хелперы, кости, меш или что-то еще) к проанимированной ткани. Привязку можно осуществиь либо через модификатор Skin Wrap (возможно, через посредников), либо каким-то другим способом (Link, Constraint, Morph и т.д.).
Дальше просто прячем вспомогательные объекты и оставляем видимыми только длинные волосы, которые теперь достаточно реалистично движутся.
Если у вас есть какие-то вопросы - спрашивайте (только на комментарии из VK я отвечаю не сразу, поэтому лучше спрашивайте в комментариях на движке сайта).
Кстати, скоро (в конце лета 2014) в Киеве пройдёт выставка 3D печати и 3D принтеров. Стоимость входного билета меньше $9.
Я скорее всего пойду, а то как-то тема практической 3D-печати проходит мимо меня. А вы как?
Вам понравилась статья? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.
комментариев 13 к статье “Симуляция длинных волос в 3ds Max с помощью ткани из Marvelous Designer”
Извините, в данный момент комметарии закрыты.
Когда то тоже такую статью хотел написать. Столкнулись с проблемой волос когда мультик делали…
НО подход был у меня более консервативный — решить все средствами макса. Тогда я еще увидел мейкофф Диабло у близарда, там где телка письмо пишет и засыпает и попадает к дьяволу. Там было четко видно как они решили этот вопрос, ну короче точь в точь как у тебя. Единственно не ясно чем они анимировали саму ткань.
Я тогда тоже попытался так сделать, но столкнулся с одной проблемой, что если волосы должны разделятся?
Как по мне мы тогда нашли более простое и эффективное средство. И не надо было скакать из пакета в пакет.
Просто создаеться прическа из сплайнов а не из меша. Сплайны конвертируються в меш. Меш анимируеться как ткань. Тогда это был стандарный максовский cloth. Марвелоса еще не было тогда и massfx тоже.
Все было очень просто и очень реалистично. и к тому же волосы можно былоперебирать, то есть разделять локоны…
Да вот тест, что тогда вышло
Доброго дня, Юрій.
В першу чергу хочу щиро подякувати за Вашу працю (як в 3D, так і в самому поширені різного роду матеріалу в цій сфері).
Подобається те що, Ви розписуєте в дрібних деталях зачасто складні чи важко-зрозумілі методики, інструменти і взагалі аспекти роботи в просторі CG.
Я вже довший час слідкую за даним блогом, і досить часто звертаюсь до нього при необхідності. Для мене це не тільки джерело інформації, а ще й свого роду допоміжний інструмент при навчанні/роботі.
Також користуючись нагодою, хочеться попросити Вас, чи викласти подібний матеріал, чи можливо маєте хороший ресурс де описаний аналогічно — процес стоворення штор (знаю даного матеріалу як сміття в неті, а ось хорошого, подібно до опису симуляції довгого волосся — «банка»).
Юрій, ще раз дякую, за цю всю титанічну працю (можна ж для прикладу забити на ці тексти і просто в задоволення працювати). Успіху Вам, і не зупиняйтесь. Це дійсно потрібно багатьом хто починає, і навіть тим хто вже «вариться» в цій індустрії.
Круто получилось, но почему-то кажется, что волосы «тяжелые». А вообще, спасибо за интересный метод!
Думаю надо делать «веером», чтобы волосы как бы разлетались. А то кажется что они слиплись.
Когда волосы «веером», то кажется, что это вермишель, а не волосы 😉 Тут нужна золотая середина.
И то верно))
Добрый день 🙂 наверное, я прошу слишком многого, но не могли бы вы рассказать детально об импорте анимации из 3Ds Max в Marvelous D.? Если моя просьба уже чересчур, в топку смело 🙂 Но я очень надеюсь на вашу помощь, ведь к кому еще обратиться-то(
Здравствуйте «Летающий скат»https://github.com/KhronosGroup/OpenCOLLADA/wiki/OpenCOLLADA-Tools ) основан на экспорт персонажа с оснасткой и соответственно с костями.
Есть несколько способов экспорта анимации из 3Ds Max в MD.
Расскажу о двух, это Cache импорт положения вершин и второй формат COLLADA (быстрее OpenCOLLADA
В первом случае:
в 3ds Max:
Сохраняем данный объект в формате OBJ не забудте во вкладке Optivize снять все три чекбокса.
модификатор Point Cache записываете анимацию: NEW… формат PC2 ,затем жмём Record.
в MD: File > Import> OBJ (импортируете Ваш об’ект )
File > Import> Vertex animation>Point Cache 2 (накладываем аним. вершин)
В открывшемся окне укажите масштаб Вашей сцены
Со вторым способом всё проще , но требовательнее к качеству геометрии и не поддерживает модификаторы сглаживания.
Удачи Вам
День добрый!
а Вы сталкивались с тем, что прикрепленный к аватару pin при анимации на самом деле становится прикрепленным к определенному месту в сцене (где его закрепили), а не к самому аватару? будто замороженная точка получается.
вот по этой логике не очень понимаю как вы шапку на персонаже закрепили в самой анимации.
Это значит, что вы просто СОЗДАЛИ пин, но не ПРИКРЕПИЛИ его к голове.
Т.е. процедура такова. Сначала пины создаются, потом кликается на них правой кнопкой мышки и выбирается «прикрепить к аватару».
)) это само собой. Я разобрался в этом баге. Дело в том, что кэш аватара следует подгружать только после всех правок в сцене, иначе могут быть бока либо с тканью, либо с анимацией аватара. По моему опыту следует перезагружать кэш даже при повторных симуляциях. Конечно, возможно, у меня этакая версия MD3
Юрий, а вы не знаете как решить проблему?
Суть в чем =) У меня есть персонаж — девушка. Я симмулирую одежду на ней. Анимация ее заключается в том, что она подымает руки и слаживает их в узел. Когда руки касаются ткани, то она себя не очень естественно ведет. Начинает как бы обтекать руки, обнимая их =) Что с этим делать, какую настройку ткани или симмуляции крутить?