32 bites szoftveres renderer a Quake 2-höz

Címkék

Annak idején, ha értelmezhető minőségben akartunk Quake 2-t játszani, alap volt, hogy rendelkezünk valami 3D-gyorsító kártyával. Mert a játék ugyan elindult szoftveresen renderelt módban is, de abban sok köszönet nem volt. Victor Luchitz írt egy, az eredeti szoftver renderelést biztosító DLL helyettesítőt, ami szoftveresen állítja elő ugyanazt a képet, mint amit annak idején kizárólag hardveres gyorsítókkal kaphattunk.

 

Hozzászólások

Akkor 2025-ben eljutottunk oda, hogy mar akadas nelkul tudjuk futattni a Quake-et? 😂

Nem teljesen értem, hogy mi ebben a pláne? Az, hogy az eredeti gyorsítók már nem léteznek és velük kompatibilis dolog sem, tehát lényegében a gyorsítós mód képe elérhetetlenné vált modern vason?

És úgy volt, hogy a szoftveres mód annó butított képet adott, azért nem volt köszönet benne?

Én ezekből kimaradtam annó, azért kérdezem.

A benchmarkra: a 271FPS teljesen élvezhető, nem hiszem hogy érdemes volna ezt tovább optimalizálni. Nyilván nem volna lehetetlen, meg lehetne kísérelni átírni OpenGL vagy Vulkan API-ra is. Csak akkor nem ilyen pár napos hackathon buli lenne :-)

A 3Dfx Voodoo kártyái voltak a lólábak, ők a saját Glide apijukat adták a 3D gyorsításhoz és ez a korábbi játékoknál volt érdekes. Később a Glide mellé bekerült az OpenGL support is a driverbe, aztán mire lett Quake 2, addigra már OpenGL 1.1 -nél jártunk. A Quake 2 eredetileg Software és OpenGL renderer-el érkezett, viszont a szoftveres raszterizáló csak 8bpp színmélységet tudott és nem volt texture filtering sem.

Ha jól értelmezem itt a 32 bit igazából csak a színmélységet jelenti, szóval az egyetlen fejlődés itt a 8bpp->32bpp (esetleg talán valami texture filtering is, de ez utóbbi lehet csak a videó tömörítés jótékony hatása:D).

Érdekes, hogy nem minden esetben voltak rosszabbak a szoftveres renderelők, pl. a Half-Life (GoldSRC engine) ami egy félig meddig quake engine származék tartalmazott pár olyan extra effektet ami hardveres gyorsítás mellett nem volt elérhető (pl.: vízfelületek jobban néztek ki). Ez utóbbinak az volt az oka, hogy abban az időben OpenGL-el kizárólag a "fixed pipeline" volt elérhető (vagyis se Vertex, se Fragment shader nem volt), szoftveres oldalról pedig nem voltak megkötések, sokkal szabadabban lehetett ezeket kezelni.

// Happy debugging, suckers
#define true (rand() > 10)

nem minden esetben voltak rosszabbak a szoftveres renderelők

Voltak érdekes engine-ek, pl az 1999-ben megjelent Outcast kizárólag szoftveres renderert használt, a fixed pipeline 3D gyorsítók hiányossága miatt. A talaj/táj "voxel engine" (valójában raycasting), depth-of-field, antialias, bump mapping, tükröződések, betekintés szögétől függő átlátszóság a vízen, hullámok, bump-mappelt lábnyomok a hóban, és még sok olyasmi, amire éveket kellett várni, mire a videokártyák is tudtak ilyeneket. Egy erős P2-esen már játszható volt, ha jól emlékszem az 540 MHz-re húzott Celeronomon 400x300-ban egészen jól ment :)

Igen, az Outcast egy üdítő kivétel volt arra, hogy soft. renderrel is lehet szép képet előállítani. Csak azt ne felejtsd el (én nem fogom, mert anno azért építettem egy új gépet 100 ezrekért, ami ma inkább milliós tétel lenne), hogy az Outcast fusson rajta rendesen. Egy atomerőmű kellett hozzá.

