Я пишу свою собственную обратную кинематику и работаю над совместными ограничениями в настоящее время. Это в основном отлично, но я хочу удалить все разрывы из полученной анимации, а ограничения - самая большая проблема.Угол зажима с непрерывным результатом
Например, скажем, вы смотрите на шар, вращающийся вокруг вашей головы. Он вращается вправо, и вы смотрите направо, вплоть до предела скручивания шеи. Мяч все еще движется, и когда он проходит вашу спину, тогда ваша голова внезапно будет обрезана против противоположного предела, глядя влево. Это то, что мы получаем с типичным зажимным устройством, и это дает мне разрыв между кадрами.
Мне нужно, чтобы ваша голова попала справа налево в течение нескольких кадров. Моя первая идея состоит в том, чтобы отразить направление источника с моей осью X (между плечами), и если отраженное направление соответствует ограничениям ограничения - верните его. Если он не соответствует ограничениям - скопируйте отраженное направление вместо исходного.
Это должно дать мне приятное и непрерывное движение, и это не наука о ракете, но есть много деталей, о которых нужно позаботиться. Мои лимиты могут быть как min < max
, но также max < min
, они могут проходить через значение угла переключения (например, 360->0
, или 180->-180
) или нет. Кроме того, когда мой разрешенный диапазон больше 180 градусов, логика должна быть немного иной.
Количество разных случаев нарастает очень быстро, поэтому мне интересно, смогу ли я найти его уже где-то?
BTW: Я использую двигатель Unreal, если он делает любое различие.
EDIT:
Я извиняюсь, если я ошибочный вас с моей головой, например - это просто аналогия визуализировать мои потребности. Я не буду использовать этот код для ориентации головной кости (или любой другой) в финальной анимации. Я планирую использовать его в качестве очень простой операции в решении IK. Он будет использоваться на каждой итерации в каждой цепочке IK, для каждой кости, много раз. Поэтому нужно быть как можно быстрее. Все концепции более высокого уровня, такие как планирование движения, динамика и т. Д., Будут добавляться на другой уровень, если это необходимо.
На данный момент я просто просят функции, как:
float clampAngle(float angle, float min, float max)
что бы вернуть непрерывное значение для изменения входов.
В настоящее время я работаю над различными проблемами, но я отправлю свой код, когда вернусь к этому.
Обрезка сама по себе недостаточна, вам нужно запланировать поворот с + клипа на -clip в течение нескольких кадров – Alnitak
@Alnitak Я не хочу добавлять какое-либо планирование, потому что я не знаю будущего , Мне нужно, чтобы это было как можно проще, но с непрерывным выходом. Я думаю, что мое описание сделает это, мне просто нужно закодировать его :). – kolenda
Я бы решил ограничить поворот головы до некоторого максимального изменения угла для каждого обновления. Когда мяч проходит по средней точке за головой, вместо того, чтобы мгновенно привязать взгляд от правильного ограничения к левому ограничению в одном большом прыжке, двигайтесь в этом направлении, но не больше, чем ваш выбранный максимальный угол.Это будет более естественно, а также отразить реалистичные динамические ограничения. То, что вы описываете, звучит странно, глядя на изображение, которое на самом деле не существует. –