Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Mihulik
Založen: 18. 07. 2008 Příspěvky: 22
|
Zaslal: 26. prosinec 2009, 16:35:41 Předmět: Jak řídit efekty |
|
|
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 ).
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 26. prosinec 2009, 17:31:17 Předmět: |
|
|
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 |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 26. prosinec 2009, 17:46:29 Předmět: Re: Jak řídit efekty |
|
|
Mihulik napsal: |
Chci aby uživatel měl možnost přidat si vlastní efekty. |
pridat kam? |
|
Návrat nahoru |
|
 |
Mihulik
Založen: 18. 07. 2008 Příspěvky: 22
|
Zaslal: 26. prosinec 2009, 18:29:47 Předmět: |
|
|
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á |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 26. prosinec 2009, 19:27:36 Předmět: |
|
|
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 |
|
 |
Mihulik
Založen: 18. 07. 2008 Příspěvky: 22
|
Zaslal: 27. prosinec 2009, 10:45:29 Předmět: |
|
|
Myšlenka zní dobře.
Promyslet rozhraní, aby bylo opravdu plug-able a zároveň se vyhnout mnoha render passes bude horší  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 27. prosinec 2009, 11:13:57 Předmět: |
|
|
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 |
|
 |
Mihulik
Založen: 18. 07. 2008 Příspěvky: 22
|
Zaslal: 28. prosinec 2009, 09:52:04 Předmět: |
|
|
asi jsem slepý, ale nepodařilo se mi o para. polymorfismu nic slušného vygooglit
Nemáš nějaký link prosím? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 28. prosinec 2009, 13:26:07 Předmět: |
|
|
Š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 |
|
 |
Mihulik
Založen: 18. 07. 2008 Příspěvky: 22
|
Zaslal: 28. prosinec 2009, 13:54:31 Předmět: |
|
|
interafacy jsem u CG našel, jen mi nedocvaklo, že je to vlastně to, co hledám
Prostuduji.
Děkuji  |
|
Návrat nahoru |
|
 |
|