
На данный момент у нас есть настроенные солверы всех мышц руки, однако корректно работают из них только мышцы плеча, так как у них простроены подключения между сенсорами и активациями мышц. Сейчас будут создаваться локаторы-сенсоры для оставшихся мышц предплечья, после чего наконец можно перейти к следующим «слоям» сетапа.
До этого мы уже делали локатор-сенсор супинации запястья для настройки работы бицепса плеча. Теперь же создадим локатор и сенсор пронации запястья (L_wrist_pronation_adnLocatorDistance), настраиваем в атрибутах сенсора минимальное и максимальное расстояние и активации.
Далее создадим теперь локатор и сенсор сгибания запястья (L_wrist_flex_adnLocatorDistance) по такому же принципу.
И аналогично создаём локатор-сенсор разгибания запястья (L_wrist_extend_adnLocatorDistance).


Локатор-сенсор пронации запястья // Изменение параметра Distance Remap в настройках сенсора


Локатор-сенсор сгибания запястья // Локатор-сенсор разгибания запястья
Теперь последовательно подключим каждый из сенсоров к соответствующим мышцам предплечья. Мы так же, как и раньше, коннектим атрибут activationDistance локатора с атрибутом activation мышцы через Adonis Connection Editor.
Соединяем эти атрибуты следующим образом:
— К локатору разгибания запястья:
— К локатору сгибания запястья:
— К локатору пронации запястья:
Подключение атрибутов activationDistance локаторов к атрибутам activation солверов мышц
Стоит отметить, что плечелучевая мышца и длинный разгибатель запястья сокращаются ещё и при сгибании локтя. В нашем же сетапе они активируются только при сгибании запястья. Чтобы это настроить, выберем сначала плечелучевую мышцу и откроем её в Node Editor.
Развернём входящие и исходящие взаимосвязи солвера мышцы. Добавим шейп локатора сгибания локтя в нодовое пространство. Создадим ноду AdnActivation, в input’ы которого в значения Value подключим Activation Distance из шейпов сгибания запястья и сгибания локтя соответственно. Внутри ноды на input 1 ставим операцию Add.
Подключаем выход из ноды adnActivation в атрибут Activation солвера плечелучевой мышцы.
Проделываем аналогичные действия с длинным разгибателем запястья.


Нода AdnActivation, входящая в солвер плечелучевой мышцы // Операция Add на первом инпуте ноды AdnActivation


Аналогичные действия с солвером длинного разгибателя запястья
Итак, у нас теперь предусмотрена работа мышц запястья на сгибание, разгибание, пронацию и супинацию. Однако кроме этого запястье может выполнять приведение и отведение, и для этих движений также создадим локаторы-сенсоры и перенастроим с ними некоторые существующие активации.
Создаём локатор приведения запястья (L_wrist_adduction_adnLocatorDistance) и сенсор по уже известной последовательности. Создаём локатор отведения запястья (L_wrist_abduction_adnLocatorDistance).


Локаторы-сенсоры приведения и отведения запястья
Открываем в Node Editor солвер длинного разгибателя запястья, который работает во время отведения кисти руки, раскрываем входящие и исходящие взаимосвязи. Добавляем шейп локатора отведения. Создаём ноду AdnActivation и подключаем в неё атрибуты Activation Distance из сенсора разгибания запястья и сенсора отведения, после чего на втором входящем ставим операцию Add. Подключаем выход ноды AdnActivation в атрибут Activation солвера мышцы.
Проделываем аналогичные действия в Node Editor с солвером длинного разгибателя запястья, который задействуется во время приведения кисти руки, добавив теперь уже шейп локатора приведения. Сенсор приведения также стоит этим же способом привязать к активации короткого разгибателя запястья.


Подключение сенсора отведения запястья в систему активации длинного разгибателя запястья
На этом моменте мышечная система уже построена. Можно возвращаться к Paint Tool, чтобы по необходимости исправлять артефакты, смягчать переходы весов, можно создавать более детальные микровлияния между мышцами, а можно вносить изменения в солверах каждой из мышц, к примеру изменяя плотность каких-либо из мышц, настраивая гравитацию, вес, жёсткость и т. д.
Следующий этап, идущий после мышц — это настройка фасции.
Сперва создаём внутреннюю фасцию с помощью так называемого «склеенного» слоя (adnGlue). Чтобы его сделать, выбираем все мышцы и в Adonis FX —> Solvers применяем команду Glue. Генерируется новая геометрия, которая полностью повторяет топологию мышц и которая отрабатывает на себе все мышечные деформации.


Создание «склеенного» слоя мышц
Зададим настройки склеенному слою в атрибут эдиторе: в Mass Properties в Global Mass Multiplier пишем 0,1, в Dynamic Properties ставим отметку на Triangulate mesh, а в Max Glue Distance вносим значение 2.
Если во вкладке Debug включить отображение Glue Constraints, то можно заметить образовавшиеся взаимосвязи между частями склеенного слоя, которые повторяют динамику мышц в рамках одной цельной геометрии и которые в прямом смысле «склеивают» эти части друг с другом.


