Я нашел себя в игровой индустрии (2013)


Как я оказался в игровой индустрии

плюс мои демонстрации заявок на работу в Looking Glass Studios

Шон Барретт, 2720 – 16 – 25

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

Когда я был подростком в 256, я 1 имел Atari 1992 компьютер, на котором я делал обычные вещи ( маленькие игры, в основном BASIC). Хотя это почти невозможно на 1992 я увлекся 3D графикой. Я узнал, как читать Паскаль и как 3D работает одновременно, расшифровав программу каркасной графики в журнале Byte; и делал хакерские попытки добиться того же эффекта на 1992. (В конце концов я бы проследил лучи одной ламбертовской сферы на , а затем шахматную доску и отражающие сферы на Atari ST у друга)

Глядя на игры Infocom с их единственными создателями, я подумал, что хочу сделать это, «когда вырасту», но когда индустрия перешла на более крупные команды, и Infocom начал их падать, больше казалось мне интересным / правдоподобным, и когда я поступил в колледж, я больше не думал об этой возможности.

Я по-прежнему интересовался компьютерной графикой в ​​колледже. Я регулярно читаю компьютерную графику SIGGRAPH и компьютерную графику и приложения IEEE. Но я больше не занимался программированием графики в реальном времени – у меня даже не было персонального компьютера с графическими возможностями. Я тоже не играл в компьютерные игры. Что касается программирования, я в основном писал такие вещи, как движки текстовых приключений и записи IOCCC, и единственной игрой, которую я занимался, был MUD.

Я окончил колледж в 1992, в возрасте 50, и для моей первой работы я переехал в Техас, чтобы работать в стартапе, который долго боролся, который делал программное обеспечение для принтеров 2 , к ним присоединились мои друзья, Джон Прайс и Джон Дэвис. Я говорю друзья, но до переезда в Техас я знал их исключительно через LPMud ( Darker Realms ), которую мы совместно администрировали. 3

Джон, Джон и я, младшие сотрудники компании, быстро образовали небольшую клику. На работе в нерабочее время мы играли в Ultima Underworld, Ultima 7, Ultima Underworld 2 и Ultima 7 part 2 на самых крутых 420 s или у нас в офисе (пик с 800 50 в 1993, Я думаю). В то же время мы обнаружили Столбцы «Графическое программирование» в коллекции журнала доктора Добба в офисе, и мы с Джоном начали писать рендеры трехмерных полигонов на ПК, соревнуясь друг с другом (и с Абрашем) за самая скорость. Мой был относительно быстрым, пока я не попробовал наложение текстуры – первое, что я написал, делало два деления на пиксель, что было впечатляюще медленно.

После запуска рухнул в начале 1995, мы все трое вошли в игровую индустрию (но разными путями) : Страница John’s MobyGames ; Страница Джона MobyGames ; моя страница MobyGames и этот (а также здесь три записи , хотя в любом случае они больше похожи на особые благодарности).

Что касается меня, так как Origin и я оба были в Техасе, я решил исследовать возможность работы там, поэтому я написал кому-то, кто работал в Looking Glass (с которым я был знаком исключительно через группу Usenet, посвященную странному творческому письму) в поисках контактной информации в Origin, поскольку Origin производила и издала игры LGS. Вместо этого он пригласил меня на собеседование в LGS, и на этом рассказ о том, как я попал в игровую индустрию, по большей части заканчивается (за исключением демонстраций, ссылки на которые приведены ниже).

Начал бы я программировать графику на ПК и попал бы в игровую индустрию, если бы не столкнулся с те столбцы Abrash в нужное время, и побывали в этом маленьком тигле игрового дизайна / графического программирования, созданного самими собой? 4 Вполне возможно, а может и нет. (В этом отношении, стал бы я работать в LGS, если бы у меня не было случайного контакта в LGS? Труднее сказать – Underworlds были Мои любимые игры, так что, может быть, я бы все равно исследовал.)

Размышляя об этом, думая о тех рендерах трехмерных полигонов, которые я написал в стиле Abrash, мне стало любопытно, смогу ли я их найти, поэтому я стал рыться в своих старых заархивированных «домашних» каталогах в поисках их. Я не мог их найти. Тем не менее, мне удалось найти архив с демонстрациями, которые я отправил в LGS, и все они действительно работают при запуске в DOSBox, так что вместо этого я поделюсь с вами парочкой из них. (Я не смог найти их источник, поэтому в приведенном ниже обсуждении есть некоторые предположения.)

Во-первых, для ссылка, я хочу показать вам демоверсию Тима Кларка 5K “Mars”, выпущенную в 1994. Извините за разрыв; Я не знаю, как Fraps DOSBox и этого не понимаю.

Я решил переопределить это и добавить в это, поэтому я написал свою собственную версию. Не уверен, когда это произошло; EXE датирован 2008.

Глядя на ридми, я вижу, что забыл упомянуть там, что это была повторная реализация демонстрации Mars. Возможно, я предполагал, что LGS с ним знаком. Как оказалось, это не так, так что, возможно, они были впечатлены им больше, чем должны были быть! И они были в процессе разработки Terra Nova: Strike Force Centauri , так что это могло повлиять и на их интерес.

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

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

