Wie erzielen moderne Spiele-Engines Echtzeit-Rendering im Vergleich zum „langsamen“ Rendering von Blender?

90

Ich bin sowohl für Gamedev als auch für Blender neu und es gibt etwas, das ich nicht rütteln kann:

In Blender kann ein einzelnes Rendern (auch mit dem erweiterten Renderer "Zyklen") auf meinem Computer bis zu 45 Sekunden dauern. Aber offensichtlich kann man in einem Spiel erstaunliche Grafiken haben, und so geschieht das Rendern offensichtlich kontinuierlich, mehrere Male pro Sekunde in Echtzeit.

Daher frage ich mich auch, was die Trennung ist, in Bezug darauf, wie "langsam" Blenders Rendering zu sein scheint, im Vergleich dazu, wie Game Engines Echtzeit-Rendering (oder nahezu Echtzeit-Rendering) erzielen.

smeeb
quelle
3
Echtzeit-Rendering ist ein großes Thema, es gibt eine Menge Bücher darüber (einschließlich "Echtzeit-Rendering"). Und Renderer wie Cycles funktionieren in Game Engines ganz anders als 3D-Renderer - man kann sie nicht wirklich vergleichen
UnholySheep
42
@UnholySheep Natürlich kannst du sie vergleichen. Wie könnte jemand den Unterschied erklären, um die Frage zu beantworten?
user985366
2
@ 10Antworten Aber diese Frage wäre auf dieser Site nicht aktuell.
GiantCowFilms
3
@ 10Antworten: Während im OP Blender erwähnt wird, dreht sich die Frage im Wesentlichen darum, warum Echtzeit-Game-Engines 3D-Szenen schneller zu rendern scheinen als etwa fotorealistische 3D-Renderer (wie Blender, aber auch viele andere). Beachten Sie, dass dies auch die Frage ist, die von der akzeptierten Antwort beantwortet wird. In diesem Sinne stimme ich zu, dass die Frage hier im Bereich Spieleentwicklung , wo Fragen zur allgemeinen Spieleentwicklungstechnologie gestellt werden können, mehr zum Thema gehört als zu Blender , wo Fragen speziell zu Blender gestellt werden.
ODER Mapper
3
Ich denke, das Geheimnis hier ist, dass das Erstaunliche nicht präzise sein muss. Es gibt schnelle Näherungen für Mathematik, die in der 3D-Wiedergabe verwendet werden, wie InvSqrt
Dmitry Grigoryev

Antworten:

115

Echtzeit-Rendering, auch modernes Echtzeit-Rendering, ist eine Fülle von Tricks, Shortcuts, Hacks und Approximationen.

Nehmen Sie zum Beispiel Schatten.

