In diesem kurzen Tutorial zeige ich euch die Texture Cache-Funktion für Cycles, die mit Blender 5.2 eingeführt wurde. Sie sorgt für eine bessere Speicherverwaltung während des Renderns und ermöglicht es, Szenen mit einer großen Anzahl von Texturen zu rendern.
Die Videoversion dieses Tutorials ist derzeit in dieser Sprache nicht verfügbar. Unten kannst du dir die englische Version mit Untertiteln ansehen; unter dem Video findest du die ins Deutsche übersetzte Transkription.
Videotranskript
Hallo zusammen! In diesem kurzen Tutorial zeige ich euch die Texture Cache-Funktion für Cycles, die mit Blender 5.2 eingeführt wurde. Sie sorgt für eine bessere Speicherverwaltung während des Renderns und ermöglicht es, Szenen mit einer großen Anzahl von Texturen zu rendern.

Um das anhand eines Praxisbeispiels zu zeigen, verwende ich die vollständige Kindergarten-Szene, die ich erstellt und bereits in anderen Tutorials verwendet habe. In diesen Videos musste ich immer nur den Teil der Umgebung behalten, den ich gerade brauchte, zum Beispiel ein Klassenzimmer, das Theater oder den Spielplatz, weil das vollständige Projekt einschließlich aller Texturen derzeit 4 GB Speicherplatz belegt. Blender konnte nicht einmal eine einfache Aufnahme rendern, nicht einmal von einem Bereich mit vergleichsweise wenigen Texturen wie dem Schulspielplatz. Stattdessen wurde die Fehlermeldung "System is out of GPU and shared host memory." angezeigt. Sehen wir uns an, wie wir dieses Problem mit Texture Cache lösen können.


Bevor wir weitermachen, möchte ich euch daran erinnern, dass es, wie bei vielen meiner anderen Videos, auf meiner Website eine schriftliche Version dieses Tutorials sowie zusätzliche Ressourcen gibt, darunter auch Übersetzungen in andere Sprachen. Den Link findet ihr in der Videobeschreibung.
Die Option Texture Cache befindet sich im Render > Performance-Bereich des Properties Editor und war auf meinem System standardmäßig aktiviert. Laut Dokumentation erstellt Blender, wenn diese Option aktiviert ist, optimierte Versionen eurer Bilder im TX-Format, speichert sie auf der Festplatte und verwendet sie während des Renderns.

Der Speicherort dieser Bilder kann im Abschnitt Data Render Texture Cache auf der Registerkarte File Paths des Preferences Editor festgelegt werden. Wenn ihr dieses Feld leer lasst, werden die TX-Texturen in einem Unterordner innerhalb des Verzeichnisses gespeichert, das die ursprünglichen Texturen enthält.

Im Moment sind die Bilder jedoch im Blender-Projekt eingebettet und liegen nicht als separate Dateien auf der Festplatte vor. Deshalb kann Texture Cache keine Bilder finden, die in das TX-Format konvertiert werden können. Blender zeigt daher die Meldung "No image files found to generate TX files." an.
Als Erstes müssen wir die Texturen aus der Blender-Datei extrahieren und separat auf der Festplatte speichern. Ich mache das mit Unpack Resources, das sich unter File > External Data befindet, nachdem ich im selben Menü Automatically Pack Resources deaktiviert habe. Ich wähle dabei die Option "Write files to current directory, overwrite existing files", wodurch neben der Blender-Datei des Projekts ein Ordner namens Textures erstellt wird. Blender informiert mich außerdem darüber, dass das Projekt 745 Dateien enthält. Die ursprünglichen Texturbilder werden extrahiert und im neuen Ordner gespeichert. Damit diese Änderungen im Projekt übernommen werden, muss ich die Blender-Datei anschließend speichern. Nach dem Speichern ist die Dateigröße nur noch halb so groß, weil etwa 2 GB der ursprünglichen Größe aus den eingebetteten Texturen bestanden.



An dieser Stelle sollte ich erwähnen, dass Blender in meinem speziellen Fall das Projekt jetzt sogar ohne Texture Cache rendern kann, weil bereits das Auslagern der Texturen auf die Festplatte ausreicht, um die Szene wieder renderbar zu machen. Das ist der erste Teil des Titels dieses Tutorials: Mit Unpack lassen sich Out of Memory-Probleme beheben, die durch Texturen verursacht werden. Manche Projekte stoßen jedoch selbst nach dieser und anderen Optimierungstechniken weiterhin an ihre Speichergrenzen. Sehen wir uns deshalb an, wie Texture Cache in solchen Fällen helfen kann.

Nachdem die Texturen nun auf der Festplatte gespeichert sind, klicke ich im Abschnitt Texture Cache auf Generate, damit Blender die TX-Dateien erstellt. Diese Dateien werden schnell erzeugt und in einem Unterordner innerhalb des Textures-Verzeichnisses gespeichert.


Wenn ich jetzt den Rendervorgang starte, lädt Blender die Texturen aus dem TX-Ordner. In meinem Fall war das Rendern tatsächlich schneller als zuvor, obwohl das auch an anderen Optimierungen liegen könnte, zum Beispiel an Persistent Data im Abschnitt Performance. Texture Cache wurde in erster Linie entwickelt, um den Speicherverbrauch zu reduzieren. Wie stark sich die Funktion auf die Renderzeit auswirkt, kann je nach Szene, Hardware und weiteren Render-Einstellungen erheblich variieren.

An dieser Stelle könnte man einwenden, dass wir zunächst einige Sekunden damit verbracht haben, die TX-Texturen des Projekts zu erzeugen, und dass diese Zeit eigentlich zur gesamten Renderzeit hinzugerechnet werden müsste. Das ist ein berechtigter Einwand. Allerdings sollte man bedenken, dass das Rendern ohne Texture Cache in manchen Fällen gar nicht erst startet. Außerdem müssen die TX-Texturen nur ein einziges Mal erzeugt werden. Danach bleiben sie auf der Festplatte gespeichert und werden bei zukünftigen Renderings wiederverwendet, auch beim Rendern anderer Bereiche desselben Projekts. Auf dem Bildschirm habe ich zu einem anderen Teil der Szene gewechselt, einen Render gestartet, und dieser war nach 51 Sekunden abgeschlossen. Für mich ist das eine enorme Verbesserung.
Der Nachteil dieses Workflows ist der zusätzliche Speicherplatz, den die TX-Texturen benötigen. In diesem Beispiel belegen sie 3,21 GB, während die ursprünglichen Texturen knapp unter 2 GB liegen, und beide Dateisätze müssen aufbewahrt werden. Genau dieser Kompromiss ist von den Entwicklern vorgesehen: geringerer Speicherverbrauch während des Renderns im Austausch gegen mehr benötigten Festplattenspeicher. Für mich ist das vollkommen in Ordnung, wenn ich dadurch die gesamte Szene zuverlässig und in deutlich kürzerer Zeit rendern kann.

Das war's für dieses Tutorial! Wenn es euch geholfen hat, lasst gerne ein Like da und abonniert den Kanal. Bis zum nächsten Mal!