Что за программа дум

Про Doom, мне кажется, знают вообще все. Все ныне живущие люди. Да даже сам бывший министр культуры господин Мединский в него якобы шпилил. Ибо данный продукт является. как сказать, символом эпохи. Он «сделал прорыв» в игровой индустрии, укрепив позиции Id Software на рынке.

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

Да, в игре есть лишь «вертикально» и «горизонтально». Но, но, ребята, для 1993 года это был прорыв. Подобного никто и никогда раньше не делал ( ну ладно, те же id Software сделали Wolfenstein 3D, Doom лишь укрепил позиции конторы ).

Люди хватались за голову: как это игра на двух дискетах? Как это она «больше весит»? Билл Гейтс же уверял, что 640 килобайт оперативы хватит вообще на всё и навсегда. Помню обрывки интервью из журнала «ЛКИ», где разработчики и журналисты рассказывали про Doom. Один американец сказал, что в то время еще не был связан с игровой индустрией и вообще являлся школоло.

DOOM ЗАПУСТИЛИ НА БЛОКНОТЕ #shorts

Но батя где-то достал заветные дискеты с игрой. Парень нахлебался сиропа от кашля с утра пораньше, выблевал свои потроха у всех на виду за завтраком, в итоге ему разрешили остаться дома. Несколько часов в Doom — кайф по тем временам. Разработчик из России вещал, мол, им в офис лично Id Software из-за рубежа прислали две дискеты «на обзор».

Они все сделали, оставили Doom в личное пользование и. потеряли. Офисный траур на неделю.

Вторая причина : условия «Shareware». Условно-бесплатное распространение, проще говоря. Хочешь — плати, хочешь — нет. WinRAR по такой же схеме работает. Как итог, пользуются все, но не платят. Не платят, но продукт-то НА СЛУХУ. Известность в ту пору Id Software ой как нужна была. Я нашел следующую информацию: к 1995 году игру купили 1000000 пользователей, а запустили 10000000 «уникальных» раз.

Не хило?

Тачбар Macbook Pro (2016 год)

Канадец сделал это почти сразу же , как только Apple представили миру новую линейку Маков с сенсорной панелью над клавиатурой. Она занимает всю ширину клавы, заменяя кнопки от «Esc» до «F12». Играть можно, но, как вы понимаете, 10 из 10 шакалов, а в меню находиться вообще невозможно — изображение становится супер размытым.

Фотоаппарат Kodak 1998 года выпуска (2019 год)

В этот раз отличился американец с Youtube-канала LGR . Он взял фотоаппарат Kodak Digital Science DC260 ZOOM, имеющий собственную ОС ( что, в общем, было редкостью в 1998 году ), и запустил Doom.

Обычный диспетчер задач ПК (2020 год)

А чем вы занимаетесь на карантине? Макс Хольт из ноунейм страны смог запустить Doom на ПК ( бурные овации ). Да не просто на ПК, а в диспетчере задач, благо у Макса в наличие имеется сервак с 896 ядрами. Графон в*ратый, за цвет отвечает градиент ( чем сильнее нагрузка, тем ярче светится «квадратик» ), но. это работает. А мы продолжаем, котаны!

Клавиша клавиатуры «Оптимус Максимус» (2016 год)

Вы знаете Артемия Лебедева? Ну знаете и знаете. Его студия в 2008 году внезапно выпустила клавиатуру под названием «Оптимус Максимус». Примечательна она была тем, что обладала настраиваемой клавишей с цветным экраном. По задумке авторов, народ мог бы оформить её под себя. Швейцарец под ником «radio4active» так и сделал . Более того, он «завёл» сразу второй Doom, с модами.

Ну. технически, игра запущена на обычной ПеКе. Но спец. программы ежесекундно делают скриншоты, транслируемые на экран клавиши «Оптимус Максимус». Такие дела.

Источник: dzen.ru

Doom все части серии игр по порядку хронологично

Pay-day

