Программный поворот торса в Mecanim - Форум Игроделов
Ср, 08 Май 2024, 10:53 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Программный поворот торса в Mecanim
Программный поворот торса в Mecanim
NapalmRainДата: Ср, 20 Апр 2016, 08:09 | Сообщение # 1
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Доброго всем времени суток!

Есть острая необходимость скрестить существующую анимацию с программной частью, а именно поворачивать торс тела в момент выстрела из лука в ту сторону, куда смотрит камера.
Сейчас у меня реализована следующая система:
Я отслеживаю направление камеры и в зависимости от него получаю точку в пространстве к которой тянусь левой рукой (в которой лук) с помощью IK
А правой рукой в момент оттягивания тетивы тянусь к самой тетиве.
Код
void OnAnimatorIK() {
        if (LeftHandTarget!=Vector3.zero) {
            tAnim.SetLookAtPosition(CC.TargetForFire);
            tAnim.SetLookAtWeight(1.0f);
            if (needIKLeftHand) {
                tAnim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0.2f);
                tAnim.SetIKPosition(AvatarIKGoal.LeftHand, LeftHandTarget);
            }
            if (needIKRightHand) {
                tAnim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
                tAnim.SetIKPosition(AvatarIKGoal.RightHand, RightHandTarget);
            }
        }
    }


Система, в принципе, работает, но при определённых углах поворота получаются такие неприятные вещи, что руку может загнуть, она проходит сквозь голову, а даже когда всё анатомически верно, персонаж держит лук так, как в жизни человек бы никогда не смог...


Посему я подумал, что позицию рук хорошо бы оставить в тех положениях, в которых они стоят в анимации, а крутить торсом, но как это реализовать, честно говоря, никаких мыслей не нашёл.
Заранее благодарю за любой совет!
 
СообщениеДоброго всем времени суток!

Есть острая необходимость скрестить существующую анимацию с программной частью, а именно поворачивать торс тела в момент выстрела из лука в ту сторону, куда смотрит камера.
Сейчас у меня реализована следующая система:
Я отслеживаю направление камеры и в зависимости от него получаю точку в пространстве к которой тянусь левой рукой (в которой лук) с помощью IK
А правой рукой в момент оттягивания тетивы тянусь к самой тетиве.
Код
void OnAnimatorIK() {
        if (LeftHandTarget!=Vector3.zero) {
            tAnim.SetLookAtPosition(CC.TargetForFire);
            tAnim.SetLookAtWeight(1.0f);
            if (needIKLeftHand) {
                tAnim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0.2f);
                tAnim.SetIKPosition(AvatarIKGoal.LeftHand, LeftHandTarget);
            }
            if (needIKRightHand) {
                tAnim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
                tAnim.SetIKPosition(AvatarIKGoal.RightHand, RightHandTarget);
            }
        }
    }


Система, в принципе, работает, но при определённых углах поворота получаются такие неприятные вещи, что руку может загнуть, она проходит сквозь голову, а даже когда всё анатомически верно, персонаж держит лук так, как в жизни человек бы никогда не смог...


Посему я подумал, что позицию рук хорошо бы оставить в тех положениях, в которых они стоят в анимации, а крутить торсом, но как это реализовать, честно говоря, никаких мыслей не нашёл.
Заранее благодарю за любой совет!

Автор - NapalmRain
Дата добавления - 20 Апр 2016 в 08:09
AswoДата: Ср, 20 Апр 2016, 08:21 | Сообщение # 2
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
NapalmRain, я в подобном случае просто находил тазовую кость (или чуть выше, не помню) и ее вращал в зависимости от направления камеры. Но это было только для горизонтального разворота.

end.
 
СообщениеNapalmRain, я в подобном случае просто находил тазовую кость (или чуть выше, не помню) и ее вращал в зависимости от направления камеры. Но это было только для горизонтального разворота.

Автор - Aswo
Дата добавления - 20 Апр 2016 в 08:21
NapalmRainДата: Ср, 20 Апр 2016, 08:35 | Сообщение # 3
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Aswo, Благодарю за мысль. Меня правда в этом случае терзают сомнения, а не будет ли конфликтов с анимациями? Дёрганья всякие, как пример
 
СообщениеAswo, Благодарю за мысль. Меня правда в этом случае терзают сомнения, а не будет ли конфликтов с анимациями? Дёрганья всякие, как пример

Автор - NapalmRain
Дата добавления - 20 Апр 2016 в 08:35
AswoДата: Ср, 20 Апр 2016, 09:56 | Сообщение # 4
КЗОИ
 
Сообщений: 1031
Награды: 18
Репутация: 430
Статус: Offline
NapalmRain, возможно, это зависит от самой анимации. У меня проблем с этим не было.

end.
 
СообщениеNapalmRain, возможно, это зависит от самой анимации. У меня проблем с этим не было.

Автор - Aswo
Дата добавления - 20 Апр 2016 в 09:56
NapalmRainДата: Ср, 20 Апр 2016, 10:28 | Сообщение # 5
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Ну чтож, за совет в любом случае спасибо. Буду пробовать.
Если у кого-то есть ещё мыли, буду благодарен!
 
