GLQuake

Poniższy artykuł ukazał się w magazynie Reset, numer Wrzesień 1997. Jednak (nie z mojej winy) ukazała się starsza wesja artykułu (przed ostatecznymi poprawkami). Zatem, czytelniku czytasz jego lepszą wersję! Dodałem też więcej obrazków, które nie dotarły na czas do redakcji. Miłej lektury...
Aha, pierwszy obrazek z artykułu został błędnie umieszczony dwa razy :(

Artykuł copyright © 1997 magazyn Reset
Piotr Marek, Jr.
yoonior@quake.org.pl



KWAK NA WSPAK - GLQUAKE.
Gram w Quake'a już przeszło rok i nie sądziłem, że coś mnie w nim jeszcze zaszokuje. Myliłem się i to bardzo! Zupełnie przez przypadek stałem się chwilowym posiadaczem karty Diamond Monster 3D i to właśnie dzięki niej trafiłem do Quake'owego nieba. Jedno słowo: GLQuake.

TROCHĘ (PRE)HISTORII.
Już Qtest1 (oficjalnie nazwany Quake Deathmatch Test), wypuszczony w lutym 1996 pokazał, że w kąt pójdą wszystkie 486 i powolne Pentium. Większość komputerów nie radziła sobie z płynnym wyświetlaniem obrazów (zwykle na Pentium Pro 200 w 1280x1024 osiągano poniżej 10 fps). Wszystkim lubiącym płynną grę (25-35 fps) pozostawało granie w podstawowej rozdzielczości 320x200, w której Quake nie wygląda najpiękniej.

Pierwszym rozwiązaniem, które miało przyspieszyć Quake'a, był port (wersja) Direct3D. Z powodu problemów z kompatybilnością na komputerach różnych producentów - zarzucono prace nad nim. Główny programista id Software, John Carmack, nie chciał wypuścić produktu, który nie działałby poprawnie. Tym samym, Direct3D przewidziany przez Microsoft jako API dla gier pod Windows - został odrzucony.

Pierwszą udaną akcelerowaną wersję Quake'a - VQuake - opracowali programiści z Rendition, producenta akceleratora Verite 1000 do kart graficznych 2D/3D. Bardzo szybko cztery inne firmy wypuściły karty na nim oparte (Creative Labs 3DBlaster, Intergraph Reactor3D, Sierra Screamin' 3D, Canopus Total 3D). Specjalnie dla tych kart powstała w październiku pierwsza wersja VQuake (jest ich w sumie siedem - ostatnia jest bardzo stabilna). Czym VQuake różnił się od zwykłego Quake'a? Jest w nim prawie wszystko to, co w wesji GLQuake (za wyjątkiem cieni obiektów trójwymiarowych oraz lustrzanych i półprzezroczystych powierzchni). Niestety karty oparte na Verite 1000 są oficjalnie niedostępne na polskim rynku. Jeżeli dodać do tego niebagatelne osiągi (20-25 fps), nawet na P133, to można zrozumieć dlaczego GLQuake zdobył błyskawicznie wielką popularność w całym świecie.

GLQUAKE? CZY TO BOLI?
GLQuake to specjalna wersja Quake'a oparta na bibliotekach standardu OpenGL. Napisana dla potężnych komputerów firmy Silicon Graphics, opartych na systemie operacyjnym IRIX, dość szybko została przeniesiona na platformę win32 (Windows NT i Windows 95). Dostępność GLQuake'a stała się faktem dzięki firmie 3DFx, która stworzyła okrojoną wersję bibliotek OpenGL dla swojej karty, w której znajdują się jednak procedury wykorzystywane tylko przez GLQuake'a (co uprościło pracę, ale też GLQuake jest jednyną aplikacją OpenGL wykorzystującą karty oparte na 3DFx).

JEST PIĘKNIE. NIE CHCĘ TERAZ UMIERAĆ.
Czym różni się GLQuake od zwykłej wersji Quake'a? Przede wszystkim - osiągami. Na całkiem zwyczajnym komputerze z procesorem P133 zaopatrzonym w kartę z akceleratorem firmy 3DFx, GLQuake w rozdzielczości 640x480 (z włączonymi wszystkimi „bajerami") powinien osiągnąć 20-25 fps. Dla porównania, ten sam komputer z dowolną kartą 2D wysokiej klasy (Mystique, Stealth 3000 Pro, Lightspeed 128) osiągnie 13-17 fps. Osiągi to jednak nie wszystko. GLQuake to także piękno, z jakim Quake powinien był się urodzić:

Quake 640x480GLQuake 640x480
Rys1 - Quake
mapa Start. 16-bitowy kolor
Rys1 - GLQuake
polepszenie głębi ostrości i wrażenia perspektywy
Rys2 - Quake
mapa Start, witraż w hallu Easy
Rys2 - GLQuake
brak pikselizacji (bilinear filtering)
Rys3 - Quake
mapa Start, witraż w hallu Easy
Rys3 - GLQuake
lustrzane, przezroczyste i półprzezroczyste powierzchnie
Rys5 - Quake
mapa DM3 wersja TW (transparent water)
Rys5 - GLQuake
przezroczysta tafla wody
Rys4 - QuakeRys4 - GLQuake
Rys6 - Quake
mapa Hipside firmy Ritual (dawniej Hipnotic)
Rys6 - GLQuake
cienie wszystkich trójwymiarowych obiektów

Podsumowując: GLQuake w swojej maksymalnej rozdzielczości 640x480 wygląda dużo lepiej niż zwykły w 1024x768, a na dodatek łączy to z osiągami podobnymi do tych z rozdzielczości podstawowej 320x200.

SPRZĘT, CZYLI JAK OBRABOWAĆ BANK
Minimalny sprzęt niezbędny do uruchomienia GLQuake'a to komputer z procesorem P90, 16MB RAM (dla posiadaczy Mission Packs 1&2 minimum to 32MB). Zalecany jest P133 i 32 MB RAM. Nie zalecane są komputery oparte na procesorach firm AMD i Cyrix z powodu bardzo małej wydajności operacji zmienno-przecinkowych. Oczywiście, komputer musi być zaopatrzony w kartę 3D spełniającą wymogi standardu OpenGL, najlepiej jeżeli jest to karta oparta na chipsetach firmy 3DFx (obecnie są to karty oparte na Voodoo - Diamond Monster 3D, Orchid Righteous 3D, RealVision Flash 3D, Conopus Pure 3D oraz Voodoo Rush - Hercules Stingray 128/3D i Intergraph Intense 3D Voodoo Rush). Rodzaj i osiągi karty graficznej 2D jest w przypadku kart 3D opartych na VooDoo nieistotna (choć wymagane jest przełączenie w tryb 16-bitowy), ponieważ podczas pracy akcelerator 3D wyłącza zwykłą kartę graficzną, przejmując całkowicie wyświetlanie obrazu na monitorze komputera. Karty oparte na Voodoo Rush są kartami 2D/3D, co w praktyce oznacza pozbycie się poprzedniej karty 2D.

OPROGRAMOWANIE, CZYLI WSZYSTKO ZA DARMO?
Do uruchomienia GLQuake'a lub GLQuakeWorld na domowym PC potrzebna jest pełna wersja Quake'a 1.06 (posiadacze wersji 1.01 mogą się zaopatrzyć w patch q101-106.zip dostępny na ftp Politechniki Krakowskiej). Oprócz tego (oraz driverów do karty 3D) niezbędne są:

Wszystkie pliki niezbędne do uruchomienia GLQuake'a znajdują się pod adresem ftp.pk.edu.pl/pub/games/id/quaketoys/glquake/. Specjalnie przygotowane mapy zawierające przezroczystą wodę są pod adresem ftp.pk.edu.pl/pub/games/id/quaketoys/
levels/transparent_water/
.

PRZYSZŁOŚĆ - ŻYCIE NA INNEJ 3-D PLANECIE
Po raz kolejny okazało się, że Quake - gra firmy id Software - podobnie jak Wolfenstein3D i Doom ustanowiła kolejne standardy w przemyśle gier (i to nie tylko w grach typu FPP). Wszystkie zapowiadane gry z gatunku (Hexen 2, Quake 2, Unreal, Prey, HalfLife, SiN, DukeNukem Forever) będą miały wersje OpenGL, ze specjalnymi efektami graficznymi nie osiągalnymi w zwykłych wersjach, działające na kartach 3D.
Ponieważ zapowiadane jest licencjonowanie enginów gier typu Quake dla innych gatunków (RPG, symulatory itd.), należy się spodziewać olbrzymiego boomu akceleratorów 3D.
Cicha wojna trwa na innym froncie: pomiędzy „monopolistą" Microsoftem (i jego własnym standardem Direct3D) a twórcami gier (i profesjonalnym standardem OpenGL). Rośnie między nimi coraz większa przepaść...