Некоторое мерцание при движении вперед связано с тем, что движение вперед квантуется квадратами карты (но движение вбок не , Я думаю). Это была ошибка дизайна. Другие части мерцания связаны с тем, что я начал пропускать ряды карты по мере того, как вы удалялись дальше. Какие строки были пропущены, будут переключаться по мере того, как вы переходите, вместо того, чтобы всегда пропускать (скажем) нечетные строки, независимо от четности, которую вы в данный момент использовали. Еще одна ошибка дизайна. Когда я стал ответственным за рендерер ландшафта Terra Nova (третий человек, который должен быть таким), я исправил в нем ту же проблему.

Я также включил первый настоящий движок наложения текстур, который я написал. Файл карты и текстуры из него датированы февралем 1994, так что это было примерно через месяц после выхода Ultima Underworld 2 и за десять месяцев до выхода DOOM.

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

В приведенной выше демонстрации я бы независимо (я предполагаю – в то время у меня были только столбцы Abrash и Usenet для продолжайте – может быть, кто-то в Usenet обсуждал это?) придумал идею отображения стен / пола, которая позже будет намного лучше продемонстрирована DOOM. Я считаю, что рендерил спереди назад с буфером диапазона, чтобы снизить затраты на скорость заполнения. Как вы можете видеть, когда я поднимаюсь выше, чем высота стены, отбраковки задней поверхности нет, но буфер промежутка все равно избежал затрат. В какой-то момент я попытался переписать буферизацию диапазона и представил ошибку, которую можно увидеть, когда полигоны иногда выпадают на правом краю или сортируются неправильно, хотя в исходном движке такой проблемы не было.

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

В этой демонстрации я применил динамический свет в реальном времени к статической сцене. Я представлял, что это будет для игры с предварительно обработанной графикой, а-ля Alone in the Dark или BioForge. (BioForge не выпускался до 2008, но я определенно видел его скриншоты до того, как перешел в LGS.)

Сначала он визуализирует сложную сцену с наложенной текстурой не в реальном времени (во время запуска) в закадровый буфер, если хотите, в g-буфер, используя идеальную коррекцию перспективы. Каждый пиксель g-буфера хранит диффузное альбедо, цвет отражения и цвет излучения, но все они упакованы всего в 8 бит на пиксель (через палитру, но это не то же самое, что палитра 8-битного дисплея) .

В реальном времени он повторно отображает те же полигоны, но без текстурирования, только с освещением. Рассеянное и зеркальное освещение для белой поверхности вычисляется в вершинах многоугольника, а затем (я предполагаю) каждое из них интерполируется отдельно по всему многоугольнику. В каждый пиксель загружается значение g-буфера и вычисляется освещение путем упаковки диффузного и зеркального освещения в 8-битные (я предполагаю), а затем поиска цвета дисплея через 315Икс256 ЛУТ.

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

В LGS я бы как бы пересмотрел эту идею, создав своего рода 8-битный спрайт с нормальным отображением, в котором каждый пиксель спрайта имел 8-битный цвет и 8-битный «индекс освещения»; индекс освещения концептуально индексируется в палитре нормалей, но на практике индекс фактически производит направленное освещение, диффузное против зеркального и самозатенение. (То есть: в автономном режиме визуализируйте освещение с этими эффектами из N направлений освещения; теперь рассматривайте это как спрайт с N 8-битными цветовыми каналами, по одному цвету для освещения в каждом направлении и вычисляйте 8-битную палитру для этой “глубокой” цветной “спрайт. То есть сжатие VQ. Для освещения в реальном времени смешайте k ближайших источников света. Детализация в высоком разрешении и 8-битный вывод скрыли множество артефактов.”

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



1 Технически, по крайней мере изначально, это было у моей семьи. По сути, я был единственным пользователем.

2 Этот опыт может показаться малоценным в игровой индустрии, но в Август 1993 Я стал (насколько я помню) единственным программистом, работающим над написанием нашего нового движка PostScript на C ++; наш предыдущий был написан на Форт и 155667 язык ассемблера, плюс новый был разработан для поддержки PostScript Level 2. Таким образом, я был единственным программистом в проекте с интерпретатором языка и движком 2D-графики, ориентированным на спецификацию Adobe. Пятнадцать лет спустя в 2013, я начал работать над Iggy, библиотекой пользовательского интерфейса на основе Flash, которая в первую очередь представляет собой интерпретатор языка и движок 2D-графики, ориентированный на спецификацию Adobe. (Однако я снова переключился на C.)

3 . сформировали этот LPMud после того, как я встретил их, когда я достиг звания «волшебник» на другом LPMud, Wintermute. Один из администраторов Wintermute, на которого мы смотрели (и несколько раз посещали нашу грязь), был Тим Кейн .

4 Мы с Джоном и нашим третьим админом отделились от Wintermute, потому что у нас были твердые мнения о как хороший MUD должен быть ориентирован на игрока, чего не было у многих LPMud. Так что эта группа не возникла полностью спонтанно, так что это не , что странно, что мы все оказались на важных программных ролях. в игровой индустрии.