HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

december 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

sakura r925

2013.02.22. 11:48 :: syam

Működés közben látható újdonságok

- a Half Life 2 engine alapján megvalósított direction lightmap radiosity-vel számolva, ami lehetővé teszi a normal map és lightmap kombinálását
- szintén a HL2 alapján elkészített, de kicsit módosított ambient cube-ok, amelyek végül lightprobe-ként működnek
- adott 3D ponthoz meghatározni a bejövő fény mennyiségét a lightprobe-ok felhasználásával a Unityben található módszer alapján és azt kombinálva a normal mappel HL2 módszer szerint.

A radiosity számítás alacsony minőségű, ezért látható néhány statikus háromszögnél hibás lumel, illeszkedés ill. nem oda illő megvilágítás. Ami még nagyon hiányzik az az envmap ill. specular számítás.

Szólj hozzá!

Címkék: hdr unity radiosity halflife2

HDR - RGBE

2013.02.05. 14:21 :: syam

Mivel lightmap generálásakor a kapott lumelek színtartománya túlmutat a megszokott 0...1 értékeken (LDR helyett HDR), ezért mindenképp növelni kell a tároláshoz szükséges bitmélységet azaz nem lehet a végeredményt (egy lépésben) egy mezei png fileba kimenteni.

Legkönnyebbnek látszó megoldás float tömbként elmenteni a lightmapeket, de ezenkívül még foglalkoznunk kell a járalékos adatok mentésével, mint a textúra mérete, csatornák száma ill. néha igény támadhat, hogy képnézegető programmal is közvetlenül megtekinthető legyen.

Mivel a nagy értéktartományú (és lebegőpontosan tárolt) színeket tartalmazó képek mentése már másoknak is fejtörést okozott, ezért szerencsére már léteznek többé-kevésbé általános megoldások. Egyik ilyen pl. a Lucasfilm OpenEXR formátuma, amely első (és sokadik) olvasásra is túl soknak tűnik vagy pl. a TIFF ill. a JPEG XR.

A megoldások közül a legegyszerűbb változatnak az RGBE tűnik, amely négy byteon tárolja el a HDR színt.
A be- ill. kitömörítő algoritmusa is gyors és egyszerű valamint az adatveszteség is minimálisnak tűnik.

Szólj hozzá!

Címkék: hdr rgbe openexr

Világító fal 3 - directional lightmap

2013.01.28. 22:08 :: syam

A téli szünetben gondolkoztam azon, hogy a lightmap lumeljeihez lehetne rendelni irányt is. Szerencsére ez a technika már létezik (többféle) néven: directional lightmap.
A módszer azon alapszik, hogy minden lumelhez hozzárendelnek három, a tangens térben megadott konstans irányt majd a generáláskor ezt a három irányt felhasználva készítenek három lightmapet.

platform 2013-01-28 21-02-31-95.png

 

platform 2013-01-28 21-02-48-52.png

 

platform 2013-01-28 21-02-57-87.png

Ennek az a nagy előnye, hogy három, egy helyről mintavételezett lumel egy egyszerű képlettel (mivel az irányok konstansak a tangens térben) kombinálható a normal mappel. Ha az adott normál mindig felfelé néz megkapjuk a klasszikus lightmapot.

platform 2013-01-28 21-03-33-19.png

Azonban ha a normál vektor változik a tangens térben:

platform 2013-01-28 21-03-33-98.png

Láthatjuk, hogy a lightmap mellett a normal map felhasználásával visszaadhatjuk az apró, helyi részleteket is, amire csak nagyon nagy felbontású lightmap lenne képes, aminek memóriaigénye már igen jelentős lenne.

Végezetül néhány kép hagyományos és directional lightmappel.

 platform 2013-01-28 19-30-18-07.png

platform 2013-01-28 19-30-02-41.png

platform 2013-01-28 19-33-24-66.png

platform 2013-01-28 19-33-06-72.png

 platform 2013-01-28 19-34-42-26.png

platform 2013-01-28 19-34-30-48.png

Szólj hozzá!

Világító fal 2

2013.01.24. 10:35 :: syam

A gpuval történő radiosity számítás legkényesebb része a félgömb renderelése. Ennek legkézenfekvőbb megoldása a halszem nézet használata. Gyakorlatban erre nagyon jó közelítést ad a paraboloid vetítés, amelynek van egy nagyon nagy hátránya. Mivel ez egy igen jelentős torzulással járó nem lineáris vetítés a gpura történő implementálást ez igen megnehezíti.
Egyedüli megoldás ha a felhasznált tartalom igen jól tesszellált. Amennyiben ilyen eset áll fenn, akkor érdemes igénybe vennünk a gpu hardveres tesszellátorát. A lenti eredményen jól látszik a vetítés okozta torzulás és a tesszellálás foka közti összefüggés:

tess2.png

Ezt a technikát alkalmazva a következő eredményt érhetjük el a radiosity generáláskor (a textúrázásban és a számításban még akadnak pontatlanságok ^^ ) :

platform 2013-01-24 09-40-38-61.png

 

platform 2013-01-24 09-40-05-14.png


Néhány példa a paraboloid vetítésre a kapott jelenettel:

0.png

1.png

2.png

3.png

A fenti képen látható, hogy még ez a nagyfokú háromszögesítés sem mindig nyújt tökéletes eredményt.

4.png

Szólj hozzá!

Címkék: paraboloid radiosity

Világító fal

2013.01.09. 21:56 :: syam

