1 Punkte von GN⁺ 2024-10-31 | 1 Kommentare | Auf WhatsApp teilen
  • Schatten in 3D-Spielen entstehen nicht automatisch wie in der Realität, sondern sind visuelle Effekte, die innerhalb begrenzter Leistung so gestaltet werden, dass sie plausibel wirken
  • Frühe 3D-Spiele behandelten Schatten mit einfachen, aber schnellen Verfahren wie 2D-Bildern, Blob Shadows unter den Füßen, zur Laufzeit erzeugten Schattentexturen und auf Ebenen projizierter Geometrie
  • Als Szenen komplexer wurden, kamen Projected Textures, Shadow Maps und Stencil Shadows zum Einsatz, allerdings mit Einschränkungen wie Auflösungsartefakten, Projektion auf falsche Oberflächen und schwer vorhersehbaren Laufzeitkosten
  • Statische Level-Beleuchtung speicherte große Schatten über Vertex Colors und Lightmaps, und auch moderne Spiele nutzen weiterhin Varianten traditioneller Techniken wie Cascaded Shadow Maps, Light Probes und Capsule Shadows
  • Raytracing-Schatten sind die natürlichere Richtung, doch in komplexen Szenen wie Alan Wake 2 bestimmen weiterhin Trade-offs bei Sampling und Denoiser den Charakter des Bildes

Spielschatten werden anders erzeugt als in der Realität

  • In der Realität sind Schatten das Ergebnis davon, dass Licht blockiert wird; wenn eine einzelne Lichtquelle weit entfernt ist, werden sich überlappende Schatten nicht dunkler
  • In 3D-Videospielen existieren Schatten nicht von selbst, daher müssen Entwickler sie direkt zwischen Performance und visueller Überzeugungskraft gestalten
  • Im Spiel kann es auch Darstellungen geben, bei denen Schatten dunkler werden, je stärker sie sich überlappen, etwa beim Blob Shadow in Metal Gear Solid

2D-Schatten direkt auf den Bildschirm zeichnen

  • Die einfachste Methode besteht darin, vor dem Zeichnen der Figur zunächst ein 2D-Schattenbild auf den Bildschirm zu zeichnen
  • Winter Gold und MDK verwenden animierte 2D-Schattenbilder ohne Skalierung
  • In Szenen, in denen die Figur vor allem anderen steht, funktioniert auch diese einfache Methode gut

Blob Shadow: der dunkle Kreis unter den Füßen

  • Der einfachste Ansatz in 3D ist, unter der Figur eine dunkle Scheibe zu zeichnen
  • Super Mario 64 verwendet Blob Shadows für Figuren und nutzt die Hardware-Decal-Funktion des Nintendo 64, um den Schatten effektiv so zu clippen, dass er nur auf der Bodenebene sichtbar ist
  • Blob Shadows können situationsabhängig animiert werden
    • In Super Mario 64 wird der Schatten beim Springen kleiner
    • In Metal Gear Solid verändert sich die Schattenform
  • Das Problem, dass Schatten über Klippen hinausragen, lässt sich auch behandeln, indem man das Blob-Quad wie ein Decal projiziert

Planare Schatten auf Basis von Render-Texturen

  • Wenn ein Blob eine einfache Textur ist, kann man die Figur zur Laufzeit von oben rendern und als Schattentextur verwenden
  • Crash Bandicoot: Warped erzielt mit zur Laufzeit erzeugten Schattentexturen gute Ergebnisse
  • Soldier of Fortune nutzt dieselbe Methode, liefert wegen der niedrigen Schattenauflösung aber weniger gute Resultate
  • Diese Methode unterscheidet sich vom Shadow Mapping, bei dem aus Sicht des Lichts eine Depth Map erzeugt wird
    • Hier wird ein Schwarz-Weiß-Bild als Textur verwendet
    • Konzeptionell liegt sie nahe an einer 1-Bit-Shadow-Map

Planare Schatten aus Geometrie

  • Die intuitive Methode besteht darin, das schattenwerfende Objekt entgegen der Lichtrichtung flach auf eine Ebene zu projizieren und dasselbe Objekt noch einmal in Schwarz zu rendern
  • Dieser Schatten bleibt meist deckend, um zu verbergen, dass Teile des Objekts einander überlappend gezeichnet werden
  • Auf einem flachen Boden passt das gut, bei komplexem Gelände nimmt die Genauigkeit ab
  • F-19 Stealth Fighter zeichnet den Schatten eines Flugzeugs auf die Startbahn
  • Auch in Spielen auf Basis von GLQuake sind planare Schatten zu sehen
    • Kingpin: Life of Crime verwendet schwarze planare Schatten ordentlich
    • In Half-Life Alpha 0.52 treten Transparenzprobleme zutage

Planare Schatten auf Gelände

  • David Brabens Virus lässt ein Raumschiff einen von oben betrachteten Schatten auf das Gelände werfen
  • Interstate ’76 neigt und streckt planare Schatten passend zur Bodenneigung
    • Der Schatten durchdringt gelegentlich den Boden
    • Insgesamt wirkt das ziemlich überzeugend
    • In der Software-Rendering-Ansicht ist ein leicht transparenter Schatten zu sehen, während in der hardwarebeschleunigten Ansicht ein vollständig schwarzer Schatten erscheint
  • Interstate ’76 versuchte auch, Schatten großer Objekte wie Brücken zu projizieren, das Ergebnis war jedoch nicht vollständig erfolgreich

Drop Shadows mit projizierten Texturen

  • Bei projizierten Texturen wird die oben erzeugte Schattentextur nicht auf eine Ebene, sondern auf Oberflächen unterschiedlicher Form projiziert
  • Konzeptionell ähnelt das einem Bat-Signal, das vom Himmel nach unten gestrahlt wird
  • Toy Story 3: The Video Game ist ein Beispiel für diese Methode; wenn der Schatten andere Schatten überlappt, wird er dunkler
  • Damit lassen sich sehr scharfe Schatten erzeugen, die Methode ist aber empfindlich gegenüber den Oberflächenbedingungen
    • Auf vertikalen Flächen kann sie seltsam aussehen
    • In manchen Fällen kann sie auch an der Decke erscheinen
    • In Gameplay-Aufnahmen von Sonic Adventure 2: Battle sind solche Beispiele zu sehen
  • Weil sie durch Objekte hindurch sichtbar sein kann, eignet sie sich eher für Spezialfälle
  • Auch für Baumschatten kann sie gut funktionieren

Shadow Map: der De-facto-Standard

  • Eine Shadow Map ist eine Methode, bei der das Spiel aus Sicht des Lichts ein Tiefenbild zeichnet und dieses Bild beim Rendern der Welt ausliest, um Schatten zu bestimmen
  • Da normaler Rendering-Code wiederverwendet werden kann, ist die Implementierung vergleichsweise einfach
  • Die begrenzte Auflösung erzeugt bekannte Artefakte wie „Peter Panning“ und „Shadow Acne“
  • Verschiedene Verfahren wurden vorgeschlagen, um Oberflächen nahe an der Kamera mehr Shadow-Map-Fläche zuzuweisen
  • Für gut aussehende Ergebnisse ist normalerweise Tuning nötig

