Silnik Doom (id Tech 1) — budowa, działanie i najważniejsze porty

Silnik Doom (id Tech 1) — szczegółowy przewodnik: budowa, działanie, format WAD, techniki BSP oraz najważniejsze porty źródłowe (Boom, PrBoom, ZDoom, Chocolate Doom).

Autor: Leandro Alegsa

Silnik Doom, czasami nazywany id Tech 1, to kod komputerowy stojący za grą wideo Doom. Jest on również używany przez kilka innych gier, w tym Doom 2 (ale nie Doom 3, która ma swój własny silnik). Mocno zmodyfikowane wersje silnika Doom zostały użyte w grach takich jak Heretic, Hexen i Strife. Dzięki udostępnieniu kodu źródłowego i otwartej strukturze danych powstała ogromna społeczność tworząca mody, nowe mapy i liczne porty źródłowe.

Podstawy architektury

Silnik wykorzystuje technikę zwaną binarnym podziałem przestrzeni (BSP, ang. Binary Space Partitioning), aby reprezentować poziomy i szybko wyznaczać widoczne fragmenty sceny. Mapa jest zapisana w specjalnym formacie WAD i wewnętrznie przedstawiana za pomocą struktur takich jak linedefs, sidedefs, sektory, wertykali (vertices) oraz rzeczy (ang. things — potwory, przedmioty, dekoracje itp.). Silnik odczytuje poziomy i inne zasoby właśnie z plików WAD.

Reprezentacja świata — „2.5D”

Chociaż Doom sprawia wrażenie trójwymiarowego, technicznie jest to silnik 2.5D (planarny): każdy sektor ma jedną wysokość podłogi i jedną wysokość sufitu, nie występują prawdziwe „pokoje nad pokojami” (bez trików i hacków). Ściany są definiowane przez linie (linedefs) łączące wierzchołki, a tekstury i wygląd sektorów przypisuje się per-sidedef / sector. Potwory i przedmioty są reprezentowane jako sprite’y (dwuwymiarowe bitmapy), które zawsze zwracają się do kamery (tzw. billboarding).

Renderowanie i optymalizacje

Renderowanie sceny odbywa się całkowicie na CPU, a nie na karcie graficznej, ponieważ w czasie powstania gry (wczesne lata 90.) dostępne karty rzadko wspierały akcelerację 3D. To wymusiło zastosowanie wielu wydajnych trików i struktur danych:

  • BSP: drzewo podziału przestrzeni jest używane do szybkiego odrzucania fragmentów mapy niewidocznych z pozycji gracza i do ustalania kolejności rysowania.
  • Column-based rendering: ściany są rysowane kolumna po kolumnie (pionowe paski tekstury), co pozwala zmniejszyć liczbę operacji per-piksel.
  • Visplanes: podłogi i sufity są renderowane jako spójne obszary (visplanes), co optymalizuje rysowanie dużych płaszczyzn.
  • Fixed-point arithmetic i tablice trygonometryczne: zamiast wolnych obliczeń zmiennoprzecinkowych używano operacji na liczbach stałoprzecinkowych i precomputed lookup tables.
  • Bloking / blockmap: struktura przyspieszająca wykrywanie kolizji i przeszukiwanie obiektów na mapie.
  • Ograniczone oświetlenie: oświetlenie jest przypisane per-sector i symulowane przez kolormapę (paletę), a nie przez globalne obliczenia źródeł światła.

Format WAD i dane map

Pliki WAD zawierają „lumps” — bloki danych takie jak grafika (textures, flats), dźwięki, definicje map i tablice. Mapy zawierają listy wierzchołków, linedefs, sidedefs, sektory, segs, subsektory, nodes (BSP) i things. W praktyce funkcjonalność map i zachowanie obiektów można modyfikować, tworząc własne PWADy (dodatkowe WADy) i udostępniając je innym graczom.

Ograniczenia oryginalnego silnika

  • Brak pełnej trójwymiarowości: nie ma natywnego wsparcia dla nakładających się przestrzeni (rooms-over-rooms).
  • Każdy sektor ma pojedynczą wysokość podłogi i sufitu — brak stromych zboczy bez dodatkowych tricków (większość „pochyleń” i „slope’ów” dodano później w portach).
  • Sprite’y są zawsze płaskie i zawsze zwrócone do kamery; brak meshowania modeli 3D w oryginalnej wersji.
  • Ograniczone pole patrzenia w pionie w oryginalnych buildach — patrzenie w górę/dół było symulowane, a jego obsługa została rozszerzona w portach.

Porty źródłowe i modyfikacje

Kod źródłowy silnika został potem udostępniony na zasadach wolnej licencji (GNU GPL), co pozwoliło społeczności na tworzenie licznych portów źródłowych, które dodają funkcje, poprawiają zgodność i umożliwiają uruchamianie gry na nowych platformach. Wielu fanów Dooma stworzyło swoje własne zmodyfikowane wersje zwane portami źródłowymi. Porty źródłowe często dodają nowe funkcje i naprawiają problemy w oryginalnym silniku. Popularne porty źródłowe to Boom, PrBoom, PrBoom+, Zdoom i Chocolate Doom.

Dodatkowo warto wymienić nowsze i popularne projekty takie jak GZDoom (rozszerzony renderer OpenGL z shaderami i bogatą obsługą modów), Doomsday Engine (3D-accelerated renderer), Odamex (sieciowy port), Freedoom (wolne zasoby zastępujące oryginalne WADy) oraz liczne przeniesienia na konsole, telefony komórkowe i urządzenia embedded. Różne porty kładą nacisk na: wierne odwzorowanie oryginału (Chocolate Doom), zgodność z demo i replayami (PrBoom), rozbudowane możliwości modowania i nowe efekty (Z/GZDoom) czy poprawki gameplayowe (Boom).

Funkcje sieciowe i narzędzia

Oryginalny Doom wspierał rozgrywkę wieloosobową (tzw. netplay) oraz nagrywanie i odtwarzanie demo. Społeczność stworzyła też szereg narzędzi ułatwiających tworzenie zawartości: edytory map (np. DoomEd, DEU, SLADE), narzędzia do edycji zachowania i animacji (DeHackEd) oraz programy do konwersji i analizy WAD-ów.

Dziedzictwo i znaczenie

Silnik Doom miał wielki wpływ na rozwój gier FPS: przyczynił się do popularyzacji modyfikowalnych gier, rozwoju technik renderowania w oprogramowaniu oraz powstania wielu komercyjnych i niekomercyjnych projektów opartych na jego kodzie. Jego lekkość, czytelna architektura i otwartość źródeł sprawiły, że był i jest portowany na setki platform — od klasycznych komputerów po urządzenia wbudowane i smartfony — i nadal jest przedmiotem aktywnego rozwoju ze strony społeczności.

Pytania i odpowiedzi

P: Co to jest silnik Dooma?


O: Silnik Doom to kod komputerowy, na którym opiera się gra wideo Doom. Korzysta z niego również kilka innych gier, w tym Doom 2 (ale nie Doom 3, który ma swój własny silnik). Mocno zmodyfikowane wersje silnika Doom są wykorzystywane w Heretic, Hexen i Strife.

P: W jaki sposób silnik Dooma przedstawia poziomy 3D?


O: Silnik Doom wykorzystuje technikę zwaną binarnym podziałem przestrzeni do reprezentowania poziomów 3D w sposób, który komputer może szybko przetworzyć.

P: W jakim języku napisany jest silnik Doom?


O: Silnik Dooma jest napisany głównie w języku C.

P: Czy jest dostępna wersja open source silnika Doom?


O: Tak, kod źródłowy silnika Doom został udostępniony za darmo na zasadach GNU General Public License. Wielu fanów stworzyło własne zmodyfikowane wersje, zwane portami źródłowymi.

P: Jakie są popularne porty źródłowe oryginalnego silnika doom?


O: Popularne porty źródłowe to Boom, PrBoom, PrBoom+, Zdoom i Chocolate Doom.

P: Jakich struktur używa silnik doom do reprezentacji poziomów?


O: Silnik doom reprezentuje poziomy wewnętrznie za pomocą struktur zwanych linedefs, sidedefs, sectors, verticies i things (czyli potworów, dekoracji przedmiotów itp.).

P: Jak odczytuje dane z plików?


O: Silnik gry Doom wczytuje poziomy i inne dane z pliku zwanego WAD.


Przeszukaj encyklopedię
AlegsaOnline.com - 2020 / 2025 - License CC3