Ismét némi nyomozás (és a téli szünet) után megtapasztaltam, hogy a lightmap bizony nem az ördögtől való fogalom és egy kis trükkel "olcsón" kombinálhatók normal mappel.

Ennek fényében kutattam a lightmapkészítés témakörében és meg is született az első értékelhető változat. A lightmap unwrap után az árnyalás előállításához alig használtam matekot: egyszerű radiosity "számítás" raszterizálás segítségével. A lightmap nagyon alacsony felbontású és 2 iteráció futott le.

platform 2013-01-09 20-00-14-88.jpg

Szólj hozzá!

Címkék: lightmap radiosity

R_DrawAliasModel

2012.12.30. 13:40 :: syam

Ismét egy kis játékanatómia ezúttal Quake2 engine.

Amire kiváncsi voltam, hogy a dinamikus modellek árnyalását hogyan oldották meg. Jelen esetben azonban egy igen leegyszerűsített árnyalásról van szó, amivel nem is nagyon érdemes foglalkozni. Sokkal inkább azzal, hogy a modellre ható fény színét hogyan határozza meg az engine.

Kicsit elmélyülve a forráskódban a következőt találjuk:

void R_DrawAliasModel (entity_t *e)
{
  ...
  R_LightPoint
  GL_DrawAliasFrameLerp
  ...
}

ebből ami nekünk kell az az R_LightPoint

void R_LightPoint (vec3_t p, vec3_t color)
{
  ...
  RecursiveLightPoint
  ...
}

aminek az egyik lényegi része a RecursiveLightPoint függvény, amely a statikus fényt számítja ki / határozzza meg az adott ponthoz.
Ami pedig úgy történik, hogy

  • bejárja hozzá a BSP fát
  • megkeresi, hogy a pont melyik surface felett van
  • meghatározza az így kapott ponthoz tartozó lightmap textúra koordinátákat
  • kiolvassa a lightmapból a színt és ezt adja vissza végeredményül

A dinamikus fényekkel úgy tűnik sokkal kíméletlenebb: lineáris kereséssel ellenőrzi a fényforrásokat, hogy elég közel vannak-e és ha igen, akkor hozzáadja a végeredmény színhez a fényforrás modulált színét.

Kissé brute force-nak tűnik, de mint tudjuk ez már működött 200 MHz magasságában is...

Szólj hozzá!

Címkék: quake2 bsp tree

sakura 0.9.5 - Chandrila projekt

2012.11.19. 21:53 :: syam

Pillanatvideó a szerkesztőből elkapva. A Bulletet pár napja frissítettem 2.8.1-re (sok különbséget -még- nem látok az előzőhöz képest).
A gomb / kapcsoló a falon már tudja működtetni a liftet ill. az automata ajtók is végzik a dolgukat. Az izgalmas a dologban az, hogy mindezek a viselkedések a BSP file-ból vannak importálva / konvertálva lua scriptté.

Ami még izgalmasabb lehet a Q3 shaderek GLSL shaderekké alakítása. 

Szólj hozzá!

Címkék: bullet lua quake3 bsp tree

800

2012.11.08. 17:59 :: syam

A napokban elértem a 800. revíziószámot mivel ismét tettem egy kitérőt Q3 irányba. Egész pontosan a bsp-t vettem elő megint ill. annak a Q3-s megvalósításának Raven software által módosított verzióját.
Szerencsére csak pár (nem lényeges) különbség van az eredeti, Q3 verzióhoz képest így mindkettő támogatása ugyanazon kóddal megoldható. A Bullet hivatalos példáiban pedig megtalálható egy kimondottan Q3BSP-hez készült konvertáló, amely a brushok fizikai testekké való átalakítását valósítja meg.

Egyszóval minden adott a bsp újra-integrálásához, aminek az eredménye már látható is - ráadásul a nagy számú, Disney Star Warshoz készült mapoknak köszönhetően rendkívül sok helyszín válik elérhetővé és játszhatóvá: alant látható a chandrilai kanyon egy részlete.

Szólj hozzá!

Címkék: bullet quake3 idsoft bsp tree Raven software

Grypania final

2012.10.29. 16:35 :: syam

Végre... Az első, 3D akciójáték jellegű szoftver ami kikerül a kezeim közül. Ahogy számoltam kb. 20 perc játékidőt nyújt a felhasználónak és háromféle játékstílust (találd meg, vidd oda, harc és túlélés) igyekszik megmutatni.

Még hátra van apróbb hibák javítása ill. készítek még egy statisztikát a játékben felhasznált elemek (szereplők, tárgyak, meshek, materialok stb) számosságáról.

Végső lépésként pedig egy "szabványos", érintőképernyőn megvalósított irányítás megvalósítása kerül sorra, hogy androidon is lehessen vele játszani.

Ezután pedig egy új projekt :)

Szólj hozzá!

Címkék: Címkék

Grypania 0.9.x

2012.09.17. 12:14 :: syam

A legutóbbi verzió már tartalmaz OpenAL támogatást vagyis nyomokban audio engine-t tartalmaz a rendszer. Egyelőre még a hangok / hangforrások különböző típusait kell összegyűjtenem ill. a fizikai engine-nel történő integrálás hiányzik.

Közben néhány optimalizációt alkalmazok elsősorban a térfelosztásban pl. lineáris keresés helyett logaritmikus ill. egyszerűsített konvex befoglalók.

Ezt követően Android update és talán iOS portolás.

Végül pedig az 1., 2. és 3. rész összevonása egy játékká.

Kb. ezeket fogja tartalmazni a 0.9.9 verzió.

Szólj hozzá!

Címkék: openal

süti beállítások módosítása