Как Doom изображала объём без полноценного 3D

Главный инженерный ход Кармака заключался не в том, чтобы заставить компьютер просчитывать произвольный трёхмерный мир. Doom ограничивала устройство уровней: карта строилась из участков пола, стен и потолка, заданных на плоскости, а высоты задавали отдельно. Поэтому коридоры могли подниматься и опускаться, но одна комната не могла располагаться прямо над другой. Такую модель часто называют «2,5D»: для игрока пространство выглядит трёхмерным, хотя его геометрия устроена проще.

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

Как движок не тратил силы на невидимое

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

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

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