Unterschied zwischen dem Rendern in OpenGL- und 3D-Animationssoftware

16

Mit OpenGL und so kann ich einige erstaunlich aussehende Dinge in "Echtzeit" mit 60 FPS rendern. Wenn ich jedoch versuche, ein Video derselben Szene wie in Maya oder 3ds Max zu erstellen, dauert das Rendern VIEL länger, obwohl es die gleiche Auflösung und FPS hat.

Warum benötigen diese beiden Rendering-Typen unterschiedliche Zeiträume für das gleiche Ergebnis?

Hinweis: Ja, mir ist klar, dass 3D-Animationssoftware überlegene Bilder erzeugen kann, als dies in Echtzeit möglich wäre. Aber für diese Frage beziehe ich mich auf eine Szene von gleicher Komplexität.

J.Doe
quelle
1
Die kurze Antwort ist, dass OpenGL Verknüpfungen akzeptiert.
user253751

Antworten:

9

Der Hauptunterschied besteht darin, dass mit OpenGL in einem Videospiel ein Prozess namens Rasterung ausgeführt wird, bei dem im Grunde genommen bestimmt wird, welcher Teil der Szene angezeigt wird.

Es muss schnell sein, damit wir es als Echtzeit erleben können.

Daher führt der Algorithmus einige einfache Schritte aus.

  • prüfe ob ein bestimmter teil der szene aus meiner sicht kegelstumpf ist

    Frustum Culling

  • Überprüfen Sie, ob sich etwas davor befindet, das möglicherweise später mit einem Tiefenpuffer gerendert werden muss

    Tiefenpuffer

  • bestelle die Objekte, die wir zum Zeichnen gefunden haben

  • Zeichnen Sie sie, indem Sie sie auf die Leinwand projizieren
  • schattieren sie basierend auf Texturen / Shader / Lichter / ...

Andererseits verwendet eine Rendering-Software (Blender / Max / Maya / ...) höchstwahrscheinlich eine Art Raytracing

Dies erfordert viel mehr Mathematik, um ein höheres Maß an Realismus zu erreichen. Es funktioniert im Grunde auf die gleiche Weise:

  • Erstellen Sie eine Kamera und eine Bildebene davor
  • Schießen Sie einen Strahl (oder mehrere Probenstrahlen) durch jedes Pixel
  • Überprüfen Sie, ob der Strahl etwas in der Szene trifft
  • nächster Treffer ist derjenige, der endgültig in das Pixel gezeichnet werden soll (wie Tiefenpuffer)
  • Berechnen Sie das Licht für den angegebenen Punkt Lichtberechnung

....

Ich werde hier aufhören zu listen, da dies der Punkt ist, an dem das Raytracing startet.

Anstatt nur zu prüfen, ob ein Punkt getroffen wurde, beginnen die meisten Raytracer nun zu berechnen:

  • die Menge an Licht, die eine Oberfläche durchdringt
  • wie viel Licht wird reflektiert
  • Wirf neue Strahlen vom Trefferpunkt in die Szene, bis sie auf eine Lichtquelle treffen

Es gibt eine Menge Techniken mit unterschiedlichem Realismus, mit denen das Licht eines bestimmten Punktes in der Szene berechnet werden kann.

TL; DR Das Wesentliche wäre, dass ein Raytracer meistens versucht, physisch korrekt zu sein, wenn es um die Beleuchtung geht, und daher viel mehr Berechnungen pro Pixel vornimmt (manchmal Tausende von Strahlen abschießen). Andererseits bekommen Spiele ihre Geschwindigkeit durch Zeichnen Sie größere Teile des Bildschirms mit einfacheren Lichtberechnungen und vielen Shader-Tricks, die es realistisch erscheinen lassen.

xoryouyou
quelle
7

Sie vergleichen Äpfel mit Orangen

Das Spiel ähnelt dem Ansichtsfenster in Ihrer Modellierungs-App. Sie können das Ansichtsfenster zum Rendern verwenden und erhalten die gleichen 60fps-Geschwindigkeiten.

