[D3D10] Welche Shadowmap Technik ist am besten?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

[D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

Hallo leute,

ich baue grad an meine 3D-Engine (Directx 10)
und google mich durch seit Tagen nach besten Shadowmap Technik.

Ich baue eine große Welt (Open World) mit vielen Objekten wo auch Animiert werden,
welche Shadowmap Technik ist wohl am besten?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von dot »

Ich denk einfaches PCF ist immer noch relativ populär. Ansonsten wohl Exponential Shadow Maps und für große Outdoor Maps wirst du wohl Cascaded Shadow Maps verwenden wollen...
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von Schrompf »

Bringe erstmal Standard-Shadowmaps zum Funktionieren. Danach siehst Du klarer, wo die verschiedenen fortgeschrittenen Techniken ansetzen und was für Teilprobleme sie zu lösen versuchen. Ab dann stimme ich dots Empfehlungen zu.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

ok Danke schon mal....

Die Standard Shadow Mapping Technik soll auch reichen oder? Verwendet ihr das auch?

Ich google mich halber zu tode, finde kein tutorial für Anfänger wo genau beschreiben wird wie man das macht.

Hat keiner von euch ein einfaches Beispiel Bild/Text /Code wie man Shadow Mapping genau macht
oder muss man da ein Buch extra kaufen?
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

Generell musst du erstmal für nichts ein Buch kaufen, außer du willst den neuesten Schrei an Techniken haben, der nicht in irgendeiner Präsentation (SIGGRAPH, etc.) schon erwähnt wurde. Dir sollte bewusst sein, dass du mittels Google genug Materialen findest, aber eben auf Englisch. Als gute Tutorialseite kann ich http://rastertek.com/tutindex.html empfehlen, wenngleich ich eine persönliche Aversion gegen den Programmierstil des Authors hege. Um die grundlegenden Techniken zu verstehen reicht es aber alle mal.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von dot »

RazorX hat geschrieben:Generell musst du erstmal für nichts ein Buch kaufen, außer du willst den neuesten Schrei an Techniken haben, der nicht in irgendeiner Präsentation (SIGGRAPH, etc.) schon erwähnt wurde.
Nur so als Anmerkung: Eigentlich funktioniert das eher so, dass der "neueste Schrei" genau in solchen Präsentationen (SIGGRAPH etc.) erwähnt wird, lange bevor er in irgendwelchen Büchern landet... ;)
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

ok Danke RazorX,

naja mir reicht eine Standard Shadow-Mapping Technik wo die Profi Spiele auch verwenden,
es soll nicht zu viel leistung verbrauchen aber gut aussehen.

Ich hoffe das ich bald meine Shadow-Mapping in meiner Engine drin habe damit ich weiter machen kann,
mich macht es wahnsinnig ein einer Stelle zu bleiben und nicht weiter zu kommen ;)
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

witziok hat geschrieben: naja mir reicht eine Standard Shadow-Mapping Technik wo die Profi Spiele auch verwenden,
es soll nicht zu viel leistung verbrauchen aber gut aussehen.
Wie mein Vorredner schon sagte, es gibt nicht die Standard-Technik. Klar eine Standard-Technik wäre eben alles orthogonal rausrendern und diese Shadowmap dann auf die Landschaft zu mappen. Problem: Entweder nur ein Teil ist schattiert oder die Shadowmap muss riesig groß sein um die ganze Landschaft abzudecken oder sie wird so sehr gestrecht, dass du keine Softshadows sondern Blöcke von Schatten hast.

Es kommt also ganz auf dein Einsatzgebiet an was für eine Schattentechnik zu nimmst. Spiele großer Hersteller verwenden auch nicht die "Standard"-Technik, denn es kommt auf den Einsatz an und es kann gut vorkommen, dass mehrere Techniken Anwendung finden. Für Landschaften eben (große Open-World Systeme) eignen sich die angesprochenen Cascaded-Shadow-Maps (wenn du das nachließt, wirst du verstehen warum). Siehe Shadowmaps also nicht als EINE Technik an, es ist eher ein Obergriff für verschiedene Algorithmen. Konkret handelt es sich bei Shadowmapping eben darum, dass der Schatten in Form einer Textur berechnet wird, wie ist dann die Frage der Wahl der entsprechenden Technik bzw. was das Einsatzgebiet erfordert.

