.[ ČeskéHry.cz ].
Generování lightmap - AO
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 28. květen 2018, 16:50:24    Předmět: Odpovědět s citátem

Ty blázne, to byl fofr. Smile
Jseš borec. Takhle rychle dodat změny.Smile

Když jsem měl chvilku volna v práci, tak jsem to integroval do enginu a vyzkoušel. Funguje to parádně.

To hypercore zrychlení je hodně znát, jak na rychlosti výpočtu, tak i na vytížení pc. Opravdu během toho nejde nic dělat. Smile

Jinak jsem zjistil, že pro opravdu velké mapy program konzumuje velké množství paměti, dokonce v jednu chvíli nešlo alokovat další (a nějaký jiný program schodil celé Windowsy), ale to se dalo čekat při té obří scéně, kdy mám ještě nastaveno 3 herní centimetry na texel.

Takže jsem začal pracovat na systému, kdy se scéna naseká na nějaké menší kusy, tam se spočte AO + se provede nějaký handling přechodů mezi dlaždicemi a pak se vše zas uloží do jednoho souboru scény.
To by mělo snížit paměťovou náročnost a možná i dobu výpočtu.

Takže ještě jednou velké díky.
Ukázky určitě nějaké dodám, ale mám žalostně málo času dělat něco pořádného, takže jsem byl rád, že jsem se dostal k tomuto.
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 28. květen 2018, 21:15:01    Předmět: Odpovědět s citátem

No zrovna jsem něco na lightmapperu ladil, takže to nebyl zas takový problém.
Můžeš zkusit novou verzi? (link je pořád ta 1.9 viz výš)
Na konci to vypíše max. využití paměti v MB a stáhnul jsem to zhruba na čvrtinu.
Ono já pro sebe generuji 3 lightmapy (+1 temporary buffer) se třemi komponentami, AO byl takový bonus navíc.
Reálně by to šlo stáhnout ještě na třetinu toho, co teď, ale to bych musel kompletně předělat a to se mi nechce Smile

Ideální by bylo nastavovat detail lightmapy pro jednotlivé objekty (interně to můžu per triangle), přemýšlím jestli z toho blacklistu neudělat spíš flagy,
kde by sis mohl nastavit detail lightmapy a jestli "vrhá stíny" apod,
to by bylo mnohem flexibilnější než teď.
Těch parametrů tam je i víc, ale prostě z obj to nevyčtu.

Jinak vím ještě o dvou problémech, které časem asi budu řešit, jeden je problematické groupování v určitých případech (nic zásadního),
ale druhý je občas problém v rozích/na krajích group to občas vytvoří bílý pixel,
sice se na krajích snažím posouvat ty vertexy, odkud se sampluje,
ale nějak to není pořád ono; docela mě překvapuje, že sis toho ještě nevšimnul Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 29. květen 2018, 17:00:45    Předmět: Odpovědět s citátem

Funguje a vypadá to i paměťově šetrnější i když jsem zatím neměl čas na jakékoliv hlubší testování. Díky! Smile

S tím nastavováním detailů si nedělej starosti, stačí mi ten blacklist. Já potřebuji, aby byla velikost pixelů konzistentní, takže detail lightmapy nepotřebuji.
Takhle je to super.

Už jsem si naprogramoval optimizer, takže se scéna nadělí na bloky, kolem dokola se ještě vezme vše ze samplovací vzdálenosti a spočtou se lightmapy. A pak se z výstupu to samplovací okolí zas odstraní, takže mi budou bloky hezky navazovat.
Akorát se tedy vyplatí použít NPOT textury. Ale už jsem se s tím smířil. Smile

No a žádného bílého pixelu jsem si nikdy nevšiml.
Myslím si, že jsem spokojený. Takhle to dělá přesně to, co jsem chtěl. Smile
Takže mockrát děkuji.
Své jméno v kreditech jakékoliv hry, kterou se mi povede dokončit, máš přislíbené.
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 30. květen 2018, 15:35:25    Předmět: Odpovědět s citátem

Když nad tím přemýšlím, možná, že by přeci jenom ten blacklist mohl být trochu rozšířený.
Stačilo by, kdyby za každým objektem, který chci nějak omezit, byly dva atributy (stačí 0/1), jeden by říkal, jestli daný objekt nemá přijímat stíny (tedy, aby se pro něj nepočítalo AO), druhý flag by říkal, jestli se má vypnout "vrhání stínů".

