Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Почему персонажи видеоигр иногда застревают в текстурах?

ТехнологииДизайн+3
Простыми словами
  · 1,5 K
Энергетик по профессии. Интересы: лингвистика, психология.  · 22 июн 2020

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

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

Например, вот:

image.png

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

Ну и давайте посмотрим, как это работает, например, в Марио.

Коллайдер Марио (квадрат) приближается к коллайдеру стены (тоже квадрат). Игра это видит, и спустя мгновение вычислений процессор даёт команду - оттолкнуть игрока от стены. И вот в игре про Марио это было реализовано очень просто - игра толкала Марио в сторону спины. Но фокус заключался в том, что если вот в то мгновение, когда процессор делает расчёты, развернуться в другую сторону, то игра всё равно толкнёт игрока в сторону спины - то есть, его буквально затянет в стену.

Super Mario Bros. 4-2 Difficult Wall Clip (With Turbo Jump) 1-10 screenshot.png

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

Как-то так.

Мой канал в Яндекс.ДзенПерейти на zen.yandex.ru/dinvolt
программист, тренер  · 22 июн 2020
Если максимально просто, то есть разница между тем, что мы видим на экране и тем, с чем взаимодействует наш аватар. Для повышения скорости расчётов все модели упрощаются и условный зомби, в которого мы стреляем, с точки зрения алгоритма расчёта попадания пули может выглядеть как набор параллелепипедов, по типу человечков в майнкрафте. Аналогичные упрощения касаются и... Читать далее