Wir verfügen immer noch nicht über einen vollständig genauen und robusten Mechanismus zum Rendern von Echtzeitschatten aus einer beliebigen Anzahl von Lichtern und beliebig komplexen Objekten. Wir haben mehrere Varianten von Shadow-Mapping-Techniken, aber alle leiden unter den bekannten Problemen mit Shadow-Maps, und selbst die "Korrekturen" für diese sind nur eine Sammlung von Workarounds und Kompromissen (als Faustregel, wenn Wenn Sie die Begriffe "Tiefenverzerrung" oder "Polygonversatz" in irgendetwas sehen, dann ist dies keine robuste Technik.

Ein weiteres Beispiel für eine von Echtzeit-Renderern verwendete Technik ist die Vorberechnung. Wenn etwas (z. B. Beleuchtung) zu langsam ist, um in Echtzeit berechnet zu werden (und dies kann von dem verwendeten Beleuchtungssystem abhängen), können wir es vorberechnen und speichern. Dann können wir die vorberechneten Daten in Echtzeit verwenden -Zeit für eine Leistungssteigerung, die oft auf Kosten dynamischer Effekte geht. Dies ist ein direkter Vergleich zwischen Arbeitsspeicher und Rechenleistung: Arbeitsspeicher ist oft billig und reichlich, Rechenleistung häufig nicht. Daher wird der zusätzliche Arbeitsspeicher im Austausch gegen Einsparungen bei der Rechenleistung verbraucht.

Offline-Renderer und Modellierungswerkzeuge konzentrieren sich dagegen eher auf Korrektheit und Qualität. Da sie mit sich dynamisch ändernder Geometrie arbeiten (z. B. einem Modell, während Sie es erstellen), müssen sie häufig die Dinge neu berechnen, wohingegen ein Echtzeit-Renderer mit einer endgültigen Version arbeiten würde, für die diese Anforderung nicht besteht.

Maximus Minimus
quelle
14
Ein weiterer zu erwähnender Punkt ist, dass der Rechenaufwand zum Generieren aller Daten, die ein Spiel zum schnellen Rendern von Ansichten eines Bereichs benötigt, möglicherweise um Größenordnungen höher ist als der Rechenaufwand, der zum Rendern einer Ansicht erforderlich wäre. Wenn das Rendern von Ansichten eines Bereichs ohne Vorberechnung eine Sekunde dauern würde, einige vorberechnete Daten diese jedoch auf 1/100 Sekunde verkürzen könnten, könnte es nützlich sein, 20 Minuten für die Vorberechnung zu verwenden, wenn Ansichten in einem Echtzeitspiel benötigt werden man möchte nur einen zehnsekündigen 24-fps-Film, es wäre viel schneller gewesen, vier Minuten zu verbringen ...
Supercat
9
... die 240 erforderlichen Ansichten mit einer Rate von einer pro Sekunde erzeugen.
Supercat
@supercat und aus diesem Grund sind Ihre Renderings so gut wie frei von Hastle und Sie erhalten viel Kontrolle über den Prozess. Sie könnten eine Spiel-Engine zum Rendern verwenden ... wenn Sie bereit wären, Funktionen zu ändern. Aber wie Sie sagten, es lohnt sich nicht.
Joojaa
Ein bemerkenswertes Beispiel dafür, an das ich mich erinnern kann, ist die ursprüngliche Quake-Engine (~ 1996), mit der auf sehr begrenzten Maschinen mit Kombinationen aus extrem zeitaufwendigen Vorausberechnungstechniken verhältnismäßig beeindruckende Echtzeit-3D-Grafiken erzielt werden konnten. BSP-Bäume und vorgerenderte Lichteffekte wurden im Voraus generiert. Das Entwerfen eines Levels für diese Engine umfasste normalerweise Stunden (normalerweise über Nacht) des Wartens auf die Fertigstellung der Kartenkompilierungswerkzeuge. Der Kompromiss bestand im Wesentlichen darin, die Renderzeiten auf Kosten der Erstellungszeit zu verkürzen.
Jason C
(Der ursprüngliche Motor Doom [1993] hatte Ähnliche Vorkalkulationen Marathon. Kann auch haben, aber ich kann mich nicht erinnern, ich erinnere mich bauen Marathon Ebene , aber ich kann mich nicht erinnern , was beteiligt war.)
Jason C
109

Die aktuelle Antwort hat die allgemeinen Probleme sehr gut erklärt, aber meines Erachtens fehlt ein wichtiges technisches Detail: Die Render-Engine "Cycles" von Blender ist eine andere Art von Engine als die, die die meisten Spiele verwenden.

In der Regel werden Spiele gerendert, indem alle Polygone in einer Szene durchlaufen und einzeln gezeichnet werden. Dazu werden die Polygonkoordinaten durch eine virtuelle Kamera projiziert, um ein flaches Bild zu erzeugen. Der Grund, warum diese Technik für Spiele verwendet wird, ist, dass moderne Hardware auf dieser Technik basiert und in Echtzeit mit relativ hohen Detaillierungsgraden ausgeführt werden kann. Aus Interesse ist dies auch die Technik, die bei der vorherigen Render-Engine von Blender angewendet wurde, bevor die Blender Foundation die alte Engine zugunsten der Cycles-Engine fallen ließ.

Polygon-Rendering

Cycles ist dagegen eine sogenannte Raytracing-Engine. Anstatt die Polygone zu betrachten und einzeln zu rendern, werden virtuelle Lichtstrahlen in die Szene ausgestrahlt (einer für jedes Pixel im endgültigen Bild), der Lichtstrahl wird von mehreren Oberflächen reflektiert und anhand dieser Daten entschieden, welche Farbe das Pixel hat sollte sein. Raytracing ist eine sehr rechenintensive Technik, die für das Rendern in Echtzeit unpraktisch ist. Sie wird jedoch für das Rendern von Bildern und Videos verwendet, da sie ein höheres Maß an Detailgenauigkeit und Realismus bietet.

Raytracing-Rendering


Bitte beachten Sie, dass meine kurzen Beschreibungen von Raytracing und Polygon-Rendering der Kürze halber stark reduziert sind. Wenn Sie mehr über die Techniken erfahren möchten, empfehle ich Ihnen, ein ausführliches Tutorial oder Buch zu besuchen, da ich vermute, dass es sehr viele Leute gibt, die bessere Erklärungen geschrieben haben, als ich aufbringen könnte.

Beachten Sie auch, dass beim 3D-Rendering eine Vielzahl von Techniken zum Einsatz kommen und einige Spiele für bestimmte Zwecke tatsächlich Variationen des Raytracing verwenden.

Pharap
quelle
3
+1 für einen sehr guten Punkt; Ich bin bewusst nicht auf das Kaninchenloch von Raytracing gegen Rasterung gegangen, also ist es toll, dies als Ergänzung zu haben.
Maximus Minimus
16
Diese Antwort bringt den Unterschied auf den Punkt. Game-Engines rastern (vorwärts oder verzögert), während Offline-Renderer (wie Blender, Renderman usw.) Raytracing durchführen. Zwei völlig unterschiedliche Ansätze zum Zeichnen eines Bildes.
ssell
4
@ LeComteduMerde-fou Da sich gamedev an Spieleentwickler richtet, hielt ich eine ergänzende technische Erklärung für den technisch versierten Leser für nützlich.
Pharap
1
@ssell Richtig, aber es geht nicht nur um Ray-Tracing - auch ohne Ray-Tracing ist das Rendering von Blender selbst mit GPU-Rendering in der Regel viel detaillierter und langsamer. Dies hat hauptsächlich mit dem Fokus auf Korrektheit zu tun - bessere Texturfilterung und -auflösung, Anti-Aliasing, Beleuchtung, Schattenmapping, Z-Genauigkeit, Quads, bidirektionale Oberflächen, große Polygonzahlen, Ausgabe mit höherer Auflösung, genaues Bump-Mapping , Mangel an vorberechneten Karten, Morphing, genaue Kinematik ... es ist eine lange Liste von Funktionen, die Game-Engines fehlen oder sich durchsetzen.
Luaan
1
@ Chii Ich erinnere mich falsch. Ich dachte an ART VPS , es war nur Beschleunigung, nicht Echtzeit.
Jason C