Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 20. březen 2010, 16:48:41 Předmět: Per Pixel osvetleni |
|
|
Ahoj,
potreboval bych ujistit. Je potreba u per pixel osvetleni normala pro kazdej vertex? Nebo staci per face? Jde mi o smoothovani povrchu. Momentalne to mam per face a interpolaci s glShadeModel() ale neni to ono a pro per vertex je to docela ztrata vykonu pri pocitani animace.
Diky |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 20. březen 2010, 19:37:53 Předmět: Re: Per Pixel osvetleni |
|
|
Játro.m napsal: |
Je potreba u per pixel osvetleni normala pro kazdej vertex? |
Podle mě jo. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 20. březen 2010, 20:06:18 Předmět: |
|
|
asi ano, sice u bumpmappingu jsem mel per face a nebylo to poznat ale todle bude jiny. Teoreticky by se ty normaly daly pocitat v vertex shaderu ne? abych nemusel zbytecne ve vykreslovani prochazet vsechny vertexy. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 20. březen 2010, 23:08:35 Předmět: |
|
|
Játro.m napsal: |
Teoreticky by se ty normaly daly pocitat v vertex shaderu ne? |
Teoreticky asi ano, ale prakticky se to nedělá. Jakou animaci máš na mysli a kolikaprocentní propad způsobují per-vertex normály? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 21. březen 2010, 10:01:35 Předmět: |
|
|
no, animace je kosterni - animuji ji na cpu protoze nevim jak to spocitat na gpu, v tomhle jsem lama. A propad kdyz pustim pocitani normal je tak o 70fps - cim vic objektu tim to jde dolu. Jenom, jakej je duvid proc se ty normaly nepocitaj v gpu? kdyz potrebujes tangenty/binormaly tak to spocitas zaroven ne? A nepotrebujes s tim saskovat zbytecne ve vykresleni. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 21. březen 2010, 12:16:27 Předmět: |
|
|
Játro.m napsal: |
jakej je duvid proc se ty normaly nepocitaj v gpu? |
Protože je lepší je předpočítat a používat předpočítané. Nějak nechápu, proč by nešlo pomocí kostí transformovat i tyto předpočítané per-vertex normály (a tangenty, bitangenty), ale to možná bude tím, že jsem ještě nic kosterně neanimoval Možná to nebude úplně přesné, ale o to v interaktivní grafice až tak moc nejde, ne? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 21. březen 2010, 13:47:27 Předmět: |
|
|
Jasne ze by slo, ty normaly transformovat predpocitany ale potom je na pytel pocitat ty tangenty a bitangenty. Jestlize grafik zmeni ty normaly v 3D programu tak nebudou sedet tangenty atd, coz mi bude docela vadit. No uz zaciname jit offtopic, perpixel dopisu a poslu sem jak to teda ma byt. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 21. březen 2010, 14:32:29 Předmět: |
|
|
Proč by měl grafik měnit normály?
Edit: Nevím, jestli jsme OT, ale už ti asi nebudu radši dál radit, protože
Luk 6:39 napsal: |
Může vést slepý slepého? Nepadnou oba do jámy? |
 _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 21. březen 2010, 17:41:22 Předmět: |
