DOOM. Как в битвах с демонами закалялся новый жанр

Text
5
Reviews
Read preview
Mark as finished
How to read the book after purchase
Font:Smaller АаLarger Aa

4
Чемпион по наложению текстур
id Tech 1

Дизайн DOOM включал в себя сложную, доселе невиданную архитектуру уровней, которая опиралась на принципиально новый технологический фундамент. Движок DOOM, id Tech 1, работал с текстурами и освещением лучше, чем любая существующая на тот момент технология, а его скорость была прежде доступна только консольным играм. Последнее удалось осуществить благодаря скромной технологии BSP (binary space partitioning, двоичное разбиение пространства). Внедряя BSP, id гарантировала, что ее движок войдет в историю независимо от того, какая игра на нем будет сделана.

Базовая единица id Tech 1 – это вершина (vertex), точка в трехмерном пространстве. Вершины соединяются линиями, которые называются лайндефами (linedef). Когда вы добавляете к лайндефу переменную высоты, это (двумерное) вертикальное пространство с границей в виде лайндефа называется сайддефом (sidedef). На это пространство наносится текстура. Как только все вершины соединяются лайндефами, образуется многоугольник, называемый сектором, у которого есть свои собственные переменные высоты и освещения. Текстуры можно накладывать как на любые сайддефы, так и на «пол» и «потолок»: они называются виспланами (visplane), и их положение определяется формой сектора. Наконец, в сайддефе можно проделывать отверстия, чтобы создавать окна и двери, в результате чего свет и звук будут проникать из одного сектора в другой (рис. 7). Движок не позволяет создавать по-настоящему трехмерные карты, потому что сектора не могут быть размещены друг над другом, но он все еще очень эффективно создает иллюзию вертикальности окружения. id Tech 1, в отличие от движка Wolfenstein 3D, не требует, чтобы все объекты были ортогональны друг другу и располагались под прямыми углами, но он по-прежнему работает только со строго горизонтальными или вертикальными поверхностями: в игре не может быть наклонных полов или потолков. Это означает, что текстуры накладываются в установленных плоскостях и каждое смещение высоты потолка или пола (включая движущиеся объекты, такие как лифты) фактически дискретно и представляет собой границу между секторами. Джон Кармак объясняет:

«Главный прорыв в движке DOOM – все предыдущие игры собирали уровни из тайлов, в то время как DOOM свободно распоряжалась двумя измерениями. Такой подход стали называть 2.5D графикой, потому что карта уровня остается двумерной, а высота пола и потолков меняется. Кроме того, движок имел текстурированные полы и потолки и позволял настраивать в различных помещениях разные уровни освещенности, а не только привязывать их к позиции игрока, чтобы яркий свет вокруг него постепенно ослабевал. Так мы реализовали зоны, где свет мигает. Кроме того, мы могли динамически двигать пол и потолок, не снижая производительности. Двумерные линейные сегменты двигать туда-сюда было нельзя, поэтому двери в игре не могли распахиваться – только подниматься и опускаться. Но мы могли в любой момент как угодно менять уровни освещенности и любые высоты, не влияя на скорость рендеринга. Благодаря этим нововведениям появились некоторые геймплейные элементы».

Свобода выбора углов и высоты потолка/пола уже сильно отличала DOOM от Wolfenstein 3D, но два других фактора изменили обстановку еще кардинальнее. Сайддефы были разделены на три секции: верхнюю, среднюю и нижнюю. Обычные стены использовали только средние секции, а стены с отверстиями – все три. Таким образом уровни можно было наполнять деталями, не полагаясь исключительно на спрайты. На любой заданной вертикальной поверхности можно было отобразить три разные текстуры. Было бы куда проще нарисовать несколько текстур на одном текстурном атласе, а не добавлять лишние вершины. Но сама идея того, что стена может менять текстуру в зависимости от того, насколько высоко вы находитесь, все еще представляла собой концептуальный прорыв. В результате окружение получалось более детальным, а отдача от наложения текстур – максимальной. Сами текстуры id, разумеется, уже использовала в последние годы; Джон Кармак стремился задействовать их еще с 1990 года. После Hovertank 3D, в которой не было текстур, он с нетерпением ждал возможности перейти к следующей задаче.

Рис. 7. Вершина (1), лайндеф (2), сайддеф (3) и часть висплана (4) в DOOM на уровне E1M1


Ромеро говорит следующее:

