Leírás

3D grafikával kapcsolatos bejegyzések és cikkek. A Quadron Virtual Particle nevű game engine fejlesztése.

Stuff

Anything related to game development.

Contact: darthasylum at gmail dot com

Nemlineáris cikkek

Mi ezeknek a célja?

Leginkább az, hogy magyarul is elérhető legyen programozási anyag, olvasmányos formában.

A cikkek kódja GitHub-ról is elérhető. (*)-al jelölöm azt a cikket ami nemrégiben frissült.

A színek a nehézséget próbálják jelezni, de az, hogy egy cikk piros nem azt jelenti, hogy csak a profiknak szól!

 

 

 

 

 

 

 

 

Hörcsög

The Asylum

3D grafikával kapcsolatos bejegyzések és cikkek. A Quadron Virtual Particle nevű game engine fejlesztése.

Friss topikok

Címkék

HTML

HDR demo az új (1.8) enginnel

2014.04.28. 21:19 | darthasylum | Szólj hozzá!

Az eredeti tervem szerint több mindent újítottam volna a demóban (pl. pálya, gameplay), de mivel mostanában az új demóval se foglalkozok, ebben is csak kevés, viszont igen látványos újítások kerültek be:

- több fényforrás, forward rendererrel
- bloom effekt javításra került
- gamma korrekció szebb színt ad
- OpenGL core profile support (settings.ini-ben gl4, gl2 vagy d3d9)
- immár minden shader QFX-ből fordul
- a menü animációja természetesebb
- a játékos magassága közelebb áll a normálishoz
- a fegyver mozgása kevésbé idióta
- egyéb bugfixek, amikre nem emlékszem már

Összehasonlító kép (katt):

1_7_vs_1_8.png
És a demó letöltési linkje (windows 7-től fölfele, XP nem támogatott). Amennyiben nincsenek bugok fordítok Mac-re is.

Irányítás:
- demó módban egérrel (bal gomb forgat, középső gomb pan)
- demó módban E és Q zoomolás
- játék módban WASD + egér
- játék módban Space-el ugrik
- Esc-el visszalép demó módba avagy a menübe

Friss és üde fénytörés

2014.04.15. 22:18 | darthasylum | Szólj hozzá!

Régen volt már cikk... Az utóbbi időben leálltam mindenféle fejlesztéssel, még az engine-el is. Valahogy elegem lett, pedig csomó mindent lehetne még csinálni/tanulni. De most inkább fontosabb dolgokkal kezdtem el foglalkozni (pl. facebook trollkodás).

Mindenesetre egy gyenge pillanatomban megírtam ezt a cikket, mert régóta terveztem meg amúgyis terjeszteni kell az igét.

refract.jpg
Ha marhaságot írtam, akkor normális hangnemben tudasd, különben ott hagyom. Beeeeeeee...

Shadow volume

2014.01.09. 00:24 | darthasylum | Szólj hozzá!

 

A sztori az, hogy akartam írni cikket sok árnyékvetési technikáról (tipikusan shadow mapping-ról). Aztán gondoltam, hogy meg kéne említeni a shadow volume-ot is. Csak az úgy nagyon ömlesztve lett volna, és annyira különbözik a kettő, hogy inkább szétszedtem két külön cikkbe.

Az első rész tehát a shadow volume-ról szól, sőt megcsináltam geometry shaderrel is (így az első DX10-es tutor is megszületett, de mint kiderült DX11-el kellett volna inkább).

shadvol.png
Azt azért elmondom, hogy ezt (is) a kóddal együtt érdemes olvasni, mert nem másolok be mindent.

A Quadron fénykezelése

2013.12.16. 00:13 | darthasylum | Szólj hozzá!

Kis fejszámolás: a fénykezelést a nyári szünetben kezdtem el (augusztus vége), jobb helyeken most van december. Az pongyolán számolva három hónap. És közben még egy shader fordító refaktor is volt, szóval ez elég jó idő.

A fejlesztéseket összefoglaltam egy cikk-ben. Egy kipróbálható homokozó szintén letölthető, a jelenetet leíró XML szerkeszthető.

sandbox1.jpg
Ha valami gond lenne vele jelezzétek emailben vagy facebookon.

A karbantartás fontossága

2013.11.24. 20:41 | darthasylum | Szólj hozzá!

A tapasztalatom az, hogy minél általánosabbra akarod megírni az engine-t, annál inkább tele lesz hackeléssel. A hétvégén néhány egyszerű hibát akartam kijavítani, de végül egy sokkal nagyobb varacskolás lett a vége.

Én persze a varacskolást inkább kerülöm, még akkor is ha cserébe 5 órán keresztül kódolok. A kódolás témája a unit cube clipping (UCC), azaz a közeli és távoli vágósíkok ráfittelése a modellre. Ez kis modelleknél is baromi fontos (zfight), shadow mappinggal viszont kötelező! Utóbbi szerencsére már megvolt csinálva, most viszont a jelentre is rá akartam illeszteni a kamerát.

Az első probléma az volt, hogy ha két projekciós mátrixot interpolálsz, az alapvetően hibás (és UCC-vel különösen látható). A megoldás az, hogy interpolálod a view mátrixot, ezzel elvégzed el az UCC-t mindkét kamerára, majd az így kapott projekciós mátrixokat interpolálod. Ezt tök jól kitaláltam, nagy öjömbódottá közepette el is kezdtem kódolni éééééééés...bazdmeg a kamera nem tudja ezt, nem tudja azt, ez kajak hülyén van kitalálva... Pech...reggel 10-kor felkeltem, 12-re kész volt a kamera rendbeszedés.

Második probléma a depth linearizálása. Máris mondom, hogy perspektív projekcióval nem lehet tisztán a mátrixban megoldani... legjobb esetben a vertex shaderbe kell egy d = pos.z / farPlane. Rosszabb esetben opos.z *= opos.w / farPlane. Ez pl. SSAO-hoz kell.

Harmadik probléma szintén a UCC de most shadow mappinggal. Példának említem a causticos demót (találtok képet). A near/far rá van fittelve a sárkányra. Egyrészt ez alapból rossz, hiszen a fotonok a parkettára csapódnak, de ettől most tekintsünk el. A probléma a shadow-al van. Feltételezem mindenki eljutott odáig, hogy a shadowmap címzési módja GL_BORDER, a színe pedig fehér. Ennek ellenére a shadowmap körül fekete részek jelennek meg.

float d = cpos.z / cpos.w;

Általában jó. Itt nem. Hiszen d simán a far plane mögé eshet, és akkor d <= sd nem teljesül, azaz árnyék keletkezik. A helyes megoldás:

float d = saturate(cpos.z / cpos.w);

Nem akarok belegondolni, hogy ez mit fog okozni bizonyos meg nem nevezett Intel kártyákon. Feltételezem azért az 1 == 1 még megy neki.

Negyedik gondolatként megemlíteném, hogy a shadowmapbe mindig depth-et írj! (én persze a tutoriálokban távolságot írtam, de hamarosan javítva lesz). Így elég R16F. Bár hallottam olyan kósza híreket, hogy a DX9 is tud depth textúrát, nem próbáltam ki.

ucfitting.jpg

Konklózióként azt mondanám, hogy akármilyen fasza a is a progid, ne gondold azt, hogy tökéletes. Folyamatosan reviewolni, szúrós szemmel nézni és gumikacsázni kell. Regressziós teszt még fontosabb (egy éves SMAA hibát is kijavítottam).

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