WORLDNEWS
ISSUE 19
3D-s rendszerek
Kiváncsiságból
utánanéztem a 3D-s API-knak egy összehasonlítás végett, gondoltam
megosztom veletek tapasztalataimat. Eredetileg csak az OpenGL
(illetve ennek GPL változata, a Mesa3D GL) érdekelt, és máig is
csak ezt használom, de fúrta az oldalamat a kíváncsiság hogy a
Windozeos Direct3D (a DirectX része ha jóltudom) mennyivel tud
többet/kevesebbet, valamint ha már ennyire hasonlítgatok, megnézem
a Warp3D-t... Sajnos ez utóbbinak csak a dokumentációját van módomban
tanulmányozni 3D-s grafikus kártya hiányában, dehát ez a cikk
jobbára úgyis developereknek szól.
Az
OpenGL és a DirectX összehasonlítás forrásául a Direct3D
vs. OpenGL: A Comparison című (angol nyelvű) cikk szolgált.
OpenGL
Az
SGI-féle OpenGL egy procedurális
API, az Iris GL utódja, amely a UNIX munkaállomásokról származik.
Az Iris GL-t eredetileg a Silicon Graphics, Inc. 3D grafikus munkaállomásai
használták.
Az
"OpenGL" az OpenGL Architecture Review Board (ARB) bejegyzett
védjegye. Az ARB határozza meg azokat az alapelveket, amelyek
alapján egy implementáció OpenGL-nek hívhatja magát, valamint
ez a szervezet irányítja a konformitási tesztek fejlesztését,
amelyekel az implementációk megfelelősége ellenőrizhető.
Az
OpenGL egy állapotgépet definiál, amely a renderelés folyamatát
vezérli. Ennek az állapotgépnek az attribútumai módosíthatók az
OpenGL API-val.
Mesa
A
Mesa3D szabad forrású library
nagyon hasonló az OpenGL-hez (pontosabban annak legújabb, 1.2-es
változatához), csak épp készítője, Brian Paul az alapoktól újraírta
azt az SGI engedélyével. Mivel nem rendelkezik OpenGL licensszel,
nem jelent(het)i ki hogy a Mesa3D bármiféleképpen kompatibilis
vagy csereszabatos az OpenGL-el. Mindezek ellenére, a Mesa3D library
megfelel az OpenGL kompatibilitási teszteknek, és a jogi/technikai
dolgokat leszámítva a Mesa3D egy igazi alternatívája az OpenGL-nek.
A
Mesa3D-nek van egy elfogadható Amigás implementációja, igazi Amigás
APIval a GL kontextus létrehozására, amely Warp3D-n keresztül
támogatja a hardwares gyorsítást is. A software render rész eléggé
siralmas, mivel a Mesa3D texture render része igen erős C compilert
igényel, amely a StormC-nek túl nagy falat.
Direct3D
A
Microsoft Direct3D
egy COM bázisú 3D API, amely egy third-party
3D APIból ered x86 architektúrára. A Microsoft ezt 1996-ban szerezte
meg, ettől kezdve található meg a DirectX technológia részeként.
A Direct3D tartalmaz egy közvetlen, és egy strukturált scene-grafika
interfészt, mi csak a közvetlen móddal foglalkozunk.
A
Direct3D API-t COM interfészeken keresztül definiálják, működését
a Microsoft SDK-jának help filejai és példaprogramjai írják le.
COM:
Common
Object Model, egy "platformfüggetlen" rendszer, amelyre a
Microsoft OLE és ActiveX technológiái épülnek
Warp3D
A
rendszer ötlete Sam Jordantól származik. Szintén procedurális
API, kizárólag Amigákra. Néhány aspektusában hasonlít az OpenGL-hez,
de pl. a rendering utasítások más felépítésűek.
Én
személy szerint nem értek egyet Sammel a abban, hogy egy jól megírt
Warp3D driver lényegesen hatékonyabb lenne mint egy hasonló OpenGL
driver. Az OpenGL valóban összetettebb, azonban sokkal robusztusabb
is, valamint a 3D hardware úgyis a processzorral párhuzamosan
dolgozik. Kicsit ironikus, hogy egy OpenGL program bármilyen Amigán
futhat, míg egy Warp3D kizárólag grafikus kártyán, lévén (még?)
nincs hozzá software render modul. Ugyanakkor számomra kétséges,
hogy a Warp3D meg tud-e felelni a 3D-s gyorsítók igényeinek, ugyanis
az Amigán kívüli világban már vannak olyan 3D kártyák, melynek
képességei a jelenlegi Warp3D APIval nem használhatók ki, bár
a ViRGE-khez és Perimedia2-khöz tökéletesen megfelel.
Mi a különbség?
A
táblázat adatait a fenti cikkből ollóztam ki, a Warp3D-s oszlopnak
magam néztem utána. Csak pár hónapja foglalkozom 3D-s grafikával,
így pár fogalom még igencsak homályos számomra. Ha kihagytam valamit
a táblázatból, az azért lehet, mert
Ja,
és sajnos nem találtam a dokumentációk tanulmányozása során olyan
funkciót, amit a Warp3D ismer, de a többi API nem. Ha kérdőjel
van valahol, ott vagy nem tudom a pontos választ, vagy nem értek
egyet a fenti cikkel. Szóval ha valami nem stimmel...
Tulajdonság |
Warp3D |
OpenGL |
Direct3D |
|
3.0 |
1.2
core |
7.x |
8.x |
Támogatott
OS |
AmigaOS |
Win(9x,NT,2k),
AmigaOS, *IX,
MacOS, BeOS |
Win(9x,2k,CE) |
Win(9x,2k) |
Nem gyorsított
funkciók szoftveres emulációja |
nem |
igen |
nem |
nem |
Modellezés |
Vertex
transzformáció |
nem |
igen |
igen |
igen |
Programozató
vertex blending |
nem |
nem |
nem |
igen |
Fixfunkciós
vertex blending |
nem |
nem |
igen |
igen |
Paraméterezhető
görbe/felület primitívek |
nem |
igen |
nem |
igen |
Hierarchical
display lists |
nem |
igen |
nem |
nem |
Rendering |
Kétoldalú
megvilágítás |
nem |
igen |
nem |
nem |
Pontméret
és vonalvastagság állítás |
igen |
igen |
nem |
igen |
Programmable
pixel shading |
nem |
nem |
nem |
igen |
Triadic
texture blending functions |
nem? |
nem |
igen |
igen |
Cube
environment mapping |
nem |
nem |
igen |
igen |
Volume
textures |
nem |
igen |
nem |
igen |
Multitexture
cascade |
nem |
igen |
nem |
igen |
Texture
temporary result register |
nem |
nem |
nem |
igen |
Mirror
texture addressing |
nem |
nem |
igen |
igen |
Texture
wrapping |
igen |
nem |
igen |
igen |
Range
based fogging |
igen |
nem? |
igen |
igen |
Bump
mapping |
nem |
nem |
igen |
igen |
Add signed
texture blend |
nem |
nem |
igen |
igen |
Frame
buffer |
Hardware-független
Z Buffer lekérdezés |
igen |
igen |
nem |
nem |
Fullscreen
antialiasing |
nem |
igen |
nem |
igen |
Depth
of field |
nem |
igen |
nem |
igen |
Motion
blur |
nem |
igen |
nem |
igen |
Accumulation
buffer |
nem |
igen |
nem |
nem |
Egyéb |
Picking
support |
nem |
igen |
nem |
nem |
Multiple
monitor support |
nem |
nem |
igen |
igen |
A
dolgok persze nem mindig ennyire egyértelm\ek, pár igen/nem bitbe
esetleg bele lehet kötni, de igyekeztem következetes lenni, azaz
ha egy adott API nem tudja maradéktalanul az adott funkciót, akkor
ott már "nem" szerepel.
Warp3D vagy
Mesa3D?
Elég
nehéz kérdés, hogy Amigán melyiket válasszuk. Az OpenGL sokkal
több funkcióval bír, és nem utolsósorban software renderrel tűrhetően
eldöcög egy *Vízió nélküli PPC-n is, valamint ezzel a 3D hardware
képességeiben fellelhető hiányosságokat is képes befoltozni.
A
Warp3D minden bizonnyal nagyobb sebességet képes produkálni, mint
az OpenGL, és "Amigásabb" a programozói interfésze.
Így
ha Amigásoknak szánunk pl. felhasználói egy 3D-s a programot,
akkor talán a Mesa3D a praktikusabb, hiszen működik majdnem mindenütt.
Portolhatóság kérdésében mindenképpen a Mesa a nyerő, bár C-ben
tulajdonképp egy egyszerű interfész modullal "átfordíthatjuk"
a Warp3D hívásokat OpenGL-re, vagy akár DirectX-re nem túl nagy
energia-ráfordítással, így egy játékhoz, amelyet elsősorban Amigára
szán a készítő, talán a Warp3D a jobb.
Hogy
hétköznapian fejezzem ki magam: A Warp3D inkább sebesség-orientált,
az OpenGL pedig inkább minőségre megy: előbbi a 3D hardware által
nem támogatott funkciókat egyszerűen figyelmen kívül hagyja a
sebesség érdekében, míg utóbbi azokat software renderrel megvalósítja.
Viszont pont e célból született a MiniGL is...
Attis