Игровые серии

Автор Hatchery Просмотров 27.9к. Опубликовано 14.11.2020

Серия игр Doom, как и другие шутеры развивались долгое время, и взгляд на этот жанр менялся не один и не два раза. Некоторые из них успели стать брендом, другие – конвейером, а от одного техно-демо железо игроков могло отправиться в мир иной. Но сегодня мы расскажем об особенном представителе жанра. Впрочем, читатели уже видели заголовок и первые строки, так что нет смысла создавать интригу. Мы расскажем о серии игр Doom.

Как появилась id Software

Все началось с журнала Softdisk и забавного платформера под названием Commander Keen. Небольшая группа сотрудников написала игру и отправила в офис сторонней компании. В результате конфликта с руководством Softdisk произошел раскол и появилась новая компания – id Software. Во главе новой компании встали Джон и Джон – Ромеро и Кармак.

Кармак верил, что ПК могут конкурировать с консолями на графическом поприще. Он начал работать над трехмерной графикой, в результате чего появился новый графический движок для Wolfenstein 3D, позволяющий видеть трехмерную картинку “из глаз” персонажа. Это дало начало новому жанру, first-person shooter. Именно появление этого движка позволило в будущем создать Doom.

Doom

doom 1

Первая часть Doom вышла в декабре 1993 года и изменила саму концепцию игр для ПК. В 80-e в кинематографе доминировали хорроры и научная фантастика, так что можно легко проследить, откуда Кармак черпал идеи.

Игра произвела настоящую революцию – движок был улучшен, геймплей сохранил свою взрывную скорость, но на этот раз уровни выглядели мрачнее и были наполнены множеством демонов. Дизайн, вдохновленный Aliens и Evil Dead 2, значительно отличался от Wolfenstein 3D.

Сюжетная линия

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

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

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

Моды и обвинения в насилии

Но это еще не все – id Software объединила данные игры (графику, музыку, уровни) в файлы WAD, отделив их от основного движка Doom. Это позволило сообществу модмейкеров менять и добавлять контент, не затрагивая основные файлы игры. Результатом этого поступка стало образование вокруг Doom сообщества мододелов, живущего и по сей день. Похожий подход впоследствии был применен такими компаниями, как Valve и Blizzard.

Читайте также:
Hp email smtp plugin что это за программа

Выход Doom привлек внимание не только геймеров, но и людей, довольно далеких от игровой индустрии. Начались массовые дебаты о насилии в видеоиграх. В них принимали участие все – политики, родители, разнообразные критики. Эти споры продолжаются до сих пор. Впрочем, сам Кармак не сомневается, что его игры несут чистый позитив.

Что ж, они определенно помогают снять стресс.

Doom II

doom 2

После успеха первой части на рынке выход продолжения был предсказуем. В следующем году id Software выпустили сиквел. Он был похож на первую часть, в наше время его могли бы продавать в качестве DLC. Команда дизайнеров пополнилась Петерсоном, МакГи и Гринном, которые сходу включились в работу и принялись создавать новую партию уровней, а Кармак приступил к работе над новыми технологическими прорывами.

Doom II представил аудитории игроков одно очень важное нововведение – соединение через DWANGO (Dial Up Wide Area Network Games Operation). Так начали появляться первые многопользовательские сервера.

Не обошлось и без забавных ситуаций – в Германии Doom II попал в список игр, запрещенных к продаже. Запрет сняли только спустя долгих 17 лет, решив, что игра не будет пользоваться популярностью у молодежи и вызывает в настоящее время исключительно художественный интерес.

Doom 64

doom 64

После завершения разработки Quake из id Software ушел Ромеро. Разработка следующей Doom была доверена Midway Games. Игра разрабатывалась для приставки Nintendo 64. Команда значительно переработала графику для консоли. Возможно, именно благодаря особенностям приставки графика в этой части выглядит несколько “пластилиново”, особенно монстры.

