На стыке реализма и веселья: как работает модель передвижения автомобиля в Uncharted 4
А также трудности, с которыми разработчики столкнулись при программировании физики внедорожника.
В Uncharted 4 впервые в серии появилась возможность управлять внедорожником. В Naughty Dog хотели правильно вписать новую механику в игру — чтобы передвижение на транспорте работало реалистично, но не настолько, чтобы игрок терял удовольствие от геймплея при возникновении трудностей.
Программист Naughty Dog Эдуард Перейра на конференции GDC 2017 рассказал, как студия справлялась с этой задачей. Мы выбрали главное из выступления.
Когда разработчики принялись за дизайн механики передвижения на автомобиле, они закрепили для себя основные принципы, которых хотели придерживаться:
- езда приносит удовольствие как можно большей части игроков;
- присутствует элемент реализма, чтобы игрок чувствовал себя «приземлённым»;
- механика вождения работает правильно вне зависимости от условий — будь то твёрдая поверхность или грязь.
В Naughty Dog определили, какие задачи им нужно было решить, чтобы воссоздать правильную симуляцию. Во-первых, шасси машины должно правильно распознавать коллизию с другими объектами и соответствующе реагировать на них. Во-вторых, разработчиком нужно было понять, как воссоздать поведение мотора. В-третьих, мотор должен правильно работать в связке с шасси, чтобы для колёс рассчитывалось нужное сцепление.
Сначала разработчики прописали поведение подвески — её схематичное представление изображено ниже. Жёлтый круг — это точка соприкосновения, с которой считывается информация о поверхности. Прямая же показывает то, насколько сильно могут сжиматься пружины подвески для вертикального перемещения колеса.
Однако из-за такого подхода машина не могла считывать поверхность правильно и достаточно быстро — порой колёса попросту застревали в препятствиях.
Поэтому разработчики немного пересмотрели эту систему. Теперь на изменения реагировало всё колесо целиком, по окружности. Сразу несколько точек на колесе считывали поверхность, что позволило добиться нужного поведения подвески и правильной коллизии. Чтобы колесо не дрожало, когда под ним находится сразу несколько нестабильных объектов (например, досок), число точек соприкосновения ограничили до трёх.
Но при этом возникла проблема — когда машина наезжала на препятствия, она теряла почти всю свою скорость. Это было связано с тем, что не все точки соприкосновения колеса были перпендикулярны подвеске.
Чтобы избежать этого, разработчики «обманули» физический движок, сделав так, что все препятствия колёса считывали как перпендикулярные себе. В этом случае Naughty Dog пришлось уйти от реализма, чтобы сохранить удовольствие от вождения.
В чём-то передвижение автомобиля пришлось ограничивать. Чтобы машина не могла заезжать на стены (прежде чем начать падать, она продолжала цепляться колёсами), дизайнеры ограничили угол её передвижения.
То же самое пришлось сделать и с силами, которые продолжали действовать на автомобиль в воздухе. Чтобы машина не переворачивалась при падении со склона, разработчикам пришлось добавить дополнительный вектор силы, который не давал транспорту упасть на крышу.
Далее стояла задача правильно отобразить поведение мотора и крутящего момента. Чтобы управление оставалось относительно реалистичным и в то же время отзывчивым, в Naughty Dog воссоздали принцип дифференциала — механизма, который передаёт мощность вращения на колёса. Каждое колесо движется самостоятельно — например, если левое замедлится или остановится, то правое продолжит крутиться с независимой от левого мощностью.
Последний вопрос касался поверхностей, по которым внедорожник проезжает в игре. В зависимости от заданной силы трения определялось, насколько сильное будет сцепление колёс и насколько часто они будут пробуксовывать.
Самое высокое сцепление (за исключением дорог) было у участков травы. Чуть ниже — на поверхностях с грязью. В лужах и воде сцепление практически отсутствовало. Вычислялась как сила трения поверхности, по которой едет машина, так и сила трения самих колёс.
Силу трения в свою очередь разделили на переднюю и боковую силы. Первая вычисляется делением крутящего момента на радиус колеса. Во боковой силе частное боковой и передней скорости умножается на перпендикулярную силу от поверхности.
Из этого следует, что общая сила трения вычисляется корнем из суммы квадратов боковой и передней сил.
Однако, чтобы машина могла входить в управляемый занос, Naughty Dog вновь пришлось поступить в ущерб реализму. Когда игрок жмёт на тормоз, у задних колёс резко снижается сила трения — что позволяет легко «дрифтить» на участках с хорошим сопротивлением (например, на асфальте).
Разработчики воссоздали довольно реалистичную модель поведения автомобиля. Однако от многих элементов симуляции пришлось отказаться, чтобы игрок продолжал получать удовольствие от вождения. Всё же Uncharted 4 — это приключенческий экшен, а не симулятор внедорожника.