Realistic Rendering Of Virtual Worlds

More Info
expand_more

Abstract

The problem posed to the authors concerns SketchaWorld, a terrain modeling framework that allows users to easily construct virtual worlds by means of sketching. Until now, the developers of SketchaWorld have focused on procedural content generation and have left its visual presentation largely untouched. The authors have been tasked to develop a rendering system that improves the visual realism in SketchaWorld. SketchaWorld organizes its world content in a scene graph, using the graphics toolkit OpenSceneGraph. A scene graph is a data structure in the form of an acyclic directed graph, for organizing objects in the world. The scene graph is both traversed to update the logic of all objects, as well as to render these objects. The rendering system would have to be compatible with this form of data structuring. The authors had decided to implement a renderer that uses a deferred rendering approach. Contrary to forward rendering, which is the ‘classic’ approach, deferred rendering postpones many of the calculations that are required to determine the final output color for a pixel. Intermediate results are stored in texture buffers and combined in later phases. The deferred renderer is designed to make full use of the advantages of scene graphs; with the renderer itself is structured as a scene graph. Many advanced techniques are implemented in the renderer, all aimed at enhancing visual realism. These techniques are spread out over the different phases in the deferred rendering pipeline. During the world render phase, primitive data about the world geometry is rendered. During the light render phase, each light is processed once to determine its influence on only the visible geometry. Afterwards, the results of both phases are combined. The atmosphere is rendered on top of that based on the time of day. Transparency has always been an issue with deferred rendering. Transparency implies that the color value of one pixel depends on multiple objects, while most deferred renderers only store one set of data per pixel. This problem therefore needs to be solved by rendering transparent objects with forward rendering, adding it to the result of the deferred rendering steps. Afterwards, post processing effects are applied. The renderer supports an arbitrary number of post processing effects, which can be swapped in real time. The authors have studied SketchaWorld and OpenSceneGraph thoroughly, in anticipation of integration at an early stage. As a result, integrating the renderer into SketchaWorld only cost minor effort. SketchaWorld’s shaders have been converted to comply with deferred rendering requirements. All lighting calculations have been removed from the shader because the renderer performs these calculations in a later phase. Most of the requirements that were formulated in the requirement analysis document have been implemented successfully. Some requirements were implemented somewhat differently than originally decided in the orientation report. These deviations were the result of new insights while developing the rendering system.