Die zunehmenden Flexibilität und Leistung von Grafikhardware macht es möglich über die Implementierung alternativer Renderingalgorithmen nachzudenken. Ein Kandidat hierfür ist Reyes, ein Algorithmus bei dem Oberflächen in Polygone kleiner als Pixel unterteilt werden, bevor sie rasterisiert werden. Das erlaubt die artefaktfreie Darstellung gekrümmter Oberflächen mit Displacement Mapping. Obwohl sich die Komponenten der Reyes-Pipeline generell gut in das datenparallele Model aktueller GPUs integrieren, gibt es einige Faktoren die die Implementierung eines praxistauglichen Reyes-Renderers auf der GPU verhindert haben. Ein solcher Grund ist, dass die Rasterisierungshardware von aktuellen GPUs nicht darauf ausgelegt ist, sehr kleine Polygone effizient zu rendern. Ein weiteres Problem stellt die Bound-and-Split Phase von Reyes dar, in der Oberflächen so lange rekursiv geteilt werden, bis sie kleiner als eine vorgegebene Größe auf dem Bildschirm haben. Zwar wurde dieser Schritt bereits erfolgreich parallelisiert, indem man die tiefenorientierte Traversierung der Oberflächen in eine breitenorientierte umwandelt, aber der resultierende Algorithmus ist insofern limitiert, dass sein Speicherverbrauch schwer vorherzusehen ist. Schlimmstenfalls kann mehr Speicher benötigt werden als zur Verfügung steht. Diese Diplomarbeit präsentiert einen GPU-basierten Reyes-Renderer, der in OpenCL programmiert wurde. Sämtliche Oberflächenunterteilung, Shading und Rasterisierung ist als GPUKernel implementiert. Zur Rasterisierung der Mikropolygone wird ein GPU-basierter Softwarerasterizer verwendet, der auf diesen Anwendungsfall spezialisiert ist. Allem voran präsentieren wir einen parallelen Unterteilungsalgorithmus, der es möglich macht, den maximalen Speicherverbrauch zu kontrollieren, indem man die Anzahl an parallel bearbeiteten Oberflächen limitiert. Das erlaubt es uns, Szenen darzustellen die einen unannehmbaren Speicherverbrauch mit rein breitenorientierter Unterteilung hätten.
de
Recent advances in graphics hardware have made it feasible to consider implementing alternative rendering algorithms on the GPU. One such candidate would be Reyes, an algorithm that subdivides surfaces into sub-pixel sized polygons called micropolygons before rasterizing them. This allows rendering of curved and displaced surfaces without any visible geometric artifacts. While the overall Reyes pipeline seems to map well to the data-parallel programming mode of GPUs, implementing a Reyes renderer on the GPU has so far been hampered by several factors. One of those reasons is that current rendering hardware is not designed for sub-pixel sized polygons. Another problematic component of Reyes is its bound-and-split phase, where surface patches are recursively split until they are smaller than a given screen-space bound. While this operation has been successfully parallelized for execution on the GPU using a breadth-first traversal, the resulting implementations are limited by their unpredictable worst-case memory consumption and high global memory bandwidth utilization. This thesis presents a full Reyes renderer implemented in the GPU programming language and platform OpenCL. All surface tessellation, shading, and rasterization is performed as a kernel on the GPU. A software rasterizer specialized for drawing micropolygons is used for rasterization. Our major contribution is a data-parallel implementation of bound-and-split that allows limiting the amount of necessary memory by controlling the number of assigned worker threads. This allows us to render scenes that would require too much memory to be processed by the breadth-first method.
en
Additional information:
Abweichender Titel laut Übersetzung der Verfasserin/des Verfassers Zsfassung in dt. Sprache