.[ ČeskéHry.cz ].
Per Pixel osvetleni

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
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

PříspěvekZaslal: 20. březen 2010, 16:48:41    Předmět: Per Pixel osvetleni Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 20. březen 2010, 19:37:53    Předmět: Re: Per Pixel osvetleni Odpovědět s citátem

Játro.m napsal:
Je potreba u per pixel osvetleni normala pro kazdej vertex?

Podle mě jo.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 20. březen 2010, 20:06:18    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 20. březen 2010, 23:08:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. březen 2010, 10:01:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 21. březen 2010, 12:16:27    Předmět: Odpovědět s citátem

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 Wink Možná to nebude úplně přesné, ale o to v interaktivní grafice až tak moc nejde, ne?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. březen 2010, 13:47:27    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 21. březen 2010, 14:32:29    Předmět: Odpovědět s citátem

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?

Wink
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. březen 2010, 17:41:22    Předmět: Odpovědět s citátem

Very Happy, 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 22. březen 2010, 09:19:31    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 22. březen 2010, 17:14:14    Předmět: Odpovědět s citátem

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 Wink 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 22. březen 2010, 20:18:06    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 22. březen 2010, 20:58:34    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 22. březen 2010, 21:36:06    Předmět: Odpovědět s citátem

citace:
Tak si spočítej tangentu a bitangentu samostatně

jasny, jenom rikam tu moznost kdy to bude blbe fungovat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 7. duben 2010, 20:19:15    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
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