Скользящие ноги и отсутствие инерции: трудности анимирования в многопользовательских шутерах
Неочевидные проблемы, с которыми сталкиваются разработчики.
Старший технический аниматор Sony Santa Monica Дэн Лоу опубликовал в твиттере тред, в котором рассказал о трудностях создания анимации в мультиплеерных играх от первого лица. Мы выбрали из треда главное.
Поведение персонажей в многопользовательских FPS сильно отличается от того, к чему мы привыкли в реальной жизни — часто они скользят по земле, моментально тормозят и меняют направление движения. Такое передвижение нельзя назвать реалистичным, хотя оно значительно улучшает пользовательский опыт. Анимация и передвижение в мультиплеерных играх обладает тремя ключевыми чертами: отзывчивостью, единообразием и репликацией.
Первая черта — отзывчивость: игрок должен чувствовать, что персонаж адекватно реагирует на команды.
На графике выше показана разница между передвижением реального человека, который постепенно ускоряется в mocap, и обычного игрового персонажа — разница очевидна.
Это же касается и замедления: обычный игровой персонаж в перспективе от третьего лица может двигаться со скоростью 4-6 м/с. В некоторых играх (например, Quake 3: Arena) скорость бега приближается к 10 м/с — примерно такая же, как у Усэйна Болта. При этом персонажи двигаются с такой скоростью в любом направлении в горизонтально плоскости.
В реальности чтобы остановиться в конце гонки на 100 метров, спринтеру нужно пробежать ещё некоторое расстояние — примерно 15-30 метров. В играх от третьего лица для отзывчивости дистанция остановки персонажа может составлять примерно 0,5-1 метра. В многопользовательском FPS это расстояние может быть намного меньше.
В анимационной системе, управляемой кодом (которая используется в большинстве многопользовательских игр), анимация привязана к контроллеру и физической капсуле персонажа. Если анимация не соответствует скорости передвижения, то возникает эффект скользящих ног. Чтобы решить эту проблему, разработчики редактируют анимацию: иногда увеличивают скорость воспроизведения, иногда — длину шага.
Но если переусердствовать, то движения будут выглядеть глупо. Чем быстрее и отзывчивее контроллер персонажа, тем сложнее аниматору найти баланс и получить результат, который выглядит хорошо.
Вторая черта — единообразие анимации для игрока и его оппонентов. В многопользовательских играх не должно быть существенных различий между первым лицом — тем, что видит игрок (руки и оружие), и третьим лицом — тем, что видят остальные (тело вашего персонажа).
В реальности наша вестибулярная система стабилизирует взгляд во время движения головы. А в играх от первого лица нельзя просто прикрепить камеру к голове модели от третьего лица — результат будет очень нестабильным, а на изображение просто некомфортно будет смотреть.
Для ограничения движения камеры, разработчики делают так, чтобы она вращалась вокруг фиксированной точки. Но чтобы правильно расположить руку с оружием, камера должна быть где-то в районе груди. Именно поэтому чаще всего разработчики создают разные анимации для камеры от первого и от третьего лица: игрок видит модель от первого лица, другие — модель от третьего лица.
В соревновательных играх крайне важно, чтобы это несоответствие не создавало каких-либо конкурентных преимуществ. Например, если вы сидите в укрытии и ничего не видите от первого лица, то ваша голова не должна торчать из-за стены.
Это же касается и расположения пушек: если противник может выстрелить в игрока из оружия, то между ними должна быть чёткая линия обзора. Это одна из причин, почему в большинстве многопользовательских игр персонажи держат оружие достаточно высоко.
Вместе с этим возникает ещё одна проблема: противники должны видеть, когда игрок прицеливается, а когда — нет. Чтобы это считывалась на большом расстоянии, разработчики стараются делать эти позы максимально отличающимися.
Третья черта — это репликация. В одиночных играх разработчики могут выбирать, как управлять движениями персонажа — кодом или анимацией. Первый вариант даёт хороший результат, но иногда персонажи могут скользить по земле. Второй вариант может дать более реалистичные и детализированные движения — это особенно важно для катсцен и любых взаимодействий, где нужно чёткое позиционирование персонажа в пространстве. Но управление через анимацию сложно контролировать.
Каждый вариант подходит для разных вещей, поэтому лучше всего использовать оба способа. Тем не менее управление через анимацию сложно реализовать в многопользовательских играх, потому что при репликации по сети могут возникнуть проблемы.
Репликация гарантирует, что на всех компьютерах и консолях, участвующих в многопользовательской игре, происходит одно и то же. Но объём информации, который может передаваться по сети за кадр, ограничен, а системы, связанные с анимацией, требуют слишком много ресурсов.
Поэтому по сети передаются более простые переменные — позиция, скорость и направление противника. А затем эти показатели используются для управления системой анимации локально на компьютере или консоли.