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 ...