Warum leuchten in manchen Spielen Lichter durch Wände?

28

In einigen Spielen scheinen Lichter durch Wände, auch wenn ich die Videoqualität auf ein hohes Niveau einstelle.

Ein paar Beispiele für Spiele, die ich kürzlich gespielt habe, sind Borderlands 2 (Raketenexplosionen) und Call of Cthulhu (Laternen; das Spiel verwendet sogar Unreal Engine 4).

Ist das ein Fehler oder gibt es Leistungsgründe?

Beispiel Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (einige Male, aber schnell)

Bonusfrage: Gibt es im letzteren Fall eine Möglichkeit, das Problem mithilfe von Raytracing kostengünstig zu lösen? Ich denke, dass teure RT das Problem definitiv gelöst hat, aber ich frage mich, ob es auch in einer "billigen" Form verwendet werden kann, um dieses spezielle Problem zu lösen.

Marcus
quelle
21
Ein Bild sagt mehr als 1000 Worte.
Evorlor
8
Ich würde spielen gehen müssen, um zu testen, aber ist es tatsächlich Licht , das durchläuft, oder könnte es ein glühender Partikeleffekt sein? Insbesondere als Beispiel für eine Raketenexplosion könnte ich mir einen additiven "Feuer" -Partikeleffekt vorstellen, bei dem Kollisionen mit hoher Wahrscheinlichkeit ignoriert werden. Laternen könnten das gleiche tun, um einen sichtbaren Heiligenschein zu schaffen, nehme ich an ...
AC
@Evorlor fügte ein Beispiel hinzu.
Marcus

Antworten:

43

Ich ging auf TomTsagks richtige Antwort ein und dachte, es könnte helfen, ein bisschen mehr darüber zu beschreiben, warum Spiele so funktionieren.

Licht in Spielen "wandert" nicht wirklich von der Quelle zur Oberfläche, zur Kamera und wird dabei behindert.

Um herauszufinden, wie hell die einzelnen Pixel einer Oberfläche auf der Grundlage eines bestimmten Lichts gezeichnet werden sollen, verwenden wir eine mathematische Formel (oder eine Näherungsformel), die die Blickrichtung der Oberfläche und die Richtung von diesem Punkt auf der Oberfläche zur Lichtquelle verwendet. Das ist es, nur die Richtung, aus der es scheint. Normalerweise wird kein Strahl geworfen, um zu überprüfen, ob das Licht tatsächlich dieses Pixel erreicht, da dies für jedes Pixel auf dem Bildschirm und für die Überprüfung des Strahls anhand der gesamten detaillierten Geometrie in der Szene gilt meist noch zu teuer für echtzeitspiele.

Standardmäßig werfen also keine Spiellichter Schatten. Die Richtung zu einem Licht bleibt gleich, auch wenn ein Schattenwerfer im Weg ist. Die Mathematik gibt uns also den gleichen Helligkeitswert.

Wenn wir Schatten simulieren wollen, müssen wir das separat tun. Ein üblicher Weg ist das, was als Schattenkarte bezeichnet wird. Bevor wir unsere Szene schattieren, rendern wir in dieser Version die Szene zunächst aus der Perspektive jedes Lichts, als wäre dieses Licht eine Kamera, und speichern die Tiefe jedes Pixels, das es sieht, in einer Off-Screen-Textur.

Wenn wir dann die Szene schattieren, können wir den mathematischen Abstand dieses Pixels von der Lichtquelle mit der Tiefe vergleichen, die wir bei dem entsprechenden Pixel in der Schattenkarte aufgezeichnet haben. Wenn die Tiefe der Schattenkarte kleiner ist, bedeutet dies, dass sich zwischen hier und dem Licht eine andere Oberfläche befindet, und wir zeichnen stattdessen dieses Pixel im Schatten.

Es gibt eine Menge cooler Techniken, um diese kartenbasierten Schatten mit weniger Artefakten / Aliasing schöner aussehen zu lassen, aber ich werde sie vorerst beschönigen. Es genügt zu sagen, dass sie im Allgemeinen auch nicht frei sind.

Weil dies erfordert, dass die gesamte Szene aus der Perspektive jedes Lichts (bis zu) erneut gerendert wird - bis zu sechs Mal, wenn es sich um ein Punktlicht handelt, das in alle Richtungen (Norden, Süden, Osten, Westen, oben, unten) scheint, und wir müssen erneut rendern - Wenn Sie die Schattenkarte rendern, sobald sich etwas bewegt, kann dies sehr teuer werden.

