Ich habe an der Implementierung von Varianzschatten-Mapping für mein Spiel gearbeitet. Ich konnte ein Punktlicht mit Varianz-Schatten-Mapping arbeiten lassen, wobei eine Gaußsche Unschärfe auf die Schattenkarte angewendet wurde, um das Aliasing zu reduzieren. Jetzt versuche ich, Punktlichter zu implementieren, bin mir aber nicht sicher, wie ich die Gaußsche Unschärfe anpassen soll, um mit der Schattenkarte zu arbeiten, wenn sie in einer Würfelkarte gespeichert ist. Ich habe eine Weile gesucht, aber ich kann anscheinend keine Beispiele finden, die Punktlichter verwenden. Kann mir hier jemand helfen?
xna
xna-4.0
shadow-mapping
Telanor
quelle
quelle
Antworten:
Es gibt ein Beispiel für die Varianzschattenzuordnung mit Punktlichtern, jedoch wird anstelle der Würfelzuordnung die doppelte Paraboloidzuordnung verwendet. Das Tutorial mit dem Beispiel wird hier gezeigt .
Wenn Sie bereit sind, mit etwas weniger Details als Cube-Maps umzugehen, ist die DP-Varianz-Schatten-Mapping einfacher zu codieren und erfordert zwei Texturen anstelle von sechs, wodurch Sie Speicherplatz sparen. Sie haben auch nur eine Naht zu verbergen.
Punktlichter sind normalerweise die schwierigste Art von Licht, um Schattenzuordnungen anzuwenden (und mehr Speicher zu verbrauchen), weshalb viele Spiele sie nicht so oft verwenden.
quelle
Als ich dies zuvor implementiert habe, habe ich einfach jede Würfelfläche einzeln mit einer Standard-2D-Gaußschen Unschärfe verwischt. Sie können möglicherweise Nähte an den Würfelkanten einführen, da die Unschärfe nicht über sie hinweggeht, aber meiner Erfahrung nach war dies kaum jemals erkennbar. YMMV natürlich.
Sie könnten wahrscheinlich sogar eine Unschärfe über die Würfelkanten hinweg ausführen, indem Sie einen Unschärfeshader schreiben, der seine Eingabe in Form einer Cubemap übernimmt und Samples um einen 3D-Vektor verteilt und einen Richtungskegel abtastet. Das klingt jedoch schwierig und langsam, also würde ich versuchen, jedes Gesicht zuerst einzeln zu verwischen.
quelle