A most következő cikksorozatban, mint ahogy azt a fenti cím is mutatja a 3 dimenziós programozás alapjaival fogunk megismerkedni. Fel szeretném hívni a figyelmet az "alap" szóra, mivel a hangsúlyt egyelőre, erre szeretném helyezni. Most így az elején kicsit bajban vagyok, hiszen nagyon nehéz egy ilyen témát elkezdeni. Nehéz eldönteni honnan is induljon el az ember, miről is érdemes szót ejteni. A nehézség oka a bőség zavara. Ennek ellenére mi most megpróbálkozunk vele, a magunk szűkös keretei között. Szeretnék sok elméleti hátteret, tippet, trükköt nyújtani, hogy mindenki képes legyen saját maga megoldani az éppen aktuális problémáját. Ezért a sorozat két szálon fog futni, egy elméletin és egy gyakorlatin. Talán néhol hibázok mivel ez egy eléggé összetett terület, ezért előre is elnézést kérek mindenkitől. Természetesen az elmélet mellett számos gyakorlati feladatot is át fogunk nézni, és próbálok majdnem mindent példákkal bemutatni. Most az első részben csak kizárólag elméleti dolgokkal fogunk foglalkozni, hiszen ezek egy része szükséges ahhoz, hogy egyáltalán el tudjunk indulni. Másrészt pedig valamelyest képet kapunk arról, miről is fogunk beszélni a későbbiekben. Remélem a cikksorozat végére mindenki közelebb fog kerülni a 3D programok, és a ma oly népszerű játékprogramok belső világához is.

A számítógépes grafika történelme

Mivel ebben a számban még csak elmélettel foglalkozunk, érdemes egy-két rövidke szót ejteni a számítógépes grafika történelméről, hogy honnan is jutottunk el idáig:

-1950-ben jelent meg a MIT számítógéppel vezérelt képernyő, a SAGE légvédelmi rendszer (a programok képernyőről történő vezérlése fényceruzával).

-1963-as évet nevezhetnénk a modern interaktív grafika megjelenésének, jellemzői az adatstruktúrák, szimbolikus struktúrák tárolása, interaktív mutatás, választás, rajzolás.

-1964-ban tűntek fel a különböző tervező programok (CAD) a General Motors alkalmazta először. De ez a fejlődés elég lassan ment végbe, hiszen a hardware nagyon drága volt, drágák voltak a számítógépes erőforrások (nagy adatbázis, interaktív manipuláció, intenzív adatfeldolgozás), nehéz volt nagy programokat írni, és a software sem volt hordozható.

- 1970-es évek jellemzői az output eszközök, az un. raszter - képernyő (TV - technika), bit - térképes grafika, bit - térkép (bitmap): bináris mátrix képek reprezentálására.

- Az 1980-as években már erőteljes fejlődésnek indult a számítógépes grafika, de még mindig egy eléggé szűk speciális terület a drága hardware miatt. Az újdonságokat a személyi számítógépek megjelenése (Apple Macintosh, IBM PC), a raszteres képernyő és az ablaktechnika jelentette. Ennek hatására rengeteg új alkalmazás és I/O eszköz került forgalomba gondoljunk csak az egérre vagy a táblára.

A számítógépes grafika feladatai

A következőkben próbáljuk majd megfogalmazni azt, hogy mi a célja és feladata a számítógépes grafikának. Nyilvánvalóan elsősorban az, hogy a számítógépből olyan eszközt tudjon varázsolni a felhasználó számára, amely a vázlatos gondolatainkból képet tud alkotni. Egy ilyen eszköz hatékony alkalmazásához, sajnos sokrétű ismereteiknek kell, hogy legyenek. A gondolatainkba felépített testek megvalósításához, elsősorban a geometriára, a matematikára, és a fény optikai modellezéséhez szükséges fizikai törvényszerűségre támaszkodunk. Persze ezeken kívül még sok más területtel is tisztában kell majd lennünk. Mindezt úgy kell megtennünk, hogy a számítógép monitorán megjelent képet az emberi agy fogja feldolgozni. Ezért nem szabad elfelejtenünk az ebből adódó korlátokat sem. A számítógépes grafika területén ezek mellet a másik legfontosabb dolog az interaktív kapcsolat a felhasználó és a gép között, ezért fontos az interaktív szerkesztés és megjelenítés is. Az előbbi fogalom röviden azt takarja, hogy a grafikai objektumok (görbék, testek, felületek) alakját, színét, mintázatát, méretét, stb. a felhasználó tetszése szerint tudja változtatni anélkül, hogy a forráskódot változatni kellene. Az előbb említett követelményekből látható, hogy a képernyőn történő megjelenítéshez a felhasználói programrendszer modelladatait először a grafikus programcsomagunk a primitívjeiből felépített objektumokká, végül pedig azt raszteres képpé fogja transzformálni. Természetesen az átalakítás során egyes adatok elvesznek. Gondoljuk csak azt el, hogy a felhasználói programrendszerünkben lévé pontos kördefinícióból a grafikus programrész már egyenes szakaszokkal közelített poligont állít elő, míg a megjelenítéskor nem marad más, mint pixelhalmaz. Mint láthatjuk, a számítógépes grafika nehézsége abból adódik, hogy széles ismereteket kíván, hogy igazán otthon érezzük magunk benne. Talán a szépsége is ebben rejlik. Ezért a továbbiakban is a számítógépes grafika céljaival, feladatival és részeivel fogunk foglalkozni, persze csak annyira amennyire szükséges. Valamint mindenkinek ajánlom, hogy mélyedjen el a 2 dimenziós grafikában, hiszen erre a 3D-ben is szükségünk lesz.

 