Takže něco ve smyslu:
Box01 0 1 // Přijímá stíny, ale sám je nevrhá (netestují se s ním kolize).
Box02 1 0 // Vrhá stín na ostatní objekty, ale sám stíny nepřijímá.
Box03 1 1 // Nepočítá se s ním (stejné jako když je v blacklistu v aktuální verzi).

Šlo by to udělat? Smile

EDIT: Nebo by stačil jeden flag 0/1/2, kde 0 je "nepočítá se s ním", 1 pak "přijímá stíny, ale není zdrojem kolizí", 2 "je zdrojem kolizí, ale nepočítá se pro něj AO).
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 30. květen 2018, 20:35:59    Předmět: Odpovědět s citátem

Ok, máš to tam, udělal jsem to ale po svém, že ti prostě dám k dispozici interní flagy.
Tzn. blacklist jsou teď object flags. Pokud tam není číslo, chová se jako předtím (blacklist)
(link je pořád ta 1.9)

Seznam flagů (jsou popsané i v texťáku v zipu):
kód:

FLG_INVISIBLE    =    1    // no occlusion
FLG_TRACE_ALPHA  =    2    // not exposed to AOGen
FLG_UNLIT        =    4    // no incoming occlusion = white for AO
FLG_SKY          =    8    // not used for AO
FLG_NO_SHADOW    =    16   // same as FLG_INVISIBLE
FLG_BOTHSIDED    =    64   // not used for AO

// Lightmap quality mask:
// 8 = 16x (very low), 9 = 12x, 10 = 8x, 11 = 6x, 12 = 4x, 13 = 3x, 14 = 2x, 15 = 1.5x
// 0 = 1x, 1 = 0.75x, 2 = 0.5x, 3 = 0.375, 4 = 0.25x, 5 = 0.1875, 6 = 0.125x, 7 = 0.09375x (very high)
FLG_LMAP_QUALITY_MASK = 15 << 16,
FLG_LMAP_QUALITY_SHIFT = 16


Ta kvalita (relativní detail) samozřejmě znamená, že tu konstantu (8=16x) posuneš doleva o 16 bitů, tj. 0x80004 znamená,
že objekt bude bílý a zabere v lightmapě minimum (16x menší detail), ale objekty okolo od něj budou přijímat AO

Ještě přemýšlím, že bych ti mohl nějak umožnit zadat trace png bitmapy (TRACE_ALPHA) flag, sampluje to pak při raycastování alfa kanál a dělá to v podstatě alpha test na 0.5,
to by se mohlo hodit třeba pro kytky nebo keře, že by ten stín dole nebyl jenom placka. Chceš? Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 30. květen 2018, 22:21:21    Předmět: Odpovědět s citátem

Hmm, železo se má kout, dokud...
Přidal jsem alphamapy a ještě jednu drobnost, formát starého blacklistu je teď
např.

kód:

Teapot02 2 &alphamap "groundpalm_1k.png"

tj. název materiálu (ident. nebo string), pak flags a pak optional seznam spec. parametrů:
&alphamap "filename.png" načte png jako transparency mapu (alpha threshold 0.5)
&model 1 přiřadí model index objektu, co to znamená je, že se nikdy nevytváří lightmap groups napříč "modely", tj. v podstatě group index, který ti zajistí, že se nebudou mezi sebou groupovat

A to by ti snad mohlo na nějakou dobu stačit...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 31. květen 2018, 16:22:17    Předmět: Odpovědět s citátem

Perfektóza! Smile
Už jsem zaintegroval změny a vše funguje krásně.
U alfa map jsem trošku panikařil, že mi to nefunguje, ale bylo to tím, že objekt měl špatné UV souřadnice. Wink

Myslím, že mi to bohatě vystačí, i na dlouhou dobu.
Chtělo by to nějakou ukázkovou scénu... kde jí vzít a nekrást. Very Happy
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 6. srpen 2018, 20:31:01    Předmět: Odpovědět s citátem

Ahoj mare,
ještě bych měl jedno drobné vylepšení... bylo by možné, aby pozadí textur (tedy místa, kde nejsou trojúhelníky) bylo bílé a ne černé? Jak jsem si udělal to dělení scény na menší díly, tak se na hranách dělení udělal 1 pixelový šev (s tím se prostě dalo počítat). Experimentálně jsem všechny černé plochy změnil na bílou a problém byl pryč.
Co Ty na to?
Díky,
Vóďa
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 7. srpen 2018, 12:46:11    Předmět: Odpovědět s citátem