Stencil Shadow: scharf, aber teuer

  • Stencil Shadows können auf jeder Oberfläche scharfe Schatten zeichnen und erzeugen einen Film-noir-Look, der mit Shadow Maps nur schwer nachzuahmen ist
  • Ein prominentes Beispiel ist Doom 3, bekannt für seine dunklen Räume
  • Diese Methode teilt die Welt mithilfe unsichtbarer Geometrie, sogenannter Shadow Volumes, in beleuchtete Bereiche und Schattenbereiche
  • Das Spiel wendet Beleuchtung nur auf Pixel an, die sich nicht innerhalb eines Shadow Volumes befinden
  • Damit sie funktioniert, muss die Welt mehrfach gezeichnet werden
    • Zuerst wird die gesamte Welt mit Ambient Lighting gezeichnet
    • Für jedes Light wird ein Shadow Volume gezeichnet; anschließend wird die Welt erneut gezeichnet, wobei nur Pixel außerhalb des Schattens beeinflusst werden
    • Für Front Faces und Back Faces werden unterschiedliche Stencil Operations eingestellt
  • Als möglicherweise frühestes kommerzielles Beispiel gilt Severance: Blade of Darkness, das 2001 gute Schatten zeigte
  • Einer der Gründe, warum diese Methode heute selten verwendet wird, liegt darin, dass ihre Laufzeitkosten schwer vorherzusagen sind
    • Die Kosten hängen stark davon ab, wie groß das Shadow Volume auf dem Bildschirm erscheint
    • Auf optimierte Algorithmen gab es Patente
    • Es gibt einen entsprechenden Link, der nahelegt, dass Id Software im Zusammenhang mit Doom 3 eine Art Einigung erzielt hat

Weiche Stencil Shadows

  • Stencil Shadows müssen nicht zwangsläufig scharf sein
  • Silent Hill 2 zeichnet auf der PlayStation 2 Stencil Shadows und wendet anschließend Blur an, um weiche Schatten zu erzeugen
  • Das Ergebnis auf der Konsole wirkt nahezu perfekt

Vereinfachte Charakterschatten

  • Man kann ein einfacheres Modell als das auf dem Bildschirm angezeigte Modell Schatten werfen lassen
  • In Zelda auf dem Nintendo 64 werfen nur Links Füße Schatten, andere Teile dagegen nicht
  • Hyperblade verwendet in einer futuristischen Hockey-Arena eine eigenwillige Methode, bei der Spieler einfache animierte Formen als planare Schatten werfen

Schatten in statischer Level-Beleuchtung

  • Vertex Colors und Lightmaps sind Verfahren zum Speichern der Beleuchtung eines Spiellevels und wurden in vielen Spielen als einzige Möglichkeit genutzt, großflächige Schatten zu zeigen
  • Vertex Color

    • Ico zeigt, dass sich auch nur mit altmodischem Per-Vertex Lighting ausgefeilte Schatten erzeugen lassen
    • Auf Low-Poly-Maps können auch scharfe Schatten über Vertex Colors dargestellt werden
    • Tony Hawk Pro Skater 2 erzielt mit dieser einfachen Methode dennoch beeindruckende Ergebnisse
  • Lightmap

    • Eine Lightmap ist die klassische Methode zum Speichern von Level-Beleuchtung und Schatten
    • Statt pro Vertex eine Farbe zu speichern, wird ein zweiter Textursatz verwendet, der nur Beleuchtung ausdrückt
    • Da die Auflösung je nach Bereich variiert werden kann, lassen sich Schatten dort präziser darstellen, wo es nötig ist
    • Sie benötigt mehr Speicher als Vertex Colors
    • Quake gilt als das Spiel, das Lightmaps populär gemacht hat

Traditionelle Techniken werden in modernen Spielen weiterverwendet

  • Auch moderne Spiele verwenden je nach Situation weiterhin traditionelle Schattenverfahren
  • Cascaded Shadow Maps, eine Variante des Shadow Mapping, werden genutzt, um große Bereiche schnell abzudecken
  • Lightmaps können zusammen mit anderen Verfahren wie Light Probes verwendet werden
  • Auch die Idee vereinfachter Charaktermodelle lebt weiter
    • The Last of Us erzeugt weiche Charakterschatten mit gestreckten Kugeln
    • Unreal Engine unterstützt Capsule Shadows für Charaktere
  • Auch projizierte Schatten werden weiterhin verwendet
    • Hot Wheels Track Attack rendert ein Shadow Mesh als Textur und projiziert es anschließend auf die Rennstrecke
    • Das lässt sich in der Erklärung im Entwicklerblog und in Gameplay-Videos nachvollziehen

Auch Raytracing-Schatten sind nicht perfekt

  • In Spielen, die physikalisch korrekte Beleuchtung simulieren wollen, entstehen Schatten natürlich dort, wo kein Licht ist
  • Anders als bei Shadow Maps können auch kleine Geometriedetails korrekte Schatten werfen
  • Große Lampen erzeugen auf natürliche Weise weiche Schatten, und indirektes Licht kann dunkle Ecken aufhellen
  • Um dieses Ziel praktisch umzusetzen, wurde viel Zeit und Geld in Raytracing-Algorithmen und Hardware investiert
  • Szenen in echten modernen Spielen sind sehr komplex, daher muss die Simulation approximiert werden
    • Bei den ray-traced shadows in Alan Wake 2 wird jedes Pixel nur von einem zufällig ausgewählten einzelnen Light beleuchtet
    • Das Ergebnis wird an einen Denoiser weitergereicht, der das verrauschte Bild intelligent glättet
  • Auch Raytracing-Schatten sind nicht perfekt; je nach gewählten Trade-offs entsteht ein eigener Look

Die Entscheidung für keine Schatten

  • Manche Spiele können anderen Elementen eine höhere Priorität einräumen als Schatten
  • Auch der Verzicht auf Schatten kann eine bewusste Option sein