Говорят, примерно в эти времена началась тенденция “переносить Doom на все, что сможет его запустить”. Со временем эта часть была портирована фанатами на ПК. В 2020 году вышло официальное переиздание на современных платформах.

Это Невероятно! Мы собрали в один каталог больше 40 крутых бесплатных игр. Вот ссылка на каталог!

Final Doom

final doom

В 1995 году из группы любителей сформировался коллектив TeamTNT. Они разработали сюжетное дополнение под названием “TNT:Evilution”, рассказывающее о планах коварной корпорации UAC, продолжающей секретные эксперименты по межпространственному переходу.

id Software обратила внимание на команду и предложила им доработать еще одну сюжетную линию, “The Plutonia Experiment”. Именно эти эпизоды и превратились в Final Doom, увидевший свет в 1996 году.

Игра предложила фанатам совершить еще одну прогулку по своему “гостеприимному” миру. Она не пыталась плавно вводить игроков в курс дела, а сразу забрасывала их в самое пекло, наполненное мощнейшими противниками. На этом серия берет паузу, но мы-то знаем – Doom вечен.

Doom 3

doom 3

Шел 2004 год, и разработка нового Doom подходила к концу. В он, наконец, вышел в релиз и произвел… Неоднозначный эффект. Третья часть отступила от проверенной формулы и представляла из себя некий эксперимент. Задумка была в том, чтобы снизить динамичность геймплея в угоду хоррор-составляющей.

В результате те, кто ждал от новой игры динамики старых частей, оказались разочарованы. Игроки, которые приняли новые правила игры, в свою очередь разделились на два лагеря. На одних Doom 3 произвел серьезное впечатление в качестве хоррора, заставляя пугаться от каждого шороха и судорожно светить фонарем во все углы.

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

Графика и попытка реанимировать игру

Перейдем к графике – она заметно похорошела. Детализация марсианской базы была проработана на впечатляющем уровне. Игра света и тени, вспышки выстрелов в темных коридорах, множество мелких элементов и движущихся частей. К сожалению, Doom 3 не повезло заполучить себе в соседи Half-Life 2, с его прорывной системой физики и впечатляющим уровнем детализации.

У id Software получилось сделать хоррор-шутер. Но слишком нишевый, к сожалению. В дальнейшем они попытались угодить недовольной части сообщества, выпустив ремастер.

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

Doom 2016

doom 2016

После предыдущей попытки модернизировать концепцию Doom id Software взяла долгую паузу. Игра 2004 года получилась неоднозначной, а первоисточник был довольно далек от современной индустрии игр. Одно время велась разработка Doom 4, но разработчики зашли в тупик и в итоге игра была отменена.

По итогу новый Doom стал вольным пересказом классики. Игра получилась быстрой, сочной, жестокой и красивой. Разработчики отлично поработали с движком, выдав приятную картинку, не забыв при этом и об оптимизации. Игра выдает стабильный FPS и не предъявляет заоблачных требований к железу.

За кого играем?

В роли протагониста выступает уже не безымянный морпех, и не тот пугливый новичок из третьей части. Теперь вы играете за Палача Рока – этот парень уничтожает демонов столетиями. В результате некоторых событий его крестовый поход был вынужденно прерван, но теперь он снова свободен. Он чертовски зол и готов рвать и потрошить демонов на куски.

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

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

Коротко об оружии

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

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

ИИ, карты и минусы игры

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

Карты представляют из себя различные типы арен, но их неплохо разнообразит вертикальный геймплей.

Читайте также:
Optimizer pro что это за программа и нужна ли она

У игры по сути всего два минуса – невнятный мультиплеер, в который не хочется заходить и скудный сюжет, подающийся с помощью монологов, коротких кат-сцен и записок. По итогу перезапуск Doom определенно удался и грядущее продолжение серии стало практически очевидным фактом.

Doom Eternal

doom eternal

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

