Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 3. květen 2011, 22:03:49 Předmět: |
|
|
BTW tohle vlákno by mělo být v 3D API. Sekce Grafika je věnovaná jen klikačům (v 3dsmax atd).  _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 3. květen 2011, 22:33:40 Předmět: |
|
|
#pcmaster - vpraxi máš pravdu, možnost a téměř vždy. Lze však použít také možnost b (xyz=rgb) a použít rgba32f - nikoliv rgba16f.
Důležité je však vědět kdy použít co. Pokud jsem fillrate-limited (ono zaplnění rgba32f bufferu trvá déle než r32f bufferu), nebo bandwidth-limited - tak jednoznačně možnost a. Avšak, pokud mám spoustu bandwidth volnou a potřebuji nižší hodnoty fillrate, ale potřebuju šílené výpočty (napadají mě různé fyzikální simulace kde toho lze využít), mohu použít možnost b s rgba32f bufferem - rekonstrukce pozice z hloubky totiž není rozhodně zadarmo, a v případě limitu ve výpočetním výkonu je metoda uložení pozic rozhodně lepší.
EDIT: Nicméně pokud potřebuju obojí, tak je důležité si uvědomit co roste rychleji - zpravidla výpočetní výkon a ne fillrate či bandwidth karty, tedy dává se přednost metodě lehčí na ně - tedy metodě a _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 4. květen 2011, 00:16:23 Předmět: |
|
|
Musím absolutně nesouhlasit s variantou b a rgba32f bufferem. Rekonstrukce pozice jde v pixel shaderu udělat pomocí jedné instrukce MAD (pro neznalé: má to 3 vektorové parametery a počítá to x*y+z). To je absolutně primitivní operace. Samozřejmě je potřeba se nad problémem trochu zamyslet a ne zkopírovat nějakej debilní algoritmus z netu (a že jich tam není málo). Podmínkou je snad akorát lineární zbuffer. Schválně, jestli na to přijdete sami. Takže ano, rekonstrukce té pozice je zadarmo. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 4. květen 2011, 09:15:50 Předmět: |
|
|
Kazdopadne na uplny zaciatok, na debugging odporucam ulozit si tu world poziciu fakt do rgba32f textury a az ked to bude behat si ju prepocitavat, to sa asi zhodneme. Vidim tu nejake rgba64f a rgba16f, tak to snad ale nemysli nikto vazne, ani jedno z toho (pre pozicie) Normaly, na druhu stranu, je mozne ukladat bud do rgba16f, alebo r11g11b10, rgba8 nestaci snad nikdy, max na vizualny debug. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 4. květen 2011, 13:11:01 Předmět: |
|
|
To s tím r11g11b10 myslíš ten float ne? To by mohlo na normály stačit, i když nevím... problém je, že mantissa tam je r6g6b5 a žadný znamínko. Jinak co se týče normál, tak by snad stačilo r16g16_snorm a třetí souřadnici dopočítat, pokud je chceš hodně přesný. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 4. květen 2011, 13:43:10 Předmět: |
|
|
#pcmaster - na normály se vyplatí ještě rgb10a2, pokud chceš ještě ukládat nějaký parametr navíc (do alpha channelu).
#Eosie - jop, máš pravdu - jde to přes mad s lineárním z-bufferem, problém je, pokud používáš logaritmický z-buffer (který já používám takřka všude) ... tím se to trošičku komplikuje, ale v praxi jsem pozici do rgba32f bufferu prakticky nikdy neukládal (přišlo mi to jako plýtvání s fillrate a bandwidth).
Teoreticky, jak jsem psal, by to bylo možné využít u šílených fyzikálních simulací - ovšem u nich není třeba deferred rendering a ani "poziční buffer"...
Ad r16g16_snorm - jde jej použít, ale tak přemýšlím jestli nepotřebuješ ještě znaménko pro třetí složku kterou dopočítáš? Protože matematicky by vznikly 2 kořeny. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 4. květen 2011, 14:51:39 Předmět: |
|
|
Jo.. to znaménko je potřeba, jinak se to protáčí
Tady jsem našel zajímavý článek o balení normál: http://aras-p.info/texts/CompactNormalStorage.html. Líbí se mi ten přístup SphereMap.
Jinak zatím to pro debug účely balím ARGB8 normály, ARGB8 depth (s tím, že pak rekonstruju hloubku zpět na float.. použít R32F by bylo lepší, ale pak se mi to blbě vizualizuje), ARGB8 na diffuse, specular
Akorát řeším, kam ukládat material ambient.. co jsem hledal, tak všude je jaksi akorát diffuse a specular, na ambient se jaksi kašle a není mi moc jasné proč. _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 4. květen 2011, 16:17:13 Předmět: |
|
|
Vilem Otte napsal: |
Ad r16g16_snorm - jde jej použít, ale tak přemýšlím jestli nepotřebuješ ještě znaménko pro třetí složku kterou dopočítáš? Protože matematicky by vznikly 2 kořeny. |
Ano, ale u deferred shadingu vidíš pouze jednu polokouli oboru hodnot normály, druhá je vždycky odvrácená. Když navíc ty normály jsou ve view space, tak ta třetí souřadnice je buď vždy kladná nebo vždy záporná (podle tvé definice view space) a tam už je kořen jenom jeden.
To samé u normal map... tam taky uvažuješ jenom tu polokouli, která je nad facem.
Aras P. s náma jednu chvíli dělal na GLSL compileru. Chytrej týpek. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 8. květen 2011, 18:08:48 Předmět: |
|
|
Tak jsem dal dohromady základní deferred renderer (amebint light, dir. lights, point lights (Work in Progress))
Počítám ve WorldViewSpace
Hloubku ukládám jako
VS:
depth = mul(pos, world * view).z
PS:
depth = depth / zFar.. (near nepočítám, je blízko k 0)
Rekosntukce
Pošlu rohy far stěny view frustra přenásobené view maticí
VS:
podle ID rohu vyberu ID rohu frustra (0 - 4)
PS:
depth = loadDepthFromTex (R32F)
pozice = depth * corner
Je normální, že bez deferred mám 1200 FPS
S deferred 80 FPS (stejná scéna)
(Rozlišení 1920 x 1200 .. samozřejmě, když ho zmenším, fps jde nahoru) _________________ Perry.cz |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 9. květen 2011, 08:51:05 Předmět: |
|
|
perry napsal: |
Je normální, že bez deferred mám 1200 FPS
S deferred 80 FPS :D (stejná scéna)
(Rozlišení 1920 x 1200 .. samozřejmě, když ho zmenším, fps jde nahoru) |
No, bohužel asi jo. Záleží jak na kterým HW. Musíš omezit fillrate. Navíc některý starší karty rendrování do textur moc nedávají. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 9. květen 2011, 10:33:35 Předmět: |
|
|
Hm... rozdíl mezi 1200 a 80 fps není tak velký (měřte frame time, ne frame rate!)
Navíc ujisti se že nemáš zapnutý v-sync, protože ten tě omezí na fps shodující se s frekvencí monitoru.
80 fps je celkem dobrý čas, zkus přidat další efekty prvně, ať vidíš co to udělá, jestli budeš mít stále přes nějakých 40 - 50 fps, tak se na další optimalizace prozatím můžeš vykašlat. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 9. květen 2011, 14:37:10 Předmět: |
|
|
Náročná grafika v 80 fps na 1920x1200 mi přijde v pohodě Je tam velký prostor pro snížení rozlišení pro méně výkonné grafiky. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 9. květen 2011, 15:09:01 Předmět: |
|
|
Vilem Otte napsal: |
Hm... rozdíl mezi 1200 a 80 fps není tak velký (měřte frame time, ne frame rate!) |
V tomhle případě je to jedno. Pokud se fps zadá v absolutních číslech, pak se dá vždycky převést na frame time a zpět, i ten poměr mezi oběma čísly je tam stejnej (až na to, že je převrácenej). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|