@dot: Hast Recht, die Präsentationen kommen zuerst. Wollte gerade auch eigentlich eher darauf hinaus, dass die Präsentationen nicht zwangsläufig verwertbares Material für Anfänger bieten, da eben ein gewisses Grund-Know-How vorrausgesetzt wird.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

hmmmm
dann doch lieber Cascaded-Shadow-Maps, es soll auf große Sichtweite funktionieren bei OpenWorld.
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

Gut gemeinter Rat (gemäß dem was Schrompf schon angemerkt hat): Du behauptest ja selbst von dir das du Anfänger bist und das du keine Tutorials zum Shadowmapping findest. Implementier erstmal die native Variante von Shadowmapping, eben für eine direktionale Lichtquelle mit einer projektiven Matrix und versuch das Ergebnis auf deine Landschaft zu übertragen. Dabei wirst du schon auf genug Hürden stoßen. Cascaded-Shadow-Maps bauen nämlich auf dem Prinzip auf, nur werden multiple Shadow-Maps erstellt. Wenn du bei dem ersteren schon Probleme hast, dann wird letzteres erst Recht nicht funktionieren, der Fehler aber wesentlich schwerer zu durchblicken sein.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von dot »

+1 für erst mal ganz einfaches, normales Shadow Mapping implementieren. Alles weitere baut sowieso irgendwie darauf auf...
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

Also doch lieber erst kleiner anfangen um es zu blicken, verstehe. :)
Dann mache ich erst diese Technik wo man dann später erweitern kann wenn man alles geblickt hat wie es funktioniert.

Habt ihr schon Shadowmaps Programmiert?
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

So meine erste Shadowmap Technik wurde zum test eingebaut. :)

da sieht man das diese einfache Technik für Terrain nicht ausreicht, weil hier nur ein kleiner Teil für Schatten berechnet wird.
Man kann zwar die Perspektive erweitern um größere Schatten Distanz zu erreichen, blos ist dann der schatten so grob das es nur für sehr große objekte zu gebrauchen wehre aber nicht für Spielfiguren, Bäume usw.....

jetzt suche ich ein Tutorial für Parallel-Split Shadow Maps
ich google seit 3 tagen und finde keine Dokus, kein Code Beispiel hmmmmm :(


hier meine Shadowmap mit Texture 2048x2048
Dateianhänge
test2.jpg
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von mnemonix »

witziok hat geschrieben:jetzt suche ich ein Tutorial für Parallel-Split Shadow Maps
ich google seit 3 tagen und finde keine Dokus, kein Code Beispiel hmmmmm :(
Guckst du hier! (1. Treffer in Google) Im Allgemeinen kann ich die kostenlos zur Verfügung gestellte GPU Gems Reihe sowieso empfehlen.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

ok danke... also doch Buch kaufen hmmm
gibts nix free?
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

witziok hat geschrieben:ok danke... also doch Buch kaufen hmmm
gibts nix free?
Schaust du dir die Links überhaupt an? Der Link von mnemonix führt zu einem Kapitel der GPU Gems 3. Die gesamten GPU Gems 1-3 sind von NVIDIA kostenlos zur Verfügung gestellt (bis auf Source, den bekommt man soweit ich das im Kopf habe nur für 1 und 2).
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von Schrompf »

Der verlinkte Artikel ist kostenlos. Einfach runterscrollen und lesen. Was willst Du denn noch?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

naja ich sehe da nur paar Code teile und Beschreibung.
Ich wollte kompletten Code Beispiel, damit ich genau sehen kann wie was wo gemacht wird.

Egal, Danke :)
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

witziok hat geschrieben:naja ich sehe da nur paar Code teile und Beschreibung.
Ich wollte kompletten Code Beispiel, damit ich genau sehen kann wie was wo gemacht wird.

Egal, Danke :)
Heißt du willst nicht selbst denken und es an Hand der Theorie verstehen, sondern abschreiben? Du kannst nicht ernsthaft erwarten alle aufkommenden Probleme mit fertigen Codes lösen zu können. Wenn du natürlich dies vorraussetzt, dann ist es kein Wunder, dass du keine Literatur beim googeln findest. Das würde mich an deiner Stelle dann aber mal zum Nachdenken bewegen.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