Es gibt keinen Grund, warum Sie mit Modellierungssoftware wie Maya oder 3DS Max keine Echtzeitgrafiken erhalten können, die sehr gut sind. Ergebnisse, die vielen Spielen ebenbürtig sind. Sie haben Viewport-Shader, genau wie Spiele. Es gibt auch eine Darstellungsoption für Ansichtsfenster, die Frames so schnell wie möglich auf die Festplatte überträgt (ich habe Full-HD-Renderings mit 30 fps von Maya durchgeführt). Alles, was Sie tun müssen, ist die Verwendung der mitgelieferten Raytracer-Software zu beenden.

Es gibt jedoch einige Unterschiede. Der Hauptunterschied besteht darin, dass Sie als Benutzer nicht so viel optimieren wie Spieleentwickler (bei der Optimierung werden alle Tricks aus dem Buch verwendet). Zweitens arbeiten Ihre Animationsprimitive auf der CPU, weil Sie die Flexibilität benötigen. In Spielen kann man es sich leisten, Optimierungen vorzunehmen. Alles in allem bezahlen Sie dafür, dass Sie kein Programmierteam neben sich haben.

Viele der Dinge könnten tatsächlich vorberechnet worden sein, so dass sie nicht so viel schneller sind, sondern nur besser organisiert. Das Backen Ihrer indirekten Beleuchtung schlägt jeden Tag nicht gebackene Ergebnisse.

Warum sind die Raytracer langsamer?

Sie sind keine *, man macht einfach mehr Arbeit an einem Ray Tracer, weil es einfach ist. Feature für Feature sind sie in Berechnungszyklen nicht viel langsamer. Beispielsweise ist es nicht erforderlich, dass ein Ray Tracer Sekundärstrahlen ausstrahlt (in diesem Fall werden durch die Lebensreflexionen die Geometrien des Ray Tracers entfernt oder gar nicht geladen, genau das macht mental ray). Es ist nur in der Regel so, weil es trivial ist, und das ist der klare Vorteil von Ray Tracern. In einigen Fällen können Sie sie sogar so konfigurieren, dass sie auf der CPU ausgeführt werden. Sie sind nur für verschiedene Dinge optimiert:

  1. Senden von Daten auf die Festplatte, nicht nur Frames, sondern alle Daten. Etwas, das die Schnelligkeit der meisten Spiele sofort brechen würde.

  2. Arbeiten an allgemeiner Hardware. Die GPU ist für bestimmte Dinge viel schneller, wenn Sie sie für die GPU optimieren. Es funktioniert jedoch nicht für alle Lasten. Eine Intel-CPU kann im Allgemeinen schneller rechnen als die GPU. Die GPU ist gerade massiv parallel, was die CPU nicht tut. Die Architektur gewinnt, wenn Sie in der GPU bleiben und die Übertragung minimieren und für die GPU-Architektur optimieren können.

Sie zahlen also für Flexibilität und Benutzerfreundlichkeit. Aber ich gebe ja nicht zu, dass sowohl Maya als auch Max unter extremem Alter leiden. Sie könnten also schneller sein.

TL; DR Der Unterschied liegt hauptsächlich in der Optimierung (viele Tricks lesen) und den verfügbaren externen Ressourcen.

PS: Es gibt ein Missverständnis, weil es physikalisch korrekter ist. Es kann sicherlich sein, aber der Raytracer ist von Natur aus nicht physisch korrekter als ein durchschnittliches Spiel oder eine andere Berechnung. Tatsächlich verwenden viele Spiele wirklich gute Modelle, während dies bei vielen Modellierern nicht der Fall ist.

* Siehe http://www.graphics.cornell.edu/~bjw/mca.pdf

