ID Tech 1: Двигателят на Doom — архитектура, WAD и source ports

ID Tech 1 — вътрешностите на двигателя на Doom: архитектура, WAD файлове, source ports (PrBoom, ZDoom, Chocolate Doom) и историята на революционния енджин.

Автор: Leandro Alegsa

Енджинът на Doom, понякога наричан ID Tech 1, е софтуерната основа зад класическата видеоигра Doom. Този енджин е използван и в няколко други заглавия — например в Doom 2 (но не и в Doom 3, която разчита на съвсем различна технология). Силно модифицирани версии на двигателя са използвани също в Heretic, Hexen и Strife, а огромна общност от фенове продължава да поддържа и разширява кода чрез модификации и source ports.

Архитектура и представяне на нивата

Двигателят на Doom реализира триизмерно усещане върху двумерни основи — често наричано "2.5D". Нивата се описват с набор от структурни обекти, включително linedefs, sidedefs, sectors, verticies (вертекси) и things (чудовища, предмети, декорации и т.н.). Тези конструкции дефинират геометрията (стени, подове, тавани) и позициите на интерактивните обекти.

За бързо решаване кои части от сцената да се рисуват и в какъв ред, eнджинът използва техника, наречена разделяне на двоичното пространство (Binary Space Partition, BSP). BSP дървото разделя картата на подпространства (nodes и subsectors), което позволява:

  • ефективно определяне на видимите сегменти (видимост),
  • рисуване в правилен ред (отзад напред) без сложни тестове за видимост,
  • оптимизация на колизиите и физическите проверки.

Секторите в Doom имат отделни стойности за височината на пода и тавана, светлината и текстурите — това дава възможност за многообразие в нивата, но и създава ограничения: няма истински наклонени повърхности (slope), нито истинско "room-over-room" (над/под) — пространствата са планарни и разграничени по сектори.

WAD: форматът за данни

Всички ресурси за играта — карти, графики, звуци и палитри — се пакетирани в WAD файл. WAD форматът има заглавна таблица (с маркировка IWAD за официален образец и PWAD за добавки) и списък с "lump"-ове (блокове данни). За картите обичайните lump имена включват THINGS, LINEDEFS, SIDEDEFS, VERTEXES, SEGS, SSECTORS, NODES, SECTORS, REJECT и BLOCKMAP; тези lumps позволяват на двигателя да възстанови геометрията и логиката на ниво.

Освен картите, WAD съдържа и графични елементи: sprite-ове за обекти, "flats" (текстури за под и таван), текстури за стени и таблици с палитри като PLAYPAL и COLORMAP, които контролираха начина, по който цветовете се интерпретират при палитрата от 256 цвята.

Рендериране и производителност

Енджинът рендерира сцените изцяло от процесора, а не от видеокартата, защото по времето на първоначалното развитие (началото на 1990-те) хардуерното 3D ускорение не беше широко разпространено. Това наложи използването на много ефективни алгоритми, за да могат игрите да вървят и на по-бавни машини:

  • колонно-базиран (column-based) софтуерен рендър — стените се изчертават като вертикални колони, мащабирани според дистанцията;
  • VIS таблици и REJECT масив, които предварително ограничават проверките за видимост между секции;
  • blockmap за ускорение на колизиите и търсене на обекти в близост.

Графиката използва 8-битова палитра (256 цвята) и не прави переспективно-коректно текстуриране както съвременните 3D енджини — резултатът е характерен визуален стил и много висока скорост на рендериране за своето време.

Ограничения и хакове

Поради своята 2.5D природа и архитектура, оригиналният двигател има някои известни ограничения: липсват наклонени повърхности, истински многослойни помещения (room-over-room) и динамични 3D модели за всички обекти (обектите са предимно 2D sprite-ове). Много от по-новите ефекти в WAD картите са реализирани чрез хитри трикове (например привидни височини, скриване/показване на обекти или специални светлинни ефекти).

Изходен код, лиценз и source ports

Двигателят е написан предимно на C. id Software публикува изходния код, а той бе разпространен като свободен софтуер под Общия публичен лиценз на GNU, което позволи на общността да създаде множество модификации и т.нар. source ports — версии на двигателя, които добавят нови възможности или подобряват съвместимостта.

Популярни source ports включват (с някои типични характеристики):

  • Boom / PrBoom / PrBoom+ — подобрена съвместимост и допълнителни игрови възможности, широко използвани за правилно стартиране на модове и демота;
  • Zdoom / GZDoom — въвеждат разширени функционалности за скриптиране (DECORATE, ACS, ZScript), true 3D ефекти, 3D мапинг и поддръжка на OpenGL (в GZDoom);
  • Chocolate Doom — целенасочено пресъздава оригиналното поведение и бъгове, за да осигури автентично преживяване;
  • Други проекти (Eternity, Doomsday, Odamex и др.) добавят мрежов мултиплейър, модерни графични рендери, 32-битови цветови пространства и поддръжка за съвременни операционни системи.

Source ports често добавят функции като мишка искачане (mouselook), поддръжка за високи резолюции, честоти на опресняване, нови графични филтри, truecolor палитри и по-сложни скриптови възможности, като в същото време се стремят да запазят съвместимостта с оригиналните WAD файлове.

Наследство

Двигателят на Doom е исторически важен — не само защото играта сама по себе си определи стандарти за жанра, но и защото моделът на отваряне на изходния код и активната общност покрай него доведоха до богата екосистема от инструменти, редактори на нива (WAD editors), модове и source ports. Тези усилия продължават да поддържат играта жива и достъпна на модерни платформи, а архитектурата на ID Tech 1 остава изучавана като пример за ефикасни алгоритми за рендериране и структуриране на игрални светове.

Енджинът на Doom остава един от най-портируемите и адаптивни енджини за шутъри от първо лице — шутъри от първо лице. Програмистът лесно може да го накара да работи на нов тип компютър благодарение на чистия C код и минималните зависимости, което го прави подходящ за портване към джобни устройства, ретро хардуер и съвременни системи без 3D ускорение.

Въпроси и отговори

В: Какво представлява двигателят на Doom?


О: Двигателят Doom е компютърният код, който стои зад видеоиграта Doom. Той се използва и от няколко други игри, включително Doom 2 (но не и Doom 3, който има собствен двигател). Силно модифицирани версии на енджина Doom се използват в Heretic, Hexen и Strife.

Въпрос: Как енджинът на Doom представя 3D нива?


О: Двигателят Doom използва техника, наречена разделяне на двоичното пространство, за да представи 3D нива по начин, който компютърът може да обработи бързо.

В: На какъв език е написан енджинът Doom?


О: Двигателят Doom е написан основно на C.

В: Има ли версия на Doom Engine с отворен код?


О: Да, изходният код на енджина на Doom е публикуван безплатно под общия публичен лиценз на GNU. Много фенове са направили свои собствени модифицирани версии, наречени source ports.

В: Кои са някои популярни портове на оригиналния двигател Doom?


О: Популярните сорс портове включват Boom, PrBoom, PrBoom+, Zdoom и Chocolate Doom.

В: Какви структури използва енджинът Doom, за да представя нивата?


О: Дум енджинът представя нивата вътрешно, като използва структури, наречени linedefs, sidedefs, sectors, verticies и things (т.е. чудовища, предмети, декорации и т.н.).

В: Как се четат данни от файлове?


О: Двигателят doom чете нива и други данни от файл, наречен WAD.


обискирам
AlegsaOnline.com - 2020 / 2025 - License CC3