«Мы сделали наложение текстур в Catacomb 3-D, потому что задались вопросом: „А что дальше?“; мы хотели превзойти себя. У нас получилось EGA-наложение текстур, которое на самом деле намного сложнее, чем VGA-наложение текстур. Таким образом, первым шутером от первого лица с наложением текстур стала Catacomb 3-D, а не Ultima. Ultima Underworld вышла в конце апреля 92-го, а неделю спустя мы выпустили Wolfenstein 3D с нашим VGA-текстурированием. Они сделали первое VGA-наложение, но в Catacomb 3-D в 91 году мы сделали первое [EGA-]наложение».

Тот факт, что подобная конкуренция графических стандартов продолжается и двадцать лет спустя, указывает на важность самой возможности наложения текстур для игр. Более того, комментарии Ромеро подтверждают мысль о том, что Catacomb 3-D была своего рода трамплином, скорее шансом протолкнуть дальше технологию, а не тщательно продуманным игровым опытом. Расцвела эта технология только в Wolfenstein 3D. Мы по-прежнему должны отдать должное Ultima Underworld, где текстуры накладывались не только на стены, но также на пол и потолок, а полы могли иметь переменную высоту и даже угол наклона. С точки зрения скорости Ultima – не ровня американским горкам DOOM, но на самом деле она не такая уж и медленная. Правда тот факт, что Ultima Underworld совсем не медленная по современным стандартам, может говорить скорее об общем снижении скорости в играх от первого лица (или, по крайней мере, во многих из них), вышедших после DOOM, – мы можем обвинить в этом Halo и бум консольных шутеров. Кармак не стремился создавать инновации сами по себе, он занимался прикладной инженерией:

«Никто в игровой индустрии не может заявить, что это он изобрел наложение текстур. Можно сказать, что ранние игры, такие как Wing Commander, имели масштабируемую спрайтовую графику, а масштабирование битмапов – это тоже своего рода наложение текстур, просто ограниченное. В Wolfenstein 3D и DOOM использовался другой принцип: они жертвовали степенями свободы ради более высокой производительности… Подход, которого я придерживался во время работы над всеми нашими ранними играми вплоть до Quake, заключался в том, что перемещаться по миру намного важнее, чем наклонять голову или пол. Отказавшись от этого, вы можете выиграть в чем-то другом. Инженерия – это вечный поиск компромиссов. Мы можем пожертвовать одним, чтобы добиться другого, а умная инженерия – это умение извлекать выгоду из каждого компромисса».

В любом случае наложение текстур в DOOM – это пример симбиоза технической сложности и дизайнерского видения. Цветовая палитра игры изначально неброская – Wolfenstein 3D (рис. 8) смотрится куда ярче по сравнению с DOOM, где преобладает серые, коричневые и металлические оттенки (рис. 9). Такая цветовая гамма была прочно вмонтирована в конструкцию движка. Это наглядный пример слияния художественного и технического развития, идущих рука об руку. Идея, по словам Кармака, состояла в том, чтобы ограничить палитру небольшим набором цветов, но при этом сохранить качество освещения «с плавным переходом от ярких цветов к более мрачным».


Рис. 8. Высококонтрастное наложение текстур в Wolfenstein 3D


Сам процесс подбора текстур для использования в игре тоже изменился – неявно, но сильно. Адриан Кармак и Кевин Клауд использовали новые графические возможности движка для исследования новых концепций в дизайне и выборе текстур. Основой для них становился сфотографированный и отсканированный материал: эта идея естественным образом вытекала из стремления моделировать «реальное» пространство – об этом говорилось в «Библии DOOM». Клауд объясняет:

«Многие игры могли похвастаться насыщенными цветовыми палитрами, близкими к мультфильмам. Но нас – по крайне мере меня – захватила идея все сканировать, потому что так графике можно было придать очень суровый, реалистичный вид. Все игры вокруг выглядели одинаково, а у нас еще и были ограничения по цветам, так что мы хотели посмотреть, можем ли мы выйти за рамки и создать что-то более грубое и грязное. Так что многое начиналось с источника отсканированного материала. Мы искали объекты для сканирования, даже когда нам требовалось просто настроить цветовую палитру или сделать фоновую текстуру. В то время в индустрии такого не было – в играх не так уж часто использовались настоящие фотографии, – и это действительно придало нашему стилю слегка иное направление: более суровое, чем то, к чему люди привыкли».

Рис 9. Более приглушенная цветовая и текстурная схема DOOM


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

 