Появились новые вариации добивания и дополнительные жизни. Влияет ли это на скорость геймплея? Да, он стал еще быстрее. Делает ли это игру казуальной? Нет, ваши дополнительные жизни, броня и здоровье сгорят за несколько коротких секунд, стоит только расслабиться.

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

Добавили небольшие элементы паркура на локациях. На последнее, кстати, сообщество активно жаловалось, но существует пара аргументов в пользу этого решения. Рывки в воздухе и возможность цепляться за стены и балки позволяют быстрее перемещаться между аренами, а в некоторых местах игрок быстрее добирается до противника.

Сюжет

Сюжет же получился более спорным. С одной стороны, нам подали заманчивый кусочек нового лора. С другой – игроки до сих пор не получили ответов на некоторые вопросы, а история – развития, которого она, возможно, заслуживает. Да-да, мы помним заветы Кармака, но игроков уже раздразнили и теперь они хотят больше. Кроме того, стандарты с тех пор поменялись, и не один раз.

Сетевая игра

Мультиплеер в данный момент состоит из одного режима – battlemode. Его основа – неравное противостояние Палача Рока и двух демонов, пытающихся уничтожить его с помощью своих способностей и призыва братьев меньших. Играть можно, но хотелось бы больше режимов и карт, так как надоедает он довольно быстро.

Итог

Несмотря на все претензии и мелкие шероховатости, Doom Eternal поднял планку арена-шутеров на пугающе высокий уровень. Это новое поколение игры Дум. Он заткнул за пояс большинство современных аналогов и бросил вызов, отвечать на который, вероятно, придется самим же id Software, создавая новую игру в серии Doom. Надеемся, у них все получится.

Источник: pay-day.ru

Анализ исходного кода движка Doom: рендеринг

image

Карты разрабатывались дизайнером уровней в 2D с помощью редактора Doom Editor (DoomED). LINEDEFS описывали замкнутые секторы (SECTORS в исходном коде), а третье измерение (высота) указывалась посекторно. Первый уровень Doom E1M1 выглядит так:

image

После завершения работы над картой она нарезается методом двоичного разбиения пространства (Binary Space Partitioning, BSP). LINEDEF рекурсивно выбирались и их плоскости превращались в секущие плоскости. То есть LINEDEF разрезались на сегменты (SEGS) до тех пор, пока не оставались только выпуклые подсектора (SSECTOR в коде).

Интересный факт: И DoomED, и iBSP писались на… Objective-C на рабочих станциях NextStep. Пятнадцать лет спустя тот же язык почти в той же операционной системе выполняет игру на мобильном устройстве! [прим. пер.: в 2010 году Doom вышел на iPhone] Я немного поработал веб-археологом и мне удалось найти исходный код idbsp. На него стоит посмотреть.

Ниже представлен пример рекурсивного разделения карты первого уровня.

Уровень рекурсии 1

imageimage

Синим отмечена выбранная стена, превращённая в секущую плоскость (красная). Секущая плоскость выбиралась таким образом, чтобы сбалансировать BSP-дерево, а также для ограничения количества создаваемых SEGS. Зелёные ограничивающие прямоугольники использовались позже для отбрасывания целых фрагментов карты.

Уровень рекурсии 2 (только для правого подпространства)

imageimage

В результате секторы SECTORS разделялись на выпуклые подсекторы (обозначаемые как SSECTORS), а LINEDEFS разрезались на сегменты (обозначаемые как SEGS):

image

Процесс работы в целом

Вот как выглядит главный метод рендеринга ( R_RenderPlayerView ):

void R_RenderPlayerView (player_t* player)

