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.
lighting
shadows
raytracing
Marcus
quelle
quelle
Antworten:
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.
quelle
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.
quelle