Wie funktioniert Megatexture?

21

Ich habe darüber nachgedacht, eine kleine Engine zu entwickeln, um nicht nur kleine experimentelle Spiele zu entwickeln, sondern auch als Basis zum Testen verschiedener Rendering-Techniken und ähnlicher Dinge zu dienen. Im Moment habe ich viel darüber nachgedacht, wie man mit Texturen umgeht und bin über Megatexturen gestolpert, aber das ist etwas rätselhaft. Es wird viel darüber geredet, dass es besser ist als der herkömmliche Ansatz, ein paar Texturen zu haben und sie nach Bedarf zu laden. Aber wie vermeidet Megatexture dies? Stücke davon, anstatt jede Textur einzeln zu laden, aber wie bietet das eine bessere Leistung, und ist das nicht nur eine andere Form der Bearbeitung?

Wie können wir eine solche Textur in einem Shader abtasten, einen Teil davon in den Speicher streamen und dann daran arbeiten? Ich habe die neuesten Videos von Rage gesehen und die Textur sieht toll aus, aber ist das nur das Ergebnis großartiger Künstler oder kommt die Technik ins Spiel?

Zusammenfassend lässt sich sagen, wie es funktioniert, warum es großartig ist und wie ich etwas Ähnliches tun könnte.

Daemoniorum
quelle

Antworten:

15

Die Grundidee von Mega-Texturen ist die Verwendung eines Texturatlas, in dem Sie alle Ihre verschiedenen Texturen in eine große packen und mit UV-Strahlen in dieses Bild indexieren. Gute Heuristiken sind erforderlich, um zu wissen, welchen Teil der Textur Sie von der Festplatte einlesen müssen, je nachdem, was Sie auf dem Bildschirm sehen. Der Vorteil ist, dass Sie in der gesamten Spielwelt völlig einzigartige Texturen haben und nur die sichtbaren Daten im RAM behalten können. Ein gutes Streaming- und Caching-System ist erforderlich, um dies erschwinglich zu machen.

Ich empfehle, das Material auf dieser Seite durchzulesen, um detailliertere Informationen zu einem Ansatz zu erhalten: http://silverspaceship.com/src/svt/

Flawe
quelle
4

Überprüfen Sie die Clip-Zuordnung für die bereits vorhandene SGI-Hardwareimplementierung.

In jüngerer Zeit wird Megatexture als Pr-Name für Sparse Virtual Texturing (SVT) verwendet.

SVT rendert eine Kameraansicht mit kleiner Auflösung und merkt sich, welche Textur und Mipmap benötigt wird. Dann gibt eine CPU-Routine Ladevorgänge an das Plattensystem aus, um diesen Textur- / MIP-Block in den Speicher zu laden (falls nicht im Speicher), und dann wird der geladene Texturblock in einen Abschnitt eines großen Texturatlas gelegt (normalerweise in Blöcken von beispielsweise 128 x 128).

Wenn Textur-Chunks eingelesen werden, wird eine Umleitungstextur (eine virtuelle Seitenzuordnung) aktualisiert, die die erforderlichen Texturen eines Modells auf den bestimmten Teil der großen Textur umleitet, in dem sie tatsächlich gespeichert ist.

DeanoC
quelle
Das erklärt einiges. Ich habe mich gefragt, ob es nur Streaming gibt, wie sie es geschafft haben, Brocken dieser massiven Textur entweder auf einer Festplatte oder auf einer Festplatte zu streamen, die schnell genug sind, um von Nutzen zu sein. Außerdem kann ich jetzt sehen, warum es speichereffizienter ist als herkömmliche Methoden. Ich schaue mich nach weiteren Details zu SVT um (Flawes Link sieht nach einem guten Ausgangspunkt dafür aus)
Daemoniorum
1

Sie können sich Megatexture als eine Art "Streaming" -Textur vorstellen. Ein massives, vollständig detailliertes Texturbild (einfach ausgedrückt), das als Abschnitte davon eingelesen wird, muss angezeigt werden. Ich bin mir sicher, dass noch viel mehr dahinter steckt, wie zum Beispiel LOD / Mipmapping, Laden und Ressourcenmanagement.

Wikipedia hat einen Artikel darüber.

Nick Bedford
quelle
2
Ich habe den Artikel schon einmal gelesen, aber es geht ein wenig um Details. Es ist ein wenig schwierig, genaue Details zu dieser Technik zu bekommen. Ich wünschte, ich hätte ein Papier daraus gemacht ...
Daemoniorum