Meine 3D Engine ist alles selbst Programmiert... auch OpenWorld technik, eigenes DateiPack system, Terrain technik lalalalulali
ist nicht so das ich net Denken kann...
Blos gibts es dinge die für mich nicht so leicht sind und ich länger brauche, da ich ungeduldig bin und schneller fertig sein will suche ich möglichst gute Beschreibung oder Code.

Für mich sind Shadows sowie Reflexionen ein neues Math Gebiet wo ich net so gut drauf bin.

Ich bin hier ja um Hilfe zu bekommen und nicht um angemacht zu werden selbst alles raus zu finden
dann braucht man kein Forum oder? :P
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

witziok hat geschrieben:Meine 3D Engine ist alles selbst Programmiert... auch OpenWorld technik, eigenes DateiPack system, Terrain technik lalalalulali
ist nicht so das ich net Denken kann...
Blos gibts es dinge die für mich nicht so leicht sind und ich länger brauche, da ich ungeduldig bin und schneller fertig sein will suche ich möglichst gute Beschreibung oder Code.

Für mich sind Shadows sowie Reflexionen ein neues Math Gebiet wo ich net so gut drauf bin.

Ich bin hier ja um Hilfe zu bekommen und nicht um angemacht zu werden selbst alles raus zu finden
dann braucht man kein Forum oder? :P
Versteh mich nicht falsch, ich helfe gerne. Aber man hilft hier ja nicht um anderen eine Musterlösung zu bieten, sondern sie in die richtige Richtung zu lenken. Wenn man dir also Resourcen zur Verfügung stellt, dann erwartet man (ich zumindest), dass derjenige diese auch zur Kentniss nimmt und nicht sagt: Kein kompletter SourceCode = Mist!

Mal davon abgesehen: Warum ist es für dich denn ein komplett neues Mathegebiet? Sofern du mit der Methodik der Überführung von einem in ein anderes Basiskoordinatensystem (Lineare Algebra) vertraut bist, ist die Algorithmik hinter Shadow-Mapping nichts neues.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

Naja matrizen sind für mich etwas schwer.. aber egal man kann ja alles üben :D

hier ein Beispiel ob sowas machbar wehre.

Normal wird eine ShadowMap so berechnet wie das Licht verläuft, somit ist egal wie Camra rotiert ist.
Ich möchte das so machen, das die ShadowMap so berechnet wird wie die der ViewFrustum der Camera.
So das diese ShadowMap immer in Blickrichtung rotiert wird.


hier Bild :D
Dateianhänge
shadowMapRot.jpg
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von RazorX »

Zur Frage: Ja klar kann man machen und ist auch das, was bei Cascaded Shadow Mapping verwendet wird, nur das dort der View-Space noch in mehrere Teilbereich aufgeteilt wird.

