Stroke-Based Rendering


Since my combined bachelor thesis for both of my bachelor courses (MultiMedia Art and MultiMedia Technology) will focus on non-photorealistic rendering for computer games, I want to share the current state of work as my implementation proceeds further.
My appropach will be developed for the interactive context of computer games, rather than for stand-alone solutions which can be used for example during the post production for video. Therefore I am planning to integrate the solution into our bacheolor project "Anachronism" for rendering particle effects like smoke.
The implementation modifies approaches introduced by papers like

to generate a painterly rendering style suitable for animation.


  • Cinder | utility functions
  • OpenGL 3.2 | rendering and parallel image filtering on the GPU

Dev Blog

thursday, march 07, 2013
Development is going on

Some time has passed since I posted the last update on this project. In the mean time I managed to improve the algorithms performance by utilizing Summed-Area Tables (introduced by Franklin C. Crow) to speed up all the blur operations required for stroke placement. There is still some room for further optimization which will hopefully enable the algorithm to operate at a framerate where stroke placement can be observed in real-time. Furthermore I modified the implementation of the individual brushed to create curved strokes instead of simple dots.

thursday, februrary 21, 2013
First draft is working

A first version of the Stroke-Based Renderer is now up and running. It is currently quite limited in functionality since only circles of different size and color are used to approximate the source image. The next step in this implementation would expand the system and enable the renderer to generate brush strokes of arbitrary length.
Furthermore this early version of the renderer is not capable of generating and placing strokes in real-time, since each stroke reguires the image to be analyzed in a very costly way, due to many blur-operations with different kernel sizes. This issue will be treated in the near future by utilizing summed area tables to prepare generating those effects.
On the right hand side you can take a look at the output of the conversion of a photorealistic source image to a rather abstract representation painted on the virtual canvas.