Перейти к содержимому


Diablo 2: 3D-режим в 2D графике


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 Diablo

Diablo

    Администратор

  • Главные администраторы
  • 9 511 сообщений


Отправлено 06 Сентябрь 2014 - 01:44

Изображение


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

3D-режим в Diablo 2

Это перевод поста Don't Starve, Diablo — Parallax 7 из блога Simon Schreibt от 25 февраля 2014 года.
Осторожно, тяжелые гифки.

В 90-х игры начали свое движение от 2D к 3D. Если бы НЛО тогда посетило землю, пришельцы решили бы, что используемые в то время низкополигональные модели без всякой фильтрации никому не нужны, и уничтожили бы Землю.

Со временем они, конечно, научились бы тому, что делало людей особенными: даже в эру 2D у них было невероятное желание рендерить в 3D, даже при том, что тогда это было просто невозможно! Все началось с реализации эффекта параллакса (в зависимости от «дистанции» некоторые элементы двигались быстрее других). Этот эффект параллакса взорвал людям мозг еще в 1982 году:

Изображение
Игра: Moon Patrol

Действительно, интересно, что несколько плоскостей, двигающихся по-разному, создают такой впечатляющий эффект. Но выглядит немного плоско, да? Перспективная камера над поверхностью земли выглядела бы лучше, но это невозможно сделать без применения «настоящего» 3D? Ок, воспользуемся машиной времени и переместимся в SNES-эру:

Изображение
Игра: Moon Patrol

Выглядит как 3D, но это не 3D! Это технология SNES под названием “Mode 7”. Для ее визуализации Nintendo манипулировала текстурами (уменьшая высоту в пользу глубины) при помощи некой программистской магии. Вот слова человека, который знает, как ее применять (он говорит о Gameboy Advance, но, насколько я знаю, для SNES рецепт тоже подходит):

«У GBA нет никаких аппаратных возможностей рендерить 3D, но можно его подделать, если по-умному управлять масштабом и переходами REG_BGxX-REG_BGxPD для каждой линии», Cearn


Кстати, даже сегодня некоторые люди сходят с ума по Mode 7 и используют его для проектов с RPG Maker. Впечатляет!
Сегодня можно рендерить каждый ресурс в «настоящем» 3D чтобы придать объем, но существуют примеры, где это просто не нужно. Фактически, иногда даже лучше использовать олдскул:

Изображение
Источник: Don't Starve

Все кусты, деревья и враги в Don’t starve плоские. Мне кажется, выглядит круто!
Для меня Diablo 2 (2D ARPG 2000-го года) была первой игрой, которая совместила параллакс-эффект из Moon Patrol и что-то подобное подходу Mode 7.
Давайте посмотрим на игру со стандартными настройками. Чистый 2D. Никакой перспективы. Никакого параллакса:

Изображение
Источник: Diablo 2

Но у игры был «Режим перспективы». Давайте его включим! Обратите внимание, колья закрывают разные пиксели на земле в разное время:

Изображение

Выглядит как Don’t Starve, но помните: Diablo 2 – 2D игра! Официальной информации об этом режиме не было. Все, что вы сейчас читаете, стало известно благодаря отличным инструментам/документации Тома Амиго и Пола Симари. Отдельное спасибо Полу за то, что он ответил на все мои вопросы и во многом меня поддержал.

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

Изображение

Если заменить текстуру земли прекрасной шахматной текстурой, видно даже лучше:

Изображение

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

Изображение
Изображение

При этом код игры не должен был быть слишком запутанным! Так что, пожалуйста, имейте в виду, что в Blizzard подразделяли спрайты на кусочки размером 32х32px. Загружать только те части картинки, которые необходимы – выглядит как оптимизация. Плюс ко всему, это становится полезно, когда необходимо применить трансформацию. Смотрите, как подразделяются спрайты в игре:

Изображение
Источник: D1 format by Paul Simary

Я нарисовал на прозрачной текстуре линии через каждые 32px, чтобы показать ложную сетку. Результат превзошел мои ожидания! Как показывают вертикальные линии, у спрайта есть «настоящая» точка схода глубоко в земле (чего вы могли ожидать от перспективы):

Изображение

Однако я не знаю, почему нижний край так выгнут. Для перспективы это не нужно (ниже есть сцена из 3ds Max, показывающая, что, если камера не вращается вокруг своей оси, то горизонтальные линии остаются прямыми):

Изображение

В любом случае, волшебники из компании Blizzard знают, зачем они это сделали. Может, это ничего и не стоит, но такая деформация зависит от «угла», под которым вы смотрите на спрайт (позиции игрока/камеры). Смотрите, как нижний край выпрямляется:

Изображение

Вот скриншот для тех, кому интересно искажение шахматной текстуры:

Изображение

Если вы думаете, что это все достаточно интересно, то читайте дальше и очумейте. Пол пишет, что спрайты могут иметь некое значение ориентации. В зависимости от этого значения спрайты искажаются по-разному (да… еще сложнее)! Вот пример: у стены есть направления (Левый край, верхний край, левый нижний край, и т.д.)

Изображение
Источник: DT1 format by Paul Siramy

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

Изображение

Как видно, трансформация в моем представлении слегка запутанная. Давайте посмотрим, как это на самом деле сделано в игре:

Изображение

Этот спрайт ориентирован иначе, чем в примере, который я упомянул раньше. Смотрите, деформация совсем другая! Верхняя и нижняя границы уже не сгибаются, вместо этого они как бы «смотрят» на точку схода слева. Снова обратимся к примеру как это выглядит в 3ds Max:

Изображение

Судя по всему, игра преувеличивает искажения, чтобы избежать щелей между спрайтами и мне кажется, довольно успешно, потому что каждый спрайт забора отлично подходит. Обратите внимание на то, что направление граней (верхних и нижних) изменяется в зависимости от их местоположения:

Изображение

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

Изображение

Этот режим можно было активировать только в полноэкранном режиме с D3D (Diablo 2 так же поддерживал режимы Glide и Программное ускорение), что заставило меня попытаться разобраться со старой документацией по DirectX, безуспешно.

Таким образом… здесь заканчивается наше путешествие и я надеюсь, что вы впечатлились этим примером жажды заставить 2D выглядеть, как 3D так же, как и я. Недостаток официальной информации и отсутствие официальных заявлений по этому поводу (посмотрите на сайте правительства, там нет ничего на тему «Режим перспективы в Diablo 2») подвел меня к неизбежному выводу:

Это все технологии пришельцев!

Использовавшиеся инструменты:
  • MPQ Editor (для извлечения DT1 файлов из MPQ) by Tom Amigo
  • DT1 Tools (для извлечения PCX файлов из DT1) by Paul Simary
  • DT1 Tutorial (для понимания формата DT1) by Paul Simary
  • GIMP (для редактирования/сохранения файлов PCX)
  • Diablo 2 Map Editor(для понимания карт D2) by Paul Simary
Спасибо Гансу Вурсту за эту замечательную статью об искажениях изображений, все это выглядит почти как Diablo 2 (с включенным режимом перспективы). Не знаю, может быть, программисты D2 использовали именно эту информацию, но выглядит она очень знакомо.

Источник



#2 Fortochnik

Fortochnik

    Воин

  • Новичок
  • 190 сообщений

Отправлено 07 Сентябрь 2014 - 14:38

Ни чего не понял)

#3 Няш

Няш

    Бард

  • Администраторы
  • 4 917 сообщений


Отправлено 07 Сентябрь 2014 - 15:22

Просмотр сообщенияFortochnik (07 Сентябрь 2014 - 14:38) писал:

Ни чего не понял)
Если в 5-х словах: Эффект 3D при помощи только 2D.

#4 KOM

KOM

    Space Paladin

  • Пользователи
  • 1 055 сообщений

Отправлено 17 Сентябрь 2014 - 20:48

Классная статья. :good:  Diablo 2 просто верх совершенства в плане графики! :grin:

#5 Fingon

Fingon

    High King of the Ñoldor

  • Пользователи
  • 845 сообщений

Отправлено 07 Январь 2015 - 10:27

Ваще классно))) Надо ж додуматься, а не пользоваться тем, что есть)

#6 Няш

Няш

    Бард

  • Администраторы
  • 4 917 сообщений


Отправлено 07 Январь 2015 - 12:34

Просмотр сообщенияFingon (07 Январь 2015 - 10:27) писал:

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


#7 Fingon

Fingon

    High King of the Ñoldor

  • Пользователи
  • 845 сообщений

Отправлено 07 Январь 2015 - 15:48

Просмотр сообщенияНяш (07 Январь 2015 - 12:34) писал:

В то время как раз было только 2D =)
Я понимаю, я к тому, что не пользоваться тем, что есть -- 2D, а добавить нового)

#8 Няш

Няш

    Бард

  • Администраторы
  • 4 917 сообщений


Отправлено 07 Январь 2015 - 18:00

Просмотр сообщенияFingon (07 Январь 2015 - 15:48) писал:

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

 


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

 
Рейтинг@Mail.ru