.[ ČeskéHry.cz ].
Velky teren a stiny
Jdi na stránku Předchozí  1, 2
 
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
pospa



Založen: 22. 05. 2010
Příspěvky: 44

PříspěvekZaslal: 28. květen 2010, 06:57:07    Předmět: Odpovědět s citátem

Hm... ok. Jenze ja uz je ladim tak dlouho, ze jsem z toho uz dost frustrovanej Wink

Nasel jsem tohle
http://www.dhpoware.com/demos/xnaShadowMapping.html

coz dela presne to, jak popisuje Augi, akorat me stve, ze pri pohybu kamery to flickeruje
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: 28. květen 2010, 07:45:39    Předmět: Odpovědět s citátem

Co přesně myslíš tím flickerováním?

Jinak o shadow mapách jsem napsal diplomku - je tam teorie i praxe, tak třeba by se Ti to mohlo hodit:
https://dip.felk.cvut.cz/browse/details.php?f=F3&d=K13136&y=2008&a=augusm1&t=dipl

Přečti si klidně jen závěr, kde jsou shrnutý výhody a nevýhody různých modifikací stínových map, některý si vyber a koukni na ně podrobněji.

Při implementaci stínových map řešíš dva hlavní problémy:

1) Self-shadow alias - objekt díky různým nepřesnostem zastiňuje sám sebe. Pro začátek bys mohl udělat třeba to, že bys při renderingu stínové mapy obrátil culling tak, že bys vykresloval pouze plochy odvrácené od světla. Tím se "zbavíš" self-shadow aliasu a většinou můžeš díky tomu nastavit ten konstantní posun (bias) na nějakou menší hodnotu. Ale doporučuju tam vždy nějaký minimální mít - de facto totiž tímhle trikem s odvrácenými trojúhelníky jen přesunuješ problém na zastíněné plochy, které jsou většinou tmavší a nebývají tolik na očích. (strana 50)

2) Zubaté kraje stínů. Ty se řeší většinou dvěma přístupy, které lze kombinovat:
a) Filtrace stínové mapy. Zde se většinou používá PCF (percentage-closer filtering, strana 57) - to je použito i v tom posledním odkazovaném příkladu. Ale zajímavou alternativou jsou VSM (Variance Shadow Mapping), za kterým stojí ne úplně jednoduchá teorie, ale implementace je velmi jednoduchá (strana 63).
b) Parametrizace stínové mapy. To většinou znamená to, o čem jsem už psal - snažíme se vytvářet stínovou mapu jen pro tu část scény, kterou zabírá pohledový jehlan (frustum). Zde koukni na kapitolu 8.4.1 na straně 79 - vymyslel jsem úplně jednoduché a přímočaré řešení tohodle problému. Implementace je jednoduchá a výsledky vynikající.

A hlavně zásadní problém, který většina lidí vůbec neřeší a pak mají hnusné stíny - kapitola 5.7 - použij ten vzorec na přepočet hodnoty ukládané do stínové mapy! Hloubka by měla být ve stínové mapě distribuována lineárně...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pospa



Založen: 22. 05. 2010
Příspěvky: 44

PříspěvekZaslal: 28. květen 2010, 08:48:45    Předmět: Odpovědět s citátem

Flickerovanim myslim blikani stinu - hlavne na okrajich a pak u trochu slozitejsich struktur - napr parapet pod oknem, detailni, ale maly zabradli apod. Omlouvam se za debilni vyraz Wink

Za odkaz na diplomku moc diky! Uz jsem ji stahnul a prectu si ji celou, urcite mi objasni spoustu veci, o kterych nemam ted ani paru.

K bodu 1) - pokud obratim culling, tak vlastne zrusim stiny, ktery by normalne byly videt z predni strany, je to tak?
K bodu 2) - projdu to a vyzkousim Wink

Jeste jednou diky
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: 28. květen 2010, 09:45:18    Předmět: Odpovědět s citátem

pospa napsal:
Flickerovanim myslim blikani stinu - hlavne na okrajich a pak u trochu slozitejsich struktur - napr parapet pod oknem, detailni, ale maly zabradli apod. Omlouvam se za debilni vyraz Wink
To bude imho způsobené buď self-shadow aliasem (tzn. zkusit upravit velikost biasu a hlavně bych zkusil ten front-face culling při vytváření stínové mapy) nebo taky tím nevhodným rozložením hodnot ve stínové mapě (kapitola 5.7).

