.[ ČeskéHry.cz ].
Bump mapping
Jdi na stránku 1, 2  Další
 
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
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 18. srpen 2008, 09:49:24    Předmět: Bump mapping Odpovědět s citátem

Hodně sme na netu hledali, googlili a našli sme jen http://www.codesampler.com/dx9src/dx9src_4.htm#dx9_dot3_bump_mapping tenhle příklad. Chci se zeptat jestli někdo už psal bump mapping a jestli by nebyl ochotnej vysvetlit postup, protoze z toho cpp kodu to docela nepobiram. Sad
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 18. srpen 2008, 11:57:55    Předmět: Odpovědět s citátem

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
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: 18. srpen 2008, 19:50:00    Předmět: Odpovědět s citátem

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



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 19. srpen 2008, 12:55:29    Předmět: Odpovědět s citátem

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



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 19. srpen 2008, 13:31:05    Předmět: Odpovědět s citátem

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.. Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 19. srpen 2008, 13:55:16    Předmět: Odpovědět s citátem

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
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: 19. srpen 2008, 14:28:39    Předmět: Odpovědět s citátem

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



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 19. srpen 2008, 14:45:10    Předmět: Odpovědět s citátem

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 Crying or Very sad Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lando



Založen: 29. 07. 2007
Příspěvky: 33
Bydliště: Cestice

PříspěvekZaslal: 19. srpen 2008, 21:41:31    Předmět: Odpovědět s citátem

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
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: 20. srpen 2008, 07:37:29    Předmět: Odpovědět s citátem

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



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 20. srpen 2008, 09:44:00    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 20. srpen 2008, 10:21:31    Předmět: Odpovědět s citátem

DX SDK. Já se to prakticky z ničeho jiného neučil.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 20. srpen 2008, 15:38:42    Předmět: HLSL Odpovědět s citátem

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



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 20. srpen 2008, 15:56:12    Předmět: Odpovědět s citátem

funkce tex2D ti namapuje texturu, to znamena udela lookup do textury podle texturovych koordinalu a najde barvu pro urcitej pixel v torojuhelniku.
k tomu zapojeni do Programu, podivej se na ten rocket commander, tam je to pekde videt... a je to pod MDX
snad je to jeste ta puvodni verze bez XNA
http://download.microsoft.com/download/2/7/3/2734e79d-b431-4b2f-a170-68a7cc71ce9a/RocketCommanderSourceCodeV1.1.zip
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Matasx



Založen: 17. 08. 2008
Příspěvky: 258

PříspěvekZaslal: 20. srpen 2008, 16:09:53    Předmět: Odpovědět s citátem

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
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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