joojaa
quelle
2
Sorry, aber das ist schlicht falsch. OpenGL und DirectX verwenden Approximationen, die von Natur aus schneller sind als präzises Raytracing. Der springende Punkt bei beschleunigten 3D-Grafiken sind Algorithmen, die zwischen Realismus und Geschwindigkeit ausbalancieren und für die meisten praktischen Anwendungen gut genug aussehen: Spiele, CAD usw.
IMil
2
@IMil OpenGL kann für das Raytracing verwendet werden. Es ist schneller, weil es für die betreffende Hardware optimiert ist. Aber Maya muss NICHT strahlverfolgen. Maya und Max können genauso viel openGL und directX verwenden wie Ihr Spiel. Das Ansichtsfenster von Mayas (und 3ds) ist opengl oder directX (Ihre Wahl). Die Tatsache, dass Ihr Prozessor bei bestimmten parallelen Verarbeitungslasten langsamer ist, ist eine andere Sache. So steht die Antwort. Die Standardeinstellungen von Maya sind nicht realistischer als eine Standard-Scanline.
Joojaa
5

Echtzeit-Vorschau

Wenn Sie auf der VFX-Seite der Branche arbeiten und von Echtzeit-Ansichtsfenstervorschauen und nicht von Produktionsrendern sprechen, verwenden Maya und 3DS Max in der Regel auch OpenGL (oder möglicherweise DirectX - so ziemlich dasselbe).

Einer der konzeptionellen Hauptunterschiede zwischen VFX-Animationssoftware und Spielen ist die Höhe der Annahmen, die sie treffen können. In der VFX-Software ist es beispielsweise nicht ungewöhnlich, dass der Künstler ein einzelnes nahtloses Zeichengitter lädt, das sich über Hunderttausende bis Millionen von Polygonen erstreckt. Spiele sind in der Regel am besten für eine große Szene geeignet, die aus einer Schiffsladung einfacher, optimierter Netze (jeweils Tausende Dreiecke) besteht.

Produktionsrendering und Pfadverfolgung

Die VFX-Software legt auch den Schwerpunkt nicht auf die Echtzeitvorschau, sondern auf das Rendering in der Produktion, bei dem die Lichtstrahlen tatsächlich einzeln simuliert werden. Die Echtzeitvorschau ist oft nur eine "Vorschau" des Produktionsergebnisses mit höherer Qualität.

Spiele haben in letzter Zeit viele dieser Effekte wie Echtzeit-Schärfentiefe, weiche Schatten, diffuse Reflexionen usw. sehr gut approximiert, aber sie gehören zur Kategorie der Hochleistungs-Approximationen (z. B. verschwommene Würfelkarten für diffuse Effekte) Reflexionen statt tatsächlich Lichtstrahlen zu simulieren).

Inhalt

Zurück zu diesem Thema: Die inhaltlichen Annahmen zwischen einer VFX-Software und einem Spiel sind sehr unterschiedlich. Das Hauptaugenmerk einer VFX-Software liegt darauf, die Erstellung von Inhalten aller Art zu ermöglichen (zumindest ist dies das Ideal, obwohl es in der Praxis oft nirgendwo in der Nähe liegt). Spiele konzentrieren sich auf Inhalte mit viel schwereren Annahmen (alle Modelle sollten im Bereich von Tausenden von Dreiecken liegen, normale Karten sollten auf gefälschte Details angewendet werden, wir sollten eigentlich keine 13 Milliarden Partikel haben, Charaktere werden nicht wirklich durch Muskeln animiert Rigs und Spannungskarten, etc).

Aufgrund dieser Annahmen können Game-Engines häufig Beschleunigungstechniken wie z. B. Kegelstumpf-Culling leichter anwenden, um eine hohe interaktive Bildrate beizubehalten. Sie können davon ausgehen, dass einige Inhalte statisch sind und im Voraus gebrannt werden. Die VFX-Software kann diese Art von Annahmen nicht ohne Weiteres treffen, da die Flexibilität bei der Erstellung von Inhalten wesentlich höher ist.

Spiele verbessert es

Dies mag eine kontroverse Ansicht sein, aber die Spielebranche ist eine viel lukrativere Branche als VFX-Software. Ihr Budget für ein einziges Spiel kann Hunderte von Millionen Dollar umfassen und sie können es sich leisten, alle paar Jahre neue Engines herauszubringen. Ihre Forschungs- und Entwicklungsanstrengungen sind erstaunlich und es werden Hunderte und Hunderte von Spieletiteln veröffentlicht.

