Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / 3D Инверсная кинематика в два клика

3D Инверсная кинематика в два клика

Поделиться
luckyleo769Постоялецwww19 апр. 201720:53#0
Доброго времени суток, друзья!

Подскажите, кто знает, есть ли какая-нибудь библиотека для C# решающая обратную задачу кинематики. Вот прям такая, что подключил, узлы выставил и пошел курить. Ну или типа того.
Разбирался с Fabrik, но затупил на ограничениях поворотов, а они край как нужны. Читал здешнюю статью - разновидность фабрика. Алгоритм простой, хороший, но пилить и пилить его.
Мне нужна демка шагающего бипеда на шарпе кровь из носа, а времени разбираться вообще нет.

Короче, сорри за такой флейм. Может у кого какие соображения по этому поводу, или кто-то допилил озвученные выше алгоритмы. Спасибо!

P.S. Если нужно, то могу залить сюда свою реализацию из здешней статьи, работает откровенно хреново, но может вместе по быстрому допилим, будет народным достоянием.

Правка: 19 апр. 2017 20:57

MiraПостоялецwww19 апр. 201721:04#1
luckyleo769
на ассет сторе не смотрел чтоли. там есть простые бесплатные и копеешные.
топовый (на мой взгляд)  FinalIK и тот есть в варезе, если нужен как референс можно его поизучать.

Правка: 19 апр. 2017 21:05

Polyflow3dПостоялецwww19 апр. 201721:15#2
для двух костей делается вообще легко, строчек в 20
luckyleo769Постоялецwww19 апр. 201722:39#3
Polyflow3d
> для двух костей делается вообще легко, строчек в 20

да вот же не для двух костей. узлов много, одна нога, например: в районе бедра повороты по 3-м осям, и у каждой разные ограничения, в колене одна ось, и в стопе по трем осям и тоже с ограничениями.


Mira
> топовый (на мой взгляд)  FinalIK и тот есть в варезе
спасибо, погляжу

Polyflow3dПостоялецwww19 апр. 201723:40#4
luckyleo769
ты собираешся анимировать всю ногу меняя положение одной точки?
luckyleo769Постоялецwww19 апр. 201723:52#5
Polyflow3d
> ты собираешся анимировать всю ногу меняя положение одной точки?

Я вообще хочу сделать демку ходьбы.

В моей реализации алгоритма проблемы возникают, когда target-точка оказывается ближе к родительскому узлу, чем конечная точка дочернего. В таком случае, узлы начинают дергаться: каждую первую итерацию в одну сторону, каждую вторую в другую, ну и оказывается бесконечный цикл.

Polyflow3dПостоялецwww20 апр. 201710:02#6
luckyleo769
у тебя эффектор - это что? Сустав стопы? Или основание большого пальца?
У тебя узлы будут дергаься при любом алгоритме, потому что невозможно определить ориентацию колена зная всего две точки.
Точнее , можно, но ты не сможешь это сделать.
HotDogПостоялецwww20 апр. 201711:28#7
Глянь тут, может есть что то интересное для тебя
https://github.com/cheatdeath/research-skeletal-animation
http://www.seanjoflynn.com/research/skeletal-animation.html
luckyleo769Постоялецwww23 апр. 201712:43#8
Проблема решилась. Нашел код, который решает задачу по алгоритму CCD и Якобианами.
Короче, перевел его на шарп, хочу оформить в ддл-ку NET-овскую. Так, что если кому-то нужно будет, потом выложу.


Polyflow3d
> У тебя узлы будут дергаься при любом алгоритме, потому что невозможно
> определить ориентацию колена зная всего две точки.
> Точнее , можно, но ты не сможешь это сделать.

Это понятно, просто моя прога в принципе неправильно считала. Я вообще не понимал как работает ИК, благо с разбором кода понял.

HotDog
> Глянь тут, может есть что то интересное для тебя
> https://github.com/cheatdeath/research-skeletal-animation
> http://www.seanjoflynn.com/research/skeletal-animation.html

Спасибо большое, погляжу.

P.S.
В коде есть ошибки. В частности в алгоритме CCD вычисленный угол получается в 1000, а то и в 10^5 раз больше подходящего. Я вообще себе поставил динамический множитель для повышения точности, который по мере итераций уменьшается. На якобианах не пробовал, ибо мороки больше. В целом CCD хватает выше крыши. Конечно, результаты шумные. Решил медианным и гауссовским фильтрами.

DODgeПостоялецwww23 апр. 201714:55#9
Не знаю, актуальный ли еще вопрос для ТС, но для .NET я использую комплект библиотек BEPUphysics. По сути там 3 библиотеки: одна про физику, другая про инверсную кинематику, а третья про математику для первых двух. Доступны как на GitHub, так и через NuGet. Честно говоря библиотеку с ИК лично я не пробовал, но та что с физикой для меня на первом месте среди тех что доступны на платформе .NET!
Sh.Tac.Постоялецwww23 апр. 201717:28#10
а unity locomotion чем не проканала? : )
хотя релевантные ссылки не самые свежие по ней

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр