
Wenn Guild Wars 2®: Visions of Eternity™ nächste Woche am 28. Oktober erscheint, veröffentlichen wir auch eine neue Schattentechnologie, mit der wir das Spiel grafisch aufwerten können!
Schatten können eine Menge zu einer glaubwürdigeren Spielwelt beitragen; sie können weit mehr als nur Licht verbergen. Unser Gehirn lässt sich vom Schatten bezüglich Tiefe, Form, Entfernung und Bewegung Hinweise geben. Ohne sie kann eine 3D-Welt platt und unzusammenhängend aussehen.
Hinweis: Dieser Beitrag geht tief in die technischen Details, die bekanntermaßen die allerbesten Details sind. Wenn ihr also einfach nur die Vorher-Nachher-Bilder sehen wollt, dann scrollt bis zum Ende, aber wenn ihr mehr über Beleuchtung und Schattensystem erfahren möchtet, dann lest weiter!
Schattenziele
Seit dem Start von Guild Wars 2 hat sich die Grafikhardware weiterentwickelt, und dies bietet uns eine Gelegenheit, das Rendering im Spiel zu verbessern. Einer der Bereiche, um die wir uns gekümmert haben, ist das Schattensystem. Bei all unseren Verbesserungen geht es um zwei Hauptziele:
- Mehr vom Bild abdecken Wir würden gerne entferntere Teile der Welt in qualitativ hochwertigen, dynamischen Schatten abbilden.
- Mehr Details Wir möchten knackigere Ränder und mehr Details in unseren Schatten sehen, insbesondere feine Details.
Gleichzeitig möchten wir jedoch auch sicherstellen, dass Spieler mit weniger leistungsstarken Systemen nach wie vor reibungslos spielen können, also beschränken wir uns darauf, nur die Einstellungen „Mittel“, „Hoch“ und „Ultra“ zu verändern. Der Rest bleibt wie bisher.
Hintergrund im Schatten
Unsere dynamischen Schatten werden mittels einer Technik namens „Kaskadierte Schattenkarten“ generiert. Das bedeutet, dass wir mehrere Ansichten von der Hauptlichtquelle aus erstellen und die Entfernung vom Licht zu jedem Pixel in einem Bild speichern, das als „Schattenkarte“ bezeichnet wird.
Beim Generieren der Hauptansicht vergleichen wir die Entfernung jedes einzelnen Pixels zum Licht mit der Entfernung des Lichts in der Schattenkarte. Wenn der Pixel weiter entfernt ist, liegt er im Schatten, ansonsten fällt Licht darauf. Die Ansicht vom Licht aus ist verzerrt, wenn sie auf die Hauptansicht projiziert wird, also können wir Pixel-Entfernungen nicht perfekt vergleichen. Das „Kaskadieren“ von „kaskadierten Schattenkarten“ bedeutet, dass wir mehrere Schattenkarten generieren, um verschiedene Orte des Bildes abzudecken. So wird die Verzerrung der einzelnen Karten reduziert.
Erhöhte Auflösung
Die offensichtliche Methode, die Details zu erhöhen, wäre, einfach die Anzahl der Pixel auf der Schattenkarte zu erhöhen. Bei der Umsetzung war sorgfältiges Refactoring erforderlich, da bestimmte Teile der Engine Annahmen über die Auflösung der Schattenkarten anstellten.
Wir erhöhen die Auflösung der Schattenkarte auf „Mittel“ von 512 × 512 auf 1024 × 1024 und auf „Hoch“ und „Ultra“ von 1024 × 1024 auf 2048 × 2048. Als wir sahen, wie viel besser dies aussieht, wurde uns klar, dass hier das Potenzial für weitere Verbesserungen schlummerte.
Bessere Kaskade-Berechnungen
Das Platzieren und die Größe der Kaskade sind von großer Bedeutung für schöne Schatten. Deshalb konzentrierten wir uns auf diesen Bereich. Bei unserer ursprünglichen Version hatten wir einen oder zwei Kreise fester Größe in der Welt, je nach den Grafikeinstellungen. Dies bringt Vorteile wie intuitive Parameter, die festlegen, welcher Teil der Welt von dynamischen Schatten abgedeckt ist, und es ist bestens dafür geeignet, die Mitte des Bildschirms abzudecken, auf den sich der Blick des Spielers größtenteils richtet.
Nun haben wir jedoch fliegende Reittiere und extreme (und beeindruckendere) Landschaftsformen, und der Algorithmus zeigte erste Schwächen. Der neue Algorithmus deckt jetzt einen größeren Teil des Bildschirms ab, indem dynamisch verändert wird, wie viel der Welt von einer Schattenkarte abgedeckt ist. Der Schritt von einer festen Größe in einem Weltbereich zu einer variablen Größe erforderte sorgfältige Platzierung und Skalierung, damit gewährleistet ist, dass die Schatten stabil blieben, wenn die Kamera sich bewegt, aber nachdem wir das hinbekommen haben, kann nun ein wesentlich größerer Teil des Bildschirms dynamische Schatten anzeigen.
Die folgenden Bilder sind eine Entwicklungsansicht und vergleichen, welchen Teil des Bildschirms der alte, oder, genauer gesagt, der neue Algorithmus mit dynamischen Schatten abdeckt. Rot ist die Schattenkarte mit den meisten Details, die einen kleineren Teil der Welt abdeckt und der Kamera am nächsten ist. Gelb ist weniger detailliert, deckt mehr der Welt ab und ist weiter von der Kamera entfernt. Cyan ist am wenigsten detailliert, deckt noch mehr der Welt ab, ist aber am weitesten von der Kamera entfernt. Die dunklen Bereiche, die farblich nicht markiert sind, werden nicht von einer Schattenkarte abgedeckt und haben somit keine dynamischen Schatten.
Wie ihr seht, deckt der neue Algorithmus mehr Fläche mit dynamischen Schatten ab, er deckt den Bereich rechts ab, den der alte Algorithmus ignorierte, und er deckt mehr mit der Schattenkarte mit den höchsten Details ab. Durch all diese Verbesserungen erhalten wir nun detailliertere Schatten, die sich vom Charakter aus weiter in die Welt erstrecken.
Oben: Abdeckung der alten Schattenkarte.
Unten: Abdeckung der neuen Schattenkarte.
In Bälde wird es zwei Schattenkarten auf den Einstellungen „Mittel“ und „Hoch“ geben, und drei auf der Einstellung „Ultra“. Im Vergleich dazu bot der alte Algorithmus hier eine beziehungsweise zwei Schattenkarten.
Fortschrittlicheres Sampling
Die Schattenkarte korrelieren nicht gleichmäßig mit jedem Pixel auf dem Bild. Dadurch gibt es ein Sample-Aliasing, um das wir uns kümmern müssen; wenn wir die Ränder der Schattenkarte nicht zusätzlich bearbeiten, erscheinen sie kantig und unschön. Um dies zu mindern, sampeln wir Pixel der Schattenkarte in den benachbarten Bereichen und interpolieren zwischen ihnen. So werden die kantigen Ränder geglättet, und die Umrisse kleinerer Details, etwa feiner Linien, werden schöner abgebildet.
Wir verbesserten die Sampling-Technik mittels einer Technik namens „Poisson Disc Sampling“; so können wir im Vergleich zu zuvor mehr aus jedem Sample herausholen, als wir mittels eines Gitters sampelten; zusätzlich werden diese Samples nun gewichtet durch eine Gauß-Verteilung, damit der Fokus auf den Punkten liegt, die näher an dem Punkt auf der Schattenkarte liegen, der geglättet wird. Dies sieht besser aus, als wenn alle Samples dieselbe Gewichtung hätten.
Bildraum-Schatten
Manche Details sind einfach zu klein, als dass sie auf einer Schattenkarte sichtbar wären; man bekommt also auch mit erhöhter Auflösung der Schattenkarte keine Schatten. Wir verwenden nun eine Technik namens „Bildraum-Schatten“, um diesen Details Schatten zu verleihen. Der Z-Buffer des aktuellen Einzelbilds wird verwendet, um ein Raymarching im Bildraum durchzuführen; dies verhält sich ähnlich wie Raytracing, ist aber eingeschränkter. Hierdurch können wir kleine Details für Elemente wie Gras, kleine architektonische Details und Heldenausrüstung hinzufügen, damit diese mehr Tiefe zeigen.
Da wir nur den Z-Buffer haben, ist die Technik begrenzt, und daher treten gelegentlich Inkonsistenzen auf. Wir haben in enger Zusammenarbeit mit dem Grafikteam die Parameter abgestimmt, um das optimale Verhältnis zwischen Qualität und visuellen Artefakten zu finden. Außerdem gibt es eine Option in den Grafikeinstellungen, mit der man die Funktion aktivieren und deaktivieren kann. Bildraum-Schatten sind für die Einstellungen „Hoch“ und „Ultra“ verfügbar.
Auf den folgenden Vergleichsbildern seht ihr weitere Beispiele dieser Technologie in der Praxis. Wir hoffen, dass ihr mit diesen Verbesserungen noch mehr Spielspaß bei euren Abenteuern in Tyria haben werdet!














Quelle: https://www.guildwars2.com/de/news/improv…tm_campaign=rss

