Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
|
Návrat nahoru |
|
|
Deluxe
Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 18. srpen 2008, 11:57:55 Předmět: |
|
|
Ja bych doporucil najit si neco o Shaderech (Male programy spoustene na GPU). Jinak dobrej priklad muze byt OpenSource hra RocketCommander, existuje ve verzi MDX a XNA, pouziva tam ParallaxMapping a jeste par dalsich shaderu. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 18. srpen 2008, 19:50:00 Předmět: |
|
|
Ten příklad mi připadá docela zastaralej, protože používá fixní pipeline a ta se dnes už moc nepoužívá. S těma shaderama je to dobrej nápad a můžeš tam udělat spoustu variant bump mappingu... _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 19. srpen 2008, 12:55:29 Předmět: |
|
|
Přes shadery to rozhodně psát nehodlám... potřebuju co nejjednodušší řešení (na napsání), abych měl šanci pochopit princip. |
|
Návrat nahoru |
|
|
Juraj
Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 19. srpen 2008, 13:31:05 Předmět: |
|
|
Matasx napsal: |
Přes shadery to rozhodně psát nehodlám... potřebuju co nejjednodušší řešení (na napsání), abych měl šanci pochopit princip. |
Nepovažuji se za nejzkušenějšího, takže ti nechi radit ale spíše ti něco doporučit. Kdysy jsem se rozhodoval taky zda použít shardery nebo ne. Nakonec jsem se rozhodl pro, dalo mi to znatelně více práce implemetnovat použití sharderů do mého projetku, ale nyní jsem opravdu rád, že jsem se takto rozhodl. I když o sharderech nevím zdaleka vše, umím je použít a to je to podstatné, výsledek.
Pokud tě tato problematika zajímá a chceš dělat i rozsáhlejší projetky, použití sharderů ti značně ulehčí práci a zvýší fps.
ps: je to jen můj názor.. |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 19. srpen 2008, 13:55:16 Předmět: |
|
|
Juraj napsal: |
Pokud tě tato problematika zajímá a chceš dělat i rozsáhlejší projetky, použití sharderů ti značně ulehčí práci a zvýší fps. |
Dělám jednoduchou 2D vesmírnou střílečku a v podstatě poslední co mi chybí, je bump mapping. Takže kvůli tomu nechci ztratit třeba týden času, když vím že by mělo existovat řešení na pár řádků. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 19. srpen 2008, 14:28:39 Předmět: |
|
|
Je to čistá matika a jedna kouzelná funkce na to nebude. Kdysi jsem to dělal tak, že jsem si spočítal vektory světla (ručně) a převedl jsem je do texture space. Potom jsem na fixní pipelajně nastavil tu funkci DOTPRODUCT3, jako jeden zdroj dal normal mapu, druhý zdroj ty vektory světla a ono to mezi tím udělalo skalární součin a zobrazilo pixel. To není vše, ono to totiž vypadalo docela hnusně, protože by se měl použít trik s normalization cubemapou, kde jako koordináty dosadíš ty vektory světla a ono ti to vrátí ty vektory jednotkové (už jako RGB pixely cubemapy). Tohle je nutné, protože po lineární interpolaci jednotlivých vektorů světla po ploše trojúhelníku dostaneš ty vektory nejednotkové (tady je obrázek, který přesně ukazuje problém). Pak jenom nastavíš ten skalární součin, aby bral pixely normal mapy a té cubemapy jako argumenty (samo si to převede rozsahy barev do <-1,1>). Tohle je způsob, jaký je podle mě v tom demu a tak se to dělalo ještě asi před pěti lety.
Trochu smutným faktem je, že ty se těm detailům stejně nevyhneš. Výhody, které ti poskytují shadery oproti tomuto způsobu, jsou:
- Odpadá nutnost použít normalization cubemapu, páč v shaderu je prostě funkce normalize, která se dá použít na lib. vektor.
- Vektory světla můžeš místo v aplikaci spočítat ve vertex shaderu a nebude tě to nic stát co se týče výkonu (výkon CPU je třeba šetřit, pokud neděláš pro quadcore).
- Máš větší možnosti co se týče samotného výpočtu osvětlení. Budeš si moct obarvit jednotlivé složky světla, implementovat si specular (odraz světla) pomocí Blinnova nebo Phongova osvětlovacího modelu. Ve fixní pipeline se jakžtakž dá udělat ten Blinn a ještě to jde docela blbě.
- Velmi snadno jde taky udělat útlum světla, což dřív nebo později budeš stejně potřebovat (světlo slábne se vzdáleností od jeho pozice), na to je ve fixní pipeline taky pár nehezkých triků a použití shaderů by to zjednodušilo (hlavně je ta implementace o dost komplikovanější bez shaderů a je tam dost výpočtů na CPU, existují varianty s použitím 1D, 2D a 3D textur, ta s 3D je nejsnadnejší na implementaci, s 2D a 1D je rychlejší na GPU, ale zas náročnější na CPU výpočty).
Podle mě na tom strávíš minimálně týden času. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 19. srpen 2008, 14:45:10 Předmět: |
|
|
Bohužel polovině termínů, který si použil, nerozumím. Nicméně díky za vyčerpávající popis problému. To vypadá že na tom strávíme minimálně měsíc a pak to asi padne |
|
Návrat nahoru |
|
|
Lando
Založen: 29. 07. 2007 Příspěvky: 33 Bydliště: Cestice
|
Zaslal: 19. srpen 2008, 21:41:31 Předmět: |
|
|
No ono se to da udelat jednoduse. Proste nastavis jako Texture factor (Direct3D) NEJAKEJ vektor a ve fixni pipeline si das Dot3 s normal mapou. Vytvori to NECO JAKO bump mapping. Nicmene s realitou to nema spolecnyho zhola nic a jestli mas v planu se trosku venovat programovani grafiky, tak se shaderum stejne nevyhnes. Proto bych se do nich pustil radsi driv. Onehda sem delal semestralku a toho, ze sem si vybral pro reseni co nejvic pouzivat fixni pipelinu sem casem dost litoval. Pri slozitejsim renderingu si udrzovat preled o vsech nastavenich, nebo je nedej boze upravovat je celkem utrpeni. Dneska bych urcite nevahal a pouzil shadery... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 20. srpen 2008, 07:37:29 Předmět: |
|
|
Direct3D verze 10, 10.1 a 11, dále XNA a OpenGL 3.0 (bez deprecated features) nemají na rendering nic jiného než shadery, tam je to už nutnost. Takový je holt trend. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 20. srpen 2008, 09:44:00 Předmět: |
|
|
Můžete teda aspoň doporučit nejaký materiály na nastudování shaderů obecně (+ pixel shaderů) a HLSL? Popř. nějaké "jednoduché" příklady? |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 20. srpen 2008, 10:21:31 Předmět: |
|
|
DX SDK. Já se to prakticky z ničeho jiného neučil. |
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 20. srpen 2008, 15:38:42 Předmět: HLSL |
|
|
Něco málo jsem o tom přečetl, už trochu chápu jak to funguje a jak vypadá HLSL. Zdaleka ale nechápu všechny instrukce a funkce. Také mi není jasná implementace a nastavení shaderů v samotném kódu hry.
Našel jsem pixel shader pro bump mapping. Nevím jestli je ten kód kompletní a pokud je, tak mi není jasné co to vlastně dělá, hlavně co dělá HLSL funkce tex2D. Koukal jsem na MSDN a moc mi to nepomohlo.
kód: |
sampler2D tex0;
sampler2D tex1;
struct v2p
{
float4 Position : POSITION;
float2 Texcoord0 : TEXCOORD0;
float2 Texcoord1 : TEXCOORD1;
float4 Diffuse : COLOR0;
};
struct p2f
{
float4 Color : COLOR0;
};
void main( in v2p IN, out p2f OUT )
{
float4 Color = tex2D(tex0, IN.Texcoord0);
float4 Normal = tex2D(tex1, IN.Texcoord1);
OUT.Color = Color * dot(2.0*(Normal-0.5), 2.0*(IN.Diffuse-0.5));
} |
|
|
Návrat nahoru |
|
|
Deluxe
Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
|
Návrat nahoru |
|
|
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 20. srpen 2008, 16:09:53 Předmět: |
|
|
Rocket commander mam staženej, ale chtěl sem se tomu vyhnout, protože se nerad probírám rozsáhlejším kódem, když z toho chci vytáhnout jen kousek... ale bohužel se do toho budu muset pustit. |
|
Návrat nahoru |
|
|
|