Designing a modern rendering engine

Matthias Bauchinger · reposiTUm (TU Wien) · 2007

The development of real-time rendering applications has become one of the most difficult software engineering areas due to the number and complexity of the needed techniques and algorithms involved.These software projects have in common that they need to structure the data in the main memory, process it and send it to the graphics device for rendering in an efficient way.These recurring and complex algorithms are provided by so called rendering engines to allow faster development of real-time rendering applications.This thesis describes the concepts and design decisions which form the basis for the development of the rendering engine presented in this document.Detailed information is provided on the interface to the graphics device, a novel effect framework and the implemented graph structures allowing efficient data traversal.iii Kurzfassung Die Entwicklung von real-time rendering Programmen wurde durch die Anzahl und Komplexität der benötigten Techniken und Algorithmen zu einer der schwierigsten Software-Engineering Gebiete.Diese Software-Projekte haben gemein, dass sie die darzustellenden Daten strukturiert im Hauptspeicher anordnen , für den Rendering-Prozess effizient abarbeiten und an die Grafikkarte weiterleiten müssen.Um diese wiederkehrenden, komplexen Algorithmen nicht mit jedem Projekt neu entwickeln zu müssen, werden sogenannte Rendering Engines verwendet, die genau diese Aufgaben übernehmen.In dieser Diplomarbeit werden die Konzepte und Designentscheidungen beschrieben, die der speziell für diese Arbeit entwickelten Rendering Engine zugrunde liegen.Diese Arbeit befasst sich detailliert mit der Schnittstelle zur Grafikkarte, einem neuartigen effect framework und den implementierten Graphenstrukturen um die Daten effizient zu traversieren. Graphics Software FrameworksSince programming graphics applications has become a very complex task, and often the same code is needed over and over again, graphics software frameworks are available to support the developers.These frameworks (also called rendering engines) provide wrappers around the graphics APIs and often needed functionality to allow faster development of graphics applications.Thus, their main task is to support the developers of graphics programs.Common provided features of rendering engines are as follows:• Loading and rendering of 3D models.• Loading and manipulation of different kind of image formats.• Applying textures, shading and more advanced effects to models.• Organization of the models for easy execution of different operations on the models.• Performance optimizations for faster rendering of the models.Rendering engines are available as commercial (and often very expensive) packages as well as open-source projects.Some of them are presented in Section 2.7.It depends on the following facts which rendering engine fits a specific project:• The budget for the project• The programming language of the project -rendering engines are often available for C/C++, C#, Java and Delphi.• The platform the project is intended to run on.Some engines support both, PCs and gaming consoles.Some engines will run only on Microsoft Windows and others support Linux too.

Read the paper · More papers on PaperTik