1 Kommentare

 
GN⁺ 2024-10-31
Meinungen auf Hacker News
  • Am besten gefällt mir die Tatsache, dass Schatten im Freien blau sind.
    Das ist keine optische Täuschung und kein künstlerischer Effekt: Der Himmel ist blau, und an klaren Tagen werden Schatten durch vom Himmel reflektiertes Licht beleuchtet, weshalb sie blau erscheinen.
    Wenn man unter ein Auto schaut, sieht man in Bereichen, die den Himmel sehen, einen deutlichen blauen Schatten; je mehr die Karosserie auch das Himmelslicht abschirmt, desto näher kommt er echtem Schwarz.
    Mischt man diesen klaren blauen Sonnenschatten mit einem weichen, schwarzen AO-Himmelsschatten, bekommt man für wenig Aufwand ziemlich schöne Schatten.
    • Stimmt, und es ist so subtil, dass viele es gar nicht bemerken.
      Eine gute Grafik-Rendering-Engine macht so etwas. Schatten sollten einen leichten Hauch von Himmelsfarbe haben.
      Deshalb haben mich einige ältere Screenshots von No Man's Sky gestört. Ich meine, Szenen gesehen zu haben, in denen der Himmel grün war, die Schatten aber violett.
    • Maler lernen oft, Schatten im Freien leicht violett zu malen, um den Kontrast zum Gelbstich des Sonnenlichts zu maximieren.
    • Habe ich gerade auch in Monets Winterbild gesehen: https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • Ich mag die Variante, die heutige Nintendo-Plattformspiele verwenden. Sie nutzen zwar, wie heute meist üblich, Shadow Maps, aber der Schatten der Spielerfigur wird so angepasst, dass er unabhängig von der tatsächlichen Position der Lichtquelle immer direkt nach unten fällt.
    So hilft er wie ein klassischer Blob Shadow dabei einzuschätzen, wo man nach einem Sprung landet, behält aber die visuelle Qualität eines richtigen Schattens.
    Wenn ich mich richtig erinnere, machen sie den Schatten in dunklen Umgebungen sogar heller als den Boden, damit er weiterhin sichtbar bleibt.
  • Ich dachte immer, der Grund, warum Valorant irgendwie schlecht aussieht, sei, dass Spieler keine Schatten werfen. Vor ein paar Tagen habe ich erfahren, dass der Server die Position anderer Spielermodelle erst an den Client schickt, wenn er entscheidet, dass sie sichtbar sind, um Cheating zu reduzieren.
    Dann würden Schatten beim Laden und Entladen der Spielermodelle erscheinen und verschwinden, also kann man Schatten nur sehen, wenn auch der Körper des Spielers sichtbar ist.
    • Vermutlich hast du dazu etwas von mir gelesen. Ich weiß nicht, ob Valorant wegen des Anti-Cheat-Systems Spielerschatten deaktiviert hat, aber es macht Anti-Cheat definitiv einfacher.
      Valorant hat das Rendering absichtlich extrem simpel gehalten, um auch auf Einsteiger-Hardware sehr hohe Frameraten zu erreichen. Es gibt nicht nur keine dynamischen Schatten, sondern auch keinerlei dynamische Beleuchtung, und auch nirgendwo Alpha-Transparenz.
      Selbst Dinge wie Rauch, die man normalerweise transparent rendern würde, sind so stilisiert, dass sie völlig opak gerendert werden können, weil das schneller ist. Unabhängig vom Cheating hätten sie dynamische Schatten wahrscheinlich schon aus Performance-Gründen ohnehin weggelassen.
    • Könnte man das nicht beheben, wenn der Server auch die Sichtbarkeit der Schatten prüft? Ich kenne Valorant nicht gut, aber es wirkt so, als könnte es tatsächlich ein strategisches Element sein, sich nicht mit einer Lichtquelle im Rücken zu verstecken.
  • Guter Artikel, mit vielen nostalgischen Spielereferenzen. Ich erinnere mich immer noch daran, wie beeindruckt ich vor langer Zeit von den Schatten in N64-Zelda war.
    Mit der Verbreitung von Raytracing werden Flächenlichter und weiche Schatten meiner Ansicht nach zum Standard. Wenn die Hardware es hergibt, lohnt sich ein Blick auf Quake 2 RTX, um zu sehen, wie die Zukunft aussehen könnte.
    Und schließlich habe ich diesen Blog zu meiner Liste von Grafikressourcen hinzugefügt: https://github.com/aaron9000/c-game-resources
    • Wenn man mit Smoke and Mirrors gut genug aussehende Schatten erzeugen kann, ist es aus Performance-Gründen besser, weiter Tricktechniken zu verwenden.
  • Zu der Aussage „Das früheste Spiel, das wohl mit Stencil Shadows ausgeliefert wurde, ist Severance: Blade of Darkness von 2001, und die Schatten sind hervorragend“: Revolte für den PowerVR PCX1 nutzte 1996 Stencil Shadows.
    https://www.youtube.com/watch?v=7BvtML5dIuI
    Der PowerVR PCX1 unterstützte Shadow Volumes in Hardware und setzte sie effizienter um als Standard-Stencil-Shadows. Statt die Szene mehrfach zu zeichnen, führte er im Wesentlichen einen Depth-only-Prepass in Hardware in einem On-Chip-Depth/Stencil-Buffer aus, um sichtbare Pixel zu bestimmen, prüfte dann die Shadow Volumes, um festzustellen, welche Pixel im Schatten liegen, und führte anschließend Textur-Sampling und Shading aus.
    Die Lichthelligkeit wurde anhand des Shadow-Volume-Ergebnisses angepasst, und da nur sichtbare Pixel geshadet wurden, verschwendete Overdraw keine unnötige Textur-Fetch-Bandbreite.
    Auch auf der Dreamcast, die auf einem Nachfolger des PCX1 basiert, gab es viele Spiele mit Shadow Volumes. Die Dreamcast-Implementierung war flexibler: Volumes konnten nicht nur die Beleuchtung ändern, sondern auch die verwendete Textur, das UV-Mapping und sogar die Blending-Gleichung transparenter Polygone.
    Ich habe auf der DC auch weiche Schatten ausprobiert (https://imgur.com/a/DyaqzZD am Ende), aber weil man dabei zu einem standardmäßigeren Stencil-Verfahren zurückkehrt und die Schatten mehrfach neu zeichnet, belastet das die Fillrate ziemlich stark.
  • Wer den aktuellen Stand der Beleuchtungstechnik in Videospielen sehen will, sollte sich Epics aktuelle UE 5.5 MegaLights-Demo ansehen: https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • Wenn es mehr als eine Lichtquelle gibt, werden Schatten tatsächlich dunkler, wenn sie sich überlappen.
    Wenn zwei Lampen drei Menschen beleuchten, entstehen sechs Schatten. Dort, wo sich alle sechs Schatten überlagern, wird es „schwarz“ oder es bleibt nur Umgebungslicht.
    An anderen Stellen, an denen sich weniger Schatten überlappen, entsteht ein Beleuchtungsgradient.
    • Das stimmt nicht. Sobald je ein Schatten von jeder Lichtquelle, also zwei Schatten, sich überkreuzen, bleibt nur Schwarz oder Umgebungslicht.
      Wenn du sowohl im Schatten von Lichtquelle A als auch im Schatten von Lichtquelle B bist, woher soll dann Licht kommen? Nur vom Umgebungslicht, und wenn es das nicht gibt, ist es schwarz.
    • Gute Beobachtung, aber der Artikel liegt damit nicht falsch. Das war ziemlich interessant.
      Es steht unter der Bedingung: „Da es nur eine Lichtquelle gibt und sie ziemlich weit entfernt ist, ist ein Schatten einfach die Abwesenheit von Licht.“
  • Zu „Einige frühe Flugsimulatoren zeichnen einen flachen Schatten aus der Draufsicht, wenn man auf der Startbahn ist. Bei der Recherche hoffte ich, ein Beispiel zu finden, bei dem der Schatten auch im Flug sichtbar ist, fand aber keines“: F-29 RETAL beziehungsweise F29 Retaliator, F29, ist so ein Beispiel.
    Dieser Schatten war ein weiteres kleines Element, das dem Spiel ein enormes Geschwindigkeitsgefühl verlieh.
    https://imgur.com/a/hOgxr7a
    https://www.mobygames.com/game/6233/f29-retaliator/
  • Mein eindrucksvollster Schattenmoment war beim Spielen von GTA IV. Ich hatte einen ziemlich leistungsstarken Gaming-PC, und die Echtzeitschatten, die von den Scheinwerfern des Spielerfahrzeugs erzeugt wurden, waren insgesamt großartig.
    An einen Moment erinnere ich mich noch genau: Nachts in einer Hintergasse stahl ich ein Auto. Genau in dem Moment, als die Spielerfigur einstieg, kam ein Polizist um die Ecke, „sah“, wie das Auto gestohlen wurde, zog seine Waffe, und gleichzeitig gingen die Scheinwerfer an, sodass der riesige Schatten des sich bewegenden Polizisten auf die nahe Wand geworfen wurde.
  • Der Artikel ist gut und liest sich unterhaltsam.
    Die überlappenden Schatten in MGS sind nicht völlig falsch, wegen Umgebungslicht, Streuung und anderer Effekte der globalen Beleuchtung.
    „Mirror’s Edge (2008, PC) ist im Grunde Lightmaps: The Game“ ist witzig, aber zutreffend. Damals war es beeindruckend, und das ist es heute noch.
    • Wenn ein Spiel auch nach langer Zeit noch gut aussehen soll, gibt es kaum etwas Besseres als gebackene globale Beleuchtung. Es war das erste Spiel, in dem ich bei hellem Tageslicht echte blaue Schatten gesehen habe. Allerdings waren es Schatten von der Level-Geometrie.
      Ich denke, es wurde damals zu Unrecht unterschätzt. Vielleicht, weil es kürzer war als die Konkurrenz.