Zu den Matrizen: Dann mal ein kleiner Crashkurs was Koordinatensysteme angeht. Sei das Koordinatensystem \($K_1 \in \mathbb{R}^{4 \times 4}$\) unser Basiskoordinatensystem von dem wir eine Transformation durchführen wollen und \($K_2 \in \mathbb{R}^{4\times 4}$\) das Zielkoordinatensystem, sowie \($(x, y, z, 1)^T = \vec{p} \in \mathbb{R}^4$\) ein homogener Punkt im Raum. Dann wird die Transformation wie folgt durchgeführt:
\(\[p' = K_2 * (K_1)^{-1} * \vec{p}\]\)
Was bedeutet das für die Praxis? Nun die Transformation sollte mit \($K_1 = E$\) (Einheitsmatrix) bekannt sein, denn dies ist eine ganz normale World-Space-Transformation bei der das erste Basiskoordinatensystem im Ursprung \($(0, 0, 0, 1)^T$\) liegt. (Erinnerung: Die inverse Matrix der Einheitsmatrix ist die Einheitsmatrix selbst \($(E)^{-1} = E$\); Eine Matrix mit der Einheitsmatrix multipliziert ergibt wieder die Eingangsmatrix \($A = E * A$\))
\(\[p' = K_2 * (E)^{-1} * \vec{p}\]\[p' = K_2 * E * \vec{p} \] \[p' = K_2 * \vec{p} \]\)
Was bedeutet das also nun für das Shadow-Mapping? Bei der Schattierung schaust du dir einen Punkt an und willst den in die Shadow-Map transformieren. Dabei durchläufst du ein paar Koordinatensystemstransformationen. Ich weiß jetzt nicht wie das bei dir ist, bei mir jedoch liegt dieser Punkt im View-Space vor, also nach der Kameratransformation. Um nun an die Texturkoordinate zu kommen muss zuerst der Viewspace \($V_{eye}$\) rückgängig gemacht werden. Jetzt liegen uns Weltkoordinaten bezüglich des Ursprungs \($(0, 0, 0, 1)^T$\) vor. Diese müssen in den View-Space der Lichtquelle mittels einer \($V_{light}$\) Matrix transfomiert werden. Um die Koordinaten des 3D-Raums nun auf einen 2D-Raum abzubilden wird eine Projektion durchgeführt, bei einer direktionalen Lichtquelle eine orthogonale Projektion \($P_{shadow\_map}$\). So kommen wir letztlich also zu folgender Gleichung:
\(\[(u,v)^T = P_{shadow\_map} * V_{light} * (V_{eye})^{-1} * \vec{p}\]\)


Ich hoffe das Prinzip ist nun von der mathematischen Seite klarer geworden.

Edit: Wenn man genauer ist, dann ist \($P_{shadow\_map}$\) nur die Transformation in den Clip-Space. Danach muss dieser noch in den Texture-Space transformiert werden mittels einer Matrix \($P_{uv}$\) (Abbildung auf zum Beispiel den Bereich \($[0, 1] \times [0, 1]$\), oder bei einem Textur-Atlas durchaus auch auf einen kleineren Bereich). Sodass die Formel wie folgt aussieht:
\(\[(u,v)^T = P_{uv} * P_{shadow\_map} * V_{light} * (V_{eye})^{-1} * \vec{p}\]\)
Zuletzt geändert von RazorX am 19.02.2013, 21:27, insgesamt 1-mal geändert.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

ok Danke :)
werde mir das genauer anschauen.
wenn ich das hin bekomme dann passt alles :)
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

irgendwie klappt das net so ganz :(

um schatten zu berechnen habe ich die licht Matrix.

viewMatrix
projectionMatrix

worldMatrix: ist global bei mir

braucht licht auch eigene worldMatrix oder?

kannst Du das beschreiben für einen der nicht viel mit Matrix am hut hat :(
D3DX
Beiträge: 36
Registriert: 17.10.2010, 14:06
Echter Name: Marco
Wohnort: 58119 Hagen (NRW)

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von D3DX »

Hallo,
ich habe hier noch einen recht aktuellen Link zum Thema Shadow Mapping.

Sehr anschaulich, da verschiedene Techniken als WebGL dargestellt werden.
Ob dir das weiterhilft, musst du herausfinden, da ich mich dort nicht weiter eingelesen habe.

Hier der Link zu http://codeflow.org/:
http://codeflow.org/entries/2013/feb/15 ... w-mapping/
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] Welche Shadowmap Technik ist am besten?

Beitrag von witziok »

oki danke :)
Antworten