Наконец-то! Починил скелетную анимацию в своём движке
Удалось реализовать в Force Tech скелетную анимацию с корректным распределением весов вершин между костями! Теперь модели выглядят менее угловатыми, а изгибы тел - аккуратными.
Как писал ранее, пришлось прикрутить к движку библиотеку загрузки моделей Assimp, чтобы подсмотреть, как скелетная анимация реализуется в других проектах. Оказалось, что я изначально неправильно воспринимал сущность костей, как что-то самостоятельное, что может быть отрисовано отдельно, и вершины располагал в пространстве координат самих костей. Это было неправильно. Кости - это вспомогательная сущность, которая дополняет информацию об объекте и никак не влияет на хранение координат вершин. Отсюда - несколько иной подход к расчету их значений при анимации: координаты вершин всегда должны находиться в координатном пространстве объекта, отсчитываться от начала его системы координат.
Но надо сказать, что меня запутал формат хранения данных оригинальных игр Thief 1 / 2 и System Shock 2, чьи модели я рисую в своём движке. Именно там вершины хранятся в координатном пространстве костей, и я, по незнанию, взял за основу именно такой подход. Но, слава Богу, теперь разобрался и всё стало хорошо! :D
Не повторяйте чужих ошибок! Прежде чем что-то реализовывать, сверьтесь с авторитетными источниками информации. ;)
Что касается библиотеки Assimp - пока не решил, оставлять её в проекте или нет. Однозначно, нужно будет повозиться и попробовать сократить её в размерах, потому что в скомпилированном виде он превышает 180 Мегабайт! Для гита это крутовато...
P.S. Да, в прошлый раз, в комментариях, мне подсказали, что помимо моего, уже существует движок с названием Force Engine. Поэтому я решил идти до конца по пути вдохновения работами одной известной компании ;) и переименовать свой движок в Force Tech!
Подписывайтесь, чтобы не пропускать новости проекта!