Virtuális valóság és világmodellek felépítése

Vajon mit is jelent az, hogy virtuális valóság? A választ mindenki meg tudja fogalmazni. Elsősorban olyan elképzelt világok valósághű, interaktív modellezését és megjelenítését számítógépen, amit a válóságban nem érhetünk el. Ezeket a mesterséges, háromdimenziós hatást keltő világokat a felhasználó bejárhatja, felfedezheti, saját maga alakíthatja őket. Pont az interaktivitásuk, és térbeli hatásuk miatt terjedt el a felhasználások. Ezeket a virtuális világokat modellterekben hozzák létre, a modellezés során, amiről majd egy a felhasználó számára is befogadható képet készítenek. A számítógépes grafika célja röviden tehát az, hogy egy adott objektumról, ami a virtuális térben létezik egy a felhasználó számára is befogatható fényképet készítsen, és a számítógép képernyőjére varázsolja azt. A virtuális világ leírását fogjuk modellezésnek nevezni, a "fénykép" készítést pedig képszintézisnek.

Ha mi magunk akarunk egy modellt létrehozni, akkor az első és leglényegesebb feladatunk az, hogy megragadjuk a grafikus objektum lényegi jellemzőit, és az így absztrakcióval képezett számítógépes modellt algoritmusokkal dolgozzuk fel. Mindig ügyelnünk kell arra, hogy a modell által kapott eredményt szembesítjük a valódi objektumról szerzett tapasztalatainkkal. Például, ha egy pohár számítógépes modelljét készítjük el matematikai módszerekkel (felületi jellemző egyenletekkel), akkor az is lényeges, hogy adott fényforrás esetén megfelelő fény és árnyékhatásokat mutasson. A képszintézis segítségével kaphatunk visszajelzéseket modellünk aktuális állapotáról, ilyen módon nyomon kísérelhetjük a születőfélben lévő virtuális világunkat.

Ahhoz, hogy majd objektumokat tudjunk definiálni a mi kis világunkba, először létre kell hoznunk egy adott teret, amibe ezeket el fogjuk helyezni. Ehhez pedig értelemszerűen valamilyen koordinátarendszer szükséges. Ezek általában két vagy háromdimenziós koordinátarendszerek, amelyekben a grafikus objektumokat matematikai függvények (pl.: gömb egyenlete) és geometriai jellemzők (p.: egy háromszög három csúcsába mutató vektorok koordinátái) határozzák meg. A matematikai törvényszerűségekből pedig algoritmusok vezethetők le. Ezek számítógépes megfelelői, a grafikus szoftverek rutinjai lesznek. A raszter grafika modelltere például egy kétdimenziós egész koordinátarendszer, melyben a képpontoknak egész koordináták felelnek meg. Ugyanis a tárgyak térbeli helyzetét egy koordinátarendszerhez viszonyítva tudjuk megadni. A leggyakrabban használt rendszer a Descartes féle derékszögű koordinátarendszer. Természetesen a derékszögűn kívül legelterjedtebbek még a hengeres és a gömbi koordinátarendszerek. Azt hogy melyiket érdemes alkalmazni azt az ábrázolt alakzatok szimmetriája határozza meg. Természetesen a különböző koordinátarendszerek között bijektív (kölcsönösen egyértelmű) megfeleltetést biztosítanak bizonyos képletek. Van pár dolog, amit végig kell gondolni, mikor egy koordinátarendszert vizsgálunk. A legfontosabb ezek közül, hogy hogyan szándékozunk kezelni az objektumokat. Ha azok (x,y,z) hármasokkal vannak definiálva, akkor szükség lesz némi munkára, hogy ha beolvasásnál gömbi koordinátákba szeretnénk konvertálni azokat.