Čau, to by se nemělo stávat, vždyť tam dávam 1-px obal okolo každé grupy.
Vždyť to tak používám u sebe a nemám s tím problém. Mohl bys poslat screenshot + lightmapu, kde to dělá problém? Pro lepší představu.
Jinak vyplnit to bílou by neměl být problém, pokud je to opravdu ono, pokud to je tak, jak říkáš, tak to by byl další bug.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 7. srpen 2018, 15:39:18    Předmět: Odpovědět s citátem

Z tebe to leze jak z chlupaté deky Smile Neděláš nějaké čachry s uvčckama? Případně se ještě zeptám - používáš MSAA? Ten screenshot se seamem by opravdu pomohl...

Ok, udělal jsem nějaké změny v AOGenu.
Aktuální verze 1.9.4 je tady:
http://www.crabaware.com/Utils/AOGen/AOGen_1.9.4.zip

Co je nového: dva vstupní parametry, jeden odstraněný + nějaké nové flagy viz readme.

-r je nový parametr, říkejme mu retain
v alfa kanálu ti otaguje nevyužité texely (alpha < 128) a zároveň barvou označí typ nevyužitého texelu, červená znamená nevyužitý v rámci grupy, modrá v rámci atlasu
-F znamená full-flood alpha, tzn. vyfilluje všechny nevyužité texely v úplně celé textuře; tohle by ti možná mohlo stačit (i když si myslím, že problém je jinde)

S tím -r, pokud použiješ dočasně všechny RGB kanály by se dalo zjistit, odkud se ten seam bere.
Pokud to bude modrá nebo červená, je to problém s mapováním lightmap UVček na triangly.
Pokud to bude černá, tak je problém v generování AO.

Další možnost pro tebe je použít -r a ručne si vyfillovat bílou všechny pixely s alfou < 128, nicméně toto je pouze hák na potenciální bug, radši bych ten problém skutečně vyřešil.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 7. srpen 2018, 18:50:13    Předmět: Odpovědět s citátem

Sorry, měl jsem celý den školení, takže jsem nemohl odpovědět.

Screenshot (jen to v podstatě jen bílá plocha, ale šev tam je).
https://drive.google.com/file/d/17CWWVHb7v02Q7slEBKeEaAkoudub3rbT/view?usp=sharing (nevím proč, ale nelze použít img tag).

Můžeš si všimnout tenkého švu. Zajímavé je, že když přibližuji oddaluji kameru, tak občas zmizí, ale objeví se jinde (podle toho, jak jsem segmentoval geometrii levelu).

Abych upřesnil co s tím dělám. Aby byl výpočet paměťově šetrný (teď to sekvenčně nežere víc jak 200 MB), rozdělím si geometrii po 80 metrech a počítám AO pouze pro tyto "clustery". Abych potlačil právě ostré přechody, vždy ke clusteru připojím okolní trojúhelníky (na +- velikost paprsku). Po výpočtu AO tyto trojúhleníky "z okolí" zase odstraním.

Když nad tím přemýšlím tak vlastně nemusí být problém ani v AOGenu, ale možná v mergování duplicitních vrcholů, které dělám po importu spočtených dat...

Tu novou verzi zkusím nějak stáhnout (ale zatím marně, služební antivirák to blokuje jako aplikaci z netu) a zkusím udělat to, co navrhuješ, abychom se podívali, co se tam děje.
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 7. srpen 2018, 19:56:11    Předmět: Odpovědět s citátem

Ok, takže se zdá, že je to černá barva v tom švu. Zkoušel jsem třeba, jestli to není barva pozadí, ale když jsem jí dal na bílou, tak je tam stále černý šev. Pochopitelně jsem kontroloval, jestli jsou v lightmapách červené a modré regiony...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 7. srpen 2018, 20:12:18    Předmět: Odpovědět s citátem

Tady jsem to hodně přiblížil:
https://drive.google.com/file/d/1ilc0uRlRh_lINoSx9cUsn7ZUqShlrAFE/view?usp=sharing
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 495

PříspěvekZaslal: 7. srpen 2018, 20:21:31    Předmět: Odpovědět s citátem

Mohl bys mi uploadnout ty dva nařezané kusy, kde to vzniká? (=obj, vstup do AOgenu) a parametry, které používáš?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1674
Bydliště: Plzeň

PříspěvekZaslal: 7. srpen 2018, 20:28:28    Předmět: Odpovědět s citátem

Ahhh... sorry, my bad.
Je to modrá, já zapomněl, že používám pro lightmapy jednokanálové textury (GL_RED), abych ušetřil paměť.
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další
Strana 6 z 7

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna