.[ ČeskéHry.cz ].
Jak řídit efekty

 
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
Mihulik



Založen: 18. 07. 2008
Příspěvky: 22

PříspěvekZaslal: 26. prosinec 2009, 16:35:41    Předmět: Jak řídit efekty Odpovědět s citátem

Zdravím,
v programování 3D grafiky jsem poměrně nový a vůbec si nevím rady, jak spravovat efekty.
Chci aby uživatel měl možnost přidat si vlastní efekty. Jako efekt myslím kombinaci vertex/geometry/pixel shaderu
a renderovacích stavů.
První (a určitě špatná) myšlenka bylo udělat spoustu variant mega shaderů, které by kombinovali všechno možné možnosti
(např. NormallMappingAmbientOcclusionDiffuseAndBumpMapping shader Very Happy).
Ovšem to je samozřejmě blbost, protože zaprvé možných kombinacích by bylo neúměrně mnoho (nemluvím ani o omezeným počtu instrukcí pro SM3), ale uživatel by
těžko mohl přidat svůj vlastní efekt, protože by vlastně musel psát daný efekt pro všechny možné kombinace.

Takže druhé řešení, které myslím bude vést k cíly, ale nejsem si jistý jak.
Klasika jeden shader pro jeden efekt. V tom případě bych danou scénu renderoval několikrát s daným shaderem. Ovšem v tomto případě by byl daný počet
renderů příliš vysoký, ne?
Řekněme, že chci vyrenderovat scénu, která obsahuje i transparentní objekty, se zaplým per-pixel osvětlením, difůzní texturou a ambient occlusion.
Takže render by pak vypadl nějak takto:
1)vykreslit neprůhledné objekty s difůzní texturou
2) to samé pro průhledné
3)normal mapping
4)ambient occlusion

Takže scénu bych kreslit 4x. Není to příliš mnoho, když vezmu v potaz, že efektů může být mnohem víc?

Jak toto řešíte vy a různé enginy?
Děkuji moc za jakoukoli radu.


Naposledy upravil Mihulik dne 26. prosinec 2009, 22:19:36, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 26. prosinec 2009, 17:31:17    Předmět: Odpovědět s citátem

no hej da sa to riesit "uber" shaderom (a casto sa to tak aj riesi) ze mas jeden obrovsky shader v ktorom mas jednotlive casti obalene #ifdef a tak ich zapinas a vypinas. ale to je ked je vobred presne definovana mnozina efektov ktore sa daju vypnut v hre.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 26. prosinec 2009, 17:46:29    Předmět: Re: Jak řídit efekty Odpovědět s citátem

Mihulik napsal:
Chci aby uživatel měl možnost přidat si vlastní efekty.


pridat kam?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mihulik



Založen: 18. 07. 2008
Příspěvky: 22

PříspěvekZaslal: 26. prosinec 2009, 18:29:47    Předmět: Odpovědět s citátem

nou: Dobrá, ale pokud nemám konečnou množinu efektů? Uživatel API má možnost přidat si vlastní efekty, tudíž přístup über shaderů asi padá, myslím.

quas4: No rozšířit zabudovanou kolekci efektů o svůj vlastní. Api například nepodporuje parallax mapping....Nevadí, není nic jednoduššího než daný efekt přidat.
Myslím že tahle část je pochopitelnáSmile
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: 26. prosinec 2009, 19:27:36    Předmět: Odpovědět s citátem

Můžeš si udělat hromadu funkcí rozdělené do následujích kategorií:
- funkce počítající osvětlení, které bere normálu, vektor světla, vektor kamery, možná koordináty shadow mapy?
- funkce povrchu generující jeho vlastnosti (barvu, normálu...)
- funkce generující ambientní barvu
- atd.

K materiálu pak přidáš, které z funkcí se mají použít k vygenerování kompozitní funkce, která to všechno dá dohromady.

Zkus si jednotlivé vlastnosti shaderu nějak vymezit a udělat si k nim jednotný interface, abys je mohl obměňovat.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mihulik



Založen: 18. 07. 2008
Příspěvky: 22

PříspěvekZaslal: 27. prosinec 2009, 10:45:29    Předmět: Odpovědět s citátem

Myšlenka zní dobře.
Promyslet rozhraní, aby bylo opravdu plug-able a zároveň se vyhnout mnoha render passes bude horší Smile
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: 27. prosinec 2009, 11:13:57    Předmět: Odpovědět s citátem

Jazyk Cg umí parametrický polymorfismus, možná bys ho mohl využít. Je tam dostupný přes klíčové slovo interface nebo možná i struct? Už si to nepamatuju.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mihulik



Založen: 18. 07. 2008
Příspěvky: 22

PříspěvekZaslal: 28. prosinec 2009, 09:52:04    Předmět: Odpovědět s citátem

asi jsem slepý, ale nepodařilo se mi o para. polymorfismu nic slušného vygooglit Embarassed
Nemáš nějaký link prosím?
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: 28. prosinec 2009, 13:26:07    Předmět: Odpovědět s citátem

Šablony v C++ a generika v C# jsou příkladem parametrickýho polymorfismu. Cg na to má interfacy, na jejichž místo musíš dosadit objekty už při kompilaci.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mihulik



Založen: 18. 07. 2008
Příspěvky: 22

PříspěvekZaslal: 28. prosinec 2009, 13:54:31    Předmět: Odpovědět s citátem

interafacy jsem u CG našel, jen mi nedocvaklo, že je to vlastně to, co hledám Very Happy

Prostuduji.

Děkuji Smile
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