пятница, мая 26, 2006

Несколько ссылок по физике автомобиля

Уже довольно продолжительное время я ищу информацию по программированию реакции на коллизии для Winding Trail'а. Мне нужно что-нибудь совсем простенькое, чтобы машина не останавливалась как вкопанная, задевая стену вскользь, а продолжала движение с соответствующей коррекцией. Ну и, возможно, можно построить какие-нибудь еще несложные реакции. Так вот, по поводу реакций на столкновения ничего хорошего я не нашла, зато стала обладательницей неплохой коллекции ссылок на статьи и ресурсы по физики автомобиля.

Racer Free Car Simulation - кроссплатформенный проект автосимулятора, свободно распространяемый для некоммерческого использования. Не очень аккуратный, автор не уверен, работает ли последний билд на платформах, отличных от Windows. Исходники открыты не все, только для какой-то не последней версии и только под Linux. Я подумываю в эти исходники зарыться и посмотреть как там решен вопрос со столкновениями, если не найду никаких других ресурсов по этому поводу.

Физика автомобиля для игр. Перевод на русский довольно известной статьи по программированию физики автомобиля. Что интересно, оригинал статьи мне так и не удалось найти. А вот русский перевод живет и здравствует.

Серия статей Physics of Racing Series. Их автор Брайан Бэкмэн (Brian Beckman) физик и гонщик-любитель.

The Buggy Demo - демка с простенькой машинкой, построенная с помощью библиотеки физики ODE.

Rigid Body Dynamics - небольшая коллекция ссылок по динамике твердого тела.

По поводу реакции на столкновения вопрос остается открытым. Я таки придумала решение самостоятельно, но что-то мне не очень нравится как оно работает... Так что если вы знаете какие-нибудь ресурсы, поделитесь.

14 коммент.:

Анонимный комментирует...

По поводу динамики твёрдого тела вообще есть хороший курс D. Baraff-а.

По поводу collision response есть великолепная работа B. Mirtich-а. Его модель даёт очень реалистичный результат, с правдоподобным трением при ударе, и реализовать её не очень сложно.

Для трения скольжения (т.е. когда удара как такового уже нет), проще всего применить модель Коломба. Если хочется совсем реалистичного скольжения, то у упомянутого Baraff-а есть довольно трудная в имплементации модель.

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

Анонимный комментирует...

Очень brief туториал, мало ли, может, пригодится...

Collision detection and response

Анонимный комментирует...

Мне больше всего нравится ODE.
Он открытй, довольно быстрый и точный.

Анонимный комментирует...

на gamedev.net тоже был курс статей...

Alena комментирует...

Мне больше всего нравится ODE.

Все же ODE и тому подобное - это уже тяжелая артиллерия. Я ищу что-нибудь совсем простое, причем правдоподобность мне не важна.

Анонимный комментирует...

Достаточно примеров для книжки издательства o'reilly "physics for game developers"
http://oreilly.com.cn/codeexample/physicsforgame/

Статья с gamedev.ru это перевод статьи голландца Marco Monstrus о его проекте "Downtown Drivin'"
(раньше она была здесь
http://home.planet.nl/~monstrous/drivin.html
http://home.planet.nl/~monstrous/tutcar.html), щас вроде убрали.

Для реакции на столкновения (корректное определение вектора и модуля угловой скорости) важна - сумма моментов, тензор инерции (для box'а там элементарно) - и получится корректная угловая скорость и угловое ускорение.

// tensor

Анонимный комментирует...

О, смотрю вот (2Д физика)
http://gamedev.ru/articles/?id=70124
Просто и грамотно написано. Без лишних усложнений, как раз хорошо объяснил, что и как важно при коллизиях учитывать.

А так читай o'reilly. Там как раз четко и без (ненужных для маленькой игры) излишеств.

Да и вроде под Win32 Tokamak бесплатный.

//tensor

Анонимный комментирует...

А какую степень реалистичности вы хотите получить ?
А то ведь можно совсем простую модель построить.
Авто - некоторое тело которое имеет вектор мгновенной скорости в момент соударения, и центр масс.
Строим линию точка соударения-центр масс. Раскладываем вектор скорости на компоненты вдоль линии и поперек. Компоненту вдоль линии в момент удара:
а) обнуляем - неупругое соударение.
б) инвертируем - упругое соударение
в) инвертируем и делим на 5 (некоторе упруго-неупругое соударение).

Это совсем простая модель. можно добавить учет вращения авто в горизонтальной плоскости.

Тогда угловая скорость вокруг вертикальной оси будет испытывать мгновенное приращение в зависимости от силы удара (зависит от отн. скорости и массы) и расстояния от точки соударения до центра масс (плечо рычага).
И придется добавить в модель учет угловой скорости (она должна линейно уменьшаться если колеса стоят прямо).

Alena комментирует...

А какую степень реалистичности вы хотите получить ?

Мне главное, чтобы выглядело прилично...

А то ведь можно совсем простую модель построить.
Авто - некоторое тело которое имеет вектор мгновенной скорости в момент соударения, и центр масс.


Угу, что-то вроде этого я и пытаюсь построить...

Всем спасибо за ссылки, сейчас я шаманю с тем, что посоветовали UFOnaut, tensor и timochka, думаю мне этого хватит.

Анонимный комментирует...

"Авто - некоторое тело которое имеет вектор мгновенной скорости в момент соударения, и центр масс."

При таких рассуждениях получается, что шар, кубик и box (с разными h, w, l) одинаковой массы будут одинаково "закручиваться" (сопротивляться вращению) при соударениях. Что не так. И что глаз сразу увидит.

Заголовок поста немного misleading. Такие вещи как "физика автомобилей, трения, проскальзывания" здесь непричем, речь идет об обычной реакции на столкновения с учетом геометрии объектов.

А по поводу демки голландца Downtown Drivin' - там именно физика автомобиля (колеса, оси, двигатель и т.д.) Собственно collision response там нет, сделано "фейком" (что-то типа "столкнулись левым бортом, делаем крен вправо и т.д."), и в ряде случаев я легко получаю сильные глюки - при завороте проходит сквозь стену, или закруживаться начинает (как будто никакой массы нет). Хотя собственно движение машины (вне коллизий) там правдоподобно, да.

//tensor

Анонимный комментирует...

Может кто с шестым ОДЕ уже сталкивался, какие там проблемы исправлены или наоборот? А вообще, как в нем грамотно и просто сделать автомобиль (переднеприводной).

Анонимный комментирует...

А ты нигде не встречала статей про моделирование движения slot car'ов? Наверняка что-то должно быть, но я уже несколько раз практически безуспешно искал

Alena комментирует...

А ты нигде не встречала статей про моделирование движения slot car'ов?

Нет, увы.

Анонимный комментирует...

Здесь про столкновение объектов
http://pmg.org.ru/nehe/nehe30.htm

тут после статьи есть ссылки на исходники одной программки автосимулятора простенкого
http://mirgames.ru/articles/base/autophis.html