Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 28. květen 2018, 16:50:24 Předmět: |
|
|
Ty blázne, to byl fofr.
Jseš borec. Takhle rychle dodat změny.
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.
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 28. květen 2018, 21:15:01 Předmět: |
|
|
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
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 |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. květen 2018, 17:00:45 Předmět: |
|
|
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!
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.
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.
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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. květen 2018, 15:35:25 Předmět: |
|
|
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?
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 30. květen 2018, 20:35:59 Předmět: |
|
|
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š? |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 30. květen 2018, 22:21:21 Předmět: |
|
|
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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 31. květen 2018, 16:22:17 Předmět: |
|
|
Perfektóza!
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.
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. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 6. srpen 2018, 20:31:01 Předmět: |
|
|
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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 7. srpen 2018, 12:46:11 Předmět: |
|
|
Č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 |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 7. srpen 2018, 15:39:18 Předmět: |
|
|
Z tebe to leze jak z chlupaté deky 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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 7. srpen 2018, 18:50:13 Předmět: |
|
|
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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 7. srpen 2018, 19:56:11 Předmět: |
|
|
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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 7. srpen 2018, 20:21:31 Předmět: |
|
|
Mohl bys mi uploadnout ty dva nařezané kusy, kde to vzniká? (=obj, vstup do AOgenu) a parametry, které používáš? |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 7. srpen 2018, 20:28:28 Předmět: |
|
|
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 |
|
|
|