PORADY. TWOJE MAŁE PIEKŁO KONFIGURACJI.
Poniższe porady są tylko fragmentaryczne. Więcej na temat konfiguracji kart 3D oraz ustawiania parametrów GLQuake'a znajdziesz na WWW pod adresami:

Obecnie dostępne są dwa proste programy potrafiące ustawić parametry Monstera i samego GLQuake'a (ich działanie zastępuje ręczne konfiguracje):

Dla tych, którzy chcą samemu pobawić się ustawieniami lub nie mają dostępu do obu programów - dołączam poniższe porady.

KONFIGUROWANIE KARTY
Do pliku AUTOEXEC.BAT dopisz linijki (poniższa konfiguracja dotyczy tylko i wyłącznie kart opartych o chipset 3DFx VooDoo):

REM >>> karta 3DFx - ustawienia >>>
SET SST_SCREENREFRESH=60
SET FX_GLIDE_NO_SPLASH=1
SET SST_FASTMEM=1
SET SST_PCIRD=1
SET SST_FASTPCIRD=1
SET SST_SWAP_EN_WAIT_ON_VSYNC=0
SET FX_GLIDE_SWAPINTERVAL=0
SET SST_VIDEO_24BPP=1
SET SST_GAMMA=1.6
SET SST_GRXCLK=50

1. KONFIGURACJA GLQUAKE'a DLA ESTETY

Poniższa konfiguracja jest dobra dla każdego, kto chce jeszcze raz przejść grę, ale doświadczając niezapomnianych wrażeń jakie daje GLQuake. Największą zaletą tej konfiguracji jest to, że GLQuake wygląda najładniej. Wadą - mniejsza prędkość odtwarzania obrazów.
Do pliku AUTOEXEC.CFG (jeżeli takiego nie posiadasz, utwórz go w katalogu QUAKE\ID1\) dodaj linijki:

// GLQuake - ustawienia
gl_playermip 0
gl_flashblend 0
gl_polyblend 1
r_shadows 1
r_wateralpha 0.7
r_mirroralpha 0.3

2. KONFIGURACJA GLQUAKE'a DLA PRAWDZIWEGO GRACZA.
Konfiguracja umożliwia osiągnięcie prawie maksymalnych możliwości. Użyteczna wszędzie tam, gdzie ilość fps jest jedyną miarą. Dobra dla każdego, kto gra po sieci (lokalnej lub w Internecie) w Quake'a lub QuakeWorld. Zaleta: szybkośc. Wada mało „bajerów".
Do pliku AUTOEXEC.CFG dodaj linijki:

// GLQuake - ustawienia
r_shadows 0
r_wateralpha 1.0
r_novis 0
r_mirroralpha 1
gl_picmip 0
gl_playermip 4
gl_texturemode GL_LINEAR_MIPMAP_NEAREST
gl_flashblend 1
gl_polyblend 0
gl_ztrick 1
gl_keeptjunctions 0
gl_finish 0

Prostą metodą polepszenia osiągów GLQuake'a jest zmniejszenie rozdzielczości z 640x480 na 512x384. Różnica w wyglądzie jest niewielka, a w zamian można liczyć nawet na 30-50% zwiększenie liczby fps. Wystarczy GLQuake'a uruchomić z parametrami -width 512 -height 384.
Np. glquake.exe -width 512 -height 384.

Jeżeli chcesz sprawdzić jakie masz osiągi GLQuake'a (i Quake'a w ogóle), zrób co następuje:

Jest to ogólnie przyjęta na świecie metoda uchodząca za pomiar standardowy fps w Quake'u.

Dla porównania przytoczę moje domowe osiągi. Mój komputer ma procesor Intel P166 (2.5x66), płyta Asus T2P4, 16MB 60ns FPP RAM, Diamond Monster 3D Rev. B, GLIDE 2.4, driver 2.1, grxclk=50.

Rozdzielczość Konfiguracja 1. Konfiguracja 2. zwykły WinQuake
640x480 28.4 fps 32.6 fps 13.9 fps
512x384 39.8 fps 48.1 fps 17.8 fps

