В физическом движке есть проблема: при подъеме около 30 градусов и более возникает ошибка в расчете нормали поверхности.
В оригинальном физическом движке существует особенность, превращающая крутой переход дорожной поверхности в вертикальную collision-плоскость. Непосредственно на подъеме для возникновения проблемы также нужна небольшая Vy. Значения -0.3 м/с уже достаточно, поэтому расчеты проводились с этой величиной.
Также существует ложная стеновая реакция при проверке границ трассы.
Границы возникновения проблемы видны на графиках:

На 3D-графике показан процент потери скорости в зависимости от угла подъема. Видно, что после 30 градусов потеря становится довольно ощутимой и сохраняется примерно на одном уровне при различных углах и скоростях.
Рядом приведен отдельный график для 30-градусного подъема.
Скорости около 22 м/с уже достаточно для возникновения проблемы.
На эту проблему меня натолкнул pete9516.
У него есть временный компромиссный патч:
https://www.nfsaddons.com/downloads/nfshs/tools/11480/dynamic-uphill-crash-fix-crash-logger.html
Патч обнуляет три передние точки выборки при расчете коллизий.
Саму проблему он не решает, а просто отодвигает ее возникновение на более высокие скорости, одновременно создавая дополнительные проблемы с коллизиями:

Я попробовал сделать менее разрушительное исправление в uphill_fix.n4p.
Не вдаваясь в длинные рассуждения, суть исправления следующая: сохраняются все точки выборки, а убирается только ложный высотный признак границы.
Пока я не знаю, на что еще это может повлиять. Судя по коду, исправление не должно приводить к регрессиям реальной физики в других ситуациях, но его желательно дополнительно протестировать.
График сравнения оригинальной физики, pete9516-uphill-patch и uphill_fix.n4p:

3D-график для uphill_fix.n4p:

На видео ниже я записал саму проблему и показал, что после исправления физики тот же replay воспроизводится без столкновения с невидимой стеной.
uphill_fix.n4p является частью работы по переносу патчей с прямого изменения EXE-файла на отдельные модули.
На данный момент список патчей пока невелик. Сначала я планирую перенести в новую систему все изменения, которые уже сделал непосредственно в EXE, а затем продолжить исправление ошибок и добавление нового функционала.
Но перед этим сделаю небольшой предварительный релиз с несколькими патчами. Это будет быстрее, чем пытаться сначала довести все существующие изменения в EXE до состояния полноценного релиза.
Сейчас доступны следующие модули:

race_again.n4p — добавляет кнопку "Race Again" в карьерные гонки.
replay_trace.n4p — отладочный модуль для трассировки во время воспроизведения replay.
telemetry.n4p — сбор телеметрии во время гонки.
uphill_fix.n4p — исправление проблемы с крутыми подъемами.
Комментарии
Пока нет комментариев.
Войдите, чтобы оставить комментарий и оценить. Войти