VFX- und CAD-Software hingegen ist bei weitem nicht so lukrativ. F & E wird häufig von Forschern ausgelagert, die in akademischen Umfeldern arbeiten. Viele Unternehmen setzen häufig Techniken ein, die vor vielen Jahren veröffentlicht wurden, als wäre dies etwas Neues. Daher ist die VFX-Software, die selbst von so großen Unternehmen wie AutoDesk stammt, häufig nicht ganz so "auf dem neuesten Stand" wie die neuesten AAA-Spiele-Engines.

Sie haben auch tendenziell ein viel längeres Erbe. Maya ist zum Beispiel ein 17-jähriges Produkt. Es wurde viel renoviert, aber seine Kernarchitektur ist immer noch die gleiche. Dies könnte analog zu dem Versuch sein, Quake 2 zu nehmen und es bis 2015 zu aktualisieren und zu aktualisieren. Die Bemühungen können großartig sein, passen aber wahrscheinlich nicht zu Unreal Engine 4.

TL; DR

Auf jeden Fall ist das eine kleine Interpretation des Themas. Ich konnte nicht erkennen, ob Sie über Echtzeitvorschauen in Ansichtsfenstern oder über Produktionsrendering sprachen, und habe versucht, ein bisschen von beidem zu behandeln.

Drachen Energie
quelle
Es ist auch eine Frage der Zeit. Selbst wenn Sie mit etwa 60 fps rendern und akzeptable Ergebnisse erzielen könnten, wird die Optimierung nur selten durchgeführt. Nehmen wir an, es dauert 3 Minuten pro Bild und Sie haben 200 Bilder zum Rendern. Möglicherweise können Sie die 60 fps erzielen, indem Sie einen Shader-Writer einstellen und optimieren, aber das dauert mindestens ein oder zwei Tage Ihrer Zeit. 200 Bilder in 3 Minuten dauern jedoch nur 10 Stunden, sodass Sie diese Kosten sparen. In der Praxis ist es billiger, mehr Hardware zu kaufen und sich nicht zu viele Sorgen zu machen. Spiele können diesen Ansatz einfach nicht verfolgen.
Joojaa
@joojaa Es ist aber auch etwas komplexer. Nur wirklich gute Echtzeit-Shader für Maya zu erstellen, kann mindestens ein Jahr dauern, selbst von einem erfahrenen Shader-Entwickler (mit geringeren Gewinnen), da die Flexibilität des Knotensystems dort auf das Rendering in der Produktion abzielt. Ein Reverse-Engineering-Denken und eine neue Art von GLSL / HLSL-Code-Generierungstechnik (wie ein Meta-Programmiersystem) wären erforderlich, um diese Allzweck-Shader-Knoten in ein Echtzeit-Shading-System zu übersetzen, das den Wirkungsbereich von UE 4 erfasst , zB
Dragon Energy
Die Shader-Engine von @joojaa UE 4 zielt direkt auf eine stark angenäherte PBR-Denkweise ab (eine sehr kleine Teilmenge von Disneys PBR-Shader). Sie haben sogar ihr Materialsystem für einen schnellen Echtzeit-Zweck entworfen, anstatt mit Mayas Materialsystem zu beginnen, das überhaupt nicht für Raytracing ausgelegt ist. Selbst wenn die hellsten der UE 4 an VP 2.0 arbeiten würden, müssten sie möglicherweise jahrelang Tag und Nacht arbeiten, um die gleichen Ergebnisse zu erzielen wie bei einem Design, das nicht dafür vorgesehen ist.
Dragon Energy
Aber das ist ein einmaliger Aufwand, selbst wenn Sie diese Pipeline in einer VFX-App haben, könnte jede Szene diese zusätzliche Optimierung benötigen. Es gibt keinen Grund, warum ein Maya-Benutzer nicht in UDK rendern konnte, zum Beispiel für dieselbe Shader-Entwicklungsplattform.
Joojaa
1
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Joojaa