Producenci kart opartych na 3DFx przewidzieli jeszcze jedną metodę podnoszenia wydajności: overclocking, kontrolowany przez zmienną grxclk. Jednak dla różnych kart są inne maksymalne wartości zalecane przez producentów. Np. dla Monstera zalecną maksymalną wartością jest grxclk=57.

UWAGA: autor nie ponosi odpowiedzialności za uszkodzenie karty 3D spowodowane przesadnym manipulowaniem parametrami kart (w szczególności zmienną grxclk)!

SŁOWNICZEK. (NIC Z TEGO NIE ROZUMIEM)
3D (3 dimensional) - trójwymiarowy. Termin używany głównie jako określenie na trójwymiarowy świat tworzony przy pomocy komputera.

2D (2 dimensional) - dwuwymiarowy. Reszta - patrz wyżej.

akcelerator graficzny - układ elektroniczny na karcie graficznej, przejmujący od procesora całkowicie lub częściowo obliczanie grafiki komputerowej.

anti-aliasing - wygładzanie postrzępionych krawędzi przy łączeniu różnych tekstur za pomocą płynnych przejść w kolorach

API (application programming interface) - sposób komunikacji programu i użytkownika.

bilinear filtering - wygładzanie tekstur, efektem jest pozbycie się widocznej pikselizacji.

chipset - zestaw układów elektronicznych, akcelerator może być jednym z jego elementów.

Direct3D - standard API firmy Microsoft do realizacji grafiki 3D na platformy MS Windows.

FPP (first person perspective) - potoczne określenie na gry typu „strzelanki". gatunek zapoczątkował Wolfenstein 3D a spopularyzował Doom.

fps (frames per second) - ilość klatek wyświetlanych na sekundę. Miara, dzięki której można porównywać prędkość odtwarzania ruchomych obrazów na ekranie komputera. Za umowną granicę płynności uważą się powszechnie 30 fps. dla porównania - obraz w kinie zmienia się 24 razy na sekundę (24 fps).

GLIDE - API opracowany przez firmę 3DFx, komunikujący karty oparte na chipsetach 3DFx z procedurami OpenGL w grach.

MIP mapping - skalowanie i zmiana rozdzielczości tekstur, w zależności od odległości w jakiej się znajdują (tekstury na pierwszym planie bedą większej rozdzielczości). Polepsza głębię ostrości.

OpenGL (Open Graphics Library) - zestaw niezależnych systemowo bibliotek, zawierający funkcje (procedury) pozwalające na tworzenie realistycznej grafiki 2D i 3D (rysowanie, cieniowanie, rendering, efekty oświetleniowe, oblekanie obiektów teksturami itp.). opracowany przez firmę SGI (Silicon Graphics) pierwotnie dla wysokiej klasy UNIX'owych graficznych stacji roboczych.


ZDJĘCIA

Rys1 - GLQuake Hipnotic Mission Pack#1
Mission Pack #1, mapa Edge of Oblivion
Rys2 - GLQuake Hipnotic Mission Pack#1
Mission Pack #1, mapa Research Facility
Rys3 - GLQuake Hipnotic Mission Pack#1
Mission Pack #1, mapa Armagon's Lair
Rys1 - GLQuake Rogue Mission Pack#2
Mission Pack #2, mapa Blood Sacrifice
Rys2 - GLQuake Rogue Mission Pack#2
Mission Pack #2, mapa Division of Change
Rys3 - GLQuake Rogue Mission Pack#2
Mission Pack #2, mapa Course of Osiris

Podziękowania
Serdeczne podziękowania dla Adax'a (gracza z mojego rodzimego Krakowa), który wyjeżdżając na wakacje pożyczył mi swojego Monstera. Bez niego artykuł nigdy by nie powstał.

Dziękuję mojemu przyjacielowi Arturowi Handke za pomoc w opracowaniu części artykułu o VQuake'u oraz za pomoc i korektę merytoryczną dotyczącą zagadnień grafiki 3D.

Uwagi
Większe rozdzielczości są możliwe dopiero na profesjonalnym sprzęcie. 800x600 jest osiągalne na karcie 3DFx Obsidian Pro (12MB). Wyższe rozdzielczości to domena komputerów Silicon Graphics i pierwotnej wersji GLQuake'a - SGI Quake, który może wyświetlać w rozdzielczości 1280x1024. Komputer zdolny przetworzyć taką ilość grafiki kosztuje co najmniej 10000USD.