Помните: ни слова по-журналистски.
Истории

Mode 7 в SNES — это не трёхмерная графика, а одна матрица на каждую строку экрана

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

Графический процессор Super Nintendo умеет восемь режимов фона. Седьмой отличается от остальных тем, что даёт всего один слой фона — большой, 1024 на 1024 точки, в 256 цветах — но зато перед выводом пропускает координаты через матрицу два на два, которую задают четыре регистра, с отдельной точкой поворота и смещениями.

Матрица два на два умеет ровно три вещи: поворот, масштаб и сдвиг. Это называется аффинным преобразованием, и никакой перспективы в нём нет. То есть сам по себе Mode 7 не рисует трёхмерное пространство. Он рисует плоскую картинку, которую можно крутить и приближать.

Где появляется дорога

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

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

Трёхмерности нет в чипе. Она в том, что на каждой строке матрица другая, и кто-то заранее посчитал, какая именно.

Чем за это платят

Единственный слой фона уходит на пол. Это значит, что настоящего заднего плана уже нет и всё остальное приходится делать спрайтами: соперники, ограждения, интерфейс, небо. В F-Zero, вышедшей 21 ноября 1990 года вместе с самой приставкой, машины не поворачиваются — это заранее нарисованные кадры спрайта, подставляемые по углу поворота. Ощущение объёма собирается из плоской дороги и плоских картинок над ней.

Super Mario Kart 1992 года добавила к тому же приёму вторую сложность: разделённый экран. Две половины требуют двух независимых наборов коэффициентов плюс место под интерфейс, и одного центрального процессора на такую математику уже не хватало. Поэтому в картридж положили отдельный чип DSP-1, считающий перспективные преобразования.

Это важная деталь про архитектуру SNES вообще: серьёзные вычисления приставка получала из картриджа. За DSP-1 последовал Super FX в Star Fox 1993 года — фактически второй процессор, вставляемый в разъём вместе с игрой.

Зачем это помнить

Mode 7 — образцовый пример эффекта, который на девяносто процентов состоит из дисциплины программиста и на десять из возможности железа, но вошёл в историю как возможность железа. У Mega Drive такого режима не было, и разработчики делали то же самое программно, расплачиваясь временем процессора: дорога в портах OutRun и бонусные этапы Sonic собраны руками.

Сегодняшний словарь устроен так же. Аппаратная трассировка лучей, сетчатые шейдеры, масштабирование нейросетью — это примитивы. Что из них получится, зависит от того, кто и как их вызывает каждый кадр. Маркетинг продаёт примитив, а видим мы всегда чужую работу поверх него.

Источник: snes.nesdev.org