Szóval, nagyon leegyszerűsítve, játék 3D fronton 2025-re eljutottunk oda, hogy egy CPU képes arra, amire 25 éve egy 3D kártya képes volt :D

trey @ gépház

Szerintem a válasz benn van a nyitóban:

32bpp - 271.7fps 

8bpp (original software renderer circa 1998) - 341.7fps

Az övé 32 bites színmélységű, míg az eredeti Q2 szoftveres renderelője 8 bites volt:

Az eredeti Quake II szoftveres renderelője 16 bites színmélységet (High Color, 65 536 szín) használt. Bár a játék textúrái eredetileg 8 bites palettázott színekből álltak, a szoftveres renderelő 16 bites módba konvertálta a végső megjelenítéshez. Ez azt jelentette, hogy a világítási és transzparencia-effektek jobban néztek ki, mint ha maradtak volna 8 biten.

A Quake II OpenGL renderelője ezzel szemben teljes 24 vagy 32 bites színmélységet használt, ami jelentős vizuális javulást eredményezett.

Vagyis a csávó mostani szoftveres renderelője jobb színmélységet ad, mint anno az OpenGL-es 3D kártyákkal működő renderelő.

trey @ gépház

Mondjuk tényleg van némi ellentmondás az idézetekben. Ezt a sok hallucinációt a 16 bitről nem egy LLM költötte hozzá egész véletlenül?

8bpp (original software renderer circa 1998)

vs.

Az eredeti Quake II szoftveres renderelője 16 bites színmélységet használt.

Megnéztem a forrást, és ez utóbbi állítás a hülyeség, az eredeti szoftveres renderelője palettás 8 bites volt (tehát 24 bpp színmélységű, de csak 255 különböző szín egyszerre, a 256. színt átlátszóságként kezelte). Anno a VGA kártya nem is tudott 16 bites pixeleket (csak az SVGA, de az is csak bankváltással, szóval lineáris 16 bites frambuffer csak VBE 2.0-tól volt).

Ez a renderer, amiről itt szó van, szintén szoftveres ugyan, de true-color packed pixeleket használ (ugyancsak 24 bpp színmélységű, de 16 millió szín egyszerre, plusz egy transzparens szín helyett külön alfa csatorna).

Vagyis a csávó mostani szoftveres renderelője jobb színmélységet ad, mint anno az OpenGL-es 3D kártyákkal működő renderelő.

Nem igaz. A hardveres GL renderer ugyancsak 24 bites volt, külön alfa csatornával, pont mint ez, nem volt semmivel sem jobb.

Bár a játék textúrái eredetileg 8 bites palettázott színekből álltak

És ez sem igaz, a szoftveresnek és a GL-esnek külön textúrái voltak, lásd L530. Az OpenGL renderelő 24 vagy 32 bites TGA fájlokból töltötte be a textúrát, 8 bites TGA betöltése még csak implementálva sincs benne.

ohó, lesz miért beindítani a gamer masinát hétvégén :)

A témanyitót idézve nem csak akkor volt alap a 3D kártya. Ma is már mindenben van, ha más nem integrált GPU, aminek ha fos is a sebessége, de a Q2, Q3 szintű játékokat 200-300 fps-en futtatja FullHD-ban minimum, ha nem 400-600 fps-en. A szoftveres rendernek nem sok értelme van, úgyis erős gép kell hozzá, meg pl. Linux alatt megoldott, hogy ha nincs 3D-s gyorsítás, akkor a mesa LLVMpipe-pal oldja meg, ami épp úgy szoftveres 3D render, amit a CPU számol, de működik minden 3D-s alkalmazással.

Így ez Windows-on ér csak valamit, de igazából ott se, mert ott meg fut az eredeti software render .dll, ami megoldja, mai gépeknek nem tétel. Igen, csak 8 bites render, de akinek az oldschool kinézet kell, az pont ezt keresi, aki 32 bites színmélységet akar, az használja GPU renderrel, és visszaérkezünk oda, hogy ma már mindenben van GPU, telóban, táblagépen, SBC-n, x86-on, ARM-en, RISC-V-n, stb..

The world runs on Excel spreadsheets. (Dylan Beattie)