|
|
, normaly jsem vyresil - mam to per face a funguje to naprosto stejne jak s per vertex takze jsem asi kouzelnik. Nevadi hlavne ze to funguje. |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 22. březen 2010, 09:19:31 Předmět: |
|
|
Záleží, jak to chceš vykreslovat. Pokud chceš, aby byly hrany vidět (ostré hrany), tak nesmí být vertexy dvou sousedních faců sdílené, ale musí to být dva samostatné vertexy se stejnou pozicí, ale různou normálou.
Pokud chceš mít oblé hrany, tak bys měl mít vertex sdílený pro dva sousední facy, tj. úplně ten samej vertex, na kterej se z index bufferu odkazuješ (minimálně) ze dvou trojúhelníků + musíš mít zapnutej správnej smooth mód. Smootovat se Ti bude (téměř - pro hnidopichy) všechno, takže i normály.
Ve většině případů člověk chce tenhle druhej přístup, kterej je i úspornější na paměť. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 22. březen 2010, 17:14:14 Předmět: |
|
|
Játro.m napsal: |
Teoreticky by se ty normaly daly pocitat v vertex shaderu ne? |
Ne, ve vertex shaderu máš přístup pouze k jednomu vertexu, který počítáš. Stejně je to s pixel shaderem (až na jednu výjimku - viz dále). Geometry shader už umožňuje přistupovat k okolním trojúhelníkům, takže tam bys mohl spočítat pěkně vyhlazené per-vertex normály.
Na výpočet per-face normál ti stačí pixel shader, kde zderivuješ pozici modelu v nějakém rozumném prostoru (tzn. ne v post-projective space). Pixel shader od verze 3.0 má právě (diskrétní) derivovací funkce, které se dívají do okolních pixelů, takže se to na to výborně hodí. (implementace v hardwaru je ve skutečnosti pěknej oser, funguje jen první derivace)
frca napsal: |
Játro.m napsal: |
jakej je duvid proc se ty normaly nepocitaj v gpu? |
Protože je lepší je předpočítat a používat předpočítané. Nějak nechápu, proč by nešlo pomocí kostí transformovat i tyto předpočítané per-vertex normály (a tangenty, bitangenty), ale to možná bude tím, že jsem ještě nic kosterně neanimoval Možná to nebude úplně přesné, ale o to v interaktivní grafice až tak moc nejde, ne? |
Teď si přesně nevzpomenu, ale myslím, že tam byl po animování nějakej dobrej důvod normálu a tangenty znovu spočítat v geometry shaderu. Bylo to zmíněno na letošním GDC při představení OpenGL 4.0...
Játro.m napsal: |
Jestlize grafik zmeni ty normaly v 3D programu tak nebudou sedet tangenty atd |
Tohle je teoreticky blbost. Tangenty nezávisí na normále, ale pouze na pozicích vertexu jednoho trojúhelníku a jeho koordinátech. Smysl tangent je korektně orotovat normálu v normal mapě tak, aby měla vždy konzistentní směr směrem k pozorovateli bez ohledu na tom, jestli je normal mapa namapována normálně nebo vzhůru nohama (což by bez transformace pomocí tangent invertovalo prostorový vjem generovaný normal mapou) Normála modelu je úplně nezávislý element, který se přidává, abys měl kompletní bázi pro převod 3D vektorů z/do prostoru koordinátu. Selský rozum říká, že všechny vektory báze tj. normála a obě tangenty musí být na sebe kolmé (= ortogonální), ale v praxi to není skoro nikdy pravda. Stačí texturu namapovat zkoseně a už nemáš na sebe kolmé tangenty (mírné zkosení se děje automaticky u zakřivených povrchů), vyhlazené normály taky porušují ortogonalitu. Z toho všeho také plyne, že dát si tam vlastní normály neodpovídající povrchu je úplně v pořádku, pokud výsledek vypadá dobře. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 22. březen 2010, 20:18:06 Předmět: |
|
|
Jasne, eosie problem nastava kdyz ty tangenty/bitangenty pocitas crossproduktem normaly a tangenty/bitangenty, potom to dela bordel - to jsem myslel. Taky se to da pocitat samostatne ale je to potom trochu zachazka kdyz to muzes vsechno spocitat najednou. Uz se tim nema cenu zabyvat, mam to napsane funguje to a spolehlive to beha aji na integrovane grafice ktera podporuje GLSL.
Jinak k tomu vertex shaderu a normalam - mel jsem dojem ze se da pristupovat k vice vertexum, to vysvetluje proc se to pocita takhle. Tudiz tam nemuzu ani pocitat ten zbytek do tangent space ze ? Puvodne to vsechno pocitam na procesoru a premyslel jsem ze to poslu na GPU. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 22. březen 2010, 20:58:34 Předmět: |
|
|
Játro.m napsal: |
Jasne, eosie problem nastava kdyz ty tangenty/bitangenty pocitas crossproduktem normaly a tangenty/bitangenty, potom to dela bordel - to jsem myslel. |
Tak si spočítej tangentu a bitangentu samostatně (potřebuješ jen pozici a koordináty). Když už chceš počítat bitangentu vektorovým součinem (i když nekorektní, používá se to), tak ji do modelu vůbec nedávej, udělej ten cross product ve vertex shaderu.
Játro.m napsal: |
Jinak k tomu vertex shaderu a normalam - mel jsem dojem ze se da pristupovat k vice vertexum, to vysvetluje proc se to pocita takhle. Tudiz tam nemuzu ani pocitat ten zbytek do tangent space ze ? Puvodne to vsechno pocitam na procesoru a premyslel jsem ze to poslu na GPU. |
Pro výpočet osvětlení v tangent space potřebuješ pracovat jen s vertexem, který počítáš. Ostatní vertexy znát nepotřebuješ. Stejně tak u pixelů. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 22. březen 2010, 21:36:06 Předmět: |
|
|
citace: |
Tak si spočítej tangentu a bitangentu samostatně |
jasny, jenom rikam tu moznost kdy to bude blbe fungovat. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 7. duben 2010, 20:19:15 Předmět: |
|
|
Eosie napsal: |
Geometry shader už umožňuje přistupovat k okolním trojúhelníkům, takže tam bys mohl spočítat pěkně vyhlazené per-vertex normály.
... normálu a tangenty znovu spočítat v geometry shaderu. |
Tady jsem se mýlil. Normálu ani tangenty v geometry shaderu spočítat nejde. Je zajímavé, že mě nikdo neopravil, přitom se stačí podívat, jak jsou definovaná primitiva pro geometry shader a hned je to jasný. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|