Ich habe gerade ein Video über das gesehen, was die Verlage den "nächsten großen Schritt nach der Erfindung von 3D" nennen. Laut der Person, die darin spricht, verwenden sie eine große Anzahl von Atomen, die anstelle von Polygonen zu Wolken gruppiert sind, um eine unbegrenzte Detailstufe zu erreichen .
Sie versuchten ihr Bestes, um das Video für Personen ohne Kenntnisse über Rendering-Techniken verständlich zu machen, und ließen daher oder für andere Zwecke alle Details der Funktionsweise ihrer Engine aus.
Der Detaillierungsgrad in ihrem Video sieht für mich ziemlich beeindruckend aus.
- Wie ist es möglich, Szenen mit benutzerdefinierten Atomen anstelle von Polygonen auf der aktuellen Hardware zu rendern? (Geschwindigkeit, Speicher)
- Wenn dies real ist, warum hat bisher noch niemand darüber nachgedacht?
Ich bin als OpenGL-Entwickler wirklich verblüfft und würde gerne hören, was Experten zu sagen haben. Daher möchte ich auch nicht, dass dies wie eine billige Anzeige aussieht, und werde den Link zum Video nur auf Anfrage in den Kommentaren einfügen.
Antworten:
Das ist einfach. Mit einem Octtree teilen Sie die Welt einfach in immer kleinere Teile, bis Sie den erforderlichen Detaillierungsgrad erreicht haben. Dies kann beispielsweise die Größe eines Sandkorns sein. Denken Sie, Minecraft ist extrem.
Was rendern Sie dann? Wenn das Detail klein genug ist, können Sie Blöcke rendern - die Blattknoten des Oktabaums. Andere Optionen sind Kugeln oder sogar geometrische Grundelemente. Eine Farbe und eine Normale können an jedem Knoten gespeichert werden, und für eine reduzierte LOD können zusammengesetzte Informationen auf höheren Ebenen des Baums gespeichert werden.
Wie können Sie so viele Daten verwalten? Wenn es sich bei dem Baum um eine tatsächliche Datenstruktur handelt, können mehrere Zeiger auf dieselben Unterbäume verweisen, ähnlich wie bei der Wiederverwendung einer Textur, sie enthält jedoch auch Geometrie. Der Trick besteht darin, auf allen Ebenen so viel wie möglich wiederzuverwenden. Wenn Sie beispielsweise 4 Oktanten in tetraedrischer Anordnung auf allen Ebenen mit demselben untergeordneten Knoten verbinden, können Sie ein sehr großes 3D-Sierra-Pinsky-Fraktal mit fast keinem Speicher erstellen. Die reale Szene wird natürlich viel größer sein.
Das Problem ist, dass es nur für statische Geometrie funktioniert, da eine echte Animation die Manipulation all dieser Daten in jedem Frame erfordern würde. Das Rendern ist jedoch insbesondere mit variabler LOD kein Problem.
Wie kann man so etwas rendern? Ich bin ein großer Fan von Raytracing und es funktioniert mit und ohne GPU recht gut.
All dies ist natürlich Spekulation. Ich habe keine spezifischen Informationen zu dem Fall, über den Sie sprechen. Und nun zu etwas Ähnlichem, aber anderem:
Eine riesige Menge an gerenderten Daten
BEARBEITEN Und hier ist eine, die ich gemacht habe, aber ich habe die Normalen absichtlich geändert, um die Kästchen deutlicher zu machen:
Stanford Hase in Voxeln
Diese Bildrate lag bei einem Single-Core-IIRC. Durch Verdoppeln der Tiefe des Baums wird die Bildrate im Allgemeinen halbiert, während die Verwendung mehrerer Kerne gut skaliert. Normalerweise behalte ich Primitive (Dreiecke und dergleichen) in meinem Okttree, aber für das Grinsen hatte ich beschlossen, in diesem Fall die Blattknoten des Baumes selbst zu rendern. Eine bessere Leistung kann erzielt werden, wenn Sie natürlich eine bestimmte Methode optimieren.
Irgendwo auf ompf gibt es ein Auto mit Voxeln, das wirklich fantastisch ist - außer dass es statisch ist. Kann es jetzt nicht finden ...
quelle
Beim Anschauen des Videos deutet nichts darauf hin, dass spezielle Hardware verwendet wurde. In der Tat wird angegeben, dass dies in Software mit 20 fps läuft, es sei denn, ich habe etwas verpasst.
Sie werden vielleicht überrascht sein zu wissen, dass das Echtzeit-Rendering mit einer Vielzahl von Technologien wie Raytracing, Voxel-Rendering und Oberflächensplattern eine ganze Reihe von Entwicklungen erfahren hat. Es ist jedoch schwer zu sagen, was in diesem Fall verwendet wurde. (Wenn Sie interessiert sind, besuchen Sie http://igad2.nhtv.nl/ompf2/ für ein großartiges Echtzeit-Raytracing-Forum oder http://www.atomontage.com/ für eine interessante Voxel-Engine. Google "Surface Splatting" für einige großartige Links zu diesem Thema)
Wenn Sie sich den Film ansehen, werden Sie feststellen, dass die gesamte Geometrie statisch ist und obwohl sie detailliert ist, gibt es ziemlich viele Objektwiederholungen, die auf eine Instanz hinweisen könnten.
Und es wird höchstwahrscheinlich eine Menge aggressives Keulen, Detaillierungsgrade und Raumaufteilung geben.
Wenn man die visuelle Qualität betrachtet (nicht die geometrische Komplexität), sieht es nicht allzu beeindruckend aus. Tatsächlich sieht es ziemlich flach aus. Die angezeigten Schatten werden möglicherweise in die Daten eingebrannt und nicht in Echtzeit ausgewertet.
Ich würde gerne eine Demo mit animierter Geometrie und dynamischer Beleuchtung sehen.
Wenn ich mich nicht völlig irre (und es wäre nicht das erste Mal, dass ich es bin), würde meine erste Antwort eine (vielleicht sehr clevere) Verwendung vorhandener Technologie vorschlagen, die möglicherweise optimiert und erweitert wurde, um diese Demo zu erstellen. Es ist jedoch ein ganz anderes Ballspiel, es zu einer echten Spiel-Engine zu machen, mit all den anderen Aufgaben außer dem Rendern der statischen Geometrie, die dies beinhaltet.
Natürlich ist das alles reine Spekulation (was mir sehr viel Spaß macht). Ich sage nur, dass dies nicht unbedingt eine Fälschung ist (tatsächlich glaube ich nicht, dass es eine ist und ich bin immer noch beeindruckt), aber wahrscheinlich nicht so bahnbrechend, wie sie es auch klingen lassen.
quelle
Diese Atome sind für die aktuelle Grafikhardware eigentlich nicht so magisch / speziell / fremd. Es ist nur eine Art Punktwolke oder voxelbasiertes Rendering. Anstelle von Dreiecken rendern sie also Punkte oder Kästchen, was mit der aktuellen Hardware nicht unerreichbar ist.
Es wurde und wird bereits gemacht und ist nicht die Super-Erfindung, aber vielleicht haben sie einen speicher- und zeiteffizienteren Weg gefunden, dies zu tun. Obwohl es sehr interessant aussieht und klingt, sollten Sie dieses Video mit einem Körnchen Salz aufnehmen. Das Rendern von 100.000 Punkten anstelle eines vollständig strukturierten Polygons (das auf dem Bildschirm bereits einige Pixel einnimmt) verbessert Ihre Grafikqualität nicht um den Faktor 100.000.
Übrigens, ich habe gehört, dass ID-Software auch GPU-beschleunigtes Voxel-Rendering ausprobiert, aber ich habe ein bisschen mehr Vertrauen in John Carmack als in den Sprecher dieses Videos :)
quelle
Das war ein Investitionsbetrug.
Die Idee ist auf aktueller nicht dedizierter Hardware nicht realisierbar. Die Anzahl der Punkte, die Sie benötigen würden, um Lücken zu vermeiden, wenn Sie etwas aus der Nähe betrachten, liegt weit über der Anzahl der Punkte, die Sie im heutigen RAM abfeuern könnten. Selbst wenn ich keine Datenstrukturen oder Suchalgorithmen kenne, die in der Nähe der in der Demo gezeigten Leistung liegen würden. Und selbst wenn es irgendwie möglich wäre, diese Punkte in Echtzeit zu durchsuchen, würden Cache-Fehler und Speicherbandbreite sicherstellen, dass dies nicht möglich ist.
Ich bezweifle nicht, dass solche Bilder nicht in Echtzeit erzielt werden können, nur nicht mit der vorgestellten Methode. Ich vermute, dass die Demos mit Voxeln gerendert wurden, die seit Jahrzehnten verwendet werden und bereits in Echtzeit ziemlich hohe Details erzeugen können: http://www.youtube.com/watch?v=BKEfxM6girI http://www.youtube .com / watch? v = VpEpAFGplnI
quelle
Nach allem, was ich gesehen habe, scheinen sie parametrische Formen anstelle einfacher Polygonformen zu verwenden - mit anderen Worten, sie ändern die Geometrie entsprechend der erforderlichen Auflösung.
Dies kann mithilfe von Techniken wie Geometrie-Shadern und Perlin-Rauschen erfolgen.
Eine andere Möglichkeit ist die Verwendung von GPGPU (z. B. CUDA) zum Rendern von Szenen einschließlich Nicht-Polygonen und zum Durchführen von Raytracing (für Z-Ordnung und Schatten). Eine andere Möglichkeit ist eine benutzerdefinierte Hardware, die Formeln anstelle von Dreiecken rendert
quelle
Ich denke an all ihre Behauptungen, die Komprimierung des Gedächtnisses scheint übertrieben, ich könnte verstehen, dass die RLE-Komprimierung einen großen Einfluss hat. Letztendlich denke ich, dass dieses System viele "Vor-", aber viele "Nachteile" haben wird, ähnlich wie Raytracing oder Iso-Oberflächen-Rendering mit Marschwürfeln.
Soweit es um "Billionen" von Atomen geht; Ich glaube nicht, dass sie das sagen. Stattdessen suchen sie nach W * H-Atomen, dh einem Atom pro Pixel auf dem Bildschirm. Dies könnte auf viele langsame und schwierige Arten erreicht werden. Einige Möglichkeiten, dies zu beschleunigen, sind KD-Bäume und BSP-Bäume, Oktrees usw. Am Ende werden jedoch viele Daten sortiert, und die Tatsache, dass ihre Demo anscheinend 1440 x 720 Atome mehr als einmal pro Frame sortiert, wegen der Schatten / Reflexionen in ihrer Demo ist erstaunlich. Also ein dickes Lob!
quelle
Die Art und Weise, wie es funktioniert, ist viel einfacher als Sie vielleicht denken, anstatt vorab ein Spiellevel vorzuladen, lädt es nur einen einzelnen Bildschirm, ein oder ein paar Atome pro Pixel auf Ihren Bildschirm, nichts weiter, das Spiel / die Engine sagt dann voraus, was das ist Die nächsten Frames sind und das ist das einzige, was geladen wird. Nur der Teil des sichtbaren Objekts wird gerendert, nicht das gesamte Objekt selbst. PROS: So viel Definition und Auflösung Ihr Monitor verarbeiten kann, geringer Speicherbedarf CONS: Die Leserate von der Festplatte ist ziemlich hoch und kann zu einer niedrigen Bildrate führen.
quelle