Здесь выполняется четыре операции:

  • R_RenderBSPNode : все подсекторы на карте сортируются с помощью BSP-дерева. Большие фрагменты отбрасываются с помощью ограничивающих прямоугольников (показаны на предыдущем изображении зелёным).
  • R_RenderBSPNode : видимые сегменты SEGS проецируются на экран через таблицу поиска и обрезаются с помощью массива отсечения. Стены рисуются как столбцы пикселей. Размер столбца определяется по расстоянию от точки обзора игрока, позиция Y столбца через высоту связана с игроком. Основания и вершины стен создают плоскости visplanes. Эти структуры используются для рендеринга пола и потолка (они называются в коде flats).
  • R_DrawPlanes : Плоскости visplanes преобразуются из столбцов пикселей в строки пикселей и рендерятся на экране.
  • R_DrawMasked : Выполняется рендеринг «предметов» (врагов, объектов и прозрачных стен).

Сортировка двоичного разбиения пространства

Два примера с E1M1 (первой картой Doom) и BSP выглядят следующим образом:

//Начало системы координат находится в левом нижнем углу // Уравнение плоскости ax + by + c = 0 с // единичным вектором нормали = (a,b) // Корневая плоскость (разделяющая карту на зоны A и B): normal = (-1,0) c = 3500 // Плоскость A (разделяющая зону A на зоны A1 и A2): normal = (1,0) c = -2500 // Плоскость B (разделяющая зону B на зоны B1 и B2): normal = (-0.24,0.94) c = -650 // Подстановка координаты любой точки (x,y) в // уравнение плоскости даёт нам расстояние от этой плоскости.

image

Обход BSP-дерева всегда начинается с корневого узла с сортировкой обоих подпространств. Рекурсия выполняется для обоих дочерних узлов.

Пример 1: Игрок (зелёная точка) смотрит сквозь окно из точки p=(2300,1900):

imageimage

// Позиция игрока = ( 2300, 1900 ) // R_RenderBSPNode выполняется для секущей плоскости AB (-x + 3500 = 0): -2300 + 3500 = 1200 Результат положителен, значит, ближайшее подпространство находится ПЕРЕД секущей плоскостью. (A ближе, чем B). // Затем R_RenderBSPNode рекурсивно выполняется для двух дочерних узлов корневого узла: секущих плоскостей A1/A2 и B1/B2. // R_RenderBSPNode выполняется для A1/A2 (x — 2500 = 0): 2300 — 2500 = -200 Результат отрицателен, поэтому ближайшее подпространство находится СЗАДИ от секущей плоскости. (A1 ближе, чем A2). // R_RenderBSPNode выполняется для B1/B2 (-0.24x +0.97y — 650 = 0): -0.24 * 2300 + 0.97 * 1900- 650 = 641 Результат положителен, поэтому ближайшее подпространство находится ПЕРЕД секущей плоскостью. (B1 ближе, чем B2). Результат: зоны отсортированы от самой близкой до самой далёкой:

Пример 2: Игрок (зелёная точка) смотрит с секретного балкона в точке p=(5040, 2400):

imageimage

// Позиция игрока = ( 5040, 2400 ) // R_RenderBSPNode выполняется для секущей плоскости AB (-x + 3500 = 0): -5040 + 3500 = -1540 Результат отрицателен, поэтому ближайшее подпространство находится СЗАДИ от секущей плоскости. (B ближе, чем A). // Затем R_RenderBSPNode рекурсивно выполняется для двух дочерних узлов корневого узла: секущих плоскостей A1/A2 и B1/B2. // R_RenderBSPNode выполняется для B1/B2 (-0.24x +0.97y — 650 = 0): -0.24 * 5040 + 0.97 * 2400 — 650 = 468 Результат положителен, поэтому ближайшее подпространство находится ПЕРЕД секущей плоскостью. (B1 ближе, чем B2). // R_RenderBSPNode выполняется для A1/A2 (x — 2500 = 0): 5040 — 2500 = 2540 Результат положителен, поэтому ближайшее подпространство находится ПЕРЕД секущей плоскостью. (A2 ближе, чем A1). Результат: зоны отсортированы от самой близкой до самой далёкой:

