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

11

21.12.2013, 16:40

Ein generelles Problem an Shader ist, dass das Ergebnis massiv davon abhängt, was du überhaupt in den Shader reingibts. Du musst also genau wissen, was für Werte in welcher Form erwartet werden und diese dann auch genau so liefern.

Normalmapping ansich ist eigentlich trivial: Anstatt den Normalvektor pro Vertex zu setzen, liest du ihn aus einer Textur. Das ist schon alles. Schwieriger wird es dann, wenn man die Details betrachtet: Was steht überhaupt in der Normalmap? Wie muss welcher Farbkanal interpretiert werden, wie bekomme ich meinen Normalvektor aus der Farbe? In welchem Koordinatensystem ist dieser Vektor dann überhaupt? Ist die Textur für Tangentspace-Mapping oder Modelspace-Mapping vorgesehen? In welchem Koordinatensystem führe ich die Lichtberechnung durch? Muss ich die Lichtrichtung oder die Normalen transformieren? Vielleicht auch beide, oder keine von beiden?

Du kannst nicht einfach einen Normalmapping Shader von irgendwo kopieren und hoffen, dass er bei dir funktioniert. Bei all den oben gestellten Fragen gibt es kein Richtig oder Falsch, nahezu jede Kombination funktioniert, sie haben nur unterschiedliche Vor- und Nachteile. Aber solange du nicht auf jede Frage eine eindeutige Antwort für dein gesamtes Programm hast, wird das Ergebnis immer irgendwie falsch sein. Und DAS ist es, was Shaderprogrammierung kniffelig macht. Zumindest solange du nur Dinge wie Normalmapping umsetzen willst.

Mein Tipp: Versteht, was du tust. Dann musst du auch keinen Shader-Code kopieren, der bei dir eh nicht funktioniert. Sobald du verstanden hast, was genau du überhaupt machen möchtest, ist die Umsetzung eigentlich sehr einfach. Und solange du es nicht verstanden hast, wird dir vermutlich auch niemand sagen können, wo dein Fehler ist (eben weil das Gesamtproblem komplex ist und hier lange nicht alle Infos stehen, die nötig wären).
Lieber dumm fragen, als dumm bleiben!

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

12

21.12.2013, 16:50

wahrscheinlich. Jedoch verstehen kann man es nur durch (untern anderem) Experimentieren.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

13

21.12.2013, 17:03

Mein Plan war es erst mit anderen Shader zu experimentieren und dann, wenn ich es verstanden habe einen eigenen dynamischen NormalMapping Shader zu schreiben.

14

21.12.2013, 18:20

Hast du denn schonmal normale Beleuchtung, ohne Normal-Mapping im Shader implementiert? Nach dem Phong-Modell zum Beispiel? Wie sicher bist du denn schon im Umgang mit Shadern und dem ganzen Vektoren Transformieren?
Lieber dumm fragen, als dumm bleiben!

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

15

21.12.2013, 19:43

Also wie man einen Pixel Light erstellt weiß ich größtenteils.
Was das programmieren angeht klappt es eigentlich auch sehr gut.
Es gibt meistens nur syntax-fehler.

Ich habe sogar das Texturemapping in meinen Spiel implementiert.
Man kachelt max 6 Texturen und bestimmte mir der Texturemap, Welche
Texturen auf diesem Pixel angezeigt wird.

Es ist schwerer als es sich anhört. Ich bräuchte fast eine Woche.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sebastian Müller« (21.12.2013, 19:52)


16

21.12.2013, 23:07

Ich kann dir nur raten, wirklich nochmal die Shader-Grundlagen von Anfang an durchzugehen und sicher zu stellen, dass du absolut alles verstanden hast. Größtenteils reicht da nicht. Für OpenGL wüsste ich eine schöne Tutorial-Reihe (Lighthouse), aber für DirectX wird es ähnliches geben, musst du einfach mal suchen.
Wenn du die Grundlagen wirklich von Anfang an durchgearbeitet hast, wird auch Normalmapping kinderleicht sein. Aber es hat keinen Sinn das anzufangen, bevor man nicht die Grundlagen beherrscht. Du kannst ja dazu auch gerne fragen stellen, aber im Moment habe ich nicht das Gefühl, dass Fragen zu Normalmapping hier Sinn machen. Wenn du anderer Meinung bist, dann versuch mal, alle Fragen die ich oben gestellt habe zu beantworten. Und zwar nicht raten, sondern ganz genau wissen.

Übrigens: Eine Woche für etwas vermeintlich einfaches brauchen ist nicht lang, wir haben das alle durch. Programmieren ist eben nicht einfach, da muss man durch oder es sein lassen.
Lieber dumm fragen, als dumm bleiben!

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

17

22.12.2013, 01:06

Ok Danke für die vielen Ratschläge wie es weiter geht.
Normalmapping werde ich nun verwerfen.

Ich fang was HLSL angeht noch einmal von vorne an.

PS
Was ist eigentlich aktuellste PixelShader / Vertexshader version?
Gibt es eigentlich ein Buch über HLSL?
Was unterscheidet eigentlich HLSL in DX9 und DX11

Werbeanzeige