Wörister, M. (2012). A caching system for a dependency-aware scene graph [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://resolver.obvsg.at/urn:nbn:at:at-ubtuw:1-52935
scene graph; caching; rendering; optimization; scene graph caching
en
Abstract:
In grafischen Anwendungen werden 3-dimensionale Szenen häufig als sogenannte Szenengraphen dargestellt. Die Knoten in einem solchen Szenengraphen repräsentieren dabei geometrische Formen, deren räumliche Transformationen, Oberflächeneigenschaften und andere, möglicherweise anwendungsspezifische, Aspekte. Szenengraphensysteme können sehr flexibel und erweiterbar gestaltet werden, indem z.B. die Definition eigener Knoten- und Traversierungstypen erlaubt wird. Dieses Flexibilität bringt aber meist aufwendigere Laufzeitlogik mit sich, was besonders in CPU-beschränkten Applikationen zu einer niedrigeren Ausführungsgeschwindigkeit führt.<br />Um dieses Problem zu verringern, schlägt diese Arbeit ein Caching System für Szenengraphen vor. Dieses System legt automatisch so genannte render caches für ausgewählte Subgraphen an. Ein render cache enthält dabei einen sogenannten instruction stream, der es erlaubt den gecachten Subgraph effizienter zu rendern als dies mit einer herkömmlichen Traversierung der Fall ist. Zusätzlich wurde eine Reihe von Optimierungen für render caches implementiert, die eine weitere Leistungssteigerung ermöglichen.<br />Damit render caches nicht bei jeder Szenengraphänderung komplett neu erstellt werden müssen, wurde ein sogenanntes dependency system entwickelt. Dieses System erlaubt es, bestimmte Änderungen in der Szene zu beschreiben und automatisiert darauf zu reagieren. Als Folge können render caches inkrementell auf dem neuesten Stand gehalten werden, was eine wesentliche Effizienzsteigerung bedeutet.<br />Die tatsächlichen Leistungscharakteristika des Caching Systems wurden in einer Reihe synthetischer Testszenen in verschiedenen Konfigurationen getestet. Diese Tests haben gezeigt, dass das Caching System in Szenen mit hoher struktureller Komplexität (d.h. hohe Anzahl an Geometrieknoten und/oder tiefe Szenengraphhierarchie) und moderater Anzahl von Dreiecken pro Geometrie den größten Nutzen hat.<br />
de
Scene graphs are a common way of representing 3-dimensional scenes for graphical applications. A scene is represented as a hierarchical structure of nodes which represent 3D geometry, spatial transformations, surface properties, and other-possibly application specific-aspects. Scene graph systems can be designed to be very generic and flexible, e.g. by allowing users to implement custom node types and traversals or by providing facilities to dynamically create subgraphs during a traversal. This flexibility comes at the cost of increased time spent in pure traversal logic. Especially for CPU-bound applications this causes a performance drop.<br />This thesis proposes a scene graph caching system that automatically creates an alternative representation of selected subgraphs. This alternative representation poses a render cache in the form of a so-called instruction stream which allows to render the cached subgraph at lower CPU cost and thus more quickly than with a regular render traversal.<br />In order to be able to update render caches incrementally in reaction to certain scene graph changes, a dependency system was developed. This system provides a model for describing and tracking changes in the scene graph and enables the scene graph caching system to update only those parts of the render cache that needs to be updated.<br />The actual performance characteristics of the scene graph caching system were investigated using a number of synthetic test scenes in different configurations. These tests showed that the caching system is most useful in scenes with a high structural complexity (high geometry count and/or deep scene graph hierarchies) and moderate primitive count per geometry.<br />