- PVSM.RU - https://www.pvsm.ru -
Это перевод поста Don't Starve, Diablo — Parallax 7 из блога Simon Schreibt от 25 февраля 2014 года.
Осторожно, тяжелые гифки.
В 90-х игры начали свое движение от 2D к 3D. Если бы НЛО тогда посетило землю, пришельцы решили бы, что используемые в то время низкополигональные модели без всякой фильтрации никому не нужны, и уничтожили бы Землю.
Со временем они, конечно, научились бы тому, что делало людей особенными: даже в эру 2D у них было невероятное желание рендерить в 3D, даже при том, что тогда это было просто невозможно! Все началось с реализации эффекта параллакса (в зависимости от «дистанции» некоторые элементы двигались быстрее других). Этот эффект параллакса взорвал людям
Игра: Moon Patrol [2] источник: YouTube [3]
Действительно, интересно, что несколько плоскостей, двигающихся по-разному, создают такой впечатляющий эффект. Но выглядит немного плоско, да? Перспективная камера над поверхностью земли выглядела бы лучше, но это невозможно сделать без применения «настоящего» 3D? Ок, воспользуемся машиной времени и переместимся в SNES-эру:
Игра: Moon Patrol [2] источник: YouTube [4]
Выглядит как 3D, но это не 3D! Это технология SNES [5] под названием “Mode 7 [6]”. Для ее визуализации Nintendo манипулировала текстурами (уменьшая высоту в пользу глубины) при помощи некой программистской магии. Вот слова человека, который знает, как ее применять (он говорит о Gameboy Advance [7], но, насколько я знаю, для SNES рецепт тоже подходит):
«У GBA нет никаких аппаратных возможностей рендерить 3D, но можно его подделать, если по-умному управлять масштабом и переходами REG_BGxX-REG_BGxPD для каждой линии», Cearn [8]
Кстати, даже сегодня некоторые люди сходят с ума по Mode 7 и используют его для проектов [9] с RPG Maker [10]. Впечатляет!
Сегодня можно рендерить каждый ресурс в «настоящем» 3D чтобы придать объем, но существуют примеры, где это просто не нужно. Фактически, иногда даже лучше использовать олдскул:
Источник: Don't Starve [11]
Все кусты, деревья и враги в Don’t starve плоские. Мне кажется, выглядит круто!
Для меня Diablo 2 (2D ARPG 2000-го года) была первой игрой, которая совместила параллакс-эффект из Moon Patrol и что-то подобное подходу Mode 7.
Давайте посмотрим на игру со стандартными настройками. Чистый 2D. Никакой перспективы. Никакого параллакса:
Источник: Diablo 2 [12]
Но у игры был «Режим перспективы». Давайте его включим! Обратите внимание, колья закрывают разные пиксели на земле в разное время:
Выглядит как Don’t Starve, но помните: Diablo 2 – 2D игра! Официальной информации об этом режиме не было. Все, что вы сейчас читаете, стало известно благодаря отличным инструментам/документации Тома Амиго [13] и Пола Симари [14]. Отдельное спасибо Полу за то, что он ответил на все мои вопросы и во многом меня поддержал.
Может показаться, что программисты Blizzard всего лишь каким-то образом двигали спрайты, но если сравнить игру с включенным режимом перспективы и выключенным, и при этом не передвигаться, то станет заметно, что они, по сути, сдвигали все относительно линии горизонта.
Если заменить текстуру земли прекрасной шахматной текстурой, видно даже лучше:
В смысле, подумайте вот о чем: каждый ресурс в сцене нужно было каким-то образом трансформировать, чтобы он выглядел перспективно без щелей у границ спрайта. Тем более учитывая количество спрайтов в сцене (шанс получить щели был достаточно велик…):
При этом код игры не должен был быть слишком запутанным! Так что, пожалуйста, имейте в виду, что в Blizzard подразделяли спрайты на кусочки размером 32х32px [15]. Загружать только те части картинки, которые необходимы – выглядит как оптимизация. Плюс ко всему, это становится полезно, когда необходимо применить трансформацию. Смотрите, как подразделяются спрайты в игре:
Источник: D1 format by Paul Simary [15]
Я нарисовал на прозрачной текстуре линии через каждые 32px, чтобы показать ложную сетку. Результат превзошел мои ожидания! Как показывают вертикальные линии, у спрайта есть «настоящая» исчезающая точка глубоко в земле (чего вы могли ожидать от перспективы):
Однако я не знаю, почему нижний край так выгнут. Для перспективы это не нужно (ниже есть сцена из 3ds Max, показывающая, что, если камера не вращается вокруг своей оси, то горизонтальные линии остаются прямыми):
В любом случае, волшебники из компании Blizzard знают, зачем они это сделали. Может, это ничего и не стоит, но такая деформация зависит от «угла», под которым вы смотрите на спрайт (позиции игрока/камеры). Смотрите, как нижний край выпрямляется:
Вот скриншот для тех, кому интересно искажение шахматной текстуры:
Если вы думаете, что это все достаточно интересно, то читайте дальше и очумейте. Пол пишет [15], что спрайты могут иметь некое значение ориентации. В зависимости от этого значения спрайты искажаются по-разному (да… еще сложнее)! Вот пример: у стены есть направления (Левый край, верхний край, левый нижний край, и т.д.)
Источник: DT1 format by Paul Siramy [15]
Давайте я продемонстрирую как (по-моему) это сделано. На следующем изображении показан стандартный вид ISO. Ниже представлены шаги, которые я предпринял, чтобы сделать спрайты «перспективными». Мне пришлось их переместить, отмасштабировать и дважды деформировать, чтобы добиться такого эффекта.
Как видно, трансформация в моем представлении слегка запутанная. Давайте посмотрим, как это на самом деле сделано в игре:
Этот спрайт ориентирован иначе, чем в примере, который я упомянул раньше. Смотрите, деформация совсем другая! Верхняя и нижняя границы уже не сгибаются, вместо этого они как бы «смотрят» на исчезающую точку слева. Снова обратимся к примеру как это выглядит в 3ds Max:
Судя по всему, игра преувеличивает искажения, чтобы избежать щелей между спрайтами и мне кажется, довольно успешно, потому что каждый спрайт забора отлично подходит. Обратите внимание на то, что направление граней (верхних и нижних) изменяется в зависимости от их местоположения:
Следующий пример показывает, насколько важно значение ориентации у спрайтов. Если просто сказать игре: «это не левая стена, а правая», наступает время щелей:
Этот режим можно было активировать только в полноэкранном режиме с D3D (Diablo 2 так же поддерживал режимы Glide и Программное ускорение), что заставило меня попытаться разобраться со старой документацией по DirectX, безуспешно.
Таким образом… здесь заканчивается наше путешествие и я надеюсь, что вы впечатлились этим примером жажды заставить 2D выглядеть, как 3D так же, как и я. Недостаток официальной информации и отсутствие официальных заявлений по этому поводу (посмотрите на сайте правительства, там нет ничего на тему «Режим перспективы в Diablo 2») подвел меня к неизбежному выводу:
Это все технологии пришельцев!
Использовавшиеся инструменты:
Спасибо Гансу Вурсту за эту замечательную статью [19] об искажениях изображений, все это выглядит почти как Diablo 2 (с включенным режимом перспективы). Не знаю, может быть, программисты D2 использовали именно эту информацию, но выглядит она очень знакомо.
Автор: john_samilin
Источник [20]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/animatsiya-i-3d-grafika/69011
Ссылки в тексте:
[1] мозг: http://www.braintools.ru
[2] Moon Patrol: http://en.wikipedia.org/wiki/Moon_Patrol
[3] YouTube: http://www.youtube.com/watch?v=HBOKWCpwGfM
[4] YouTube: http://www.youtube.com/watch?v=sqkQr89wcTc
[5] SNES: https://ru.wikipedia.org/wiki/Super_Nintendo_Entertainment_System
[6] Mode 7: https://ru.wikipedia.org/wiki/Mode_7
[7] Gameboy Advance: https://ru.wikipedia.org/wiki/Game_Boy_Advance
[8] Cearn: http://www.coranac.com/tonc/text/mode7.htm
[9] проектов: http://www.youtube.com/watch?v=BO_GZzrdE9Y
[10] RPG Maker: https://www.google.ru/search?q=rpg+maker
[11] Don't Starve: http://www.dontstarvegame.com/
[12] Diablo 2: http://us.blizzard.com/en-us/games/d2/
[13] Тома Амиго: http://www.angelfire.com/sc/mpq/
[14] Пола Симари: http://paul.siramy.free.fr/
[15] кусочки размером 32х32px: http://paul.siramy.free.fr/_divers/dt1_doc/
[16] DT1 Tools: http://paul.siramy.free.fr/_divers/dt1/DT1%20Tools.zip
[17] GIMP: http://www.gimp.org/
[18] Diablo 2 Map Editor : http://paul.siramy.free.fr/_divers/ds1/doc/index.html
[19] эту замечательную статью: http://toothwalker.org/optics/distortion.html
[20] Источник: http://habrahabr.ru/post/235735/
Нажмите здесь для печати.