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ć:
16-bitowy kolor (w przeciwieństwie do 8-bitowego w zwykłym Quake'u)
cienie wszystkich trójwymiarowych obiektów (postacie, bronie, zbroje, artyfakty) w czasie rzeczywistym (Rys. 1)
lustrzane, przezroczyste i półprzeźroczyste powierzchnie (Rys. 2)
przeźroczysta tafla wody (na specjalnie przygotowanych mapach) (Rys. 3)
teksturowanie powierzchni w czasie rzeczywistym
brak pikselizacji (Rys. 4)
polepszenie głębi ostrości i wrażenia perspektywy
Quake 640x480 | GLQuake 640x480 |
mapa Start. 16-bitowy kolor | polepszenie głębi ostrości i wrażenia perspektywy |
mapa Start, witraż w hallu Easy | brak pikselizacji (bilinear filtering) |
mapa Start, witraż w hallu Easy | lustrzane, przezroczyste i półprzezroczyste powierzchnie |
mapa DM3 wersja TW (transparent water) | przezroczysta tafla wody |
mapa Hipside firmy Ritual (dawniej Hipnotic) | 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):
VooDooTweak (dla kart opartych na VooDoo)
GLQPlus (program manipulujący ustawieniami GLQuake'a)
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:
uruchom GLQuake'a
wywołaj konsolę (klawisz ~)
napisz MAP
napisz VIEWSIZE 120
napisz TIMEDEMO DEMO2
poczekaj aż skończy się odtwarzać demo
zapisz wynik (ilość fps)
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
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.