Doyeon Kim
Technical Artist / FX Artist
Painterly Rendering
I used Painterly Rendering with Curved Brush Strokes of Multiple Sizes as my main paper to work on this project since we can simply render on a pre-existed image. Also, the paper provides nice pseudocode that can follow easier than other papers. In this paper, there are 4 painting styles, impressionist, expressionist, color wash, and pointillist. For this project, I implemented an impressionist style brush stroke on the image, littlemer.jpg. The code can be divided into three sections, such as paint, paint layer, and creating brush strokes. First, they paint the canvas with some color, black in my project. Then, for each brush with a radius in the range of {2, 4, 8}, they paint the image that is filtered with a Gaussian and gradient (emboss) filter with a circular brush. The paper randomized the order of the brush radius, so it appears to be a “freehand” painting. I implied the method that the paper suggested in this project, including applying a Gaussian and emboss filters, finding differences between the canvas and reference image by using a distance formula, color of the strokes, unit vector of a gradient, normal direction, and filter the stroke direction. The image I modified is rendered with the brush radius size of 8, 4, and 2 without randomizing the brush strokes.

Figure 1. Original Image

Figure 2. Brush size 8

Figure 3. Brush size 4

Figure 4. Brush size 2

Figure 5. Final rendered image with all brush strokes
Problems I faced:
Even though the pseudo-code from this paper helped me to understand the big flow and how the algorithm works at each step, converting the pseudo-code to actual code was difficult. Code 1 helped me understand how to do those conversions. Even though it used OpenGL, the steps were very similar to what the paper did.
Resources:
-
Main paper: Painterly Rendering with Curved Brush Strokes of Multiple Sizes https://dl.acm.org/doi/10.1145/280814.280951
-
Code 1: painting.zip from http://www.paulsprojects.net/opengl/painting/painting.html