pospa napsal:
K bodu 1) - pokud obratim culling, tak vlastne zrusim stiny, ktery by normalne byly videt z predni strany, je to tak?
Noo, uděláš tím to, že stíny nebudou vrhat trojúhelníky přivrácené ke světlu, ale trojúhelníky odvácené. Principielně je totiž u uzavřených objektů (jiné ale v běžných scénách nebývají) jedno, které trojúhelníky se použijou, protože se kamera nemůže dostat dovnitř tělesa (mezi odvrácený a přivrácený trojúhelník). Pokud by mohla, pak bys musel použít klasický back-face culling (ale to by byla hodně zvláštní scéna imho).
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: 31. květen 2010, 13:05:01    Předmět: Odpovědět s citátem

Jen sem přihodím něco pro inspiraci:

http://www.ceske-hry.cz/forum/viewtopic.php?t=1822

a pro XNA jsem čerpal z tutorialu:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Shadow_map.php

Myslím že ten tento tutoriál je napsaný správně, alespoň podle Augiho diplomky Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pospa



Založen: 22. 05. 2010
Příspěvky: 44

PříspěvekZaslal: 31. květen 2010, 13:18:20    Předmět: Odpovědět s citátem

Jo, diky. Riemeruv tutor je asi dobrej, ale je to spis jen takovej "zacatek" pro shadow mapy, podle toho, co jsem si precet v diplomce i jinde Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pospa



Založen: 22. 05. 2010
Příspěvky: 44

PříspěvekZaslal: 1. červen 2010, 09:01:15    Předmět: Odpovědět s citátem

Tak si s tim tak nejak hraju a snazim se docilit nejakyho rozumnyho vysledku a nejak se mi nedari Sad Diplomku jsem precet skoro celou, teorie je mi celkem jasna, horsi je uvedeni do praxe. Nevim treba, jak vypocitat optimalni light frustum na zaklade pohledu kamery a plne vyuzit shadow mapu. Chybej mi priklady asi Sad
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: 1. červen 2010, 10:38:01    Předmět: Odpovědět s citátem

Jak jsem psal, koukni na tu kapitolu 8.4.1 na straně 79 - tam je popsanej úplně jednoduchej způsob, jak vypočítat optimální light frustum.

Nakonec jsem teda pro Tebe vyhrabal ukázkovou aplikaci k tý diplomce, kde je téměř všechno implementováno Wink

http://bordel.augi.cz/diplomka-program.zip

Konkrétně je to tam iplementováno takhle:
kód:
public static bool CheckWastage(AGE.Frustum frustum, AGE.Matrix shadowMatrix, out AGE.Matrix additionalMatrix)
{
    // get frustum points (in world space)
    AGE.Vector3[] points = (AGE.Vector3[])frustum.Points.Clone();


    // try to find min and max values of frustum corners transformed to shadow map space
    float minX = float.MaxValue, maxX = float.MinValue, minY = float.MaxValue, maxY = float.MinValue;


    for (int i = 0; i < points.Length; i++)
    {
        points[i].TransformCoordinate(shadowMatrix);
        minX = Math.Min(minX, points[i].X);
        maxX = Math.Max(maxX, points[i].X);
        minY = Math.Min(minY, points[i].Y);
        maxY = Math.Max(maxY, points[i].Y);
    }
    if (minX > -1 || maxX < 1 || minY > -1 || maxY < 1)
    {
        minX = Math.Max(-1, minX);
        maxX = Math.Min(1, maxX);
        minY = Math.Max(-1, minY);
        maxY = Math.Min(1, maxY);
        additionalMatrix = AGE.Matrix.CreateScaleToRectangle(
            new AGE.Vector2(minX, minY), new AGE.Vector2(maxX, maxY),
            new AGE.Vector2(-1, -1), new AGE.Vector2(1, 1));
        return true;
    }
    else
    {
        additionalMatrix = AGE.Matrix.Identity;
        return false;
    }
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pospa



Založen: 22. 05. 2010
Příspěvky: 44

PříspěvekZaslal: 1. červen 2010, 10:44:08    Předmět: Odpovědět s citátem

Ty jo.. jsi fakt moc hodnej, diky! Projedu to a snad uz to dam nejak do kupy.
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 Předchozí  1, 2
Strana 2 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