Ha kiválasztottuk a megfelelő vonatkoztatási rendszert, elkezdhetjük világegyetemünk leírását benne. Az első probléma, amivel szembekerülünk, hogy univerzumunk, minden irányban végtelen lehet. Sajnos ez a tulajdonság viszont nem igazán programozható. Pontosan azért, mert a számítástechnikában megfelelően kis számokra kell szorítkoznunk, ha túlcsordulás nélkül szeretnénk szorozni, összeomlás nélkül osztani, előjelbit váltás nélkül összeadni. Ezek a műveletek pedig nélkülözhetetlenek. Egy világegyetem definiálásának legegyszerűbb módja az, hogy a (-65536, -65536, -65536) és a (65536, 65536, 65536) pontok által meghatározott "doboz" koordinátái közé helyezzük el. Erre gyakran egyetemes vagy abszolút koordináta-rendszerként utalnak. Ekkor a Világegyetem minden objektuma néhány ebbe a határba eső koordináta köré fog csoportosulni, valamint ez tartalmazza a nézőpontot is. Néhány stratégia engedélyezi a Világegyetem szélének, peremének kezelését. Egyrészt megalkotható a Világegyetem úgy is, hogy a kockát (x, y, 65536) koordinátákon elhagyó objektum az (x, z, -65536)-on újra megjelenik, de úgy is, hogy az objektumok "visszapattanjanak" vagy megálljanak annak peremén. Más oldalról a perem lehet átlátszó vagy átlátszatlan is.

Egy abszolút koordinátarendszerben minden objektumot a szemlélő nézőpontjából látunk. Egy másik lehetőség tér megadására a relatív vagy nézőközéppontú koordinátarendszer. Az ilyen rendszerekben a nézőpont mindig a (0,0,0) koordinátákon helyezkedik el, és minden más a Világegyetemben ehhez a pozícióhoz viszonyul. Ennél a módszernél nem kell foglalkozni a világegyetem peremével.

A modellezés során a számítógépbe bevitt információt a program adatszerkezetekben tárolja. Az adatszerkezetek többféleképpen is kialakíthatóak. A virtuális világ szerkezete hierarchikus. Azaz a világ objektumokat tartalmaz, az objektumok primitív objektumokat, a primitív objektumok geometriáját pedig leggyakrabban pontok, ritkábban paraméterek határozzák meg.

Világ

Ż

Objektumok

Ż

Primitívek

Ż

Pontok (x,y,z)

Egy virtuális világ vázlatos felépítése

Minden egyes objektumnak van sajátos tulajdonsága. Akárcsak a primitíveknek, amiket a primitívek típusai határoznak meg. Primitív lehet szakasz, görbe, felület, vagy test, mindegyiknek valóban másféle tulajdonsága van. Ha magunk írunk grafikus rendszert, akkor azt célszerű felkészíteni más elterjedt formátum megértésére is. Így a mások által elkészített modelleket is használni tudjuk. A ma használt szabványos fájlformátumok a következők (IGES, NFS, MGF, stb.) Ezeken kívül még vannak a nem szabványos, de elterjedt modellező programok formátumai, mint pl. a POVRAY, 3D-Studio, AutoCad, stb.) Dr. Szirmay-Kalos László (2001)

Képszintézis

A képszintézis (rendering vagy 3de1- synthesis) célja a virtuális világunk képének olyan formába hozása, amely a felhasználó számára is befogadható, más szóval "lefényképezése". A fényképezés során többféle látásmódot alkalmazhatunk. Alapvetően két egymástól különböző eljárást különböztetünk meg. Az egyszerűbb megoldás a rajzolás, ami során a keltezett képek műszaki rajzszerűek lesznek. Ez tulajdon képen a huzalváz modellezésnek felel meg. Ezen eljárás a 3D-s modell geometriáját az alakzat éleivel és csúcsival jellemezi. Előnye ennek a módszernek, hogy az algoritmus igénye nagyon csekély, így a kis teljesítményű gépeken is jó futást biztosit. Hátránya az, hogy egy modellnek több test is megfelel. Például nem lehet különbséget tenni a tömör és üreges test között. A másik lehetséges mód az, ha a természet folyamatait próbáljuk meg utánozni. Ha a második utat választjuk, a keletkező képek annyira fognak hasonlítani a valódi képre, mint amennyire követtük a szimuláció során a fizika törvényeit. A legnagyobb különbség az így előállított képekben az egyes képkockák kiszámítására fordítható idő.

