Делаю демо с автомобилем и корректной физикой

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

Делаю демо с автомобилем и корректной физикой

Мой подход радикально отличается от обычных игр, где просто пускают рейкастом лучик вниз и в точку пересечения с землёй ставят колесо.

Физический движок самописный и он позволяет делать хоть 10000 шагов физики в секунду и считать каждый рычаг в подвеске авто. Из этого следует сразу много пунктов:

1. Поскольку детали подвески лёгкие, а силы на них большие, надо брать очень маленький шаг по времени, чтобы вычисления были устойчивыми. Условно, рычаг через сайлентблок крепится к кузову и допустимые смещения порядка миллиметра.

2. Надо разбираться и делать все эти рычаги как в реальности, а слова типа "схождение, развал, кастор, угол Аккермана, плечо обката" это всё нужные понятия. И если мощность двигателя условных жигулей найти легко, то с геометрией подвески проблематично. Лучшее что я нашёл - какие-то стрёмные чертежи.

3. Математика вся на double (не float), потому что нужна высокая точность для всего. Что ещё хуже - всякий код типа "if eps < 0.000001" приходится писать очень аккуратно, чтобы не потерять точность и при этом не поделить на ноль. У double около 15 значащих цифр и я стараюсь сохранить максимум из них. Например, некоторые функции по работе с кватернионами пришлось аккуратно дописывать и обходить краевые случаи.

4. Кроме деталей подвески вылезла ещё куча моментов - с коробкой передач, с дифференциалом и т.п. Часть их них я не знал. Например, на машине с задним мостом (жигулях) в дифференциал приходит крутящий момент от карданного вала вдоль кузова, а выходит к колёсам умноженный на 3.9 и повёрнутый на 90 градусов. По закону Ньютона нужен противодействующий момент силы и он выражается в том, что корпус дифференциала сам по себе пытается скрутиться. Из за этого на разгоняющемся автомобиле нагрузка на правом и левом задних колёсах будет немножко разной. Очень прикольно, что движок меня буквально заставил об этом задуматься, я полез читать как оно в реальности - а оно так и есть!

5. Я надеюсь, с моим подходом автоматически получится куча интересных эффектов просто потому, что симуляция близка к реальной. Например, если в полёте после трамплина водитель нажмёт на тормоз, колёса перестанут крутиться, но по закону сохранения момента импульса немножко начнёт вращаться сам кузов авто. Или, например, в мотогонках есть разница между двигателем v4 и рядной четвёркой - у v4 вспышки в цилиндрах происходят неравномерно и если колесо при ускорении теряет зацеп - оно может успеть его поймать обратно, пока нет тяги. Я не уверен, что это всё получится просимулировать, но я хочу попробовать. Если двигатель мотоцикла крутится 18 тысяч оборотов в минуту (оценка сверху), то это 300 оборотов в секунду и около 600 вспышек топливной смеси в цилиндрах в секунду. Теоретически, с десятью тысячами шагов в секунду даже неравномерную тягу двигателя можно сделать. Но это всё близко к пределу возможностей.

6. В будущем хочу подключить руль с форс фидбеком и попробовать на него передавать усилия с "симулируемой" рулевой рейки.

Сейчас демо в состоянии "есть прототипы шин-подвески-дифференциала-двигателя" и удобная обвязка для отладки - возможность перематывать время назад, запускать симуляцию с замедленным временем или вообще двигаться по шагам. В угол я вывел чекбоксы, которые включают-выключают показ всякой отладочной информации - это помогает. Про игру я сейчас не думаю - это будет ещё куча аспектов, на которые не хочется тратить время.

Делаю демо с автомобилем и корректной физикой

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

Наибольшие опасения у меня вызывает модель шин. Если я пойду по пути BeamNG и попытаюсь считать шины как много-много элементиков - я рискую потерять производительность и остаться без 10к шагов физики в секунду. Идти по пути аркадных гоночек, ставящих колесо на асфальт - тоже не хочется. Вдобавок я почитал серьёзные книжки по настройке подвески и работе шин - а там всё сложно. Под нагрузкой шины деформируются и их поведение описывается в лучшем случае графиком. Например, колесо с развалом лучше держится за асфальт при повороте в одну сторону и хуже при повороте в другую. Но при повороте вес уходит на внешнее колесо и если оно с подходящим развалом - машина сможет ехать быстрее машины с вертикальными колёсами. И ещё если ехать с предельной нагрузкой - в передней части пятнка контакта резина будет ещё держаться за асфальт, а в задней скользить. И это можно почувствовать на руле (например, в ассето корсе или в реальности). Было бы идеально такое поведение не костылить и получить из симуляции шин.

В идеале я бы хотел, чтобы модель хорошо работала ещё и в случаях, когда покрытие неровное - чтобы, допустим, было можно зацепиться за колею, как это иногда делают в ралли.

Насколько я понимаю, одна из самых подробных моделей шин в Richard Burns Rally - можно заблокировать колёса на торможении и игра покажет, какой кусочек шины стёртся - и графически, и по влиянию на управляемость.

P.S. Не знаю что получится, двигаюсь сильно медленее чем планировал, но пока что не нашёл причин, по которым это было бы нереально сделать.

1
12
1
12 комментариев

Достойно ты забурился. Только уважуха.
Но кому всё это надо? Под какую аудиторию ты эту демку пилишь и как именно эту аудиторию ты будешь развлекать подобными ньюансами?

1

Тех, кто играет в автосимуляторы на руле :)

Наверно надо в первую очередь мне самому, интересно во всём разобраться и сделать. Если получится хорошо - попробую потом довести до игры, если не получится - ну ок, демку физики на порядки проще сделать, чем полноценную игру.

2

Ниче. Через недельку доделаешь и заключишь контракты с Порше, Феррари и прочими чтобы продвигать через них игру

1

Когда переход на расчеты виделкартой?

1

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

Может еще скоопишься с этим чуваком для озвучивания твоей демки.
https://www.youtube.com/@AngeTheGreat

эпичное дело, держись там!