Как удалить кости в 3ds max
Вполне логичный вопрос. Тем более что в 3dsMAX'е имеются уже для этих целей соответствующий объект, который так и называется Spring (англ. - пружина). Создать ее можно из меню Create > Dynamic s > Spring или выбрав на командной панели (Command Panel) закладку Create > кнопка Geometry > в выпадающем списке Dynamics Objects > Spring.
Этот стандартный объект имеет немало параметров, отвечающих за форму (длинна, ширина, количество витков, сечение) и за метод построения концов пружины (End Point Method). Все это благополучно анимируется, а при выборе End Point Method > Bound to Object Pivots концы пружины можно привязать к конкретным объектам в сцене, тогда анимировать придется только эти объекты (если они еще не были заанимированы), а пружина уже будет самостоятельно изменять свою длину и местоположение в сцене.
Но если пружина необходима абсолютно другого сечения, чем те, которыми располагает стандартный объект: круглое, прямоугольное и D-образное? Или уже есть готовая модель пружины со своим набором материалов, текстур, текстурных координат? Или же пружину эту надо отэкспортить вместе с анимациями в какой-либо движок (Engine), а он совсем не знает о существовании такого замечательного объекта как Spring, и понимает только Skin-анимацию? Короче говоря, существуют такие ситуации, когда вопрос «Зачем это надо?» не возникает.
2. Устройство пружины
В более общем случае пружину можно разделить на три части:
- красным цветом обозначен недеформируемый нижний конец пружины, т.е. все точки этой части не изменят своего положения относительно друг друга;
- желтым – деформируемая часть;
- зеленым – недеформируемый верхний конец.
3. Анимация деформируемой части
Для начала будет удобно скрыть недеформируемые части пружины(перейти в режим редактирования полигонов, выделить соответствующие недеформированным частям и скрыть Edit Geometry > Hide Selected):
Основная особенность анимации деформируемой части пружины состоит в том, что при изменении длинны пружины, меняется расстояния между витками, при этом форма сечения должна оставаться неизменной. Если применить простое масштабирование вдоль оси пружины, то при растяжении толщина сечения будет увеличиваться, а при сжатии – уменьшаться:
Для того чтоб избежать подобных неприятностей понадобится модификатор Skin и две кости(Bones). При чем, абсолютно не важно ни количество витков пружины, ни форма сечения, ни разность между углами относительно оси пружины, в которых начинается первый виток и заканчивается второй. Важно правильно расположить кости:
- они должны быть параллельны пружине;
- первая кость должна начинаться строго в нижней части сечения первого(нижнего) витка и заканчиваться в нижней части последнего витка;
- вторая кость должна начинаться строго в верхней части сечения первого витка и заканчиваться в верхней части последнего витка.
Войти в режим создания костей можно из меню Create > Systems > Bones IK Chain или из командной панели(Command Panel) закладка Create > кнопка Systems > в выпадающем списке Standard > Bones:
При создании костей необходимо использовать привязки для правильного расположения. Создание первой кости:
Для удобства кости можно отодвинуть от оси пружины, чтоб они не находили друг на друга; завершающие косточки – удалить(в них нет необходимости):
Первая кость будет называться bone_down, вторая – bone_ up. Модификатор Skin назначается на саму пружину, в его параметры(Parameters) добавить созданные кости Bones > Add:
Дальше необходимо настроить коэффициенты влияния костей на вершины сетки пружины по следующим правилам:
- на точки, расположенные в нижней части любого сечения пружины, будет влиять только первая кость bone_down;
- на точки, расположенные в верхней части любого сечения пружины, будет влиять только вторая кость bone_up;
- на промежуточные точки коэффициент влияния первой кости bone_down будет равен отношению удаленности точки от верхнегокрая сечения к толщине сечения, второй кости bone_up – отношению удаленности точки от нижнего края сечения к толщине.
Для данного примера:
- толщина сечения равна 5;
- желтые точки расположены в нижней части сечения: коэффициенты влияния bone_down = 1.0, bone_up = 0.0;
- красные точки расположены в верхней части сечения: bone_down = 0.0, bone_up = 1.0;
- синие точки удалены от нижнего края сечения на 1, от верхнего – на 4: bone_down = 1/5 = 0.2, bone_up = 4/5 = 0.8;
- зеленые точки удалены от нижнего края на 4, от верхнего – на 1: bone_down = 4/5 = 0.8, bone_up = 1/5 = 0.8.
Для назначения коэффициентов влияния костей на вершины в свитке параметров модификатора Skin нажать кнопку Edit Envelopes, в группе Select напротив Vertices поставить галочку и в группе Weight Properties нажать кнопку Weight Tool (на кнопке нарисован гаечный ключ), после чего появиться дополнительное окно с одноименным названием:
Для удобства можно выделить все вершины и сбросить коэффициент влияния первой кости bone_ down в ноль. Коэффициенты влияния на вершины назначать лучше сразу на цепочки вершин, расположенных вдоль витков: выделить две соседние вершины и нажать кнопку Loop, выбрать кость в параметрах модификатора, затем нажать кнопку на которой изображен требуемый коэффициент(0, .1, .25, .5, .75, .9, 1) либо рядом с кнопкой Set Weight ввести требуемую величину и нажать ее:
После всех этих манипуляций должно получиться следующее:
Теперь если выделить кости bone_up и bone_down, войти в режим масштабирования, выбрать в качестве центра точки привязки объектов, то при масштабировании костей вдоль оси пружины сама пружина будет корректно сжиматься и разжиматься, при этом толщина сечения изменяться не будет:
4. Анимация недеформируемых частей пружины.
Теперь можно сделать видимыми скрытые полигоны отвечающие, за недеформируемые части. Для этого выбрать объект пружины, перейти на уровень редактирования полигонов и нажать кнопку Edit Geometry > Unhide all:
Для анимации недеформируемых частей понадобится еще две кости: первая кость располагается по оси пружины и ее начало и конец соответствуют началу и концу пружины, вторая – просто завершающая косточка:
Первая кость будет называться bone_start, а вторая – bone_end. В настройках иерархии вращение второй косточки должно быть заблокировано Command Panel > Hierarchy > Link Info > Locks > X, Y, Z:
Для настройки первой кости понадобиться утилита Bone Tools, которая находится в меню Animation > Bone Tools. .Кость должна иметь возможность изменять свою длину (убрать галочку с Freeze Length) и при этом сохранять неизменной свою матрицу трансформаций(Stretch > None):
Кости влияющие на деформируемую чать пружины bone_down и bone_up привязываются к кости bone_start инструментом Select and Link:
В параметры(Parameters) модификатора Skin добавляются оставшиеся кости bone_start и bone_end. Для скрытых ранее недеформируемых частей пружины назначаются соответствующие коэффициенты влияния:
- для нижней части bone_start = 1.0, все остальные кости 0.0;
- для верхней части bone_end = 1.0, все остальные кости 0.0.
Теперь при изменении положения корневой кости bone_start за ней перемещаются вершины нижней недеформируемой части пружины(через модификатор Skin), кости bone_down и bone_end, которые изменяют положения вершин деформируемой части, и косточка bone_end, изменяющая положения вершин верхней недеформируемой части. При изменении положения косточки bone_end,за ней меняет свою ориентацию корневая кость bone_start и соответственно вся пружина, а также изменяют свое положение относительно продольной оси пружины вершины верхней недеформированой части. Осталось связать масштабирование вдоль оси пружины костей bone_down и bone_end с перемещением косточки bone_end вдоль оси пружины.
Для начало необходимо получить зависимость коэффициента масштабирования костей деформируемой части от расстояния от косточки bone_end до начала кости bone_start:
Пояснения к рисунку:
- L – расстояние от косточки bone_end до начала кости bone_start (для начального положения L');
- c1, c2, c3, c4 – отступы от концов костей bone_down и bone_up до краев пружины, из-за присутствия недеформируемых частей эти величины неизменны при растяжении или сжатии пружины;
- ld и lu – длины костей bone_down и bone_up соответственно, нетрудно заметить, что они равны между собой, поэтому в дальнейшем будут обозначаться l (для начального положения l').
Необходимо найти соотношение l/l' = s, что и является коэффициентом масштабирования костей деформируемой части. Итак:
L = c1 + lu + c2 = c3 + ld + c4, c1 + c2 + l = c3 + c4 + l, следовательно c1 + c2 = c3 + c4 = C = L' - l',
L = C + l, l = L - C, l' = L' - C,
l / l' = (L - C) / (L' - C) = (L - (L' - l')) / (L' - (L' - l')) = (L - L' + l')/(L' - L' + l') = (L - L' + l') / l' = (L - L')/l' + 1.
Таким образом s = (L - L')/l' + 1, где L' и l' известные величины (их можно получить используя Command Panel > Utilities > Measure. В данном примере получилось L' = 147, l' = 132:
Следующие действия проделываются для каждой кости bone_up и bone_down:
- выделить кость отвечающую за деформируемую часть;
- перейти Command Panel >Motion >Parameters >Assign Controller;
- назначить Sceale контроллер ScaleXYZ;
- назначить X Scale контроллер Float Expression;
- тут в группе Create Variables создается новая векторная переменная end_pos и назначается ей контроллер $bone_end.transform.controller.Position, теперь эту переменную можно использовать в выражении Expression, куда и вписываеться полученная ранее формула (length(end_pos) - 147) / 132 + 1, где length(end_pos) и есть расстояние от косточки bone_end до начала кости bone_start, так как переменная end_pos содержит координаты косточки bone_end относительно родительской кости bone_start.
Вот вроде и все. Теперь если выделить косточку bone_end и выбрать инструмент перемещение Move и подвигать ее должно получиться так:
5. Почему это работает.
Основная идея заключается в правильном расположении костей, отвечающих за деформируемую часть пружины: они смещены друг относительно друга на величину толщины сечения. Именно поэтому при одновременном масштабировании относительно своих точек привязки этих костей расстояния между врхними и нижними точками сечения пружины остаеться неизменным и равным смещению.
Конечно справедливости ради стоит добавить что при растяжении или сжатии пружины сечения должны не только перемещаться вдоль оси, а еще и "закручиваться". Но при небольших изменениях длинны пружины это в глаза не кидается, да и для не очень больших нужно присматриваться, чтоб заметить несоответствие с реальной жизнью. Но и это тоже можно решить, разместив косточки, отвечающие за деформируемую часть пружины, строго по оси пружины и повесив на них еще один контроллер, который будет их вращать вокруг оси пружины и изменять смещение относительно друг друга. Формулы там конечно будут пострашнее и оставляются для настоящих фанатов сделать все как в реальности. Целью было показать основной принцип костевой анимации пружин и вроде она была достигнута.
Поскольку эта статья родилась из комментария к статье "Заметки о разработке плагина для экспорта геометрии и ещё чуть-чуть" Glorg'a, пожалуйста начните чтение с оригинальной статьи [1], а я обойдусь без вступления :)
Вкратце, в статье пойдет речь о нюансах, с которыми вы (хотите или нет) обязательно столкнётесь при написании плагина экспорта из 3DS MAX.
Система координат
Обратите внимание, как ориентированы оси системы координат в 3DS MAX, и сравните системой, используемой в DirectX.
Рисунок 1. Системы координат 3DS MAX и DirectX.
Мало того, что вверх направлена ось Z, а не Y, так в 3DS MAX еще и используется правосторонняя (right-handed), а не левосторонняя (left-handed) система координат, как в DirectX.
Если этого не учитывать, отэкспортченный персонаж в игре будет лежать на полу.
Поскольку системы разносторонние, то не существует такого поворота, с помощью которого можно перейти от одной системы к другой. Тут требуется еще и отражение относительно одной из координатных плоскостей.
Для того чтобы не путаться, проще всего при экспорте поменять местами оси Y и Z. Таким образом, если в игре персонаж должен бежать вдоль оси Z, то аниматор в 3DS MAX должен анимировать его вдоль оси Y – очень простое правило.
Для того чтобы поменять оси местами, нужно просто поменять местами компоненты Y и Z в позициях вершин и нормалях. Но при этом при экспорте анимации, каждую матрицу 3DS MAX необходимо умножить спереди и сзади на матрицу перемены осей (), чтобы вернуть позицию обратно в систему координат 3DS MAX для анимации, а потом опять в нашу систему координат.
Матрица перемены осей выглядит следующим образом:
При инвертировании, матрица не изменяется.
Полностью все выглядит так:
Матрицы объекта и узла (Node)
В документации к 3DS MAX есть раздел "Must Read Sections by Plug-In Type". Так вот, его действительно нужно прочитать! В частности, там объясняется, что такое матрица узла (node) и объекта (object).
Вся сцена в 3DS MAX представлена иерархией узлов. Когда мы создаем кубик (box) - мы создаем узел (INode) и объект (IObject), на который этот узел ссылается.
Центр локальной системы координат объекта (pivot), который мы видим в интерфейсе 3DS MAX - это визуальное представление матрицы узла. Матрицу узла можно получить методом INode->GetNodeTM().
Кроме того, объект может быть смещен относительно узла с помощью матрицы объекта. По умолчанию матрица объекта - единичная, но ее можно изменить, двигая pivot.
Рисунок 2. Включение режима преобразования pivot'а.
Когда мы двигаем pivot, 3DS MAX изменяет одновременно и матрицу узла, и матрицу объекта так, чтобы визуально геометрия оставалась на том же месте.
Полная формула преобразования геометрии в мировое пространство выглядит так:
Напрямую получить матрицу объекта невозможно. Можно получить матрицу преобразования геометрии в мировое пространство (INode->GetObjectTM()), и помножить ее справа на инвертированную матрицу узла.
Non-uniform scale
Non-uniform scale(масштабирование с разными коэффициентами по осям, NUS) - это зло. Это настолько большое зло, что в ранних версиях 3DS MAX при включении этого режима выскакивало предупреждение. Но в последний версиях 3DS MAX его убрали (наверное потому, что художники его все равно не читали :).
NUS рождает две следующие проблемы:
1. Для преобразования нормалей необходимо использовать inverse transpose матрицу.
Обычно, в играх для преобразования нормалей используется та же матрица, что и для преобразования позиций, только с обнуленным смещением. В случае с NUS это не работает:
Рисунок 3. Если для преобразования нормалей использовать ту же матрицу, что и для позиций, нормали больше не перпендикулярны поверхности.
Если для преобразования позиций используется матрица M, то для преобразования нормалей необходимо использовать . Впрочем, можно просто считать нормали уже после преобразования позиций.
Обычно проблему NUS можно решить путем выделения из матриц масштабирования, и применения его к координатам вершин (таким образом удается избавиться от масштабирования вообще). К сожалению, это не избавляет от второй, фундаментальной проблемы.
2. Если к кости применен NUS, то при вращении она сжимается.
Вообще-то, до того, как модель дошла до стадии экспорта, проблемы уже должны были возникнуть у аниматоров, и они обязаны были вернуть модель назад моделеру :).
Поскольку в матрице узла содержится неравномерное масштабирование, то при вращении кости она описывает эллипс, а не круг. Поскольку в играх анимация кости сохраняется только в виде положения и вращения (кватернионы), то анимация в игре не будет соответствовать анимации в 3DS MAX.
Другими словами, NUS - это зло, и ваши художники должны следить, чтобы матрицы узлов не содержали его. Если нужно выполнить неравномерное сжатие, его нужно выполнять над вершинами геометрии (vertices sub-object), а не над узлом.
Матрицы также могут содержать искривление осей (переход к неортогональной системе координат). К счастью, добиться этого стандартными методами 3DS MAX очень сложно, поэтому такие случаи редки (используйте метод Matrix3->Orthogonalize()).
Отрицательное масштабирование
3DS MAX позволяет указывать отрицательное масштабирование.
Рисунок 4. Отрицательное масштабирование.
Эффективно это масштабирование+отражение по одной из осей. Если объект отражен или отмасштабирован с отрицательным коэффициентом, то нужно поменять порядок следования вершин в треугольнике (отразить нормаль). Проверить это можно, проанализировав матрицу:
Спрятанные объекты
Иногда проблемы возникают из-за незнания интерфейса 3DS MAX. На самом деле, вы - программист, и знать 3DS Max не обязаны, но все же.
3DS MAX позволяет прятать (hide) объекты. Это очень полезная функция, и художники часто этим пользуются. Чтобы у вас не возникало проблемы, когда в отэкспорченной сцене появляются какие-то непонятные объекты, которых в 3DS MAX вроде бы нет, вам нужно знать, что 3DS MAX позволяет спрятать объекты тремя разными способами.
1. Спрятать выделенные объекты с помощью контекстного меню:
Рисунок 5. Контекстное меню (вызывается правой кнопкой мыши).
Для того, чтобы показать все объекты сцены, спрятанные этим способом, нужно выбрать в том же меню "Unhide all".
2. С помощью слоев:
Рисунок 6. Окно Layer Manager (вызывается Tools->Layer Manager).
3. С помощью панели Display:
Рисунок 7. Панель Display options.
Объект, спрятанный любым способом, не будет отображаться в окнах ViewPort и в списке объектов. Сам плагин не различает способа скрытия; в нем можно использовать единый метод INode->IsHidden().
Спрятанные треугольники
Рисунок 8. Панель face sub-object.
Кроме целых объектов, 3DS MAX позволяет скрывать отдельные треугольники. Плагин может запросить статус треугольника методом Face->Hidden().
Ну что я только не делал с правой ключицей. Всё сбросил по pivot и по working pivot. XForms тоже сбросил. Но эта зараза скалируюется при повороте хоть сдохни. Помогает только отцепление от родительской кости. Все настройки пивота на склирование сброшены.Но к родительской подцепить то надо. Там какая-то внутренняя система координат сидит. Вот нафига. Устал Капитан с ней воевать. Посоветуйте кто что может.
captain NOVA
Хотя бы скриншот показал, что там у тебя за загадочный скелет с загадочной правой ключицей. А еще лучше архив со сценой выложи.
captain NOVA
Ух ты, Mo-cap o_O Где взял?
Вообще сложно разобраться во всем этом массиве точек-маркеров, и понять что с чем взаимодействует и как должно.
Заметил, что локальная ориентация этой ключицы (Clavicle это ключица, а не лопатка) не симметрична левой. Если удалить "LookAt" с правой ключицы, то локальная ось Y у тебя смотрит вниз, в то время как у левой она смотри вверх. Соответственно из-за этого "LampRClavicleFront" и "LampRClavicleBack" у тебя путаются местами при добавлении LookAt на правой ключице, обрати на это внимание! "LampRClavicleFront" у тебя оказывается ЗА туловищем, а "LampRClavicleBack" спереди. Не знаю, что является следствием чего, но скалирование здесь не причем, ошибка в неверном ориентировании твоих вспомогательных объектов и костей. На мой взгляд, единственный выход это переделать правую руку полностью и быть внимательным.
И не понятно как у тебя такой глюк возник, если с левой у тебя все в порядке, либо ты не разобрался до конца с процессом построения, либо работа не твоя и зачем за этот мокап взялся?
Не знаю, решается ли проблема полностью:
У правой ключицы во вкладке "Motion" в PRS параметрах Rotation (там где ты выбираешь цель у LookAt) в самом низу Source/Upnode Alignment поставь галочку у Flip
И я не зря просил архив со сценой, архив бы весил в 6 раз меньше :)
Stepanych
> И не понятно как у тебя такой глюк возник, если с левой у тебя все в порядке,
> либо ты не разобрался до конца с процессом построения, либо работа не твоя и
Проблема в том, что я сделал с помощью bone tool зеркало всей руки. И все кости поочереди глючат кроме пальцев слава богу. Да реально самый простой выход это заново переделать кости.
> зачем за этот мокап взялся?
Телевизор задолбался смотреть под пивке. Сделаю кому нибудь полезное. Да и себе заодно. Яж не виноват что в максе такие глючные кости. Такое ощущение, что bone tool лет десять не обновляли.
Мокап сам делал. Писал себя любимого на 4 камеры. Есть там глюки с руками. Слишком далеко камеры установил. Всё исправимо.
captain NOVA
О как, если твой мокап, то выглядит круто, правда нужно сгладить траекторию движения точек, иначе всё очень дергано.
Так решение мое работает нормально? Сейчас заметил, что эту галочку ты уже поставил у левой.
Stepanych
> траекторию движения точек, иначе всё очень дергано.
Да всё это правится. Надо скрипт поискать, который 3 кадра через четвёртый удаляет. Случаем не попадался? Здесь так и делал
Stepanych
> Так решение мое работает нормально? Сейчас заметил, что эту галочку ты уже
> поставил у левой.
Все отражения не помогают. Там какая-то деформация кости. Лан разберусь когда пиво кончится) Отпуск-такой отпуск.
captain NOVA
Очень круто) А пальцы это уже в самом максе анимировал?
Правда таз у него куда-то рвется :)
Stepanych
> А пальцы это уже в самом максе анимировал?
> Правда таз у него куда-то рвется :)
Да пальцы легко анимировать с помощью контроллеров. Один поворачиваешь и рука сжимается.
Да косяки там есть. Спешил. А самый главный косяк 60 fps под 30 толком не подогнал. Медленно шевелится.
x
> И что, reset scale не помогает?
Написал же нет. Ни в bone tool ни в настройках пивота. Выбесило вчера вобщем.
captain NOVA
Раньше думал, что чтобы получить что-либо приличное нужна более-менее оснащенная студия, а ты в 200 баксов уложился.
Ты по урокам делал каким? Сейчас создаю игру, нужно некоторое количество анимаций, ручками анимировать не очень качественно получается, поэтому интересен твой метод :)
Stepanych
> а ты в 200 баксов уложился.
Всё далеко не так. У меня комп и ноутбук. Две камеры можно только на один контроллер usb. В принципе мощный пк потянет все четыре. Но нужны usb удлинители. Ещё у меня пятая контрольная canon eos 600d. Если у вас нет ничего тут в 200 баксов не уложишься. Костюм надо шить. Работы много. Но если продавать анимацию по 300 р. за секунду я думаю этот гемор с граблями того стоит. Навострившись и всё отладив можно 20-30 секунд в день делать. Трекинг - занятие долгое, но приятное. При быстрых движениях маркеры расплываются. Допиливать ручками надо.
Зы. Надо было сфоткать свою студию на даче. Четыре вкопаных столба и 2 стола. Поржали бы.
captain NOVA
А пробовал захватывать движение с помощью кинекта и софта от iPiSoft?
Stepanych
Они пропагандируют безмаркерный метод с помощью кинекта. Но я чот ни разу ещё не видел качественной анимации всех участков тела. Из ипи софт использовал. Чёрт опять меня колят. Думайте сами. Хватит уже.
''), array("string" => ''), ); if (!isset($_COOKIE['rek'])) < print($banners[$GLOBALS["banner_num"]]["string"]); >elseif ($_COOKIE['rek'] == "rek1") < print($banners[0]["string"]); >elseif ($_COOKIE['rek'] == "rek2") < print($banners[1]["string"]); >?>
Есть несколько закладок на командной панели 3ds Max, которыми очень редко пользуются 3D-художники.
Одной из таких является закладка Display (Отображение). Она очень полезна, когда нужно навести порядок в загромождённой сцене, чтобы было удобнее работать.
Hide by Category.
Раньше я уже описывал фильтры выделений, но используя их нельзя было только выделить ненужные вам категории объектов. А с помощью свитка Hide by Category (за закладке Display) эти ненужные категории объектов можно временно "удалить" из окон проекций Макса, чтобы они совсем не путались под ногами.
На каждую из этих галочек, есть своя комбинация клавиш (показана на скриншоте в начале статьи), чтобы вы не лазили постоянно на эту закладку.
К примеру, бывает очень удобно спрятать камеры (нажатием Shift+C ), которые своими таргетами всё время мешают выделению других объектов. А потом повторным нажатием Shift+C опять отобразить все камеры во вьюпортах.
То же самое относится к геометрии (если нужно спрятать полигоны, чтобы работать только со сплайнами, к примеру) , к хелперам (всяким дами, поинтам, манипуляторам, слайдерам) , к сплайнам, к костям (особенно во время анимации готового персонажа или его скининга ) .
На этой закладке также есть еще несколько интересных свитков:
Display Color.
В этом свитке можно указать каким цветом (цветом объекта или цветом материала) будут отображаться полигоны и рёбра в окнах проекций. Если выбрана радиокнопка Object Color, то цвет будет браться из объекта, а если Material Color, то из цвета Diffuse, назначенного на объект материала.
Это относится как к мешу, так и к сплайнам.
Правда, Nitrous имеет глюк, и поэтому для него опция Wireframe не работает. Зато в режиме Direct3D всё отлично.
Display Properties.
Этот свиток дублирует аналогичную область из свойств объекта (которые появляются, если кликнуть на объекте правой кнопкой мышки и выбрать пункт Object Properties).
Поэтому, если вам очень часто приходится лазить в свойства объекта, то чтобы сэкономить время, можно открыть эту закладку и кликать на нужную галочку или, опять же, использовать хоткеи. К примеру, Alt+X для See-Through (объект становится полупрозрачным, чтобы было удобно смотреть, на другие объекты находящиеся у него внутри).
Link Display.
Галочка Display Links отображает специальный хелпер возле Pivot Point'а объекта, если данный объект привязан (прилинкован - Link) к какому-то другому объекту.
Подпишитесь на обновление блога (вот 3 причины для этого).
Похожие статьи:
-
Бывает нужно, чтобы один или несколько полигональных объектов отображались как в режиме wireframe (только рёберный каркас), а все другие -… Начинаю новую рубрику "Маленькие 3D подсказки", куда буду добавлять небольшие "секретные" подсказки по работе с 3D редакторами. Пока планирую добавлять… Обновление (19.01.2015): добавил еще способ по улучшению отображения текстур во вьюпорте. Если вас напрягает, когда ваша текстура во вьюпорте выглядит… В предыдущей статье я рассказал о секретных методах выделения объектов, а в этой расскажу об оригинальных и зачастую редко используемых… Выделение объектов в 3ds Max – это самая часто выполняемая операция. Как следствие, если оптимизировать это действие, то можно сэкономить… В этой статье я расскажу о том, как у меня настроен 3ds Max по-умолчанию. Т.е. поделюсь своими оптимальными для работы… Обновление (29.06.2012): добавил еще один секретный метод (в конце статьи) - метод вращения объекта (спасибо моему читателю Дмитрию Шестакову за…
Вам понравилась статья ? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.
спасибо за инфу, а есть ли хоткей или способ быстро спрятать кости не залазя в меню дисплэй или не выключая слой с костями?
Назначьте этот скрипт либо на меню либо на хоткей:
(
on isChecked return not hideByCategory.bones
on execute do hideByCategory.bones = not hideByCategory.bones
)
Как назначать скрипты на горячие клавиши.
Модификатор Skin ассоциирует скелет с сетчатым объектом и позволяет анимировать сетку, управляя скелетом. В этом уроке описаны следующие приемы:
Применение модификатора Skin
Копирование настроек огибающей и применение копии к другим огибающим.
"Окрашивание" и настройка веса вершин
одготовка к уроку
Загрузите файл tut_skinalien_start.max из директория tutorial/skin_flex основного директория 3ds max 5.
Применение модификатора Skin
Выделите объект MeshBody (тело персонажа)
На панели Modify выберите модификатор Skin.
В свитке Parameters нажмите кнопку Add и выберите все объекты в списке. В сцене есть и другие кости, но они не используются для привязки к сетке и поэтому скрыты.
С помощью инструмента Select By Name выделите все кости и скройте их, нажав кнопку Hide Selected в свитке Hide панели Display.
Просмотр и настройка огибающей плеча
В свитке Parameters нажмите кнопку Edit Envelopes.
В видовом окне Front увеличьте область плеча модели.
Каждая ось огибающей показана в виде черной линии поверх соответствующей кости с управляющими точками (квадратиками) на концах.
Выделите ось на левом плече персонажа, чтобы линии, ограничивающие область действия огибающей, появились на экране.
Предупреждение: Под левым плечом понимается левое плечо персонажа, а не то, которое находится на левой половине экрана.
Каждая огибающая состоит из внутренней (inner - ярко-красного цвета) и внешней (outer - темно-красного цвета).
Движение кости, соответствующей огибающей, оказывает наибольшее влияние на вершины сетчатой оболочки, попавшие во внутреннюю огибающую. Чем вершина далее от границы внутренней огибающей и ближе к границе внешней, тем меньшее влияние оказывает кость на вершину. Наконец вершины, не попавшие даже в границы внешней огибающей, никак не реагируют на движение кости.
Для достижения сглаженности оболочки при движении, внешние огибающие близлежащих костей должны слегка перекрывать друг друга. В этом случае кожа в местах сочленения суставов (колени, плечи, локти, бедра) подвержена влиянию каждой из костей, что обеспечивает ее гладкость при движении в суставах.
Во время настройки огибающих, вершины, расположенные внутри них меняют цвет. Красным выделяются вершины, подверженные наибольшему влиянию, синим - наименьшему.
Переместите одну из управляющих точек оси огибающей, чтобы уменьшить область ее действия.
Изменение длины и направления огибающей: Огибающая плеча слишком далеко заходит в руку. Вы можете изменить длину и направление огибающей, перемещая ее концы. Концевые управляющие точки показаны черными квадратиками.
В видовом окне Front выделите квадратик на правом конце оси огибающей.
Переместите управляющую точку влево, чтобы укоротить ось огибающей.
Настройте внешнюю, внутреннюю огибающие и длину оси по образцу, показанному на картинке.
Копирование свойств огибающей плеча и перенос их на другое:
В свитке Envelope Properties нажмите кнопку Copy.
Выделите огибающую противоположного плеча.
В свитке Envelope Properties нажмите кнопку Paste.
Свойства скопированной огибающей перейдут к огибающей противоположного плеча.
Длина оси, однако, при этом не изменится, поэтому Вам придется редактировать ее вручную. Такая особенность вызвана тем, что часто аниматору бывает удобно скопировать свойства огибающей и переместить их на другую, которая и должна иметь другую длину. Например, настройки огибающих для рук вполне могут подойти и для ног, а дину рук переносить на ноги нежелательно.
При ручной настройке огибающей правого плеча было бы удобно сравнивать ее с огибающей левого. Вы можете включить постоянную видимость для нужной Вам огибающей.
Выделите огибающую левого плеча.
В группе Envelope Properties свитка Parameters нажмите кнопку Envelope Visibility. Выделите огибающую правого плеча.
Огибающая левого при этом осталась видимой.
Настройте длину оси огибающей правого плеча так, чтобы она соответствовала левому.
Настройка огибающих тела и головы: Теперь Вы уже знаете, как использовать стандартные средства для настройки огибающих. Изменяя длину и размеры огибающих и применяя технику копирования и назначения свойств копии другой огибающей, настройте их параметры для тела, как показано на картинках.
В видовом окне Front настройте огибающие груди так, чтобы они охватывали ее по ширине.
В окне Left настройте огибающие шеи и головы так, чтобы они охватывали сетку и слегка перекрывались. Поместите верхний конец головы так, чтобы она лежала в голове полностью
В окне Front настройте огибающие для рук.
В окне Front настройте огибающие ног. Верхний конец каждого бедра надо опустить слегка вниз. Огибающие ступней настроим чуть позже.
Применение скопированных настроек к нескольким костям руки:
Укрупните план кисти руки в видовом окне Top.
Выберите одну кость пальца и настройте ее огибающую так, чтоб она охватывала сетку пальца и слегка перекрывала другие кости.
В группе Envelope Properties нажмите кнопку Copy.
Кнопка Paste имеет несколько модификаций. Нажмите и удерживайте ее. Появится несколько кнопок. Выберите Paste to multiple bones(применение к нескольким костям), это последняя кнопка в списке.
Проверьте огибающие кончиков пальцев и убедитесь, что они покрывают всю сетку пальцев. Настройте их, если необходимо.
Настройте основную огибающую кисти, как показано на рисунке.
Настройка огибающей ступни:
Укрупните план ступни в видовом окне Left.
Выберите "конечную косточку" и удалите ее из списка модификатора Skin.
Настройте огибающие правой ступни персонажа. Концы осей огибающих ступни необходимо переместить.
Скопируйте огибающую ступни и в видовом окне Perspective и примените ее настройки к огибающей второй ступни. Сделайте то же самое для второй огибающей ступни.
Проверка степени влияния кости на вершины:
Выберите одну из конечных огибающих ступни и укрупните ее план в видовом окне Perspective.
Если режим закраски включен, модель окрасится в красный, желтый и синий цвета, показывая влияние кости на сетчатую оболочку. Красный цвет выделяет области наибольшего влияния, а синий незначительного или полного отсутствия влияния. Конец ступни должен начинаться с красного цвета и переходить через желтый в синий при переходе в основную часть ступни. Это показывает, что конец ступни полностью подчиняется своей кости.
Выделите одну из огибающих ноги и посмотрите на цвет сетки в окне Perspective. Нога так же выглядит неплохо.
Выделите одну из огибающих груди и посмотрите на цвета
Цвета в области груди показывают, что кости лишь частично влияют на оболчку. Это представляет серьезную проблему. Огибающие слишком малы, чтобы включить в себя всю сетку, а их увеличение может затронуть области рук и шеи.
Решим эту проблему с помощью раскраски вершин
Настройка параметров раскраски: Еще раз вспомним, что огибающие назначают каждой вершине вес - число, определяющие степень влияния кости на данную вершину. Значение веса может изменяться в пределах от нуля до единицы. Нулевая величина веса означает, что данная вершина не движется при движении кости. Значение 0.5 указывает, что вершина движется не только с этой, но и с другой (другими) костями. Единичная величина веса означает, что данная вершина движется только при движении данной кости.
Каждая вершина может иметь разные веса по отношению к нескольким костям, но сумма весов одной вершины должна равняться единице.
Для огибающей красный цвет вершины означает, что ее вес равен единице или близок к ней, а синий - равенство веса нулю.
Модификатор Skin позволяет Вам "раскрасить" вес вершин с тем, чтобы распространить влияние кости на вершины, лежащие вне огибающей.
В окне Front выделите одну из огибающих груди.
В группе Weight Properties свитка Parameters нажмите кнопку Paint Weights.
В видовом окне Front переместите курсор по области груди персонажа, не нажимая кнопки мыши.
Появится изображение большой кисти. При движении курсора по полигонам, линия, отходящая от кружка, показывает направление нормали.
Установленная по умолчанию величина кисти слишком велика для данной модели.
В диалоге Paint Options поменяйте значение Max Size на 6. Оставьте диалог открытым. Снова проведите курсором по сетке модели в области груди. Теперь размер "кисти" более подходящий.
Раскраска весов вершин:
В окне Front нажмите на кнопку мыши и, не отпуская ее, проведите курсором по области груди.
Вершины в этой области окрасятся в красный цвет. В видовом окне Perspective Вы можете видеть, что сетка также окрасилась красным.
В видовом окне Perspective, используя инструмент Arc Rotate, поверните модель спиной к себе.
В то время, как Вы окрашивали переднюю часть модели, ее спина не окрашивалась.
В диалоге Paint Options установите флажок Mirror, а в выпадающем списке выберите значение Y.
Выберите одну за другой все огибающие торса и, с помощью раскраски вершин определите их веса.
Закройте диалог Paint Options и выключите кнопку Paint Weights.
Проверка настроек модификатора Skin: После настройки огибающих и весов вершин, проверьте их правильность перед началом создания анимации.
Сделайте видимыми оба вспомогательных объекта, управляющих пятками.
Перейдите к кадру 10 и включите кнопку Auto Key.
Выберите объект, управляющий правой пяткой, и поднимите ее вверх, как бы делая первый шаг.
Вы получили небольшую проблему - низ ступни не следует за костью.
Предупреждение: У вас может и не возникнуть этой проблемы. Данный шаг предназначен для иллюстрации того, как заставить некоторую часть сетки следовать за костью.
Выберите сетку и нажмите кнопку Edit Envelopes если она еще не включена.
Для решения возникшей задачи есть два пути. Можно настроить размеры огибающих, а можно изменить веса вершин. Обычно проще настроить огибающую, поэтому попробуем сначала этот метод.
Выделите огибающую с которой возникла проблема. В данном случае это конец ступни.
Увеличьте размеры огибающих. Когда они станут достаточно велики, вершины сами перепрыгнут на место.
Новые настройки можно скопировать, а затем применить к другой ноге. Уточнение весов вершин: Когда описанными методами огибающие настроить не удается, можно настроить веса вершин вручную. Этот метод, возможно, понадобится Вам при настройке огибающих ступни.
Выберите огибающую ступни.
Установите флажок Vertices в группе Select.
Выберите вершины, которые должны перемещаться с этой костью, но не перекрываются огибающей.
В группе Weight Properties введите значение 1.0 в задатчик Abs. Effect. В результате изменится значение весов выбранных вершин по отношению к выбранной кости.
Совет: Можно изменять значение в задатчике Abs. Effect, наблюдая за реакцией соответствующих вершин в видовом окне. Данный прием особенно эффективен при настройке весов вершин, на которые влияют разные кости.
Настройка весов вершин с использованием таблицы:
Таблица весов - удобное средство для быстрой настройки веса нескольких вершин. Например, посмотрите на область бедра. Нога чуть сужается вперед, и оболочка бедра не вполне ей соответствует. Исправление этого недостатка с помощью настройки огибающей трудно, если вообще возможно.
Вообще при персонажной анимации области плеч и бедер нуждаются в особо тщательной настройке. На вершины в области бедер действуют кости как низа спины, так и верха ноги, и настройка веса вершин для каждой кости трудоемка и требует много времени. Вы можете решить эту задачу с помощью таблицы весов.
Выберите вершины в области бедер.
В группе Weight Properties нажмите кнопку Weight Table. На экране появится таблица весов. Вершины сетки будут перечислены в левой колонке (по возрастанию номеров) кости указаны в верхней строке.
Слева внизу окна выберите в выпадающем списке значение Selected Vertices. В таблице будут выводиться только выделенные вершины.
Нажмите левую кнопку мыши на номере вершины в левой колонке. В видовом окне выбранная вершина выделится розовым кружком.
Чтобы поменять вес вершины прокрутите строку, пока не найдете название нужной Вам кости. Щелкните левой кнопкой мыши на ячейке, в которой указан вес вершины для этой кости, и введите нужное значение. Можно также, не отпуская кнопки мыши, перемещать курсор влево или вправо, чтобы уменьшить или увеличить вес вершины. Следите за тем, какое действие оказывает изменение веса на изображение сетки в видовом окне.
При изменении веса вершины для кости, веса для остальных костей меняются автоматически, так чтобы их общая сумма для вершины была равна единице.
Совет: Вы можете выходить из таблицы весов, оставляя ее открытой и выбирать новые вершины. Список вершин в таблице при этом обновляется автоматически.
Читайте также: