что такое скининг персонажа
Анимация в Spine, советы и рекомендации, псевдо 3D эффект
Хочу поделиться своим опытом работы со Spine — программой для создания скелетной анимации, специально заточенной под игры.
После просмотра официального гайда возникает много вопросов, поговорим про то, какие подводные камни ожидают нас при работе с этой программой на каждом этапе рабочего процесса (на примере Spine — Unity), как можно оптимизировать свою работу, а так же рассмотрим некоторые популярные фишки типа 3D эффекта. В статье будет много тяжелых гифок.
UPD: После недавнего релиза Spine версии 3.6 фишки с Json описанные в конце статьи актуальны разве что для общего развития, т.к. разработчики добавили данный функционал «из коробки».
UPD2:
Layers to PNG теперь называется Photoshop to Spine, сохраняет картинки сразу в нормальном размере, а так же после появления в версии 3.8 функции trace для автоматической генерации меша по контуру текстуры и встроенной полигональной паковки атласов так заморачиваться с подготовкой картинок теперь не обязательно.
Теперь в Spine уже встроен предпросмотр готовой анимации, делается это в окне preview, там можно посмотреть как отрабатывают бленды и как одна анимация накладывается на другую. Отдельно Skeleton viewer теперь искать не обязательно. Проблем со смешиванием чаще всего удается избежать просто внимательно следя за тем какие ключи и где вы ставите.
Сразу оговорюсь, для создания программной анимации в играх есть и другие решения, Dragon Bones, Spriter, Creature, Marionette studio, плагин Puppet 2D и наверняка найдутся другие, просто я как аниматор работаю в Spine.
Схема работы
Когда у нас на руках есть информация и понимание какие персонажи/анимации должны быть созданы для игры, отрисован необходимый материал — можно приступать.
Общая схема работы такова:
Первым делом необходимо подготовить рабочий материал из графических редакторов. Затем ассеты (assets, текстуры) импортируются в Spine и анимируются. На выходе мы получаем Json — файл в котором записаны все ключевые кадры трансформации костей, слотов и проч. Данный файл импортируется в движок, создается специальная skeleton data, которая добавляется на сцене в Spine game object, где наша анимация визуализируется по средствам mesh renderer, запуском можно управлять с помощью кода или же стандартным unity animator.
Непосредственно рабочий процесс в спайне выглядит следующим образом:
Импорт текстур
На этапе подготовки текстур нам важно понимать сколько необходимо проекций персонажа, какая часть работы будет сделана покадрово, какая программно, как грамотно разрезать персонажа и подготовить ассеты.
А также недостаточное число проекций если персонаж меняет ракурс.
Часто у персонажей есть парные элементы с идентичными изображениями — руки, ноги, глаза, и проч. В таком случае целесообразно сохранить только одну текстуру, и использовать ее два, или более, раз.
В данном случае нам будет достаточно одной проекции, и ассеты художник отрисовал хорошо. Можно приступать к импорту в спайн.
Процесс импорта текстур можно существенно ускорить используя скрипт layers to PNG, который сохраняет каждый слой из фотошопа в отдельное png изображение, при этом записывает Json файл в котором содержится информация о расположении текстур, импортируя его в спайн мы получаем готового собранного персонажа.
Однако у такого способа есть ряд недостатков — скрипт сохраняет изображения без сжатия, что непрактично. Просто пересохранив слои через file-generate-image assets мы уменьшим вес изображения приблизительно в 10 раз.
Далее, необходимо не забывать разворачивать ваши в спрайты в горизонтальное или вертикальное положение, и стирать все лишнее, т.к. скрипт сохранит изображения прямо в том положении в котором они находятся в фотошопе.
Если для проекта необходима покадровая анимация (напр. огонь, спецэффекты, и проч.) — материалы необходимо отрисовать заранее. Далее с помощью adobe after effects и скрипта ae_to_spine мы можем в пару кликов перенести последовательность кадров в Spine.
Рекомендую заранее продумать концепцию наименования, материалы часто приходят в формате «слой 1 (копия) 5», это не слишком практично, для каждой текстуры в проекте необходимо сделать уникальное название, что бы не вызвать проблемы при запаковке атласов. Вполне пригоден вариант формата CharacterVyasya_Skin_a_Hand_R_1.
Тут во многом нам может помочь инструмент find and replace который позволяет быстро переименовывать, указывать путь для большого количества объектов.
Риггинг
Настраивая скелет для персонажа нужно уже думать о том, что, скорее всего, в процессе работы над игрой анимацию нужно будет корректировать, подправлять, поэтому желательно сделать его максимально гибким, что бы процесс правок был максимально простым и быстрым.
Тут может помочь введение дополнительных костей-контролов для разбиения движения по осям X и Y (т.к. в спайне остутствует функция separate dimentions).
Сложное движение ящера суммируется из нескольких составляющих: вертикального, горизонтального и для возможности быстрой корректировки добавлен глобальный контрол.
Тут же маленький типс, если вдруг чувствуется нагромождение из за излишнего количества костей — попробуйте покрутить настройку bone scale:
Смотрите примеры готовых ригов из образцов поставляемых вместе со спайном, или в сети.
Так же полезные материалы можно искать на behanсe, форуме, соответствующих сообществах в социальных сетях.
Скиннинг
Меш — Один из ключевых инструментов в спайне, накладывая на его текстуру мы получаем возможность ее деформировать, искажать, создавать иллюзию 3D.
При создании меша помните: чем меньше вертексов — тем проще контролировать анимацию.
Т.к. деформация меша потребляет ресурсы CPU, при создании сетки стоит руководствоваться принципом необходимого минимума, наглядно это можно рассмотреть на примере рига кончика хвоста динозавра:
Не забывайте про возможность дублирования целой иерархии меша вместе с костями и весами. Это поможет значительно сэкономить время при риге повторяющихся объектов.
Производительность
В конечном итоге у нас возникает вопрос — а сколько вертексов можно использовать?
Разработчики спайна конкретно не отвечают на этот вопрос, и отсылают к вкладке Spine Metrics, где мы можем отследить суммарное количество элементов в сцене, но при этом говорят о необходимости проведения кастомных тестов производительности.
Важно помнить что трансформация меша, таймлайны, констрейны грузят CPU, а статичная геометрия — GPU. В общем, я бы советовал в случае работы над ключевыми персонажами не сильно заморачиваться по поводу точек, плюс минус десяток не сыграет никакой роли, однако в случае объекта из окружения, который будет повторяться сотню раз, каждый сэкономленный вертекс пойдет на пользу.
И так, когда наш персонаж настроен можно переходить к анимации:
Анимация
Сама по себе анимация это очень большая тема и явно не для обсуждения в рамках одной статьи.
Тут я ограничусь банальными советами в ключе:
3D-эффект
Это то за что так любят спайн — возможность деформировать изображение с помощью меша тем самым создавая трехмерный эффект.
Для себя я отметил несколько способов создания псевдо 3Д:
Проставляются кости в ключевых точках меша:
Анимируя кости создаем трехмерный эффект:
Можно сделать анимацией вертексов в меше, но как мы видим по сравнению с кубом точек значительно больше:
Аналогично кубу, кости в ключевых точках меша. По затраченному времени этот способ не лучше предыдущего:
Было бы гораздо более гибко свести риг под один глобальный контрол с помощью констрейнов, двигая одним управлять всеми костями:
То же самое, можно сделать без лишней массы костей,
Для этого каждому вертексу тщательно подбирается значение в весах. Такой способ можно считать оптимальным для округлых поверхностей.
Из примеров видно что анимация непосредственно точек в меше это один из самых негибких вариантов, который в случае необходимости будет трудозатратно переделывать. К этому стоит добавить что в некоторых других рантаймах, помимо юнити, эта фича не поддерживается. Поэтому рекомендую по возможности не трогать меш и управлять им с помощью костей.
По аналогии можно сделать деформацию любой геометрической формы, тем самым добавив вашей анимации выразительности.
И так, мы просидели несколько часов над ключевыми кадрами, мешами, и сделали анимацию персонажа:
Тестирование
Далее можно отправлять нашу анимацию в движок. Однако часто возникают ситуации когда внешний вид анимации в спайне и в рантайме существенно отличается, а т.к. каждое взаимодействие аниматор-программист занимает определенное время, лучше заранее провести тест анимации в рантайме, в ходе которого выявятся основные косяки, и только потом отдать работу будучи уверенным что все хорошо.
Если ваш аниматор не дружит с движком, можно использовать Skeleton Viewer
Какие проблемы возникают наиболее часто:
Некорректное отображение текстур
Чаще всего такое происходит из за неправильной композиции текстуры — меш должен четко соответствовать размеру спрайта.
После отработки анимация выглядит не так как раньше
Изначально овираптор сидит на гнезде с яйцами, потом встает и отходит в сторону. Казалось бы, когда анимация начнется с начала, он должен таким же образом сидеть на гнезде, однако т.к. мы сдвинули его в предыдущей анимации он будет смещен до тех пор пока не будет поставлен ключом в соответствующую позицию.
Происходит это потому что в рантайме анимация просчитывается не из дефолтного положения, а как бы из текущего. Т.е. если мы один раз включим текстуру и не выключим — она останется в таком положении во всех анимациях. Тоже самое и с другими ключами. Это скорее не баг, а фича, но к сожалению аниматор не видит реальной картины пока не импортирует свой материал в рантайм. Решить данный вопрос можно несколькими способами:
1) Проставить ключи на всех свойствах всех объектов в начале и в конце каждой анимации. На первый взгляд слегка муторно, но таким образом вы полностью обезопасите себя от нежданных сюрпризов. Использование фильтров и горячих клавиш ускорит процесс.
Красным выделена иконка фильтра объектов по костям и кнопка для быстрого разворачивания иерархии:
Горячие клавиши по умолчанию:
Key Active: L
Key Selected: ctrl + L
Key Dopesheet: ctrl + shift + L
Key Translation, Key Rotation, Key Scale, Key Shear, Key Color — нужно настраивать самому
2) Использовать скрипт setToSetupPose, который как бы и заставляет проигрываться анимацию из дефолтного состояния. Но такой метод имеет существенный недостаток — Setup Pose выставляется мгновенно, а рендер меняет картинку на соответствующую только со следующего кадра. Таким образом мы имеем проскакивание лишнего кадра между анимациями, выглядит это неприятно. Соответствующее issue уже стоит на доске у разработчиков.
Мы можем экспортировать из спайна Json, провести с ним какие-либо манипуляции, и импортировать обратно, получив определенный результат. Это очень мощный инструмент т.к. мы получаем доступ ко всем компонентам проекта, в свою очередь нам это может очень помочь в определенных ситуациях:
Мержинг проектов
Часто возникает необходимость держать анимации в одной сцене, например как тут:
Сам жук в игре появляется в множестве других сцен и был скопирован из одной из них. Однако теперь в проекте два скелета, и соответственно на выходе будет 2 json и 2 объекта на сцене, что добавит необходимость делать определенную логику синхронного запуска этих анимаций для их совмещения во времени, а так же нужно будет точно совместить объекты по положению в локации. Можно упростить себе жизнь отдав материал в одной сцене. Для этого два json нужно смержить.
Для этого есть как минимум два способа: руками и скриптом.
Руками
Копируем куски кода из одного json в другой, в соответствующие категории: слоты к слотам, кости к костям, анимации к анимациям, и т.д. Что бы не возникло конфликтов, важно соблюсти корректность наименования объектов, что бы названия из одного json не совпадали с названиями из другого. Проще всего этого добиться заранее в спайне присвоив всем объектам в именах свой уникальный индекс типа _skel1_ и _skel2_. Этот способ слегка затратный по времени, но меня еще не подводил.
Предельно простой пример для демонстрации принципа, два скелета с костями в одном проекте:
В результате имеем все в одном проекте:
Проблемы могут возникнуть в проектах с скинами, по возможности старайтесь не менять иерархию костей.
Более сложный пример с лягушкой:
(Осторожно, длинные файлы)
Skeleton Merger Tool
Дублирование объектов вместе с анимацией
В спайне отсутствует вложенность композиций (аналог прекомпоз в After Effects или символ во Flash), однако, как показывалось выше, есть возможность продублировать объекты, с сохранением всех зависимостей, но ключи анимации в таком случае не копируются. Не сложно догадаться что, для того что бы не делать анимацию заново, можно переназначить ее на дубликат костей, для этого надо всего лишь перебить в Json имена. Опять же, это проще сделать если у каждой кости будет свой уникальный индекс.
Есть муравей с анимацией. Задача сделать в спайне целую цепочку бегающих друг за другом муравьев. При дублировании муравья анимация не копируется. Обратите внимание, у первого муравья в названии стоит индекс _skel_1_, у второго _skel_2_.
Экспортируем Json и открываем его текстовым редактором. Код анимации walk_1 копируем, находим там все участки _skel_1_:
заменяем их на _skel_2_
Вставляем обратно. Таким образом мы переназначили анимацию на другие кости. Сохраняем json, и импортируем его в спайн путем file — import data. Теперь у нас два бегающих муравья.
Откатиться до старой версии
Проекты сохраненные в более новой версии будут не совместимы со старыми. Иногда это может стать проблемой, и для ее решения есть несколько способов:
Руками перебить версию в json
Поможет если между версиями небольшой промежуток, и нет принципиальных различий в алгоритмах работы анимации.
JsonRollback tool
Ознакомиться с принципом работы и скачать можно по ссылке.
Резюме
Skin низкополигональных моделей в 3DS MAX
Автор: Панюков Юрий Михайлович. Занимаюсь 3D 5 лет. 3DS MAX, AfterEffects, Photoshop. Реклама, оформление канала. Сейчас занимаюсь изготовлением еженедельной анимационной программы на региональном телеканале. Решил поделиться знаниями, которыми пользуюсь в своей работе. Надеюсь они вам пригодятся.
Урок рассчитан на пользователей, которые уже знакомы с основными приёмами работы в 3DS MAX, умеют моделировать или экспортировать готовую модель.
Skinning модели может оказаться сложной, а иногда и невыполнимой задачей, если вы делаете это в первый раз или не знаете его технологии. На самом деле, сложного ничего нет, нужно только придерживаться определённых правил.
Для примера возьмём вот такую низкополигональную модель (см.файл)
и попробуем надеть её на скелет.
Откройте файл. В нем модель и скелет, подогнанный по размеру к оболочке (пока что удалите модификаторы модели).
Если вы делаете урок на примере своей модели, то при подгонке скелета помните, суставы скелета должны совпадать с местом предполагаемого изгиба вашей модели. Лучше если сустав находится в середине модели (не нужно прижимать его к какому-то краю). Подгоняйте модель, начиная с самых крупных костей, и заканчивая пальцами.
Пояснение для тех, кто не знает, с помощью чего можно подгонять скелет под размер модели.
в окне Front перетаскиваете мышку снизу вверх скелет готов.
Естественно он не совпадает с моделью. Входим в режим FigureMode.
Выделяем Bip01 и совмещаем позвоночник скелета с предполагаемым позвоночником модели.
Если ваш персонаж стоит на координатной плоскости, то перемещать скелет вертикально не нужно, т.е. ступни должны совпадать с подошвами ботинок.
А затем, выделяя нужные кости:
— перемещайте,
— вращайте и
— масштабируйте их,
для того чтобы ваш скелет наилучшим образом совместился с моделью.
Включите twist-кости UpperArm = 10, ForeArm = 6 и Calf=3.
Кость принимает такой вид
Это сделано для того, чтобы при повороте UpperArm её twist-кости скручивались вдоль оси как резиновые.
Это даёт возможность более натурально настраивать оболочку, т.к. мышцы человека ведут себя именно так.
То же самое и с костями ForeArm и Calf.
Возможность добавлять twist-кости для UpperArm появилась только в 8-й версии программы, поэтому нужно пользоваться именно ей.После этого из режима Figure Mode нужно выйти.
Вот что у меня получилось:
Сверяйтесь с моим файлом.
До того, как мы займёмся настройкой модификатора Skin, выполните следующее (зачем это нужно, я объясню позднее):
Создайте объект Dummy1.
Выровняйте его по верхней twist-кости UpperArm.
Линкуем его к ключице. (Clavicle):
Теперь назначаем ему ограничения (Constraint) по положению и вращению от верхней twist-кости UpperArm.
Для этого выбираем Dummy1.
Выбираем команду Position Constraint:
и щелкаем мышкой по верхней twist-кости UpperArm.
Снова выбираем Dummy1.
Выбираем команду Orientation Constraint:
и щелкаем мышкой по верхней twist-кости UpperArm.
В результате данного действия Dummy1 получает ограничения по положению и вращению относительно верхней twist-кости UpperArm, т.е. Dummy1 следует за своим ограничителем и вращается вместе с ним.
В тоже время Dummy1 прилинкован к Clavicle и является его дочерним объектом.
Для чего это было сделано, я объясню чуть позже, когда будем настраивать модификатор Skin.
Запомните правило:
Сначала закончить всю работу со скелетом, а уже потом переходить к настройке модификатора Skin.
Создайте ещё 3 объекта Dummy и настройте их следующим образом:
Вот что получилось:
Настройте Dummy3 и Dummy4 подобным образом для противоположной руки. Если что-то непонятно, сверьтесь моим файлом.
На этом подгонка и настройка скелета закончена (не забудьте выйти из режима Fifure Mode).
Выделяем модель и применяем модификатор Skin:
Нажимаем кнопку Add и выбираем кости, которые будут воздействовать на модель:
Это все кости кроме головы, также все объекты Dummy.
Посмотрим на модель руки. Там, где находится кость UpperArm, модель имеет разрыв, рубашка закрывает его. Этим можно воспользоваться. У нас получатся два разных варианта скиннинга. Непрерывная поверхность в районе ForeArm, и разорванная, там, где UpperArm. Вот и разберёмся с обоими вариантами. Для ForeArm понадобятся все twist-кости, т.к. модель в этом месте непрерывная и нам нужно получить мягкий изгиб. А вот для предплечья будем использовать только две нижних twist-кости (для части руки выходящей из рукава) и одну верхнюю twist-кость для самого рукава, т.к. нам не нужно, чтобы рукав поворачивался вместе с рукой вокруг своей оси. Возникает вопрос, зачем же мы создали 10 twist-костей для UpperArm, а воспользуемся только тремя? Дело в том, что чем больше twist-костей, тем меньший угол поворота приходится на каждую кость. А нам нужно чтобы рукав вращался вокруг своей оси как можно меньше.
Все выбранные кости отображаются на панели:
После этого начинаем присваивать вершинам модели силу воздействия (вес) каждой кости.
Для этого переходим на работу с подобъектом Envelope:
Ставим галочку Vertices, для того, чтобы можно было выделять вершины:
А теперь воспользуемся инструментом Weight Tool:
Если у вас не выбрано ни одной вершины, окно инструмента пустое. Как только вы выбираете вершину, в окне инструмента отображается информация о её весе, относительно каждой кости.
Попробуйте выбрать любую вершину (если вершины не видны, установите флажок Show All Vertices):
В окне Weight Tool появится информация о принадлежности данной вершины к различным костям:
Например, на данную вершину воздействуют три кости, причём с разными коэффициентами влияния.
В низкополигональной модели количество вершин небольшое, поэтому поступим так:
Выделяем вершины, которые явно должны принадлежать одной кости и недолжны деформироваться.
Присваиваем этим вершинам вес=1 для этой кости.
Для этого нажимаем кнопку с единицей в верхней части окна. Вершины окрасятся в красный цвет, и вы увидите в окне инструмента, что весовые коэффициенты других костей стали равны нулю (т.к. сумма всех весовых коэффициентов всегда равна единице).
Развесуйте модель таким образом:
— вершины нижней части торса присвойте костям позвоночника.
— вершины верхней части торса развесуйте между верхним позвонком, шеей и ключицами;
— рукав рубашки присвойте верхней twist-кости UpperArm;
— часть руки, выходящую из рукава (до локтя) развесуйте между 2-мя нижними twist-костями UpperArm;
— вершины локтя, между нижней twist-костью UpperArm и верхней twist-костью ForeArm;
— вершины предплечья, между twist-костями ForeArm;
и т.д. до кончиков пальцев. (Я не буду касаться ног, потому что их развесовка ничем не отличается от развесовки верхней части тела)
Если что-то не понятно, смотрите файл примера.
Развесуйте все вершины модели, в том числе и пальцы.
Повторяю, если вершины руки или пальца «надеты» на одну кость и не будут изгибаться, смело присваивайте им вес этой кости =1.
Если вершины находятся между костями, присваивайте вес в зависимости от расстояния до каждой кости. Чем кость ближе, тем вес больше, если они посередине, значит вес каждой кости 0,5.
Для того, чтобы себя контролировать, воспользуйтесь следующим способом.
Например, вы хотите редактировать торс.
Поставьте ключи анимации для торса.
Добейтесь, чтобы при перемещении ползунка анимации позвоночник сгибался в нужную сторону. После этого можете редактировать веса, а для контроля, не выходя из режима редактирования, просто перемещайте ползунок анимации.
Сразу увидите свои ошибки.
Попробуйте согнуть локоть или поднять руку вверх. Маловероятно, что результат вас устроит, как бы вы не развесовывали вершины.
Я предлагаю для запястья использовать настройки модификатора Skin, а для плеча и локтя использовать Skin Morph.
Так как модификатор Skin у нас уже есть начнём с запястья.
Попробуйте вращать запястье вверх, вниз и в стороны, и вы увидите огрехи.
Давайте их исправлять.
Для этого в модификаторе Skin есть возможность в зависимости от угла между родительской и дочерней костью перемещать выбранные заранее вершины в произвольное место (независимо от их веса). Предположим, вы хотите, чтобы при сгибании локтя у персонажа надувалась мышца. Тогда вам необходимо указать кость ForeArm (программа сама определит её предка), указать угол между этими костями, при котором выбранные вершины займут нужное положение (мышца вздуется) и, в заключении, взять и просто переместить нужные вершины в нужное место (надуть мышцу). Вот теперь я объясню, зачем нужно было создавать Dummy2 для ладони. Дело в том, что кость Hand является дочерней для ForeArm (а не для последней twist-кости ForeArm). Поэтому если указать кость Hand, то программа автоматом определит родительскую ForeArm. Если оставить всё как есть, то угол для модификатора Skin будет вычисляться между ForeArm и Hand. А ведь мы присваивали веса вершинам относительно twist–костей. Вот поэтому мы сделали Dummy, чтобы он двигался в точности как Hand (поставили ограничители) и был дочерним для последней twist-кости. (Link к последней twist-кости).
Вот и вся теория. Теперь займёмся практикой.
Переходим в режим работы с Envelopes.
Выделяем вершины, которые предполагаем перемещать для настройки запястья.
Выбираем Dummy2 (ладонь).
Выбираем в ниспадающем списке Morph Angle Deformer
нажимаем кнопку AddGizmo.
Для кости Hand установим ключ в кадре 0. Переходим в кадр 10. Поворачиваем кость Hand по Z вверх (-70гр.)
Ставим ключ. Это для того, чтобы можно было контролировать свою работу.
В кадре 10 на модель надеваем модификатор Edit Poly. Переходим на работу с вершинами. Перемещаем нужные вершины в нужное место (исправляем неправильный изгиб), т.е. делаете модель такой, как она должна выглядеть при данном повороте ладони. Выходим из режима работы с вершинами. Возвращаемся к модификатору Skin. Нажимаем кнопку Add from Stack.
В результате этого данные о положениях вершин перейдут из модификатора Edit Poly в модификатор Skin. И так как на вершины теперь влияют оба модификатора, то вершины займут неправильное положение. Чтобы это исправить удалите модификатор Edit Poly.
Теперь всё должно быть верно. А в окошке вы увидите новую морфоцель:
Попробуйте перемещать ползунок анимации. При повороте ладони вершины на изгибе должны занимать правильное положение.
Примечание. Если вершины, которые вы перемещали, в результате почему-то не перемещаются, значит, эти вершины не были выделены, когда вы создавали морфодеформатор. Вам придётся удалить данный деформатор (Gizmo) и создать новый заново, не забыв выделить ВСЕ нужные для деформации вершины.
Создайте аналогично еще 3 морфоцели (ладонь вниз, вправо и влево). Угол поворота на ваше усмотрение. Старайтесь изгибать руку на максимально возможный для человеческой руки угол.
В результате получим морфодеформатор (Gizmo) для Dummy2, который имеет 5 морфоцелей (1 по умолчанию и 4 созданные вами).
Теперь при повороте кисти в любую сторону, запястье имеет нужный вам вид.
Повторите данную работу для противоположной руки. В результате модификатор Skin будет иметь 2 морфодеформатора (Gizmo) по 5 морфоцелей.
Если вас всё-таки не удовлетворяет результат, можете ещё добавлять морфоцели, если считаете нужным. Это уже на ваш вкус. Не забывайте переименовывать морфодеформаторы (Gizmo) и морфоцели так, чтобы было понятно, к чему они относятся.
На этом работа с модификатором Skin окончена. Ключи для кости Hand можно удалить.
Настройку плеча и локтя продолжим, используя возможности модификатора Skin Morph.
Применяем его поверх модификатора Skin. Выделяем кость UpperArm, в кадре 0 ставим ключ. Переходим в кадр 10 и поворачиваем кость вверх на 80 градусов. Ставим ключ. Перемещаем ползунок анимации и видим, что в месте изгиба поверхность плеча деформируется неверно.
Теперь предлагаю такой вариант урока: я не буду использовать Dummy1, и в результате не получится качественная деформация (это для того, чтобы вы лучше поняли, в чём заключалась ошибка). И только после этого используем Dummy1 для получения нормальной деформации.
В модификаторе Skin Morph нет необходимости заранее указывать вершины участвующие в деформации (как в модификаторе Skin).
В модификаторе нажимаем кнопку Add Bone.
Выбираем дочернюю кость, поворот которой будет вызывать деформацию – UpperArm.
Переходим в 10 кадр. Рука направлена вверх. (Поверхность плеча деформирована неправильно).
Нажимаем кнопку Create Morph:
для создания морфоцели.
Переходим на работу с Point:
Выделяем все вершины модели и нажимаем кнопку Remove Verts (для удаления из деформации лишних вершин).
Нажимаем кнопку Edit:
Перемещаем вершины в нужное место (исправляем неправильный изгиб). После окончания перемещения снова нажмите кнопку Edit. Перемещая ползунок анимации, вы увидите правильную деформацию. Если какая-то вершина движется неверно (или вы случайно её деформировали) – выделите её и нажмите кнопку Clear Verts. Параметр Influence Angle указывает угол, на который распространяется данная морфоцель. Т.е. если Influence Angle = 10, то поворот кости на 10 градусом приведёт к полному исключению данной морфоцели из конечного результата. Для нашего варианта нужно указать Influence Angle = 80, т.к. мы вначале мы повернули кость на 80 градусов.
Подведем промежуточный итог работы с модификатором Skin Morph.
Для его работы необходимо выбрать кость. Создать морфоцель. Войти в режим редактирования. Переместить вершины. И выйти из режима редактирования. Указать Influence Angle.
Обычно для приемлемого результата достаточно 3-х морфоцелей (рука вверх, вперёд, вниз).
Примечание : если 3-х морфоцелей вам недостаточно, добавляйте столько, сколько считаете нужным.
Я предупреждал, что всё сделанное до сих пор с модификатором Skin Morph неверно. Пришло время это исправить. В модификаторе Skin Morph удаляем из списка UpperArm и заменяем её на Dummy1. После этого выполняем предыдущие операции. Создайте также ещё 2 морфоцели (рука вперёд и рука вниз). Настройте их. Не забывайте назначать морфоцелям понятные имена.
Повторите всё с противоположной рукой.
После этого займитесь локтевым суставом. Выберите в Skin Morph новую кость ForeArm, создайте новую морфоцель. Нажмите кнопку Edit. Исправьте положение вершин на сгибе локтя. Выйдите из режима редактирования.
На торс и пальцы я не стал надевать деформации. Если вы хотите рендерить крупные планы пальцев, то применяйте деформаторы и для них.
После настройки низкополигональной модели можно применить TurboSmooth для сглаживания поверхности.
В результате получилась настроенная Skin-модель готовая к анимации.
В заключение хочу ещё раз напомнить основные шаги выполнения скиннинга модели.
Нужно:
1. Загрузить готовую модель.
Помните, работа с моделью на уровне подобъектов после применения модификатора Skin быстрее всего приведёт к непредсказуемым результатам.
2. Подогнать кости под размер модели.
В качестве примера используйте строение человеческого тела.
3. Применить модификатор Skin и развесовать вершины.
4. Использовать морфоцели (Gizmo) модификатора Skin или/и модификатора Skin Morph для качественной настройки.
5. В случае необходимости использовать объекты Dummy.
Не хочу утверждать, что это единственно правильный способ, но я применяю его в своей работе постоянно и вполне доволен его результатами.
На этом урок закончен. Удачной работы! Пока.