Russian Qt Forum

Программирование => Общий => Тема начата: Igors от Октябрь 26, 2019, 09:26



Название: Выдрать код из игрового движка
Отправлено: Igors от Октябрь 26, 2019, 09:26
Добрый день

Нередко вместо (желаемого) "конкретного ответа" получаешь советы, мол, этого не стоит делать и.т.п. :) Но вот фишка выпала так что советы такого плана могут оказаться интересны.

Есть очень нужный open-source код, хотя и староватый. Но, увы, он на богомерзком C# и, хуже того, вмонтирован в популярный игровой движок. Вот головной файл (https://github.com/GenaSG/unity/blob/master/Assets/Locomotion%20System/LegAnimator.cs). Выглядит пугающе, но это самый большой, остальное по объему примерно столько же (все cs в данном фолдере).

Ну и насколько реально перевести это на плюсы и интегрировать в др приложение? Задавать наводящие, умничать и.т.п. - здесь можно  :)

Спасибо


Название: Re: Выдрать код из игрового движка
Отправлено: Igors от Октябрь 28, 2019, 14:14
Ну я так и знал :'(  Как не в масть - от "экспертов" не отбиться, как в тему - тишина.

демка ф-ционала (https://www.youtube.com/watch?v=29ZEvxwq_F8)
теория (http://runevision.com/thesis/rune_skovbo_johansen_thesis.pdf)


Название: Re: Выдрать код из игрового движка
Отправлено: ViTech от Октябрь 28, 2019, 14:30
Ну и насколько реально перевести это на плюсы и интегрировать в др приложение?

Всё реально. Полный вперёд! :)


Название: Re: Выдрать код из игрового движка
Отправлено: Igors от Ноябрь 25, 2019, 12:26
В общем, взялся. Долго пытался найти что-то поприятнее, но увы, максимум огрызки на пытоне.

Ну ладно. Собсно портирование оказалось не таким уж жутким. Да, были проблемы с имитацией математики/ф-ционала движка, но порешал. Запустил портированный код, автор (добрая душа) натыкал assert'ов, это позволило быстро найти неск мест где насвистел.

Но все это оказалось (милыми) "цветочками". Портированный алгоритм не работает. Char не "ходит", он делает только пол-шага, затем скользит и садится на задницу (аттач). Как в том анекдоте
Цитировать
Да никто не кодит, это я куякнулся
Вот уже недели 2 пытаюсь разобраться в алоритме, но пока без успеха.

Эх, "готовые проверенные", ну где же вы?  :'(


Название: Re: Выдрать код из игрового движка
Отправлено: Old от Ноябрь 25, 2019, 12:37
Портированный алгоритм не работает.
Однозначно виноват автор оригинального алгоритма. :)

Эх, "готовые проверенные", ну где же вы?  :'(
Как показывает эта тема, вам и "готовые проверенные" не даются. :)


Название: Re: Выдрать код из игрового движка
Отправлено: Igors от Декабрь 02, 2019, 08:12
Так, есть анодное! Кодит, ну пока по прямой с постоянной скоростью. Правда легче от этого не стало, скорее наоборот, кодит он неверно :) Выяснил что положение foot (ступней) вычисляются верно, а вот смещение hips (бедер) нет. Как бы "волосатая рука" давит на char сверху и чем больше он прошел - тем больше сгибает ноги в коленях. Кривая показывает вычисленное смещение, оно должно колебаться около нуля, но почему-то дрыфтует вниз. Нашел это место в коде и в теории, много раз (пере) проверил, но ничего не нашел - вроде все "как доктор прописал", однако ж работает неверно.

Мда, чижело...


Название: Re: Выдрать код из игрового движка
Отправлено: Igors от Декабрь 09, 2019, 10:53
Наконец-то получил первую корректную анимацию :) Ошибка, кстати, была вовсе не техническая (как я надеялся), просто недопонял алгоритм. Теперь надо делать миксы и повороты, там пока одни заглушки. Наверно опять получу ...


Название: Re: Выдрать код из игрового движка
Отправлено: Fregloin от Декабрь 11, 2019, 12:53
Чем же вам C# не угодил? В чем смысл портирования на С++? Судя по коду это Unity, вы и движок Unity будете портировать?


Название: Re: Выдрать код из игрового движка
Отправлено: Igors от Декабрь 11, 2019, 14:26
Чем же вам C# не угодил? В чем смысл портирования на С++?
Просто потому что мое приложение на плюсах.

Судя по коду это Unity, вы и движок Unity будете портировать?
Уже :) Конечно только те части что нужны задаче.

Но все равно хорошо что хоть один проявил здоровый интерес и не постеснялся спросить. Ссылка на демку есть выше. Задачу можно сформулировать примерно так:

Дано: исходный skeleton (по существу иерархия/дерево точек) + вектор скорости кадр за кадром который двигает корень дерева. Также даны "образцы" движений (напр walk, run, strafe), каждый примерно 1-1.5 секунда анимации (шаг левой и шаг правой) записанный в fbx файле.

Требуется: заставить skeleton "ходить" (бегать, поворачивать и.т.п) кадр за кадром сообразно входному вектору скорости. Разумеется просто так подставить заданные анимации не проходит.