Изометрическая графика в компьютерных играх

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Термин «изометрия» в компьютерных играх относится к тому или иному виду параллельной проекции (иногда диметрическую проекцию ошибочно называют «изометрической»). Угол обзора в ней смещён, и это создаёт эффект трёхмерности и позволяет показать некоторые детали окружения, которые не видны при виде сверху или виде сбоку. Также используются термины «2.5D» и «псевдо-3D».

С появлением мощных графических систем изометрическая проекция стала менее популярна, будучи заменена перспективной проекцией.

Телевизор, запечатлённый в практически совершенной изометрии 2:1 (пиксельная графика)

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

Разница с «настоящей» изометрической проекцией

[править | править код]

Проекция, обычно использующаяся в видеоиграх, несколько отличается от «настоящей» изометрии из-за ограничений растровой графики. Линии по осям x и y выглядели бы неаккуратно, если бы были отклонены на 30 ° к горизонтали. Современные компьютеры могут устранить эту проблему, используя сглаживание, но более старые графические системы не поддерживали достаточное количество цветов либо не обладали достаточными вычислительными ресурсами, чтобы сделать это.

Вместо этого, оси x и y отклонялись на 26,565 ° (арктангенс 0.5) от горизонтали, однако игровые системы, не использующие квадратные пиксели, могли отображать любые углы, в том числе и «истинную» изометрию. Поэтому эту форму проекции можно описать как модификацию диметрической проекции, так как в ней равны только два угла между осями из трёх (116,565 °, 116,565 °, 126,87 °).

Похожие проекции

[править | править код]

Термин часто применяется к играм с проекцией, похожей на «настоящую изометрию», включая игры, которые используют триметрическую проекцию (Fallout, SimCity 4), игры, использующие косоугольную проекцию (The Legend of Zelda: A Link to the Past, Ultima Online), а также игры, использующие комбинацию перспективной проекции и вида с высоты птичьего полёта (Torchlight[1],, Silent Storm[2]).

Другие примеры игр, использующих косоугольную проекцию: оригинальный SimCity, EarthBound и Paperboy.

История изометрических видеоигр

[править | править код]

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

Первый случай использования изометрии в видеоиграх — Zaxxon[3][4], выпущенная в январе 1982. Это был изометрический скролл-шутер, в котором игрок управлял самолётом. Так же это был один из первых случаев отображения теней в играх.

Другая ранняя изометрическая игра — Q*bert, которую Уоррен Дэвис и Джефф Ли начали писать в апреле 1982 и выпустили в октябре/ноябре 1982. В игре была представлена статическая пирамида в изометрической проекции, на которую игрок должен был запрыгнуть.

В 1983 году была выпущена изометрическая аркада-платформер Конго-Бонго, работающая на том же оборудовании, что и Zaxxon. Игрок мог перемещаться на больших изометрических уровнях, в том числе подниматься и опускаться по оси Z. То же было возможно и в аркаде Marble Madness 1984 года выпуска.

В это время изометрические игры перестали быть эксклюзивами для аркадных аппаратов и пришли на домашние компьютеры с выпуском Ant Attack для ZX Spectrum в 1983. Игрок мог двигаться в любом направлении, предлагая полную свободу движения, в отличие от Zaxxon. Вид так же мог быть повёрнут на 90 градусов вокруг своей оси. Журнал ZX Crash присудил ей 100 % в области графики[5].

Год спустя на свет появилась новая игра для ZX Spectrum — Knight Lore, которая определила жанр изометрических игр на годы вперёд. Эта игра породила множество клонов для домашних компьютеров. Другие примеры тех лет: Highway Encounter (1985), Batman (1986), Head Over Heels (1987) и La Abadía del Crimen (1987). Изометрия в те годы не ограничивалась только аркадами — существует, например, стратегическая игра Populous 1987 года.

1990-е и после

[править | править код]

В течение 1990-х появляются некоторые очень успешные игры, использующие фиксированную изометрическую перспективу, такие как Civilization II, Diablo и Fallout. Но с появлением 3D ускорителей в персональных компьютерах и игровых консолях игры, до этого использовавшие 2D перспективу, стали поворачиваться к 3D. Эту тенденцию можно проследить и в преемниках вышеупомянутых игр: например, Civilization IV и Diablo III используют настоящее 3D. В то время как Diablo II использовала фиксированную перспективу, как и её предшественник, она дополнительно позволяла масштабировать спрайты, чтобы придать себе эффект 3D[6].

В течение 1990-х изометрическая графика начала использоваться в компьютерных ролевых играх, особенно в тактических ролевых играх, многие из которых используют изометрическую графику и поныне. К концу 1990-х такие игры, как Vandal Hearts (1996), Final Fantasy Tactics (1997) и Breath of Fire III (1997), использовали трёхмерную графику для создания изометрического вида, в котором игрок мог свободно вращать камеру.

Сопоставление координат на экране и в пространстве

[править | править код]
Сравнение типов графических проекций. Наличие одного или более углов 90° — признак того, что проекция косоугольная.
Поиск координат в изометрическом пространстве

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

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

Другой способ, который требует меньшего объёма вычислений и подходит, если метод вызывается в каждом кадре, основывается на предположении, что мы имеем квадратную сетку, которая была повёрнута на 45 градусов, а затем сжата пополам, как описано выше. Сперва находятся координаты тайла на виртуальной сетке (линии которой параллельны границам экрана), которые мы называем виртуальным x и виртуальным y. Как видно, координаты тайлов виртуальной сетки на центральной оси совпадают с координатами тайлов на центральной оси изометрического пространства.

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

Пример кода на C (при условии, что переменные имеют правильные значения):

float virtualTileX = screenx / virtualTileWidth;
float virtualTileY = screeny / virtualTileHeight;

 // Некоторые системы дисплеев имеют начало координат в левом нижнем углу, а тайл на карте в левом верхнем углу, так что мы должны перевернуть у
float inverseTileY = numberOfTilesInY - virtualTileY;

float isoTileX = inverseTileY + (virtualTileX - numberOfTilesInX / 2);
float isoTileY = inverseTileY - (virtualTileY - numberOfTilesInY / 2);

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

Примечания

[править | править код]
  1. McDougall, Jaz Torchlight Review. Games Radar (4 ноября 2009). Дата обращения: 2 февраля 2015. Архивировано 12 апреля 2012 года.
  2. O'Hagan, Steve PC Previews: Silent Storm. ComputerAndVideoGames.com. Future Publishing Limited (7 августа 2008). Дата обращения: 13 декабря 2007. Архивировано 19 февраля 2012 года.
  3. Bernard Perron & Mark J. P. Wolf (2008), Video game theory reader two, p. 158 Архивная копия от 25 февраля 2015 на Wayback Machine, Taylor & Francis, ISBN 0-415-96282-X
  4. Zaxxon (англ.) на сайте Killer List of Videogames
  5. Krikke, J. Axonometry: a matter of perspective (неопр.) // Computer Graphics and Applications. — Institute of Electrical and Electronics Engineers. — Т. 20, № 4. — С. 7—11. — doi:10.1109/38.851742.
  6. "Diablo II Nears Completion As Blizzard Prepares For Final Phase Of Beta Testing". FindArticles. BNET Business Network. Marketwire. 2000-05. Архивировано из оригинала 10 июля 2012. Дата обращения: 29 сентября 2008.