easy

Почему разработчики любят запускать Doom на разном железе

Потому что это очень просто.

Первая версия Doom появилась, страшно сказать, в 1993 году. Тогда она работала только на ПК. Через год в неё можно было играть на любой приставке, а потом её стали запускать везде, где есть хоть какой-то экран и процессор. Разработчики и программисты просто развлекаются тем, что запускают Doom на том железе, где не предполагалось никаких игр: на фотоаппаратах, рекламных щитах, аппаратах УЗИ, холодильниках и бензопилах.

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

Запустить Doom на чём-то сегодня — это как взобраться на Эверест. В целом низачем не нужно, но очень почётно и интересно.

Размер

Вся игра — на четырёх дискетах.

Игры, подобные Doom, обычно занимали 15–20 мегабайт, но разработчики из id Software смогли уместить её в 4 мегабайта. Сюда входят:

  • все уровни и текстуры,
  • звуки,
  • враги,
  • их логика и поведение,
  • оружие,
  • возможность играть по сети!

Если вам интересно, как это могло быть сделано, почитайте наш разбор о том, как пишут подобные игры.

Благодаря размеру в 4 МБ Doom можно записать почти на любой компьютер. Напомним, это было время, когда у людей были жёсткие диски по 100–500 МБ.

Ненастоящее 3D

До Doom игры по большей части были двумерными по сути и смыслу: ты прыгал с платформы на платформу, ходил по плоскости вправо-влево. Могла быть какая-то имитация глубины, как в каких-нибудь винтажных «Черепашках-ниндзя», но всё равно ощущался плоский мир. Были, конечно, и трёхмерные игры, но выглядели они…

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

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

Отсюда первая крутейшая оптимизация трёхмерной графики в Doom: это не трёхмерная графика. Здесь нет высоты. Вы видите высоту на экране, но это всего лишь хитрая программистская оптимизация. Главный герой может смотреть только вправо-влево, но у него нет движения вверх-вниз. Все объекты в Doom находятся на одном уровне с главным героем.

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

Для примера, сравните это с уже подлинно трёхмерной игрой Quake, которая вышла тремя годами позднее. Тут уже и камера смотрит во всех направлениях, и враги — это трёхмерные модели:

Для компьютера это псевдо-3D значит, что не нужно считать искажения от движения камеры вверх. Достаточно просто считать перспективные искажения стен и пола, применяя менее ресурсоёмкую математику.

На экране это почти незаметно: благодаря свету, тональной перспективе и текстурам игроку кажется, что всё по-настоящему трёхмерно. Но в игре у главного героя не получается пройти под летающими монстрами или пролезть под препятствием.

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

К чему это приводит:

  • Все уровни плоские. В Doom не бывает «комнаты над комнатой».
  • Уровни разбиты на секторы: внутри каждого сектора одинаковая высота стен и одинаковое освещение. Чтобы сменить освещение или общее настроение уровня, нужно хитрым образом перекинуть игрока в новый сектор.
  • Враги и предметы — это плоские «спрайты», то есть просто картинки, которые рисуются поверх вашего экрана.
  • Благодаря конструкции стен и коридоров получилось создать очень экономичный движок рендеринга: он рисует только те пиксели, на которые игрок смотрит прямо сейчас. Мощность процессора не тратится на объекты, которые сейчас вне поля зрения игрока.

С — совместимость

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

Но оставалась ещё та часть, которая в оригинальной игре была написана на ассемблере, и при переносе с ней могли быть проблемы, так как ассемблер зависит от конкретного процессора. Всё решилось, когда разработчики переносили игру на приставки Nintendo и заменили эти фрагменты кодом на C.

После этого Doom можно было портировать на что угодно, если для этого железа есть C-компилятор.

Автоматическая оптимизация на слабом железе

У движка Doom есть классная особенность: он сам определяет мощность процессора и возможности монитора, чтобы графика работала быстро даже на слабых машинах.

Устроено это так: если процессор слабый, то текстуры упрощаются в два раза, если совсем слабы — в четыре раза. Каждая текстура накладывается на одну сторону виртуального куба, у которой есть длина и ширина. Так как текстуры упрощаются в два раза по каждому измерению, получается, что на одну сторону тратится в 2 × 2 = 4 раза меньше ресурсов, а на весь куб — в 24 раза меньше.

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

Сюжет и драматургия

В Doom были и геймдизайнерские новшества:

  • Не нужно было читать вступительный текст (его называют игровым лором) — игра рассказывала свою историю по мере прохождения.
  • Это была одна из первых игр с таким уровнем крови, таким количеством взрывов, ярости и жестокости. Сейчас мы, конечно, привыкли, но тогда это было свежо и ново.
  • Doom открыл портал в мультиплеер: помимо сюжетной части можно было устраивать турниры по сети.
  • Бритый космодесантник, дробовик, бензопила и пулемёт — до Doom у нас этого не было.

И такой момент: первые уровни Doom показали бесплатно в 1992 году, а потом уже в 1993 выпустили полную платную версию. Естественно, все её дико захотели. Free-to-play родился где-то вместе с Doom.

Великая игра, что говорить. Даже сейчас играется на ура. Спасибо тебе, Doom, за наше счастливое детство.

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Программистская задача с математическим уклоном
Андрюха, бензин и Игра престолов

Программистская задача с математическим уклоном.

easy
Java и JavaScript: в чём разница?
Java и JavaScript: в чём разница?

Нестыдные вопросы.

easy
Делаем свой блокировщик любой рекламы за 3 минуты
Делаем свой блокировщик любой рекламы за 3 минуты

Хакерский метод победить рекламодателей.

easy
5 навыков, которые нужны программисту на базовом уровне
5 навыков, которые нужны программисту на базовом уровне

Помогут вырасти и в профессии, и в карьере

easy
SSL-сертификаты и безопасный интернет

Ваше соединение надёжно защищено. Или нет.

easy
Лучшие одноплатные мини-компьютеры для работы и кодинга
Лучшие одноплатные мини-компьютеры для работы и кодинга

Системники размером с пачку чая

easy
Всё, что важно знать про современный язык программирования 1C
Всё, что важно знать про современный язык программирования 1С

На нём работает половина автоматизаций в российских компаниях

easy
Красивый алгоритм для перемешивания букв в словах (и не только)
Красивый алгоритм для перемешивания букв в словах (и не только)

Расширенная веб-версия простого проекта

medium
Зачем вам jQuery
Зачем вам jQuery

Каждый год говорят о том, что jQuery уже не тот, но продолжают его использовать. Почему? Вот почему.

medium
easy