Ein Teil der Experience an der ich im Rahmen meines Jobs arbeite beinhaltet eine Sequence von einem 3D gerenderten Menschen. Dabei spricht man von der „3D Human Body Reconstruction (3DHBR)“ mit welcher uns das Faunhofer Heinrich Hertz Institute Menschen in 3D Film Material umwandelt. Dieses 3D Material erhalten wir als Mesh+Textur-Sequenzen. Pro aufgenommenen Frame erhalten wir ein Mesh und eine Textur.

Die aktuelle Wiedergabe in 3D Engines erfolgt aktuell über die Anzeige des Mesh und der Textur des Frames nach einander. Mit einfachen Werten wie einem Zeitfaktor und den Loop-Eigenschaften kann bestimmt werden, wie das Mesh wiedergegeben wird.

Als Teil meiner Aufgaben in dieser Woche galt es herauszufinden, wie man die Wiedergabe optimieren kann. Ich analysierte die aktuellen Plugins und den Workflow den sie dabei vorschlugen. Dabei wurden beim Start der Applikation pro Frame eine GameObject Komposition erstellt. Jeder Frame wurde bei seiner Wiedergabe kurz aktiviert und danach deaktiviert. Die Animation benutzte also den GameObjekt-Pool, in welchem Unity Intern die Objekte im Spielfeld regelt. Die erste Frage die mir bei der Sichtung aufkam, war die Frage, ob der Konstrukt und der dadurch entstehende Overhead beim Start und der Wiedergabe wirklich gebraucht wird.

Ich entschied mich daher eine Skript Lösung zu schreiben, welche statt der GameObjects nur einen MeshRender nutzt und desen Mesh und Textur während der Animation neusetzt. Dadurch entfallen die GameObjects, welche durch Unity verwaltet werden müssen und Änderungen und Anpassungen können zentral vorgenommen werden. Somit wurde der Overhead während der Wiedergabe minimiert.

Da ich auch das Laden der Meshes und Texturen zur Laufzeit optimieren wollte, entschied ich mich deren Referenzen bereits im Unity-Editor mittels einen Editor-Skripts zu setzen, anhand dessen konnten die Daten bereits beim Laden der Szene volkommen serialisiert geladen werden. Der Importer benötigt, nur einen Ordner aus dem er die bereitgestellten Frames (Mesh+Textur) ausließt und diese im Projekt referenziert.

Mit diesen Optimierungen konnte die Ladezeit und der Auswirkung der Wiedergabe auf die Laufzeit verringert werden.

Für das aktuelle Projekt wird diese Optimierung ausreichen, im weiteren Verlauf wäre es aber noch interessant, die Anzahl der Mesh-Daten zu reduzieren, in dem man statt der absoluten Darstellung eines Meshs nur dessen Veränderung in die Laufzeit einspeißt, was uns wieder näher an die Art und Weise heranbringt, wie herkömmliche Animationen im 3D Modelling Bereich gehandhabt werden.

Anbei noch der Link zur aktuellen Arbeit des Fraunhofer Heinrich Hertz Institutes über volomenetrischen Film: https://www.hhi.fraunhofer.de/en/press-media/news/news-archive/2017/2017/fraunhofer-hhi-and-ufa-present-germanys-first-volumetric-film-test-production-at-nab-in-las-vegas.html