Skin низкополигональных моделей в 3DS MAX
Автор: Панюков Юрий Михайлович. Занимаюсь 3D 5 лет. 3DS MAX, AfterEffects, Photoshop. Реклама, оформление канала. Сейчас занимаюсь изготовлением еженедельной анимационной программы на региональном телеканале. Решил поделиться знаниями, которыми пользуюсь в своей работе. Надеюсь они вам пригодятся.
Урок рассчитан на пользователей, которые уже знакомы с основными приёмами работы в 3DS MAX, умеют моделировать или экспортировать готовую модель.
Skinning модели может оказаться сложной, а иногда и невыполнимой задачей, если вы делаете это в первый раз или не знаете его технологии. На самом деле, сложного ничего нет, нужно только придерживаться определённых правил.
Я покажу:
- как использовать модификатор Skin;
- как использовать модификатор Skin Morph;
- как обойти некоторые ограничения Biped при использовании twist-костей.
Для примера возьмём вот такую низкополигональную модель (см.файл)
и попробуем надеть её на скелет.
Откройте файл. В нем модель и скелет, подогнанный по размеру к оболочке (пока что удалите модификаторы модели).
Если вы делаете урок на примере своей модели, то при подгонке скелета помните, суставы скелета должны совпадать с местом предполагаемого изгиба вашей модели. Лучше если сустав находится в середине модели (не нужно прижимать его к какому-то краю). Подгоняйте модель, начиная с самых крупных костей, и заканчивая пальцами.
Пояснение для тех, кто не знает, с помощью чего можно подгонять скелет под размер модели.
Создаёте скелет (Biped).
в окне 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 и настройте их следующим образом:
Dummy2 - выровнять по объекту Hand;
- прилинковать к нижней twist-кости ForeArm;
- назначить ограничения по положению и вращению относительно объекта Hand.
Вот что получилось:
Настройте 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 для этой кости.
Для этого нажимаем кнопку с единицей в верхней части окна. Вершины окрасятся в красный цвет, и вы увидите в окне инструмента, что весовые коэффициенты других костей стали равны нулю (т.к. сумма всех весовых коэффициентов всегда равна единице).
В том месте, где модель будет сгибаться (плечо, локоть и т.д.), необходимо, чтобы на вершину воздействовало больше одной кости. Вершины, расположенные на локте, должны принадлежать двум костям, поэтому присвойте им коэффициенты 0,5 каждой кости. Чем ближе вершина к определённой кости, тем выше должен быть вес. Если вы не уверены, правильно ли вы определили вес, попробуйте согнуть данный сустав, и вы увидите ошибки. Если кость движется, а вершина остаётся на месте, значит, вес слишком мал, и его надо увеличить. Воспользуйтесь кнопками SetWeight (+ -) в окне Weight Tool или введите вес вручную. Не расстраивайтесь, если не удаётся добиться качественного результата, главное, чтобы вершины вели себя адекватно, т.е. следовали за нужной костью. Далее я расскажу, как добиться качественного результата.
Развесуйте модель таким образом:
- вершины нижней части торса присвойте костям позвоночника.
- вершины верхней части торса развесуйте между верхним позвонком, шеей и ключицами;
- рукав рубашки присвойте верхней twist-кости UpperArm;
- часть руки, выходящую из рукава (до локтя) развесуйте между 2-мя нижними twist-костями UpperArm;
- вершины локтя, между нижней twist-костью UpperArm и верхней twist-костью ForeArm;
- вершины предплечья, между twist-костями ForeArm;
и т.д. до кончиков пальцев. (Я не буду касаться ног, потому что их развесовка ничем не отличается от развесовки верхней части тела)
Если что-то не понятно, смотрите файл примера.
Развесуйте все вершины модели, в том числе и пальцы.
Повторяю, если вершины руки или пальца «надеты» на одну кость и не будут изгибаться, смело присваивайте им вес этой кости =1.
Если вершины находятся между костями, присваивайте вес в зависимости от расстояния до каждой кости. Чем кость ближе, тем вес больше, если они посередине, значит вес каждой кости 0,5.
Для того, чтобы себя контролировать, воспользуйтесь следующим способом.
Например, вы хотите редактировать торс.
Поставьте ключи анимации для торса.
Добейтесь, чтобы при перемещении ползунка анимации позвоночник сгибался в нужную сторону. После этого можете редактировать веса, а для контроля, не выходя из режима редактирования, просто перемещайте ползунок анимации.
Сразу увидите свои ошибки.
Ещё раз напоминаю, что модель в районе плеча разорвана, поэтому все вершины рукава рубашки присвойте одной верхней twist-кости UpperArm (вес = 1), а нижнюю часть плеча до локтя (руку, выходящую из рукава) развесуйте между двумя нижними twist-костями UpperArm.
Если что-то непонятно - посмотрите файл с примером.
Попробуйте согнуть локоть или поднять руку вверх. Маловероятно, что результат вас устроит, как бы вы не развесовывали вершины.
Только при малых углах изгиба вам, вероятно, понравиться форма модели. Если вам этого достаточно, то можете прекратить урок. Если нет - давайте продолжим.
Для того, чтобы добиться качественного изгиба, можно использовать возможности модификатора Skin, либо воспользоваться модификатором Skin Morph. Какой из них применять в каждом конкретном случае - решать вам, поэтому в данном уроке я применю оба способа.
Я предлагаю для запястья использовать настройки модификатора 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.
В окошке появляется новый деформатор. Выделите его. В свитке Deformer Parameters увидите его настройки: родительскую и дочернюю кости и текущий угол между ними, а также начальная морфоцель - Base Morph.
Для кости 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-х морфоцелей вам недостаточно, добавляйте столько, сколько считаете нужным.
Казалось бы вот и всё. Но оказывается, нет. Дело в том, что при повороте UpperArm вокруг продольной оси (локальная X), угол между ней и Clavicle меняется, хотя в пространстве они занимают то же самое положение. А раз угол изменился, то и морфоцель не будет работать правильно. Попробуйте вращать UpperArm вокруг своей продольной оси X и вы увидите что происходит. Если бы мы использовали верхнюю twist-кость UpperArm, которая практически не вращается вокруг своей оси, то всё было бы нормально, но, к сожалению, в 3DS MAX 8 без SP - twist-кость не является дочерней к Clavicle, и это невозможно. В SP это исправлено. Но чтобы исключить возможные ошибки, воспользуемся Dummy1. Напомню его свойства: он движется как верхняя twist-кость и является дочерним к Clavicle. Это то, что нам нужно.
Я предупреждал, что всё сделанное до сих пор с модификатором 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.
Не хочу утверждать, что это единственно правильный способ, но я применяю его в своей работе постоянно и вполне доволен его результатами.
На этом урок закончен. Удачной работы! Пока.