BSP-деревья позволили сортировать SEGS из любой точки карты с постоянной скоростью, вне зависимости от позиции игрока. Ценой за это стали одна операция умножения и одна операция суммирования для каждой плоскости. Кроме того, благодаря тестированию ограничивающими прямоугольниками отбрасываются крупные части карты.

Читайте также:
Vkurse программа что это

Примечание: Не сразу очевидно, но BSP сортирует все сегменты SEGS вокруг игрока, даже те, на которые он не смотрит. При использовании BSP необходимо применение отсечения по пирамиде видимости.

Стены

При сортировке BSP стен (SEGS) с ближней до дальней, рендерятся только ближайшие 256 стен. Две вершины каждого SEGS преобразуются в два угла (относительно позиции игрока).

Примечание: В 1993 году только самые мощные машины 486DX имели FPU (сопроцессор для чисел с плавающей точкой), поэтому движок Doom вычислял все углы с помощью двоичного измерения углов (Binary Angular Measurement, BAM), работавшего только с числами int , формат float использовался редко. По той же причине точность, превышающая точность целых чисел, достигалась с помощью fixed_t , двоичного формата 16.16 с фиксированной запятой (подробнее об этом можно почитать здесь и здесь).

После преобразования в углы координаты X экранного пространства получались с помощью таблиц поиска ( viewangletox ). Поскольку BAM выполнялись в int , углы сначала масштабировались с 32 до 13 бит с помощью 19-битного смещения вправо, чтобы уместиться в таблицу поиска размером 8 КБ.

Затем стены обрезались согласно массиву отсечения ( solidsegs . В некоторых статьях о движке Doom упоминается связный список, но не похоже на то, что он использовался). После обрезки оставшееся пространство интерполировалось и отрисовывалось как столбцы пикселей: высота и координата Y столбца пикселей были основаны на высоте сектора SEGS и расстоянии от точки обзора игрока, соответственно.

Примечание об отсечении поверхностей: Отсечение невидимых поверхностей выполнялось с помощью angle2-angle1 > 180 . Рендерились только стены, находящиеся в области видимости.

image

Примечание: Не все стены состояли из единых текстур. У стен могла быть нижняя текстура, верхняя текстура и средняя текстура (которая могла быть прозрачной или полупрозрачной). Как заметно на видео ниже, это было удобно для симулирования окон: «окно» на самом деле является сектором с высоким полом и отсутствующей средней текстурой.

Интересный факт: Поскольку стены рендерились как вертикальные колонны, текстуры стен хранились в памяти повёрнутыми на 90 градусов влево. Этот трюк позволял полностью использовать функцию предварительного кэширования центрального процессора: процесс считывания тексела стены из ОЗУ также предварительно заполнял кэш ЦП восемью соседними текселами с каждой стороны. Поскольку последующие данные чтения уже находились в кэше ОЗУ, достигалось значительное снижение латентности считывания. Подробнее о предварительном кэшировании и выравнивании данных в памяти можно почитать в книге «The Art of Assembly Language programming» (раздел 3.2.4 Cache Memory).

Плоские поверхности (пол и потолок), или печально известные visplanes

При отрисовке столбцов стен верхние и нижние координаты экранного пространства использовались для генерирования «visplanes», областей в экранном пространстве (не обязательно непрерывных горизонтально). Вот как объявляется visplane_t в движке Doom.

// // Что же такое visplane? // typedef struct < fixed_t height; int picnum; int lightlevel; int minx; int maxx; byte top[SCREENWIDTH]; byte bottom[SCREENWIDTH]; >visplane_t;

Первая часть структуры хранит информацию о «материале», ( height, picnum, lightlevel ). Четыре последних члена определяют покрываемую зону экранного пространства.

Если два подсектора имеют одинаковый материал (высоту, текстуру и уровень освещённости), то движок Doom пытался слить их вместе, но из-за ограничений структуры visplante_t это было не всегда возможно.

Для всей ширины экрана visplane может хранить местоположение столбца пикселей (поскольку visplanes получаются проецированием стен на экран, они создаются как столбцы пикселей).