В отличие от движка Wolfenstein 3D, id Tech 1 использовал висплан для отображения текстур на полу и потолке, что, несомненно, добавляет DOOM стиля: в темных коридорах создается ощущение клаустрофобии, которое затем противопоставляется «фотографиям окружающего мира» на текстурах, нанесенных на гигантские сайддефы – протоскайбоксы (двумерные фоновые изображения, внутрь которых помещается уровень; используются для создания ощущения масштаба, аналогично маскам[45] в кино)[46]. Контраст между внутренними и внешними пространствами усиливает ощущение масштаба, которое подчеркивают малозаметные, но постоянные вариации высоты пола и потолка относительно друг друга. Все виспланы также могли наносить урон – стоило добавить несколько простых анимированных текстур, и на свет появились токсичные отходы, лава, опускающиеся потолки и наносящие урон стены. В ретроспективе это может показаться простым, но на самом деле это был огромный скачок вперед с точки зрения диапазона представляемых в видеоиграх пространств. Окружающая среда могла представлять опасность даже без врагов – а не просто была областью, по которой можно перемещаться. Может быть, DOOM полностью является аркадой, но, случайно или нет, она изобрела основные технологические и дизайнерские инструменты, которые позволили шутерам от первого лица отойти от стандартного вида и превратиться в такие сурвайвал-хорроры, как Amnesia: The Dark Descent, головоломки типа Portal и платформеры вроде Mirror’s Edge[47].

Помимо управления геймплеем и атмосферой, другой важный фактор, делающий новый движок выдающимся, – освещение. id Tech 1 позволил создать два различных способа освещения, которые придавали геймплею уникальные ощущения. Первым были переменные уровни освещенности. В Wolfenstein 3D все локации освещались яркими и плоскими полосами света, а в Ultima Underworld – однообразными тусклыми пятнами, тогда как в DOOM пространства различались не только масштабом, но и темнотой. Автоматическое погружение во тьму помогало усилить иллюзию вертикального пространства и горизонтального расстояния. Темнота, особенно в сочетании со звуковым потоком, помогала уровням ощущаться большими и целостными, а не простыми наборами декораций. Уровень освещенности как инструмент дизайна позволял отделять одни места от других: так можно было намекать игроку, что ждет его дальше, и таким образом формировать его опыт. Мало что могло быть страшнее, чем монстры, рычащие где-то в темноте, или перспектива попасть в «темную» комнату, выйдя из «светлой». DOOM не имела никакой стелс-системы, но контраст между темными и хорошо освещенными областями и использование освещенности для тактического преимущества в бою стали затем основными элементами жанра. Кульминацией стала Thief: серия стелс-игр от первого лица от студии Looking Glass. Независимая настройка уровней освещенности для каждого сектора привносила больше вариативности в пространства, текстурированные сходным образом. В зависимости от позиции игрока и в сочетании с затухающим светом это придавало окружающей среде мрачности, что, по мнению Ромеро, было самой главной частью игрового опыта:

«Среди всех движков, что я видел, на этом лучше всего создавать уровни: они словно сами ложатся в тематику игры. Все потому, что в движок вшита возможность приглушать освещение по мере движения. Так что вы можете устанавливать секторам различное освещение, но игра будет затемнять их, пока вы будете от них отходить […] так что они будут казаться игроку страшными, нравится ему это или нет. Это было нечто новое: большинство людей никогда раньше не видели движок с затухающим освещением».

Если затухающее освещение делало уровни более пугающими, то мерцающий свет вызывал настоящую панику – особенно в сочетании с ситуациями, когда при срабатывании триггера освещенность резко менялась. Вторая особенность улучшенного освещения движка – возможность включать и отключать свет в режиме реального времени – сильно расширила инструментарий дизайнера. Сложность состояла в том, чтобы сбалансировать эти новые возможности, потому что они могли замедлить темп игры. Каждое из новшеств заставляло игрока задумываться о том, стоит ли ему вообще входить в помещение, где периодически начинаются вызывающие эпилепсию вспышки, так что настроение Wolfenstein 3D в духе «беги и стреляй» бесследно пропадало. Опять же, технология – как динамичное окружение (включая сдвигание секторов для создания лифтов, ловушек и опускающихся потолков, а также ступеней и ям), так и новые способы управления светом – давала дорогу новым дизайнерским возможностям. Появился новый тип внутриигровой среды, и многочисленные эксперименты в этой области Ромеро и Петерсена во многом определили дизайн DOOM. Это классический пример взаимодействия технического прогресса и творческой деятельности, которое определяет игровую индустрию, пожалуй, больше, чем любые другие медиа.

