| Loose and Sketchy Rendering Tutorial |
![]() |
The following are step-by-step instructions on how this animation was created.
| Creating the Input |
The modeling and animation were done in Maya. The text was created and positioned, and then extruded to get a 3D look. The letters were grouped together and animated rotating about the group's center along the y-axis. From frame 45 to frame 255, the group made a 360 degree rotation. A 45 frame pause was animated on either side of the rotation so that the letters would sit still before and after they rotated.
The front and back of the letters were shaded a bright orange and the sides of the letters were shaded yellow. This was done so that there would be contrasting colors on either side of the major edges of the models, to aid the edge detection. The background environment was shaded a pure blue so that it could be easily distinguishable from the models and so that it could be easily masked out in compositing. A few lights were placed around the models so that the lighting was evenly distributed with no major shadows. The flat lighting was done so that the edge detection would only find edges at the geometric boundaries of the objects, not around the shadowed areas within a surface.
The frames were rendered using raycasting to help maintain the flatness of the colors. Of course, the loose and sketchy renderer does accept depth maps as input, which would eliminate the need for shading and lighting. However, when using depth maps, only the silhouette edges of the objects in the scene are rendered. In order to get the inner edges of the objects, the raycasted renders were done. This did not add a significant amount of time to the creation of the animation or to the rendering. The lighting and shading were simple to do and the renders only took an average of 4 seconds per frame.
A second set of images were rendered out to be used as masks. In these images, the front and back of the letters were shaded pure red and the sides were shaded pure green. The background was left pure blue. These images were used in compositing, but not in creating the loose and sketchy images. The was too little contrast in the intensity image created from using this image as loose and sketchy input to get clear edges. The orange and yellow work much better for those purposes.
| Loose and Sketchy Rendering |
After the animation was completed, its renders were loaded into the loose and sketchy renderer. The first task was to find the best edge detection threshold value for all the frames. Several edge detection test renders were done at various frames throughout the animation and it was found that the default threshold value worked well for all.
Next the style of the output had to be set. The goal was to have the output start out tightly sketched and end up loosely sketched, with the rotation cycle used to make the transition. Therefore, test renders were done to find what combination of options would create the best tight drawing and what combination of options would create the best loose drawing.
In this case, it worked best to have the eraser size constantly at its middle value and to have the other style parameters completely at their tight or loose values. More strokes needed to be drawn for the tight drawings, since the strokes are often shorter for tight style than they are for the loose style. To find the number of strokes to use for the tight style, the number of strokes was increased until the test renders resulted in not all of the strokes being drawn. Then it was set to the amount that were being drawn. That way, the maximum number of strokes that could be drawn, were being drawn. To find the number of strokes to use for the loose style, the number found for the tight style was continually lowered and tested until it looked right. So for the best tight drawing the number of strokes to draw was 350 and the for the best loose drawing the number of strokes to draw was 250, so that each type of drawing had the same amount of coverage.
After the best values for creating tight and loose sketches were found, the tight values were keyframed at frame 45 and the loose values were keyframed at frame 255. This way the change in style would start to occur as the objects in the scene started to rotate.
The color of the strokes was also animated from frame 45 to frame 255. Cool colors were chosen for the tight end of the animation and warm colors were chosen for the loose end of the animation. Colors were set using the color range.
Parameters set that remained constant over the animation were line widths from 3 to 3 pixels and a background color of pure blue (to aid in compositing). All other options were left at their default values.
Screen shots of the parameters at the two keyframes, frame 45 and frame 255, are shown below.


With all of the parameters set, tested, and keyframed, it was time to output the results. The loose and sketchy renders for all frames were saved. Each render took aproximately 10 seconds to create.
| Compositing the Output |
To refine the results further, some compositing was done using Alias|Wavefront's Composer.
The mask renders that used the pure red, green, and blue shaders were read into Composer. The rgb_renders were duplicated so that they could be used to separately mask out the red (the front and back of the letters) and the green (the sides of the letters). They will be referred to as the rgb_renders and rgb_renders_2. To do the masking, the red was extracted from the rgb_renders_2 and blurred and the green was extracted from the rgb_renders and blurred. This created the elements that will be referred to as blur_red and blur_green.
Next the foreground colors were set up. Inside the front and back of the letters, a foreground image that changed from orange to blue was used. This was done by reading in an orange image and a blue image and dissolving between them over the course of the animation. This will be referred to as fg_orange_to_blue. Inside the sides of the letters, a foreground image that changed from blue to orange was used. This was done by duplicating the orange and blue images and dissolving between them in the opposite direction. This will be referred to as fg_blue_to_orange.
Then the loose and sketchy renders were read in. A bluescreen was used on them to mask out the background.
Lastly a background image was read in.
With all of the elements set up, all that was left was the layering. First the fg_orange_to_blue was layered over the background using the blur_red element as an inverted mask. It will be called over1. This let the fg_orange_to_blue image fill the front and back of the letters with the background showing around it.
Next the fg_blue_to_orange was layered over over1 using the blur_green element as an inverted mask. It will be called over2. This let the fg_blue_to_orange image fill the sides of the letters with the background and the filled front and back of the letters showing around it.
Finally, the bluescreen image was layered over over2. This let the sketchy outlines cover the image with the other elements showing around them, creating the final image as seen above.
Below is an image taken from the Composer file, diagramming this process.
Before the final animation was output from Composer, the sequence was tested. On watching a quicktime movie of the sequence, it was decided that the random changes in the placement of the strokes was happening too quickly. To solve this, every fifth image of the masks and the loose and sketchy images was used rather than every image. Then those frames were each held for five frames so that the overall timing was the same.
This produced the desired results, so the animation output was saved.