it-swarm.com.de

Warum verwenden wir CPUs für Ray Tracing anstelle von GPUs?

Nach einigen Recherchen zu Rasterisierung und Raytracing. Ich habe festgestellt, dass im Internet nicht viele Informationen zur Funktionsweise von CPUs für Raytracing verfügbar sind. Ich stieß auf einen Artikel über Pixar und wie Cars 2 auf der CPU vorgerendert wurde. Dies dauerte 11,5 Stunden pro Bild. Hätte eine GPU dies nicht bei gleicher Bildqualität schneller gemacht? http://gizmodo.com/5813587/12500-cpu-cores-were-required-to-render-cars-2https://www.engadget.com/2014/ 10/18/disney-big-hero-6 /http://www.firstshowing.net/2009/michael-bay-presents-transformers-2-facts-and-figures/ Prost, Sam

34
oodle600

Ich bin einer der Rendering-Software-Architekten in einem großen VFX- und Animated Feature Studio mit einem proprietären Renderer (nicht Pixar, obwohl ich vor langer, langer Zeit auch dort der Rendering-Software-Architekt war).

Fast alle hochqualitativen Renderings für Filme (in allen großen Studios mit allen wichtigen Renderern) sind ausschließlich CPU-fähig. Dafür gibt es eine Reihe von Gründen. In keiner bestimmten Reihenfolge, einige der wirklich überzeugenden, um Ihnen den Geschmack der Themen zu geben:

  • GPUs arbeiten nur dann schnell, wenn sich alles im Speicher befindet. Die größten GPU-Karten haben, was, 12 GB oder so, und es muss alles halten. Nun, wir rendern routinemäßig Szenen mit einer Geometrie von 30 GB und einer Referenztextur von 1 TB oder mehr. Kann nicht in den GPU-Speicher geladen werden, es ist buchstäblich zwei Größenordnungen zu groß. GPUs sind also einfach nicht in der Lage, mit unseren größten (oder sogar durchschnittlichen) Szenen umzugehen. (Mit CPU-Renderern können wir jederzeit von der Festplatte ausblättern. GPUs können das nicht.)

  • Glauben Sie nicht dem Hype, Raytracing mit GPUs ist kein offensichtlicher Gewinn für die CPU. GPUs eignen sich hervorragend für eine sehr kohärente Arbeit (das Gleiche gilt für viele Daten gleichzeitig). Die Strahlverfolgung ist sehr inkohärent (jeder Strahl kann in eine andere Richtung verlaufen, verschiedene Objekte schneiden, verschiedene Materialien schattieren, auf verschiedene Texturen zugreifen), und daher beeinträchtigt dieses Zugriffsmuster die GPU-Leistung sehr stark. Erst vor kurzem konnte die GPU-Raytracing-Funktion mit dem besten CPU-basierten Raytracing-Code mithalten, und obwohl sie diesen übertroffen hat, reicht es nicht aus, den gesamten alten Code zu verwerfen und mit fehlerhaftem, fragilem Code für GPUs neu anzufangen . Und die größten und teuersten Szenen sind jene, in denen GPUs nur unwesentlich schneller sind. In den einfachen Szenen viel schneller zu sein, ist uns eigentlich nicht wichtig.

  • Wenn Sie in Ihrem CPU-basierten Renderer über 50 oder 100 Mannjahre produktionsgehärteten Code verfügen, müssen Sie ihn nur nicht wegwerfen und von vorne beginnen, um eine doppelte Geschwindigkeit zu erzielen. Der Aufwand für die Softwareentwicklung, die Stabilität usw. ist wichtiger und ein größerer Kostenfaktor.

  • Wenn Ihr Studio eine Investition in ein Rechenzentrum mit 20.000 CPU-Kernen hat, und dies alles in dem kleinsten, strom- und wärmeeffizientesten Formfaktor, den Sie können, ist dies auch eine Investition, die Sie nicht einfach wegwerfen. Das Ersetzen durch neue Computer mit erstklassigen GPUs erhöht die Kosten Ihrer Renderfarm erheblich. Sie sind größer und produzieren mehr Wärme, sodass sie möglicherweise nicht in Ihr Gebäude passen.

  • Amdahls Gesetz: Das eigentliche "Rendern" an sich ist nur eine Stufe bei der Erzeugung der Szenen, und GPUs helfen dabei nicht. Angenommen, es dauert 1 Stunde, um die Szene vollständig zu generieren und an den Renderer zu exportieren, und 9 Stunden, um sie "zu rendern", und von diesen 9 Stunden liest eine Stunde Textur, Volumen und andere Daten von der Festplatte. Von den insgesamt 10 Stunden, in denen der Benutzer das Rendern erlebt (Taste drücken, bis das endgültige Bild fertig ist), sind 8 Stunden potenziell mit GPUs verbunden. Selbst wenn die GPU für diesen Teil 10-mal so schnell war wie die CPU, sind es 10 Stunden bis 1 + 1 + 0,8 = fast 3 Stunden. Eine 10-fache GPU-Beschleunigung bedeutet also nur eine 3-fache tatsächliche Verstärkung. Wenn die GPU beim Raytracing 1.000.000-mal schneller als die CPU war, haben Sie immer noch 1 + 1 + winzig, was nur einer 5-fachen Geschwindigkeit entspricht.

Aber was ist anders an Spielen? Warum sind GPUs gut für Spiele, aber nicht für Filme?

Wenn Sie ein Spiel erstellen, denken Sie zunächst daran, dass es in Echtzeit gerendert werden muss. Das bedeutet, dass Ihre wichtigste Einschränkung die 60-Hz-Bildrate (oder was auch immer) ist und Sie Qualität oder Funktionen opfern, wenn dies erforderlich ist. Im Gegensatz dazu macht der unzerbrechliche Zwang bei Filmen den Regisseur und den VFX-Supervisor mit der Qualität und dem Aussehen, die er oder sie haben möchte, glücklich, und wie lange Sie brauchen, um das zu erreichen, ist (bis zu einem gewissen Grad) zweitrangig.

Außerdem rendern Sie mit einem Spiel Frame für Frame, live vor jedem Benutzer. Aber mit Film rendern Sie effektiv EINMAL, und was an die Kinos geliefert wird, ist eine Filmdatei - Kinogänger werden also nie wissen oder sich darum kümmern, ob Sie 10 Stunden pro Bild gebraucht haben, aber sie werden bemerken, wenn es nicht gut aussieht. Es gibt also wieder weniger Strafen für diese Renderer, die eine lange Zeit in Anspruch nehmen, solange sie fabelhaft aussehen.

Mit einem Spiel wissen Sie nicht wirklich, welche Frames Sie rendern werden, da der Spieler möglicherweise auf der ganzen Welt unterwegs ist und von fast überall aus sehen kann. Sie können und sollten nicht versuchen, alles perfekt zu machen, Sie möchten nur, dass es die ganze Zeit gut genug ist. Aber für einen Film sind die Aufnahmen alle handgefertigt! Es ist enorm viel Zeit erforderlich, um jede Aufnahme zu komponieren, zu animieren, zu beleuchten und zu komponieren, und dann müssen Sie sie nur einmal rendern. Denken Sie über die Wirtschaftlichkeit nach: Sobald 10 Kalendertage (und das Gehalt) für das Beleuchten und Zusammenstellen der richtigen Aufnahme aufgewendet wurden, ist der Vorteil des Renderns in einer Stunde (oder sogar einer Minute) im Vergleich zur Übernachtung recht gering und nicht mehr wert jedes Opfer an Qualität oder erreichbarer Komplexität des Bildes.

85
Larry Gritz