Как стать автором
Обновить

Комментарии 14

Тогда уж добавьте список литературы:
«An Introduction to Physically Based Modeling», David Baraff
«Geometric tools for computer graphics», David H. Eberly
Catmull–Rom spline
www.gamasutra.com/view/feature/131313/advanced_character_physics.php
Опять эти ваши матаны без ничего вообще.

Написали бы лучше какой-нибудь steering behavior. А то опять будут на собеседовании говорить «я слышал и читал», а сами сходу даже аишников для гоночек будут в интернете искать. Если как тестовое задание давать.
Это охренительно круто! Сходу понятно не всё, но интерполяция это интересно.
Вопрос не совсем по теме, но давно интересовал. А следует ли из гладкости однозначность представления каждого поворота? В общем случае точно нет, а что здесь? В углах 360 == 0, что иногда неудобно. Имеется в виду, например, такая задача: есть анимация вращения колеса, промежуточные кадры интерполируются по клбчевым, но при переходе через 360 мы интерполируем углы 359 и 0, получая резкий скачок на одном кадре. Понятно, что это легко решается на программном уровне, приводя всё в один отрезок, по сути оперируя углом по модулю 360, но всё же решается ли эта проблема более элегантно?
Идея примерно следующая: мы можем однозначно определить положение колеса в любой момент времени если мы знаем скорость вращения колеса (а это — элемент соответствующей матричной алгебры Ли). Просто берем соответствующую матрицу A и тогда положение колеса в момент времени t будет однозначно определено как t0 Exp(At) без каких-либо проблем и неоднозначностей с параметризацией. Но из пары ключевых кадров скорость вращения A, вообще говоря, однозначно не определяется, т.к. неясно, сколько оборотов колесо делает между этими кадрами. На практике впрочем наверное в данной задаче вполне можно брать наименьшую возможную скорость вращения.
Если я не ошибаюсь, то на самом деле скорость вращения зависит от выбора ветки комплексного логарифма при вычислении логарифма матрицы.
Все верно, неоднозначность соответствует вопросу выбора ветки матричного логарифма. Но в «физическом» смысле применительно к колесу с парой кейфреймов это то же самое что вопрос выбора числа оборотов колеса произошедших между кейфреймами
Не использую, но когда-то писал курсовую по теории представлений групп Ли. Неожиданное приложение к графике этих, казалось бы, сугубо умозрительных вещей, приятно радует.

Ну, алгебры Ли, например, активно используются в SLAM алгоритмах, которые в свою очередь исопльзуются для навигации роботов, 3D сканирования, построения панорамных снимков и тд и тп

У меня знакомый диссер по винтовому исчислению написал, счастливый ходил когда начал понимать, что винтами можно множество вещей описать. Вообще статья неплохая, но главный компонент всех вычислений в области графики — оптимизация вычислений. Вот это и надо описывать. Десятый или тридцатый метод определения движений не имеет значения (к тому же многие из них это просто представление одного и того же мат. объекта, разным мат. аппаратом). Имеет значение вычислительная сложность и только.
С производительностью у матричных экспонент и логарифмов все плохо, почему, собственно, они и не получили широкого распространения по крайней мере на заре становления индустрии. Но это далеко не всегда важно. Есть очень много ситуаций когда интерполяции положений простительно быть условно-медленной операцией.
Матричные экспоненты и логарифмы имеют массу приложений и в других областях. Например, рассмотрим переходную матрицу изменения кредитного рейтинга (который A, AA, AAA, B, ...) компаний за год. Тогда, взял её логарифм, умножив на t — время в годах (может быть каким угодно большим 0, например, t=0.5 — полгода), и, после этого, посчитав экспоненту, можно получить аппроксимацию переходной матрицы за время t. Естественно, возникают дополнительные проблемы (например, в итоговой матрице не могут быть отрицательные числа, и с этим дополнительно борются. Обычно невозможно взять логарифм точно чтоб при всех t>0 матричная экспонента не имела нулей).

Ну и другая проблема — в общем случае далеко не у всех матриц существует матричный логарифм. По-моему, матричный логарифм существует тогда и только тогда, когда все жордановы клетки имеют размер 1. А поиск годной аппроксимации ещё тот геморрой.
Логарифм от матрицы в виде ряда определен и в случае нетривиальных Жордановых клеток. Например, для Жорданового блока любого размера с собственным значением 1.
В общем случае, ряд для логарифма от матрицы сходится, если спектральный радиус A-I меньше 1.

Интересно написано. Слишком много математики на мой вкус, плюс вначале некорректная постановка цели:


Сколько существует разных способов представить обыкновенный поворот в трехмерном пространстве?

Какая разница? С интерполяцией вращения и кватернионы отлично справляются. Описываемый вами подход нужен для грамотного совмещения движения и вращения — вот тут-то и надо было альтернативы приводить.


Насколько я понимаю, бикватернионы решают ту же задачу, но более эффективно, а также успешно применяются в реальных проектах. Сам применял, результатом остался доволен ;)

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

Вообще говоря любое обычное равномерное движение в 3D задается кинематическим винтом и в принципе с винтами и следует работать если в кинематике хочется обойтись без экспонент. Инженеры, собственно, так и делают
Как раз недавно проблему наблюдал с кватернионами. Одна и та же модель с сайта mixamo — анимация в формате fbx с кватернионами, в двух местах один кадр скачет практически на 180 градусов. Арматура той же модели в формате bhv — углы Эйлера и никаких скачков.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий