.[ ČeskéHry.cz ].
Stíny - jak na ně.
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
Juraj



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

PříspěvekZaslal: 25. září 2009, 13:52:28    Předmět: Stíny - jak na ně. Odpovědět s citátem

Zdravím Vás,

"konečně" se budu pouštět do realizování stímů. Jelikož ve stínování jsem uplnej zelenáč Smile chtěl bych z Vás dostat co nejvíce informací ohledně této problematiky.

Dotazy:

1) Jsou nějaké obecné metody na výpočet stínů?
2) Rozlišuje se nějak obecně kvalita stínů?
3) př. mám dům položený na terénu, na který také vrhá stín. Kde se bude stín implementovat (ktreslit). Podle parametrů na terénu? Nebo nějakou průhlednou vrtstvou jakoby na tarénu? Nebo pomocí effektu částic (jako např. kouř atd..)?

To je asi pro zatím vše, díky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 25. září 2009, 14:18:27    Předmět: Odpovědět s citátem

Ahoj,

měl jsem o stínech přednášku na loňském GDS - slajdy jsou tady.
Pokud to chceš podrobněji, tak tady je má diplomka na téma stínů.

1) Nejpoužívanější je metoda stínových těles (shadow volumes - přesné ostré stíny, nejčastěji se používá k implementace stencil buffer) a stínové mapy (shadow mapping - méně přesné měkké stíny) a jejich kombinace a různé optimalizace (o tom je moje diplomka).

2) Je na to několik měřítek, ale v případě shadow mappingu je to alias (zubatost) okrajů stínů.

3) Shadow volumes: Vyhodnocení zastínění je poslední krok po tom, co je "vše" vyrenderované.
Shadow mapping: Nejprve se zkonstruuje shadow mapa a pak při kreslení každého objektu je třeba v pixel shaderu vyhodnotit, zda je daný pixel zastíněný/nezastíněný.

Pokud Ti jde o to, jaké objekty budou vrhat stín a na jaké objekty bude stín dopadat, tak se to má takto:
- shadow mapping: Stín vrhají ty objekty, které vykreslíš do shadow mapy. Stín dopadá na ty objekty, u kterých při vykreslování budeš v pixel shaderu testovat zastínění.
- shadow volumes: Stín vrhají ty objekty, pro které zkonstruuješ stínové těleso. Stíny se vrhají na celou scénu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 25. září 2009, 17:51:35    Předmět: Odpovědět s citátem

Doplnil by som, ze aj ked Shadow Volumes vies zimplementovat v pohode za vikend, narazis na obrovsky problem, s ktorym si nebudes vediet dat rady, a to je tzv. holes in the mesh.

Shadow Volumes su uz z principu zavisle na tom, aby bol cely mesh uzatvoreny, a ak ma diery, tak su tie artefakty nepozeratelne.

S cim, logicky, ako programator nic nenarobis. A ver, ze prehadzovat meshe hore dolu grafikom ciste kvoli metode shadowingu je tazky zasah do produktivity.


Skratka, venuj radsej trocha viac casu Shadow Mappingu, ale nemusis toto vobec riesit, a rovno dostanes soft shadows a self-shadowing.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Solid.Sn



Založen: 08. 08. 2009
Příspěvky: 55

PříspěvekZaslal: 25. září 2009, 18:11:11    Předmět: Odpovědět s citátem

Augi napsal:
Ahoj,

měl jsem o stínech přednášku na loňském GDS...


Ahoj, moc děkuju, taky jsem nedávno řešil stíny a tvé materiály se mi zdají velmi kvalitní, přesně to jsem potřeboval... Surprised
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 26. září 2009, 00:07:08    Předmět: Odpovědět s citátem

A este kamosova diplomka, tiez z FEL CVUT, tiez na podobnu temu Smile http://rgb-xyz.net/doc/2008_thesis_softshadows.pdf
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
SUK



Založen: 14. 11. 2007
Příspěvky: 93
Bydliště: /dev/null

PříspěvekZaslal: 3. říjen 2009, 22:31:13    Předmět: Odpovědět s citátem

http://www.shadowstechniques.com/ tady bejvaval docela slusnej web o stinech, dnes bohuzel nejede, nevim, jestli to je jen nejakej vypadek forpsi (domena ma Expires on: 13-OCT-09) nebo nekdo neplati domenu...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky Yahoo Messenger MSN Messenger
frca



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

PříspěvekZaslal: 4. říjen 2009, 09:22:02    Předmět: Odpovědět s citátem

Něco se dá ještě vyhrabat na archive.org:
http://web.archive.org/web/20050319111454/http://www.shadowstechniques.com/appel_cz.html
http://web.archive.org/web/20070305131152/http://www.shadowstechniques.com/herf_cz.html
atd...
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 4. říjen 2009, 10:37:20    Předmět: Odpovědět s citátem

Tu stránku provozoval David Ambrož, tak se mu zkus ozvat...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 4. říjen 2009, 11:38:49    Předmět: Odpovědět s citátem

mozno by bolo pekne dat ich na wiki.ci ma este niekde tie clanky ulozene. inak nasiel som toto http://cs.felk.cvut.cz/~ambrozd/Sem/index.html
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



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

PříspěvekZaslal: 16. říjen 2009, 12:21:30    Předmět: Odpovědět s citátem

Tak ve volných chvilkách se snažím do sebe dostat co nejvíce informací abych se mohl pustit do práce, ale stále mi něco není jasné. Trochu přiblížím jak vypadá moje zcéna: mám vykreslený terén a na terénu mám vykreslené nějaké modely.

Nyní co mě konkrétně zajímá:
1) Jaké velikosti bude shadow mapa - podle maximální velikosti terénu, nebo podle velikosti camery viewportu?
2) Potřebuji vypočítat stíny které budou vyvolané nějakým statickým světlem - sluncem. Bude možné skutečně toto světlo popsat pozicí a směrem bez ohledu na to kde bude zrovna kamera?
3) Jak vybarvit shadow mapu - smazání bíle, zastínené objekty černě nebo naopak?
4) Při vykreslování shadow mapy budu vykreslovat pouze modely, terrén nebude vrhat stín na ostatní. Bude se tedy měnit intezita stínu pokud světlo bude statické a kamera se bude pohybovat - asi by nemělo?

Díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 16. říjen 2009, 12:37:22    Předmět: Odpovědět s citátem

1) rozmer shadowmapy nemusi byt zhodny s rozmerom viewportu, ten si nastavis odlisne (napriklad 512x512) - cim vacsi, tym lepsia "kvalita", ale aj pomalsie vykreslovanie
2) jasne, bude to mozne Smile do svetla umiestnis kameru a natocis ju podla jeho smeru... samozrejme, bud zvolis nejaku ortogonalnu projekciu (ak je svetlo veeeelmi daleko, ako slnko), alebo perspektivnu a slnko das rozumne blizko
3) to je jedno, dolezite je, aby si to potom v shaderi vedel spravne interpertovat, ale cierny tien a biele "prazdno" mi pride fajn Smile
4) nie, nebude to vobec zavisiet na kamere (az na nejake float nepresnosti) - shadowmapa sa vyrenderuje z pohladu svetelneho zdroja a v pohlade svetla sa uz len namapuje
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
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: 16. říjen 2009, 12:46:57    Předmět: Odpovědět s citátem

Juraj napsal:
1) Jaké velikosti bude shadow mapa - podle maximální velikosti terénu, nebo podle velikosti camery viewportu?
Většinou se volí nějaká fixní velikost shadow mapy (např. 1024x1024). V čem se liší různé metody stínových map, je právě to, co přesně se do té stínové mapy ukládá. Vždy je to nějaký pohled z pozice světla, ale různé metody ten prostor různě morfují, aby dosáhly co nejlepší kvality stínů (aby byla shadow mapa využita co nejefektivněji).

Juraj napsal:
2) Potřebuji vypočítat stíny které budou vyvolané nějakým statickým světlem - sluncem. Bude možné skutečně toto světlo popsat pozicí a směrem bez ohledu na to kde bude zrovna kamera?
Ano. Světlo, pro které se právě generuje shadow mapa, si lze představit jako kameru. Generování shadow mapy pak znamená, že se renderuje obraz z pohledu této kamery a do stínové mapy, přičemž se ukládá pouze vzdálenost od kamery. Protože světlo == kamera, tak stačí nastavit projekční matici na ortogonální promítání. Pozici kamery (světla) nastavíš někam hodně daleko, o přiblížení by se měl postarat některý z optimalizačních algoritmů.

Juraj napsal:
3) Jak vybarvit shadow mapu - smazání bíle, zastínené objekty černě nebo naopak?
To je čistě na Tobě. Ty budeš do shadow mapy zapisovat i z ní číst. Je jen na Tobě, jakým způsobem si zakóduješ vzdálenost od kamery.
Typické bude zřejmě to, že před vytvářením stínové mapy ji vyclearuješ na bílou (max. vzdálenost od kamery). Při renderingu objektů tam pak nezapisuješ tupě černou barvu, ale vzdálenost od kamery! Tedy můžeš si tam zapisovat jen černou barvu, ale pak se nejedná o shadow mapping, ale projective shadows (které např. neumožňují samozastínění či stínění objektů jinými objekty). Viz ta moje diplomka.