Вершины, лайндефы, сайддефы, сектора и все связанные с ними переменные вместе взятые образуют уровень. Все усложняется, когда дело доходит до прорисовки всего этого добра в режиме реального времени, и именно здесь проявляется настоящая гениальность движка Джона Кармака. Частота перерисовки всего, что видно на экране, называется FPS – frames per second, количество кадров в секунду. Высокая частота кадров дает вам более скоростные и управляемые бои, менее рваные анимации, а также плавный и быстрый игровой процесс. Это и был Скверный Грааль DOOM. Задача любого игрового движка – выдавать игроку необходимую картинку как минимум x раз в секунду, что бы ни происходило в игровом мире и как бы ни менялись его элементы. К этому нужно добавить фоновые вычисления, которые на экране никак не отображаются, все эти числа и алгоритмы – пока мы говорим только о графике. WAD-файл (файл со всеми ассетами DOOM – аббревиатура расшифровывается как Where’s All the Data, «Тут все данные») представляет собой набор инструкций, которые буквально диктуют игре, как отображать уровень: «Нарисуй точку здесь и здесь, соедини их вместе и прикрепи текстуру a высотой b пикселей; затем соедини все это вместе и накрой пол в этом секторе текстурой c, а потолок текстурой d, и затем наложи здесь свет e». А затем все это перерисовывается x раз в секунду. Очевидно, что процесс этот довольно сложный; к тому же дизайнеры добавляют в игру главного героя, который двигается по уровню, врагов, которые тоже ходят туда-сюда, летающие огненные шары, взрывающиеся бочки, лифты и так далее. Чтобы сократить количество нужных вычислений, нужно рисовать только то, что игрок видит на экране: таким образом, уменьшается количество данных, требующих обработки. Но прорисовка все равно требует много ресурсов, и именно из-за нее частота смены кадров может снижаться, создавая визуальные «тормоза», которые портят игровой опыт. По словам Ромеро, эта проблема «выявила ограничения того способа, которым Кармак рендерил сцены, потому что он для этого использовал списки секторов, а я создал какую-то штуку с рекурсивными секторами, и из-за этого игра работала очень медленно».

Ромеро говорит о списке, где каждому сектору WAD присваивается уникальный идентификатор, так что механизм рендеринга может точно определить, что и как он должен отрисовывать. Проблема в том, что если движок рендерит каждый сектор, то он делает ненужную работу. Классический способ отрисовать все объекты, находящиеся внутри поля зрения игрока (так называемый алгоритм художника), – это начать с рисования фона, затем нарисовать те объекты, что находятся дальше всего, и так далее вплоть до самого переднего плана. Другие примеры, с помощью которых можно представить себе этот процесс, – это набор слоев Photoshop или стопка прозрачных пластиковых листов. Следующая проблема заключается в том, что некоторые объекты, которые отрисовываются в результате этого процесса, на самом деле могут быть невидимы, если их закрывают другие объекты. Например, если яму с лавой не видно из-за низкой стены, но анимированная текстура лавы при этом перерисовывается сорок раз в секунду, то получается, что ресурсы, которые уходят на ее рендеринг, на самом деле тратятся впустую. Таким образом, процесс рендеринга замедляется, а частота кадров снижается. В поисках решения этой проблемы во время работы над портом Wolfenstein 3D для Super Nintendo Кармак решил реализовать алгоритм двоичного разбиения пространства, или BSP.

BSP – это, по сути, способ выяснить, как различные сектора связаны друг с другом, и таким образом избежать ненужного рендеринга. Этот алгоритм перемещает трудоемкие вычисления для расчета того, какие объекты видны из той или иной точки, на итоговую часть процесса создания уровня. Этот процесс завершается созданием BSP-таблицы, которая содержит данные для графического движка, чтобы установить, какие объекты и в каком порядке рендерить – таким образом, этим не приходится заниматься в режиме реального времени в процессе игры. BSP разбивает уровень на части, которые называются подсекторами – их составляют многоугольники, содержащиеся внутри секторов. У каждого подсектора имеется список связанных с ним секторов. Механизм рендеринга движется вниз по дереву, пока не найдет нужный подсектор, а затем проверяет связанные с ним сектора вместо того, чтобы при каждой перерисовке экрана всякий раз вычислять связанность секторов, так сказать, «обычным способом». По сути, BSP работает как предметный указатель в книге, позволяя быстро и легко находить связи, зависимости и иерархии. Таким образом, как и любой другой алгоритм индексирования, BSP весьма значительно сокращает время рендеринга и, следовательно, увеличивает частоту смены кадров. Считается, что Кармак узнал о BSP из работы Брюса Нейлора, который опубликовал ряд статей о BSP в начале 1980-х годов. Там он ссылался на концептуальную идею BSP, или «предварительную версию», которую Роберт Шумакер предложил за десять с лишним лет до того. Кармак, однако, говорит, что впервые он наткнулся на описание этого принципа в книге Computer Graphics: Principles and Practice («Компьютерная графика: принципы и практика») и уже какое-то время ломал над ним голову. О его опыте внедрения BSP полезно рассказать, потому что он в красках показывает, как компьютерные науки существовали в эпоху до интернета:

«Это не очень важно, но интересно: когда я начал работать над BSP, Брюс Нейлор приехал к нам и подарил мне копии своих статей. Так интересно разговаривать с людьми о прошлом. Конечно, теперь у вас есть интернет. Сейчас вы можете найти все что угодно. Но в те годы найти перепечатки старых научных статей было большой удачей. Раньше я пользовался услугами справочных служб: вы платили им где-то двадцать пять долларов, а они высылали вам ксерокопии старых исследовательских работ. Это был совершенно другой мир. Большую часть своих знаний о программировании я извлек где-то из трех справочников, потому что других книг у меня не было. Приходилось доходить до всего самому. Поэтому оказалось, что в свое время я переизобрел много классических вещей, таких как код Хаффмана[48] или LZW[49]. Я так гордился своими открытиями, а потом узнавал, что все эти вещи уже давно придуманы, причем придуманы гораздо лучше».

 

Кармак первым применил технологию BSP для игр, и с тех пор она прижилась в основе огромного количества игровых движков. Наряду со многими другими достижениями DOOM, использование Кармаком двоичного разбиения пространства стало исключительно важным наследием для игр в целом. Каковы были результаты? Как выразился Ромеро: «Именно тогда все заработало супербыстро и BSP переродилось для компьютерных игр». В отличие от остальных, Кармак говорит о своих прорывных достижениях намного скромнее:

«Людям нравится искать особый, волшебный ингредиент. Им нравится искать такие истории. Но почти любого результата можно достичь несколькими способами. И работа над DOOM начиналась с другого подхода, который был не таким быстрым, как мне хотелось. Впервые я использовал BSP в порте Wolfenstein 3D для Super Nintendo, и скорость получилась выше, чем при рейкастинге[50]. А потом, когда я вернулся к работе над DOOM, я продолжил использовать этот метод, потому что он оказался эффективным и здесь. И наоборот, движок Build (Duke Nukem 3D) не использовал BSP и был настолько же быстрым, насколько и технологии DOOM. Но, безусловно, благодаря успеху нашей игры тысячи людей узнали, что такое BSP, и даже начали изучать его с научной точки зрения».

И напоследок: важно помнить, какое множество технологий, минутой славы для которых стала DOOM, до этого понемногу эволюционировали на заднем плане. Сам Кармак считает, что 3D-игры с момента выхода Hovertank 3D развивались по относительно плавной кривой. Клауд это подтверждает:

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

Принимаете ли вы позицию Кармака о том, что если бы не он, это сделал бы кто-нибудь другой, или вам ближе более привычная история «о волшебном ингредиенте» – так или иначе, технология и геймдизайн в id Tech 1 слились особенно волшебным и эффективным способом. Результат вошел в историю.

45Блуждающая маска – разновидность технологий комбинированных съемок, позволяющая совмещать актеров и другие объекты с произвольным фоном. Осуществляется при помощи многократной экспозиции в сочетании с движущейся непрозрачной маской на вспомогательной кинопленке. – Прим. пер.
46Так, база на Фобосе, по-видимому, расположена в окрестностях пещеры Яншо, Китай. – Прим. авт.
47На самом деле Mirror's Edge лучше всего рассматривать как игру про вождение с системой комбо. – Прим. авт.
48Код Хаффмана – классический метод сжатия текстовых данных, предложенный в 1952 году аспирантом MIT Джозефом Хаффманом. Несмотря на относительную примитивность, используется до сих пор. – Прим. пер.
49Алгоритм Лемпеля – Зива – Уэлча (LZW) – это универсальный алгоритм сжатия данных без потерь, названный в честь разработчиков. – Прим. пер.
50Рейкастинг – один из методов рендеринга в компьютерной графике, при котором сцена строится на основе замеров пересечения лучей с визуализируемой поверхностью. – Прим. пер.
You have finished the free preview. Would you like to read more?