Warum würden Sie heute Software-Rendering anstelle von Hardware-Rendering verwenden?


13

Im Gegensatz zu CPU- oder Software-Rendering nehme ich an?

Wäre nicht generell jedes aktuelle Rendering GPU-basiert, da Sie OpenGL oder Direct X verwenden würden?

Könnte mir jemand hier einige Infos geben, kann keine passenden Antworten finden?

Antworten:


7

Wie Sie bereits wissen, was GPU-Rendering ist, lassen Sie mich Ihre Fragen beantworten.

Das Rendern von Hardware hat traditionell das Stigma, sehr komplex zu sein. Dies ist zum großen Teil auf das Design der Anwendungsprogrammierschnittstellen (Application Programming Interfaces, APIs) zurückzuführen, die nicht darauf ausgelegt sind, die Komplexität zu verschleiern. Das heißt, die Lernkurve war steil. Zum Teil beruhte dies auch auf der Erkenntnis, dass das Schreiben von 3D-Anwendungen, für die diese APIs stark ausgelegt sind, weitaus komplexer ist als das Schreiben von 2D-Anwendungen. Bezüglich der Komplexität der Benutzeroberfläche beziehe ich mich auf Benutzeroberflächen wie OpenGL und DirectX. Bezüglich 3D vs 2D beziehe ich mich auf die Mathematik und Geometrie, die beim Konstruieren von 3D-Szenen zum Einsatz kommen, im Vergleich zu der Einfachheit, mit der der ungeübte Verstand 2D-Probleme angehen kann.

In den letzten Jahren wurden jedoch nicht nur viel mehr Lernmaterialien verfügbar, sondern auch viele Bibliotheken, die die zugrunde liegenden Komplexitäten dieser Schnittstellen aufgreifen, sind verfügbar geworden und haben die Eintrittsbarrieren gesenkt. All dies hat zu einem Kreislauf von zunehmendem Interesse geführt, der aufgrund der zunehmenden Bedeutung von Visualisierung, raffinierten Benutzeroberflächen und Leistung auf Geräten mit geringem Stromverbrauch bereits vorhanden war.

Daher waren Software-Rendering und 2D-Rendering gute Einstiegspunkte und Schwerpunktbereiche für diejenigen, die noch keine Erfahrung mit Grafiken hatten und / oder ein Produkt erstellen wollten, bei dem das Rendern nicht zu viel Zeit für ein Projekt in Anspruch nahm. Zumindest in Bezug auf 2D gilt dies immer noch; Die Technologie hat die Lücke bei der Übertragung von 2D-Rendering auf GPU weitgehend geschlossen.


20

Hier gibt es einige wirklich gute Antworten, um sie zu ergänzen.

Eine wichtige Triebfeder für das Rendern von Software ist die Fähigkeit. Dies wurde auf in eine der Antworten berührt, aber ich werde einen gegnerischen Punkt machen: Software - Rendering tatsächlich sein kann , mehr als Hardware - Rendering der Lage, nicht weniger.

Mit Hardware sind Sie im Allgemeinen auf die Fähigkeiten der Hardware selbst beschränkt, obwohl OpenGL für eine Software-Emulation vieler Dinge möglich ist, die in Hardware möglicherweise nicht vorhanden sind. Wenn Sie versuchen, Feature X zu verwenden, dies jedoch von der Hardware nicht unterstützt wird, geschieht Folgendes: Entweder kehren Sie zur Software-Emulation zurück (das typische OpenGL-Szenario), oder Sie gelangen nicht zu benutze es überhaupt (das typische D3D-Szenario).

Mit Software-Rendering können Sie den Code selbst schreiben. Sie können Dinge manipulieren und haben die volle Kontrolle darüber, was bis auf Pixelebene passiert. Als Beispiel für eine Explosion aus der Vergangenheit hatte Quake bereits 1996 Pixel-Shader in der Software implementiert, als 3D-Karten (damals noch keine "GPUs") kaum ein paar Dutzend strukturierte Dreiecke rastern konnten.

Dies ist auch bei aktuellen GPUs der Fall, aber es gibt immer noch signifikante Teile der Grafik-Pipeline, die als feste Funktionalität verfügbar gemacht werden (oder überhaupt nicht verfügbar gemacht werden).

Software-Rendering kann besser skaliert werden. Es ist erst relativ spät, dass Multi-GPU-Setups wirklich realisierbar werden, aber Software kann auf vielen vielen CPU-Kernen in vielen vielen Servern skaliert werden. Sie können dafür ganze Serverfarmen einrichten, und professionelle Renderfarmen verwenden weiterhin Software-Rendering.

Software kann verschiedene Rendering-Paradigmen offenlegen. Die derzeitige Hardware konzentriert sich stark auf das Paradigma Dreieck / Scheitelpunkt / Fragment / Rasterung. Es geht darum, eine Sache auszuwählen und zu optimieren, bis sie nach Gnade schreit. GPUs sind immer noch eine schlechte Wahl für z. B. Ray Tracing, das in Software häufiger implementiert wird.

Natürlich schlägt eine GPU bei einem direkten Vergleich von Äpfeln zu Äpfeln die Software an jedem Tag der Woche - vorausgesetzt, wir vergleichen Bereiche, in denen die GPUs stärker sind. Das heißt aber nicht, dass sie in jedem Bereich stärker sind. Trotzdem und für die Zwecke dieser SE-Site ist die Verwendung von Hardware in der Regel der richtige Weg. Beachten Sie jedoch, dass es Anwendungsfälle gibt, in denen auch Software brauchbar ist.


8
+1 für "Software-Rendering kann tatsächlich leistungsfähiger sein als Hardware-Rendering, nicht weniger."
concept3d

10

Hardware- oder GPU-Rendering ist, wie Sie vermutet haben, die Verwendung der grafischen Verarbeitungseinheit (auch als Grafikkarte bezeichnet), um ein Bild zu rendern. Das Gegenteil ist Software-Rendering, bei dem die CPU verwendet wird.

Software-Rendering wird normalerweise als Fallback verwendet, wenn keine (geeignete) GPU verfügbar ist. Da die GPU jedoch um Größenordnungen schneller ist, ist das Rendern von Software so gut wie nie nützlich, da eine CPU normalerweise keine Bilder in Echtzeit rendern kann. Software-Rendering ist nützlich, wenn eine hohe Präzision erforderlich ist oder wenn extrem komplizierte Formeln zum Rendern des Bildes erforderlich sind. Da CPUs allgemeiner sind als GPUs und daher über mehr Funktionen verfügen. Dieses Argument verliert jedoch immer mehr an Gültigkeit, da GPUs heutzutage immer komplexere Aufgaben bewältigen können und nicht mehr auf 32-Bit-Floats zur Darstellung von Zahlen beschränkt sind.


2

Ich denke, das ist eine wirklich gute Frage.

Was ich mir vorstellen kann ist:

  • VRAM ist begrenzter als der allgemeine RAM-Speicher. Beim GPU-Rendering ist jede Textur ein größeres Problem. Sie können im RAM durchschnittlich 4- bis 8-mal mehr Daten speichern als im VRAM. In diesem Szenario wird natürlich davon ausgegangen, dass es kein System gibt, das für das Freigeben / Verschieben nicht verwendeter / erforderlicher Texturen von / zu RAM / VRAM verantwortlich ist

  • In Bezug auf Multithreading ist es viel einfacher, wenn Sie mit dem Software-Rendering arbeiten - es ist nicht erforderlich, Kontexte gemeinsam zu nutzen

  • Wenn Sie 2D-Grafiken erstellen - normalerweise setzen die meisten Frameworks die Implementierung der Dirty Rectangles-Evaluierung fort -, löst dies viele Leistungsprobleme.

Dennoch bietet das Rendern mit OGL / D3D viel mehr Leistung und Möglichkeiten. Shader können wirklich erstaunliche Dinge tun, die mit Software-Rendering fast unmöglich sind.

Aber Techniken wie das Blitten oder das Verwenden von Farbschlüsseln haben ihr eigenes Gefühl, als wären Sie auf der Basisebene, dem Ursprung der Computergrafikwelt.

Ich denke, es ist zumindest gut, über das Software-Rendering Bescheid zu wissen. Es ist wirklich eine sehr aufregende Welt, ganz zu schweigen davon, dass sie die Wurzel all dessen ist, was wir heute sehen.


1
Sie benötigen keine Hardwarebeschleunigung, um Shader auszuführen. OS X 10.9 wird mit einer vollständigen Software-Implementierung von GL4 ausgeliefert. Die Leistung ist unglaublich gut für das Rendern von Software. Es ist nicht so weit fortgeschritten, dass Sie anspruchsvolle Spiele realistisch spielen können (um fair zu sein, auch die GPUs, mit denen Apple seine Produkte ausliefert), aber es ist weitaus praktischer als die Verwendung eines Direct3D-Referenzrasters. Es ist tatsächlich etwas, mit dem Sie funktionierende Software ausliefern können.
Andon M. Coleman

@ AndonM.Coleman Nicht jeder verwendet Apple und ich kenne keine Software-Renderer, die Shader unter Linux und Windows unterstützen.
Luke1985

1
Das war aber nicht mein Punkt. Es gibt Implementierungen von OpenGL, bei denen voll funktionsfähige Shader vollständig auf der CPU ausgeführt werden. Die Tatsache, dass Apple der Entwickler ist, spielt keine Rolle. Ihre Antwort erweckte den Eindruck, dass Sie dachten, Sie müssten eine GPU haben, um moderne Shader in OpenGL auszuführen.
Andon M. Coleman

@ AndonM.Coleman Und das ist fast richtig, denn in 80% der Fälle muss man.
Luke1985

2
Shader können einfach per Software-Rendering implementiert werden, sogar Tomb Raider 1 und Quake 1 hatten Pixel-Shader. Es ist genau das Gegenteil, eine CPU gibt Ihnen viel mehr Kontrolle als die begrenzende Vertex / Fragment-Pipeline der aktuellen GPUs.
Lama12345
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.