Egy interaktív alkalmazásban, vagy egy demo-ban ennek a másodperc törtrésze alatt végbe kell, hogy menjen, míg más esetekbe határt maximum a megrendelő pénze és türelme szabhat. Ebből következően a felhasználható matematikai módszerek is jóval összetettebbek lehetnek, sokkal több kiinduló adattal dolgozhatnak, még pontosabban szimulálva a valós viszonyokat. Ezért az igazán valósághű képek elállítását fotorealisztikus képszintézisnek nevezzük. Valósághűen azt értjük, hogy a számítógép monitorán megjelent kép, nagymértékben hasonlítani a valóságos képhez. Ennek, azaz egyik következménye, hogy a számítógépes grafika és a multimédia közötti határ lassan elmosódik. Képszintézises rendszerek létrehozásához elsősorban tehát ismernünk kell a fény-anyag kölcsönhatását, alapvető fizikai törvényeit, modelljét, a megjelenítési rendszerek képességeit és az emberi szem korlátait.

Ahhoz, hogy a képszintézist maximálisan ki tudjuk használni (vagy, hogy egyáltalán használni tudjuk) meg kell ismerkednünk az emberi szem felépítésével és a látással. A természetben a fény valamilyen forrásból szabadul fel, energia felhasználásával, majd igen nagy sebességgel haladni kezd a tér minden irányába. Útja során rengeteg tárgyba ütközhet, onnan visszaverődhet, elnyelődhet, de végül egyes sugarak a szemünkbe jutnak. A szem a szerkezet és a funkció csodája, amelyből a látóideg ered, ez biztosítja a szem és az agy között az összeköttetést. A beérkező sugarak a retinán lévő érzékelősejtekbe (csapok, pálcikák) csapódnak, ahol aztán a fény jellemzőitől függő ingerület keletkezik. Amelyet majd az agyunk fog értelmezni, és állítja elő belőle a képet. Ebből arra következtethetünk, hogy csak akkor látunk egy tárgyat, ha arról a szemünkbe visszavert fénysugarak jutnak, különben nem érzékelünk semmit. A fény természetesen a felültre való visszaverődése közben megváltozik, hiszen egyes komponensei elnyelődnek tehát a fény színe is megváltozik. Ezek szerint viszont a tárgy színe is függ a megvilágított fény színétől. Csak a fehérben, azaz a minden szint tartalmazó fényben látszik egy tárgy valódi színe. Például egy zöld tárgy kék fényben kéknek látunk, mivel a fényből hiányzik a sárga komponens, piros fényben pedig feketének. Az emberekre a fény nem csak fizikailag, hanem érzelmileg is hatással van. Szeretünk mindenféle színhez különböző érzelmeket társítani, ezért ma már szinte az összes 3D játék engine képes a színes fények kezelésére. Hiszen a fények manipulálásával megfelelő hangulatot tudnak teremteni, a játékos számára. Természetesen az emberi szem tulajdonságait, sok esetben a hasznunkra tudjuk majd váltani.

Érdemes még abba belegondolni, hogy egy összetett fizikai modell megoldásához, néha roppant kevés idő áll rendelkezésre. És ha még valós időben is kell megvalósítanunk, akkor másodpercenként legalább 15 képkockát kell a képernyőre varázsolnunk, hogy a mozgás folyamatosnak tűnjön. Valóban varázslásról van szó, hisz egy közepes képernyő is legalább egymillió képpontból áll! Ezeket a szempontokat sem lehet tehát a képszintézis során, figyelmen kívül hagynunk. Első alkalomra ennyit gondoltam, a következő számban már komolyabb dolgokkal kezdünk el foglalkozni, mint pl. függvények és azok alkalmazása a grafikában.

Felhasznált és ajánlott irodalom:

Füzi János: Interaktív grafika, 1997

Budai Attila: Számítógépes grafika, 1999

Dr. Szirmay-Kalos László: Számítógépes grafika, 2001

Foley, van Dam, Feiner, and Hughes: "Számítógépes grafika: Alapelvek és gyakorlat" c. (Fordította: Gombás Áron - 1996)