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

1

29.07.2017, 22:53

[HLSL]Environment Mapping - Probleme bei der Reflexion

Hallo,

nach langer Zeit will ich hier auch mal wieder was los werden.

Ich versuche im Moment in Direct3D11 Environment Mapping umzusetzen, allerdings habe ich einen seltsamen Fehler bei der Reflexion und leider keinen Ansatz mehr woran es liegen könnte (siehe Bild).

Die Reflexion berechne ich im Vertexshader mit:

HLSL-Quelltext

1
2
3
4
    float3 N = output.normal;
    float3 V = normalize(eyePos - output.worldPos);

    output.reflect = normalize(reflect(V, N));


Hat jemand einen neuen Ansatz, woher dieser Fehler kommen könnte, habe bereits die Normalen und die Camera-Position überprüft und die sind beide korrekt.
»Mirac« hat folgendes Bild angehängt:
  • Unbenannt.PNG
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

30.07.2017, 08:04

Wie sieht es aus, wenn du den Normalenvektor als Texturkoordinate nimmst (output.reflect = output.normal)? Wie sieht die Textur aus?

3

30.07.2017, 09:01

Dann erhalte ich die Cubemap, die auf die Kugel gelegt wird (seltsamerweise auf den Kopf gestellt)
»Mirac« hat folgendes Bild angehängt:
  • Unbenannt.PNG
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

30.07.2017, 10:02

Aber auch da stimmt was nicht. Sieht so aus, als ob mindestens 2 Faces deiner Textur keinen richtigen Inhalt haben, falsch gedreht oder vertauscht sind.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

30.07.2017, 10:53

Normalen invertiert? Ich denke auf jeden Fall ist bei der Cubemap aber das Stück von oben und unten vertauscht, wie David schon vermutet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

30.07.2017, 11:42

Also meine Cubemap hab ich mal in den anhang gehängt, und den 3D-Vektor bilde ich mit dem Algorithmus für Cubemaps von Wikipediaauf die UV-Koordinaten ab.
»Mirac« hat folgendes Bild angehängt:
  • skybox.jpg
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

30.07.2017, 11:51

Warum nimmst du nicht eine richtige Cube-Map? Die würde keinen Speicher verschwenden (deine Textur verschwendet 50%), und das Sampling dürfte auch schneller und besser sein.
Ich bin mir ziemlich sicher, dass der Fehler durch diese Umrechnung entsteht. Vor allem wenn du dir vorstellst, wie deine umgerechneten UV-Koordinaten im Pixel-Shader zwischen den Vertices linear(!) interpoliert werden, kann dabei eigentlich nur Murks rauskommen! Dabei laufen die Koordinaten aus deinem „Kreuz“ heraus, auch an den Rändern gibt es Probleme. Diese Umrechnung müsstest du, wenn überhaupt, im Pixel-Shader machen, nicht im Vertex-Shader.
Aber wie gesagt, das ist alles total unnötig, weil die Grafikkarte das selber macht, wenn du einfach direkt mit einer richtigen Cube-Map arbeitest.

8

30.07.2017, 12:27

Alles klar danke, für den Hinweis, dann werd ich mal mein Programm entsprechend modifizieren :)

EDIT: Ich habe testweise einmal den Reflexionsvektor als Ausgabe verwendet, und anscheinend tritt der Fehler bereits da auf, leider weiß ich immer noch nicht wieso :/
Also der Farbverlauf zeigt die gleichen "Verformungen" wie die spätere Textur
»Mirac« hat folgendes Bild angehängt:
  • Unbenannt.PNG
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Mirac« (30.07.2017, 14:59)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

30.07.2017, 20:39

Sieht für mich mehr oder weniger richtig aus (ich weiß nicht, wie genau du den Vektor in eine Farbe umwandelst). Dein Problem ist nicht der Reflexionsvektor, sondern auf jeden Fall die Textur. Ändere die erstmal in eine echte Cube-Map, dann wird sicher alles gut ... ;) Übrigens kannst du dann direkt den Reflexionsvektor als 3D-Texturkoordinate nehmen. Normalisierung oder irgendeine andere Transformation ist nicht nötig. Auch die Sky-Box im Hintergrund sollte diese Cube-Map benutzen.

10

30.07.2017, 23:50

Habe ich mittlerweile auch bemerkt (Asche auf mein Haupt), kämpf jetzt gerade noch mit den CubeMaps, aber bin sehr zuversichtlich
:thumbsup:

Danke auf jedenfall schonmal :)

Nachtrag: Dank einer richtigen Cubemap funktioniert es nun einwandfrei. Mein Reflexionsvektor war aber auch noch "etwas" falsch, da ich für die W-komponente 1.0 statt 0.0 verwendet habe.
Nun funtioniert aber alles korrekt.

Danke :thumbsup:
»Mirac« hat folgendes Bild angehängt:
  • Unbenannt.PNG
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mirac« (31.07.2017, 17:27)


Werbeanzeige