Вот три основные visplanes начального экрана:

image

Зелёная плоскость особенно интересна: она демонстрирует, что visplane_t может хранить прерывистые (но только в горизонтальном направлении) области. Поскольку столбец непрерывен, visplane может хранить его. Это ограничение проявляется в движке: некоторые подсекторы можно слить и рендерить с помощью одной visplane, но если между ними есть что-нибудь по вертикали, то слияние невозможно.

Вот скриншот и соответствующее видео, показывающие фрагментацию visplane.

image

Интересный факт: Жёстко заданный предел visplanes ( MAXVISPLANES 128) был большой головной болью для моддеров, потому что игра вываливалась и возвращалась в DOS. Могут возникнуть две проблемы:

  • «R_FindPlane: no more visplanes» : Общее количество различных материалов visplanes (высота, текстура и уровень освещённости) больше 128.
  • R_DrawPlanes: visplane overflow (%i) : при фрагментации visplanes их количество превысило 128.

Предметы и прозрачные стены

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

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

Профайлинг

Загрузка Chocolate Doom в Instruments под Mac OS X позволила выполнить кое-какой профайлинг:

Похоже, что порт [на iPhone] довольно точно соответствует «ванильному» Doom: бóльшую часть времени выполняется отрисовка стен ( R_DrawColumn ), потолка/пола ( R_DrawSpan ) и предметов ( R_DrawMaskedColumn ). Кроме отрисовки я заметил высокие затраты ресурсов на интерполяцию стен ( R_RenderSegLoop ) и преобразование visplane из столбцов в строки пикселей ( R_MakeSpans ). Затем, наконец, дело доходит до AI ( R_MobjThinker ) и обход BSP-дерева ( R_RenderBSPNode ).

image

С помощью инвертированного дерева вызовов можно увидеть, что бóльшая часть работы и в самом деле заключается в обходе BSP-дерева, рендеринге стен и генерировании visplanes: R_RenderBSPNode (второй столбец — процент потраченного времени).

image

Всё вместе

И вот, наконец, видео генерирования легендарного первого экрана, в котором можно увидеть по порядку:

  • Стены как строки пикселей, с ближних до дальних
  • Плоские поверхности как строки пикселей, с ближних до дальних
  • Предметы с дальних до ближних.

Интересные факты

  • Поскольку Doom разрабатывался на системе NeXTSTEP с линейной моделью виртуальной памяти, id Software решила отказаться от EMS и XMS, которые использовались в большинстве игр того времени. Вместо этого разработчики использовали DOS/4G, расширитель памяти, позволявший ПО получать доступ к ОЗУ в защищенном режиме в операционной системе с реальным режимом (DOS).
  • Рабочая станция NexT была настолько мощной, что оказалась способна выполнять редактор, игру и отладчик одновременно. Когда игра стала достаточно стабильной, код отправили по сети в PC, где он был скомпилирован под DOS/x86 компилятором Watcom. Благодаря DOS/4G код выполнялся в одинаковой модели памяти и на PC, и на NeXT.
  • Интересное видео, дополняющее книгу «Masters of Doom»:

Рекомендуемое чтение

  • Оригинальный исходный код, выпущенный в 1997 году, удобен для чтения, но в нём нет или почти нет комментариев, он не компилируется, в нём отсутствует исходный код звуковой подсистемы (из-за проблем с лицензированием).
  • Chocolate Doom: О, ДА! Это просто потрясающий порт, он основан на SDL и с brio скомпилируется практически на любой платформе. Именно этот порт я хакнул, чтобы генерировать видео для статьи.
  • Книга «Graphics Programming Black Book» Майкла Абраша. Помогает понять BSP-деревья и является отличным источником вдохновения. Этот парень может даже заставить вас полюбить ассемблер.
  • Masters of Doom: история id Software со множеством подробностей о создании Doom
  • Разработка игр
  • Алгоритмы
  • Реверс-инжиниринг

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru