Почему в играх на PlayStation 1 плавали текстуры

Игры эпохи PlayStation 1 многим запомнились специфической графикой: одновременно грубой и по-своему очаровательной. Портал howtogeek.com рассказал, из-за чего игры на PS1 так выглядели и откуда взялись знаменитые «плавающие» текстуры.

Почему в играх на PlayStation 1 плавали текстуры
© Unsplash

Производительность современных GPU зачастую измеряют в флопсах — от англ. floating-point operations per second. Иными словами, эта единица измеряет, сколько операций с плавающей запятой в секунду может выполнять система. Графический процессор оригинальной PlayStation имел ноль флопсов, потому что у него не было модуля для обработки чисел с плавающей запятой.

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

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

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

Без Z-буфера разработчики также были вынуждены использовать однородное наложение текстур — проекции перспективы выглядели некорректно для трехмерных объектов. Для сравнения, Nintendo 64 и некоторые другие платформы имели Z-буфер, что позволяло использовать другой метод наложения текстур — мипмаппинг. Он накладывал на объект несколько текстур одновременно и менял их в зависимости от расстояния, что повышало четкость и стабильность картинки в движении.