Настройки параметров слоя Glue // Констрейны Glue
Теперь создадим внешнюю фасцию, геометрия которой была заранее подготовлена.
Чтобы создать её, выбираем сначала геометрию скелета, выбираем склеенный слой, выбираем геометрию фасции и применяем Skin Apply из шелфа с инструментами плагина. В атрибутах поменяем название на fascia_AdnSkin, увеличим количество итераций до 5, назначим в Gravity значение 9,8. В Mass Properties в Point Mass Mode выбираем By Density, Global Mass Multiplier ставим 0,1. В Dynamic Properties отмечаем Triangulate Mesh, Sliding Constraints Mode — Quality, Max Sliding Distance — 1. В Stiffness Settings отмечаем Use Custom Stiffness и вписываем значение около 12 000. Изначальное значение в 100 000 даст в результате слишком жёсткую структуру, не соответствующую относительно мягкому слою фасции.


Настройки солвера кожи, с помощью которого создаём слой фасции
Однако нынешний результат всё ещё слишком жёсткий, сейчас фасция слишком плотно прилегает к склеенному слою. Для более детальной настройки поведения откроем Paint Tool и проведём в некоторых их атрибутов следующие манипуляции:
— Shape Preservation: на всей геометрии ставим значение веса 1 через Flood — Sliding Constraints: значение 0,3 через Flood — Soft Constraints: значение 0,3 через Flood — Hard Constraints: значение 0,3 через Flood, после чего распределяем значение веса 1 по краям геометрии
После этого последний пункт, который можно выполнить — это применить Delta Mush через Deform —> Delta Mush. Сделаем значение Smoothing Iteration на 10 и можно ещё на своё усмотрение настроить Smoothing Step и Displacement.
Слой фасции поверх склеенного слоя мышц
Настройка весов влияния констрейнов по разным атрибутам слоя фасции
Далее на очереди идёт слой жира, покрывающий фасцию и геометрия которого так же была подготовлена заранее.
Для того, чтобы создать этот слой, мы выбираем слой фасции, геометрию жира и применяем Fat Apply.


Создание слоя жира
В атрибутах ставим значение Gravity на 9,8, в Mass Properties на Global Mass Multiplier ставим 0,1. Кроме того, если персонаж задумывался тучным, с большим объёмом жира, то можно в Volume Structure увеличить количество Divisions, но конкретно в моём случае этого не требуется.
Если в Debug включить отображение Volume Structure, то можно увидеть тетраэдры, которые создаёт солвер Fat в пространстве между собственной геометрией и фасцией и на основе которых образуется так называемая толщина слоя жира.
Так же, как и в случае со слоем фасции, можно наложить Delta Mush на слой жира и настроить его работу.


Последний слой — это кожа, оборачивающая все обозначенные ранее слои. Для этого слоя геометрия также была подготовлена заранее.
Чтобы её создать, выбираем слой жира, выбираем геометрию кожи и применяем вновь Skin Apply. Создаётся солвер кожи.
В атрибутах изменим те же настройки, которые меняли в слое фасции, и поставим те же значения. Из отличий — в Max Sliding Distance поставим значение 3, так как кожа является довольно подвижной структурой.


Настройки солвера для слоя кожи
И так же, как и с фасцией, распределим веса влияния через Paint Tool в следующих атрибутах:
— Shape Preservation: на всей геометрии ставим значение веса 1 через Flood — Sliding Constraints: значение 1 через Flood — Soft Constraints: значение 0,666 через Flood — Hard Constraints: значение 0,333 через Flood, после чего распределяем значение веса 1 по краям геометрии
И по аналогии с предыдущими слоями можно применить на слой кожи Delta Mush.
Работа с весами влияния констрейнов по разным атрибутам солвера
На этом этапе работу над созданием мышечной системы можно считать законченной. В любой момент можно возвращаться например к мышцам и донастраивать параметры солверов мышц или более тонко распределять веса влияний на любых атрибутах. Или же можно вернуться к солверу жира или фасции (по сути тоже кожи), чтобы избавляться от артефактов. Одним словом, можно в комплексе одновременно работать над всеми слоями системы.
К примеру я с помощью ноды remapValue решила увеличить максимальное значение активации с 1 до 1,2, после чего подать это значение в атрибут Volume Ratio солвера бицепса плеча, чтобы при максимальном напряжении эта мышца «взбухала» больше. Аналогичные действия для этой же цели я провожу с солвером трицепса.


Изменение с помощью remapValue максимального выходного значения активации, которое затем подключено в атрибут Volume Ratio солвера бицепса плеча


Аналогичные действия над солвером трицепса
Кроме того, я экспериментирую с разным весом мышц, меняя значение Global Mass Multiplier в сторону меньшего значения на всех мышцах предплечья и увеличивая его на трицепсе и дельтовидной мышце, т. к. по своему объёму они превосходят все остальные мышцы. Я не меняю массу мышцы напрямую, а изменяю коэффициент умножения их изначального веса на гравитацию в соответствующем параметре.
Напоследок я добавила анимацию приведения и отведения запястья в исходное движение руки, чтобы наблюдать работу соответствующих мышц при совершении этих действий.