Juraj napsal:
4) Při vykreslování shadow mapy budu vykreslovat pouze modely, terrén nebude vrhat stín na ostatní. Bude se tedy měnit intezita stínu pokud světlo bude statické a kamera se bude pohybovat - asi by nemělo?
Základní běžné metody stínové mapy nepracují s intenzitou stínu - stín buď je nebo není, binární údaj (max. nějaké rozmazání okrajů), takže moc nevím, na co narážíš...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



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

PříspěvekZaslal: 19. říjen 2009, 13:14:31    Předmět: Odpovědět s citátem

Tak nyní jsem se dostal již k psaní kódu a narazil jsem problém. Ať dělám co dělám, vžky se mi modely do shadow mapy vykreslí bíle - což je špatně - clearuji device bílou barvou a modely bych chtěl vykreslovat ve stupních šedi..

kód effektu
kód:
//************************************************************
//***** Vertex to pixel struct *******************************
//************************************************************
struct SMapVertexToPixel
{
    float4 Position     : POSITION;
    float4 Position2D    : TEXCOORD0;
};

//************************************************************
//***** Pixel to Frame struct ********************************
//************************************************************
struct SMapPixelToFrame
{
    float4 Color : COLOR0;
};

//************************************************************
//***** Vertex Shaders ***************************************
//************************************************************
SMapVertexToPixel ShadowMapVertexShader(XSI_AppToVertex IN)
{
    SMapVertexToPixel Output = (SMapVertexToPixel)0;
   
    float4 position = mul(IN.position, Model);

    Output.Position = mul(position, xLightsWorldViewProjection);
    Output.Position2D = Output.Position;

    return Output;
}

//************************************************************
//***** Pixel Shaders ****************************************
//************************************************************
SMapPixelToFrame ShadowMapPixelShader(SMapVertexToPixel PSIn)
{
    SMapPixelToFrame Output = (SMapPixelToFrame)0;

    Output.Color = PSIn.Position2D.z/PSIn.Position2D.w;

    return Output;
}


1) Co přesně provede s hodnotami tento příkaz?
kód:
   Output.Position2D = Output.Position;


2) Co přesně dosadí místo proměné w? Hodnotu maxmímální vzdálenosti z projekčné matice tedy 1?
kód:
Output.Color = PSIn.Position2D.z/PSIn.Position2D.w;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 19. říjen 2009, 14:05:40    Předmět: Odpovědět s citátem

A jak poznáš, že se Ti vůbec něco renderuje, když píšeš, že renderuješ bílý objekty na bíle vybarvenou texturu?

V prvním přiblížení bych zkusil do shadow mapy vykreslovat natvrdo nějakou pevnou barvu (tj. celý pixel shader bude jen "return 0;"), aby sis ověřil, že vůbec něco renderuješ (nemáš problém v transformacích, tj. vertex shaderu).

Pokud se Ti nějak vykreslí objekty do shadow mapy, tak pak bych teprve řešil jaké hodnoty tam ukládat. Zkusil bych něco takového (jak to mám popsáno v diplomce):

Output.Color = PSIn.Position2D.w * (PSIn.Position2D.z + near) / (far - near) + bias;

Kde near a far jsou hodnoty clipping planes světla (zadáváš je při vytváření matic) a bias je nějaká malinká empirická konstanta (zkus si s tím hrát, začni např. na 0.0001).

P.S.: Pokud chceš, můžu večer někde vyhrabat ukázkovou aplikaci k té diplomce - většina shadow mapping algoritmů je tam implementována v C# + HLSL. Kdyžtak se připomeň...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 19. říjen 2009, 14:45:13    Předmět: Odpovědět s citátem

kód:

2) Co přesně dosadí místo proměné w? Hodnotu maxmímální vzdálenosti z projekčné matice tedy 1?
kód:
Output.Color = PSIn.Position2D.z/PSIn.Position2D.w;


Momentálně řeším také stíny. V shader kodu mam misto PSIn.Position2D.w dánu hloubku svetla (aka. kam az svetlo dosviti). Nastaveno mam na 160 jelikoz osvetluju velky prostor.

Ohledně toho, že se ti modely vykreslí bíle. To ze shader kodu poznat neni. Chtelo by to vidět, jak konstruujesš matici xLightsWorldViewProjection popr. cely kus kodu, kde tu mapu renderujes (aka. kde volas ty shadery)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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