Найти тему
Ви

Почему слова "Застрял в текстурах" - бред

Оглавление

Наверное, любой игрок когда-либо сталкивался с подобной ситуацией: вы подошли к стене, или просто бежали по своим делам, и вдруг обнаружили, что персонаж не двигается с места. Может проигрываться анимация, но из проблемной области вы выйти не можете.

Геральта теперь спасет только загрузка
Геральта теперь спасет только загрузка

Или предмет окружения либо труп начинает "колбасить" в стене, в полу или другом объекте.

О да, трупы в Сталкере очень любят так делать
О да, трупы в Сталкере очень любят так делать

Что обычно говорят геймеры в таких случаях?

Конечно же: "Я застрял в текстурах".

И это в корне неверное утверждение. И сейчас я объясню вам почему.

Давайте сначала разберемся, что такое текстура. Текстура, если не цитировать из википедии, это изображение или группа изображений (такой прием называется мультитекстурой и используется чаще всего при создании ландшафта), которая "натягивается" на модель по определенной разметке (UVmap).

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

Левая сторона этой модели отображена только в виде полигональной сетки, правая - с наложенными текстурами и шейдерами.
Левая сторона этой модели отображена только в виде полигональной сетки, правая - с наложенными текстурами и шейдерами.

А что тогда влияет на физический мир? Модель? Верно, но не совсем.

В трехмерном физическом пространстве (и не только) за обсчет размера объекта (и зачастую массы) отвечает коллайдер. И это чаще всего не сама 3d модель.

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

Коллайдер - классический прием в разработке видеоигр. Например, вот так выглядит коллайдер для игры от первого или третьего лица. Даже если у персонажа есть ноги - скорее всего, вы играете за капсулу.

Капсула, отрисованная зелеными линиями - 3д коллайдер
Капсула, отрисованная зелеными линиями - 3д коллайдер
Зеленый квадрат - 2д коллайдер
Зеленый квадрат - 2д коллайдер

Проблема с застреванием

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

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

Страшные мучения копов из Pay Day
Страшные мучения копов из Pay Day

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

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

Проблема коллижна обычно ярко выражена в бюджетных проектах. Однако, и в более серьезных работах есть такие огрехи.

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

Кроме того, такие баги позволяют провалиться, как говорят, за "текстуры "(что тоже неверно), и попасть под ландшафт или внутрь крупного объекта.

Погружение на дно
Погружение на дно

Там можно найти пасхалки от разработчиков игр (или даже пользовательских карт, привет из CS 1.6, Source и пр.)

Комната без текстур в Far Cry 4. Слово "Текстура" здесь уместно.
Комната без текстур в Far Cry 4. Слово "Текстура" здесь уместно.

Ну и, конечно, в некоторых случаях игра выстреливает телом или предметом высоко в воздух, что вызывает в определенных случаях неподдельный восторг.

Подождите-ка, а что там с 2D?

С 2D все примерно так же, но отслеживать такое там проще. Поскольку нагрузка на движок физики намного меньше, обычно такие объекты "выпрыгивают", если не успели войти в другой объект дальше, чем находится их центр массы.

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

Я застрял, что делать?

Смотря во что играете и как застряли. Если застряли в заборе и не можете выйти - крутитесь, двигайтесь, используйте анимации, которые имеют максимальную амплитуду. Перекаты, увороты, движение ползком и пр.

Если упали сквозь ландшафт - дело, скорее всего, плохо. Вы либо умрете, долетев до "уровня моря", либо будете лететь вечно. Хотя, например, в Subnautica можно провалиться на берегу так, что вы долетите до глубин, где Вам предстоит оказаться очень и очень нескоро.

Главное - не говорите "Я застрял в текстурах". Оттопырьте пальчик и с умным видом изреките что-нибудь вроде "Господа, коллайдер этой стены имеет на меня виды".