Real time 3d rendering

Why real-time 3d rendering is interesting

For me, the fascination with real-time rendering is twofold: First, it can be a science lab in which to explore optical phenomena in real time. After all, much of rendering is concerned with light rays, reflection vectors scattering equations and similar concepts. On some fundamental level, one can simply put some physics in and see in real time what the outome is.

For instance, dealing with real time rendering has led me to ponder questions such as what the color of the horizon depends on, what the color of shadows really is or how a rainbow looks when seen right at sunrise.

On a different level, GLSL rendering code runs on the graphics card and often ends up being performance-critical. This translates into a technical challenge of finding fast approximations and breaking down a complex situation into something that can be solved sixty times per second for two million pixels.

Thus, next to the physics, another theme characterizing my real time rendering work is the concept of 'painting with functions', of finding a mathematical expression which delivers a naturally looking shape. One reason is that evaluating a function is often faster than referencing a texture, but another reason is that it's easy to go from one shape described by a function to a slightly similar one at the simple expense of changing a parameter, but the same thing is impossible with a texture. Thus, procedurally generated shapes allow a flexibility textures do not provide.

Finally, there is also a good deal of aesthetical joy to rendering, as you might discover browsing through the different projects below.

Atmospheric Light scattering

The Atmospheric Light Scattering (ALS) framework is an OpenGL rendering framework based on a set of GLSL shaders for the Flightgear Flight Simulator. Its main aim is to do approximations for lots of light scattering physics in real time and so give credible visuals of sky and clouds for all lighting conditions from the ground up to low Earth orbit. In particular, ALS can render an incredible range of sunrises dependent on cloud cover, aerosol content of the atmosphere or haziness. Read more...


Earthview is a project designed to render compelling visuals from low Earth orbit. While this is simple in principle, getting all the details right requires a lot of GLSL magic - but seeing the subtle relief of a cloud layer from 300 km altitude while the night light of cities glitter below and a hint of aurora plays on the horizon is just worth it! Read more...

Aurorae and other celestial phenomena

Some recent additions to the ALS framework feature the Northern Lights, rendered both from the ground and from low Earth orbit. Unlike the atmosphere physics described above, these are not the result of a real time physics computation but simply painted from suitable noise functions - but beautiful nevertheless. Read more...

GLSL Shader coding

Writing rendering code to run on the graphics card is somewhat different from standard coding - it's a very special environment with its own rules, requirements and quirks, and while GLSL has superficial similarity with C++, it's not the same language. This introduction to GLSL coding is my attempt to share insights and tricks I have learned doing rendering as a hobby. It's different from other tutorials on the subject, as it's perhaps more focused on concepts and background as to why things are a certain way than technical information. Read more.

Noise functions

Noise functions are at the core of the idea of 'painting with functions'. I have used quite a lot of them over time - some implementations of well-known algorithms, some devised by myself for special purposes. Going from a raw pseudo-random number generator to a good procedural texture is a long road, involving many intermediate steps in generating, post-processing and combining various noise functions. Read more for a technical discussion including code snippets on how how the underlying math works.

Back to main index

Created by Thorsten Renk 2015 - see the disclaimer, privacy statement and contact information.