Почему удаление от центра расшатывает мир

В компьютерной игре положение объекта обычно хранится как набор чисел — координат по трём осям. Но компьютер не может записать любое число с бесконечной точностью: для координат часто используют числа с плавающей точкой, у которых ограничено количество значащих цифр.

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

От неточных координат к дрожанию

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

Физическому движку — системе, которая вычисляет движение, столкновения и силы, — нужна точность ещё и для малых расстояний. Если он сравнивает координаты двух объектов, расположенных далеко от начала отсчёта, чтобы определить зазор между ними, округления могут исказить результат. Тогда предметы дрожат при контакте, столкновения срабатывают неверно, а объекты могут вести себя неустойчиво.

Как игры удерживают точность

Один распространённый приём — переносить начало координат ближе к игроку. Когда персонаж уходит далеко, движок сдвигает мир так, чтобы игрок снова оказался около центра отсчёта. Для наблюдателя пейзаж остаётся на месте, но числа, которыми описаны его положения, становятся меньше — а значит, их можно задавать точнее.

Можно также хранить координаты с большей точностью, но это требует больше вычислительных ресурсов и не всегда решает проблему во всех системах игры. Поэтому большой мир — не просто вопрос того, насколько далеко можно идти: разработчикам нужно следить, чтобы расстояния, столкновения и движение оставались точными. Иначе на краю карты ошибка проявляется не только в цифрах, но и в дрожащем персонаже.