Render.ru

проблема с ik в CS4.0

#1
Излагаю ссуть проблемы. имеем biped-скелет в CS 4.0, 3dsMAX 5.1. рядом с ним есть две коробки, до обеих он может дотянуться рукой. Нужно, чтобы он сначала поднёс руку к одной коробке, сдвинул её на другое место, а потом поднёс руку к другой коробке и тоже сдвинул её на другое место. Я делаю так - анимирую движение руки к первой коробке, в конце ставлю sliding key с привязкой к объекту box1, галочку join to prev ik key, ik blending = 1. после этого анимирую box1 - двигаю его куда-нибудь пока руки хватает. на руке снова ставлю такой же sliding key только без галочки на join to prev ik key. потом убираю руку от box1 - ставлю free key. Потом тянусь и хватаю вторую коробку box2 и ставлю на руке sliding key с привязкой уже к ней. И тут эта патла заявляет что все прежние ik-связи будут похерены. И правда - возвращаюсь к моменту где хватаю box1 и вижу что она уже к нему не крепится. Короче получается так, что рука может быть либо в положении free либо быть привязан к объекту притом только одному. Менять объекты привязки что, заприщено??? Но мне же это нужно блин!!! Может я делаю что-то не так, а? или не знаю чего? А может это "фича" 4.0 версии? я знаю есть версия cs 4.1. может там всё иначе? Напомашчьщь!!!! мне нужны переменные ik-связи!!!!
 
#2
Расслабся все ты делал правильно (по логике вещей). Дело все в том что в параметре орентации Biped'a есть только два типа относительности.... это Object или Body. Так вот, и то и друго может быть только одним выбранным объектом. т.е. Biped не умеет работать со списком объектов орентации.

Выход из положения напрашивается сам.
Для решения этой пролблемы я решил дать ему Dummy.
Этот Dummy будет единственном объектом орентации в режиме Object.
В связи с тем что относительность движения нужна не в одном, а в двух и более мест, то что? А то что этот Dummy просто нужно туда передвинуть.

Совет: Старайтесь не привязываться к объектам на которых есть ключи анимации. Не благодарное это дело и часто заводит в тупик.

Решение:
Делаем два BOX'a которые нужно толкать. Значит на них будут ключи анимации. Значит к ним нужно привязать по Dummy который будут двигаться с ними но ключей на них не будет. (это не правело - это совет)
Создаем еще один Dummy. Назавем его DummyOrentation. К нему мы все время будем вязать руки с посмощью SlidingKey.

Не будем забывать о моем совете и постараемся на него тоже не ставить ключей анимации. Повесим на него только контроллер <<<Link Constraint>>> (об этом еще не думал но может будет даже лучше с делать так: к этому DummyOrentation привязать еще один Dummy, а уже к нему вязать руку с помощью Sliding Key, это можно попробовать если появятся странности, там такое бывает, но пока опустим этот промежуточный Dummy)

Подходим к Box01, DummyOrentation должен находиться радом с этим боксом желаетельно в точке касания руки. В LinkConstrain ставим связь с текущего кадра с Dummy01 (который привязан к первому боксу) С этого кадра DummyOrentation будет двигаться с первым боксом. На руку в этом же начальном кадре или в следующем ставим SlidingKey относительно DummyOrentation. После этого получится что рука будет двигаться относительно анимации бокса. А точнее группы связей:
Box01--->Dommy01--->/--->DummyOrentation<---HandBiped.

После того как дотолкали Бокс переводим руку во FreeKey и идем персонажем к Box02. В этот момент нужно переместить DummyOrentation к точке касания Box02. !!!Рука обязательно FreeKey!!!

Можно конечно включить режим анимации и перетащить DummyOrentation к Box02. Но мы стараемся не ставить на него ключей анимации. Значит нужно чем-то воспользоваться. Мы воспользуемся еще одним Dummy который назовем DummyMove. Делем на него анимацию как он перемещается от Box01 к Box02 пока Biped идет. (или мгновенно).
В тот момент когда DummyMove перемещается, в свойствах контроллера DummyOrentation нужно добавить привязку с текущего кадра к DummyMove. И тогда DummyOrentation перместиться вместе с DummyMove к Box02. После перемещения, DummyOrentation перевязываем к Dummy02 (который привязан к Box02).
Ну а теперь Biped подходит к Box02. Переключаем руки в SlidingKey и они двигаются относительно Box02. А точнее группы связей:
Box02--->Dummy02--->/--->DummyOrentation<---HandBiped

Ч.Т.Д. (как говорилось в геометрии) :)

P/S: Запарно конечно, но др. пути решения использовать не предвидится.
Можно конечно сделать еще следующее. Привязать ркуи к Box01 и в интервале толкания поставить в каждом кадре ключ. А потом в этих ключах сменить Object на Body (или просто прокликать в каждом кадре кнопкой FreeKey). Просто править такую анимацию можно будет только с помощью Layer'a. Т.к. согласись что править в случае чего 100 с лишним ключей это просто "вешалка".
Надеюсь когданибудь создатели CS соизволят добавить список объектов в параметр Object. Это решит кучу проблем. Пока что приходиться выживать такими методами. Либо создавать отдельные сцены что дешевле всего. Главное их состыковать.
Это долеко не все грехи Biped'a. Например Biped использует совсем не максовский контроллер. (как мне казалось когда-то) Обратите внимание что руки (плечи) у бипеда привязанны (см. иерархию) не к SpineX (спине), а к Neck (шее). А ноги привязанны не к Pelvis (тазу) а к Spine1 (спине). А вот двигаются они почему-то не относительно того к чему привязанны. Ноги двигаются вопреки превязке относительно Pelvis'a. Вот и думай теперь чего еще от него ожидать. :) Мне например не раз приходилось это первязывать. И самое интересное, что на анимацию это нисколько не повлияло. Хе хе хе... А попробуйка так с Bones. Те такого вранья не позволят. Хотя и там тоже темный лес можно отыскать. Век живи - век учись. :)

Удачи!
 
Сверху