Daher konzentrieren Spiele ihr Rendering-Budget häufig auf die wichtigsten Lichter in der Szene - wie das direktionale Sonnenlicht - um sicherzustellen, dass sie gut aussehende Schatten haben. Kleine, kurzlebige, kleine Lichter wie der Blitz einer Explosion sind oftmals verzeihlich, wenn sie ein wenig an Okkludern vorbeigehen. Dies ist für Spieler oftmals angenehmer als ein Problem in der Framerate, da die Renderkosten aufgrund des zusätzlichen Renderns und Berechnens der Schattenkarte plötzlich steigen. Vor allem, wenn es sich um eine vielbeschäftigte Action-Szene handelt, in der es mehr auf die Fluidität als auf die Pixel-Perfektion ankommt.

DMGregory
quelle
3
Eine andere Schwierigkeit ist, dass, während es trivial ist, herauszufinden, ob sich eine Lichtquelle vor oder hinter einer Oberfläche befindet, das Verhindern, dass Oberflächen glühen, wenn sie von hinten beleuchtet werden, oft seltsam aussehende Ergebnisse liefert.
Supercat
Dies gilt insbesondere für Partikeleffekte (bei denen es sich wahrscheinlich zumindest teilweise um eine Explosion handelt), da Partikel besonders billig zu handhaben sein müssen, um sehr nützlich zu sein.
Luaan
2
Licht und Partikel sind zwei verschiedene Dinge. Ein Partikel kann auch durch ein Hindernis "lecken", allerdings aus ganz anderen Gründen. Manchmal enthält ein Partikelsystem auch ein Licht, um den Effekt zu verkaufen (denken Sie an ein Lagerfeuer oder einen Schwarm von Glühwürmchen), aber ein Licht innerhalb eines Partikeleffekts ist immer noch nur ein Licht, normalerweise keine spezielle Variante.
DMGregory
2
Ein alternativer Ansatz für Schattenkarten sind Schattenvolumina , mit denen das Aliasing-Problem behoben wird, die jedoch teurer sind: Es muss eine zusätzliche Geometrie (ein neues Polygon pro Konturkante jedes Objekts für jede Lichtquelle) sowie zusätzliche Rendering-Übergänge gerendert werden. Ich würde jedoch davon ausgehen, dass der Mapping-Ansatz für die meisten Situationen gut genug ist.
DarthFennec
22

Kurz gesagt, dies geschieht aus Leistungsgründen.

Wenn ein Licht auf dem Bildschirm erscheint, scheint es standardmäßig auf alle Objekte (obstruiert oder nicht), so dass das Spiel zusätzliche Berechnungen durchführen muss, um zu sehen, welches Objekt von was betroffen ist.

Bei statischen Objekten ist dies durch Verwendung von statischem und gebranntem Licht einfacher zu lösen, bei dynamischen Lichtquellen wie Explosionen ist dies jedoch nicht der Fall.

Für Ihre Bonusfrage gehören Raytracing und Billig nicht zum selben Satz. Der einzige Grund, warum Raytracing bisher nicht zum Mainstream wurde, ist die Leistung. Angenommen, alle Leuchten verwenden Raytracing, dann wäre dieses Problem "gelöst", jedoch auf Kosten der Leistung.

TomTsagk
quelle
6
Ist Raytracing für CGI-Filme also wichtiger als Echtzeitspiele?
Ansammlung
21
@Akkumulation Das ist richtig. Es kann Stunden dauern, bis ein einzelnes Bild eines Films gerendert ist, während ein Spiel nur Millisekunden hat.
NobodyNada
16
Das heißt, Spiele erforschen zunehmend die Verwendung von Raytracing oder Raymarching in Verbindung mit Rastertechniken, wobei der Rasterizer das leistet, wozu er gut ist, und die Strahlen das, wozu sie gut sind. Es ist nicht das vollständige Raytracing jedes Pixels, aber auf diese Weise können Sie trotzdem einige großartige Effekte erzielen.
DMGregory
2
@DMGregory Tatsächlich verwendeten Spiele wie Duke Nukem 3D bereits eine sehr vereinfachte Variante des Raytracing - obwohl es nicht für dynamisches Licht verwendet wurde und definitiv nicht jedes einzelne Pixel auf dem Bildschirm nachverfolgt wurde (normalerweise wurde es für jede Spalte durchgeführt) Pixel), und Reflexionen und Transparenz waren eher ein Sonderfall als die Standardeinstellung. Software-3D-Rendering hat immer mit ähnlichen Ansätzen gespielt, es war die Hardware-3D, die diesen Weg (bis jetzt) ​​versperrte.
Luaan
@Acccumulation Raytracing ist auf verschiedenen Ebenen verfügbar. Spiele können also zwar Primärstrahlen auf höchstem Niveau abschießen, sie können jedoch nicht genug Sekundär- oder Mehrfach-Bounces pro Pixel ausführen. Selbst wenn Sie raytracen würden, hätten Sie immer noch Leistungskompromisse wie diese. Die Fähigkeit, Hauptlichter zu verfolgen, bedeutet immer noch nicht, dass Sie es sich leisten können, alle Nebenlichter zu rendern.
Joojaa