СообщениеНу чтож, за совет в любом случае спасибо. Буду пробовать.
Если у кого-то есть ещё мыли, буду благодарен!

Автор - NapalmRain
Дата добавления - 20 Апр 2016 в 10:28
DjeeZДата: Ср, 20 Апр 2016, 12:26 | Сообщение # 6
 
Сообщений: 270
Награды: 8
Репутация: 291
Статус: Offline
Просто расскажу как у меня было. Ситуация похожая - гранатомёт пересекался с головой. Блендер позволяет поставить систему ограничителей. И без ручного труда заново сохранить новую анимацию. Но! Анимация стала неестественной, а гранатомёт смотрел не в ту сторону. Кончилось тем что пришлось к существующим добавить ещё две анимации, специально для поворота торса. 2 часа - и готово. Перед этим зря целый день потерял, пытаясь изобрести костыль, а надо было просто сделать анимации и не мучаться.
 
СообщениеПросто расскажу как у меня было. Ситуация похожая - гранатомёт пересекался с головой. Блендер позволяет поставить систему ограничителей. И без ручного труда заново сохранить новую анимацию. Но! Анимация стала неестественной, а гранатомёт смотрел не в ту сторону. Кончилось тем что пришлось к существующим добавить ещё две анимации, специально для поворота торса. 2 часа - и готово. Перед этим зря целый день потерял, пытаясь изобрести костыль, а надо было просто сделать анимации и не мучаться.

Автор - DjeeZ
Дата добавления - 20 Апр 2016 в 12:26
NapalmRainДата: Ср, 20 Апр 2016, 12:39 | Сообщение # 7
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
DjeeZ, да, я об этом тоже уже думал. Но ввиду недостатка знаний всё таки полагал, что есть именно механизм, позволяющий реализовать нечто подобное, а вариант с анимациями решил оставить на крайний случай.
Но сейчас он мне кажется уже более логичным. Благодарю за совет!
 
СообщениеDjeeZ, да, я об этом тоже уже думал. Но ввиду недостатка знаний всё таки полагал, что есть именно механизм, позволяющий реализовать нечто подобное, а вариант с анимациями решил оставить на крайний случай.
Но сейчас он мне кажется уже более логичным. Благодарю за совет!

Автор - NapalmRain
Дата добавления - 20 Апр 2016 в 12:39
DjeeZДата: Ср, 20 Апр 2016, 15:27 | Сообщение # 8
 
Сообщений: 270
Награды: 8
Репутация: 291
Статус: Offline
Механизм существует, в Блендере мощнейшая система анимации и результат есть, но выглядит ужасно. Мне трудно представить, что-бы в игровом движке можно было сделать лучше. Хотя все анимации разные, мне с моей не повезло, а у кого-то, возможно, прокатит.
Если мало опыта, то сделать анимацию под поворот торса может оказаться трудным. Позволю себе ещё один маленький совет, как будет проще. Программно отдельно сначала поворачивай голову, а потом доворачивай торс на тот же угол. Если существующие анимации разделить на отдельные 3 (для ног; торса и рук; головы если требуется), то сочетать анимации с программными поворотами будет намного проще.

Добавлено (20 Апр 2016, 15:27)
---------------------------------------------
Я тут еще подумал. Можно попробовать сделать наоборот. Поворачивать программно ноги, а не торс. Если развернуть по нужному направлению всё тело, а ноги одновременно крутить в обратную сторону, так, что-бы они оставались на месте, то анимация в верхней части будет работать правильно. Желательно, правда, всё-таки голову раньше повернуть, для естественности, но это на усмотрение. Возможно такой вариант устроит.

 
СообщениеМеханизм существует, в Блендере мощнейшая система анимации и результат есть, но выглядит ужасно. Мне трудно представить, что-бы в игровом движке можно было сделать лучше. Хотя все анимации разные, мне с моей не повезло, а у кого-то, возможно, прокатит.
Если мало опыта, то сделать анимацию под поворот торса может оказаться трудным. Позволю себе ещё один маленький совет, как будет проще. Программно отдельно сначала поворачивай голову, а потом доворачивай торс на тот же угол. Если существующие анимации разделить на отдельные 3 (для ног; торса и рук; головы если требуется), то сочетать анимации с программными поворотами будет намного проще.

Добавлено (20 Апр 2016, 15:27)
---------------------------------------------
Я тут еще подумал. Можно попробовать сделать наоборот. Поворачивать программно ноги, а не торс. Если развернуть по нужному направлению всё тело, а ноги одновременно крутить в обратную сторону, так, что-бы они оставались на месте, то анимация в верхней части будет работать правильно. Желательно, правда, всё-таки голову раньше повернуть, для естественности, но это на усмотрение. Возможно такой вариант устроит.


Автор - DjeeZ
Дата добавления - 20 Апр 2016 в 15:27
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Программный поворот торса в Mecanim
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024