Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sebastian92

Frischling

  • »Sebastian92« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Wesel

Beruf: Azubi (Fachinformatiker für Anwendungsentwicklung)

  • Private Nachricht senden

1

16.08.2009, 12:32

[D3D10] Problem mit Shadow Mapping

Hallo,

mal wieder ein Problem im Bereich 3D-Grafik.

Also ich render die Scene einmal in eine Textur mit dem Format Float32.
Das Funktioniert auch noch alles ganz gut die Textur wird richtig erstellt.

Mein Problem entsteht anscheinend beim projezieren der Textur in das Kamera-Koordinaten system.

So sieht der Teil des Shaders aus ums den geht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
struct a2v_Shaded {
    float4 Pos          : POSITION;
    float2 TexCoord     : TEXCOORD0;
    float2 DetailCoord  : TEXCOORD1;
};

struct v2p_Shaded {
    float4  Pos             : SV_POSITION;
    float2  TexCoord        : TEXCOORD0;
    float2  DetailCoord     : TEXCOORD1;
    float4  ShadowTexCoord  : TEXCOORD2;
    float   fDepth          : COLOR;
};

void VS_Shaded( in a2v_Shaded IN, out v2p_Shaded OUT) {
    OUT.Pos = mul(IN.Pos,mWorldViewProj);
    OUT.TexCoord = IN.TexCoord;
    OUT.DetailCoord = IN.DetailCoord;
    
    OUT.fDepth = mul(IN.Pos,mLightViewProj).z;
    OUT.ShadowTexCoord = mul(IN.Pos,mLightViewProj);
}

float4 PS_Shaded( in v2p_Shaded IN): SV_Target
{
    float2 ProjectedTexCoords;
    ProjectedTexCoords[0] = IN.ShadowTexCoord.x/IN.ShadowTexCoord.w/2.0f + 0.5f;
    ProjectedTexCoords[1] = -IN.ShadowTexCoord.y/IN.ShadowTexCoord.w/2.0f + 0.5f;
    
    float fA = IN.fDepth;
    float fB = ShadowTex.Sample(linearSampler,ProjectedTexCoords).r;
    
    if( (fA-0.1f) < fB)
        return ComputeColor(IN);
    else
        return float4(0.1f,0.1f,0.1f,1.0f);
        
}


Weiß vll jemand was falsch ist? Leider findet man dazu nicht sehr viel im Internet.


(Link)

David Mehre

unregistriert

2

16.08.2009, 14:29

Hallo Sebastian.
Zu deinem Problem kann ich dir leider nichts sagen, allerdings möchte ich bemerken, dass es nicht gerne gesehen wird, wenn man dieselbe Frage gleichzeitig in zwei unterschiedlichen Foren stellt (klick).
Wenn du nach ein paar Tagen keine Antwort bekommen hättest, wäre das ja Ok gewesen...

Grüße.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David Mehre« (17.10.2011, 18:00)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

16.08.2009, 14:36

Also ich seh kein Problem bei Crosspostings, warum sollte man nicht mehrere Foren konsultieren wenn man dringend eine Antwort haben will!?
Man sollte allerdings sobald man irgendwo eine Antwort erhalten hat dies auch in den anderen Foren kundtun (mit Link). Dann ist imo gar nichts dagegen einzuwenden...

Sebastian92

Frischling

  • »Sebastian92« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Wesel

Beruf: Azubi (Fachinformatiker für Anwendungsentwicklung)

  • Private Nachricht senden

4

16.08.2009, 17:42

Joa...

Naja ich hab halt erst mal da die Frage gestellt und dann ist mir eingefallen das es hier vll besser ausgehoben wäre.

Naja werds demnächst nichtmehr tun.


Aber mal zum Thema:

Weiß vll einer ob man bei der Textur.Sample Funktion auch Werte über 1.0f erhalten kann? Weil ich speichere in meiner Textur ja 32 Bit Float Werte mit der reellen Entfernung, also weit über 1.0f.

MFG

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

16.08.2009, 17:55

ja natürlich kannst du das dazu wurden die floatingpoint-texturen erfunden quasi^^.

Sebastian92

Frischling

  • »Sebastian92« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Wesel

Beruf: Azubi (Fachinformatiker für Anwendungsentwicklung)

  • Private Nachricht senden

6

16.08.2009, 18:06

Ok..

wollte nochmal posten wie ich das ganze mache...
und dabei könnte mir die Lösung eingefallen sein.

Falls es sich bestätigt poste ich sie gleich...

Muss das ersma testen...

Schonmal Danke für eure Überlegungen.

MFG

Sebastian92

Frischling

  • »Sebastian92« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Wesel

Beruf: Azubi (Fachinformatiker für Anwendungsentwicklung)

  • Private Nachricht senden

7

16.08.2009, 19:27

Ok... meine überlegungen haben doch zu nichts geführt.

Habe mir gedacht das ich Depht doch mit der WorldViewProj-Matrix berechnen muss und nicht mit der LightViewProj, oder?
Weil ich brauche ja den aktuellen Tiefenwert.

Naja vll fällt einem von euch ja noch was auf.

MFG

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

16.08.2009, 19:36

Du musst die Tiefenwerte aus der Shadowmap natürlich auch mit den entsprechenden Tiefenwerten der Pixel aus sicht der Lichtquelle vergleichen.

Anyway, schau doch mal ob was richtiges rauskommst wenn du nurmal eine normale Textur auf dein Modell projizierst damit du mal siehst ob die Projektion stimmt...

Sebastian92

Frischling

  • »Sebastian92« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Wesel

Beruf: Azubi (Fachinformatiker für Anwendungsentwicklung)

  • Private Nachricht senden

9

16.08.2009, 19:57

Also hier das Ergebnis wenn ich anstatt der ShadorMap eine textur nehme:


(Link)


Das war doch gemeint oder?
Also für mich sieht das erstmal richtig aus.

Habe jetz auch mal die Tiefenwerte alle unter 1.0 gemacht ( geteilt durch Max. Tiefe), dann ist das ganze komplett in Farbe, als würde man garkeine Schatten benutzen.

MFG

PS:
Kann es sein das das mit den Bilder nicht ganz klappt oder bin ich einfach zu blöde :D


EDIT:

Mir is da was aufgefallen.
Ich denke doch das die Transformation falsch ist.
Da ich das ganze aus nem Direct3D 9 Tutorial habe sind die Werte doch zwischen 0 und 1 oder?
Aber bei Direct3D 10 liegen Bildschirmcoordinaten doch zwischen -1 und 1 oder?

Oder is das ganze mal wieder nen logik Fehler?

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

10

16.08.2009, 22:39

ja, die bildschirm coords liegen zwischen -1 und 1

Werbeanzeige