From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Harmony Phase 2 Proposal [DRAFT]

Overview

The purpose of the Harmony project is to improve the Blender Game Engine’s rendering of light and shadows. The second phase of improvements will focus on improvements to the rendering pipeline. The scope of this phase will include a prepass system for generating information buffers, a light clean up of the current 2D filter system, anti-aliasing for the embedded player, and basic high dynamic range (HDR) rendering.

Prepass System

The prepass system will allow a user to gain some control over information buffers (textures) that are created during the rendering process. These buffers can then be used for post processing in the 2D filter system. This is an advanced feature that wont be used by many users, but it will provide some of the ground work for inferred lighting and deferred shading. It also enables some more interesting 2D filter effects by having more information (such as normals) available.

At first this system itself will be limited as there will be no way to set uniforms for the prepass shaders. Without custom uniforms some vertex information will still be available (position and normals), and blurring can still be done. We will look into expanding functionality in this area with phase 3 of Harmony.

To implement this feature . . .

2D Filter Cleanup

Embedded Player Anti-Aliasing

Currently only the external player allows for anti-aliasing. This is because the technique used there is incompatible with the embedded player. In order to get anti-aliasing in the embedded player the scene will be rendered into a multisampled render buffer, and then blitted into a texture before entering the 2D filter system. This technique is also compatible with the external player, so some discussion will need to take place as to how the two will co-exist.

Basic HDR Rendering

To implement basic high dynamic range (HDR) rendering, two things need to happen. First, the shader system will need some tweaking to stop clamping to the 0.0 to 1.0 range when HDR is enabled. Second, tone mapping needs to be applied to map the image into the 0.0 to 1.0 range. This tone mapping can be fit in after the anti-aliasing and before the 2D filter system (this way the 2D filter system can save resources by using smaller low dynamic range images).

Some UI changes will be needed to control the HDR rendering process. Other than an option to enable/disable HDR rendering, options for exposure, gamma, and the tone mapping algorithm to use will need to be added. A built in tone mapping option using Reinhard's algorithm will be supplied along with the option for a custom user defined tone mapping shader.