Freestyle integration into Blender

September 25, 2011

Development updates on September 25

Filed under: Update — The dev team @ 4:39 PM

The work on the Freestyle integration into Blender is still ongoing.  Since the last updates, a number of new functionalities and stability improvements has been implemented as summarized below.

Enhancement of the Parameter Editor mode

New line style controls have been added to the Parameter Editor mode that is intended to be an artist-friendly GUI for manipulating line styles without any user efforts on Python scripting.  Recent major additions and changes are described as follows.

  • A new line style option for sketchy chaining of feature edges has been added.  The conventional default chaining method is now called Plain, while the new chaining option is called Sketchy.  The latter option allows for generating chains of feature edges with sketchy multiple strokes.  Both Plain and Sketchy chaining options have the Same Object toggle button in common, whereas the Sketchy option has an additional option called Rounds.  With the Same Object option enabled, only feature edges of the same object are chained.  The Rounds option specifies the number of rounds in sketchy strokes.  The following render shows a visual effect of sketchy chaining (3 rounds, with the Spatial Noise geometry modifier specified to enhance the sketchy appearance of strokes).

  • A calligraphic thickness modifier has been implemented.  This modifier gives strokes variable thickness that looks as if they are drawn with a broad and flat pen for calligraphy.  The following test render illustrates a typical effect of calligraphic thickness.

  • A new parameter called Angle has been added to the Perlin Noise 1D and 2D geometry modifiers to specify a displacement direction in degrees (zero degree indicates the positive X direction).  The following images demonstrate how the Angle parameter makes a difference in rendering results (left: the Angle parameter set to 45 degrees; right: 135 degrees).


  • The behavior of the Perlin Noise 1D geometry modifier has been changed so that it works differently from the Perlin Noise 2D geometry modifier.  Now the Perlin Noise 1D modifier distorts strokes using the curvilinear abscissa of stroke vertices as the input of the Perlin noise generator.  It is remarked that curvilinear abscissa is a scalar value between 0 and 1.  The first and last vertices of a stroke have the values 0 and 1, respectively, and the values for other stroke vertices are linearly interpolated over the stroke.  Therefore, the Perlin Noise 1D modifier gives identical noise displacements to strokes if the strokes have the same length and sampling interval (the latter is specified by the Sampling geometry modifier).  In contrast, the Perlin Noise 2D modifier generates noisy displacements using 2D coordinates of stroke vertices as the input of the noise generator.  Therefore, strokes in different positions in a render will be distorted with different displacements by the Perlin 2D noise generator even if the strokes have the same length and sampling interval.  The differences between the Perlin Noise 1D and 2D modifiers are illustrated in the following test renders.  The image on the left shows a set of vertical lines and another set of star-shaped strokes, both distorted by the Perlin Noise 1D modifier.  Strokes in each set of lines have identical noisy displacements, because of the same stroke length and sampling interval.  The image on the right shows a render of the same scene with the Perlin Noise 2D modifier, which gives different displacements to each of the strokes because of their 2D positions in the image that are different from each other.


  • New line style options for selecting chains by min/max 2D lengths have been added.  Using these options you can select strokes that are longer and/or shorter than specified stroke lengths.

Link and Append

A proper support for the Link and Append commands has been implemented.  Now you can link/append line styles as well as scenes with line styles from within other .blend files.

Stability improvements and bug fixes

An attempt to fix the long-standing issue of occasional infinite straight lines has been made.  The fix is still not the best solution, but seems to yield much better results as illustrated in the following test renders (left: examples of unwanted infinite lines due to the bug; right: infinite lines no longer appear after the bug fix).


Since the solution looks quite effective, a temporary workaround (implemented by means of a custom chaining rule) for infinite straight lines was removed.  This change has resulted in much cleaner strokes.  If you have suffered from a lot of segmented strokes that are supposed to be a single straightforward stroke, then using the latest Freestyle branch would be a solution for the issue.

In addition, several other bug fixes have been made to improve the general stability of the Freestyle renderer.  Most of the bugs were reported by branch users, some with example .blend files for reproducing the problems.  These reports were really invaluable, and we appreciate the feedback from the branch users.

Concluding remarks

That is all for now.  More additions to the Parameter Editor mode as well as further development work on other priority tasks (i.e., unfinished components that must be completed before the merge into the trunk is asked) are anticipated in the next weeks.



  1. I would like to leave a word of heartfelt thanks and encouragement for this excellent addition to the Blender render. I have been using the Freestyle renderer for some months now and find it absolutely indispensable for certain projects. And even when I occasionally end up retouching frames because of the odd ‘unexpected’ result, I can still remind myself (with a happy smile) that it is still much quicker than certain alternative approaches to obtaining the same sort of look in my graphics. Thank you, thank you, thank you!

    Comment by Ignatz — September 25, 2011 @ 9:20 PM

  2. Awesome! Keep up the good work! :D

    Comment by Sangwoo Hong — September 25, 2011 @ 11:45 PM

  3. This is really really cool! Is it going into the Blender trunk?

    Comment by Chris — September 26, 2011 @ 4:58 AM

  4. It’s so awesome seeing all of these improvements being made to this tool. However, when I see people’s animations made with it, I still often see edges blinking in and out from frame to frame. I really hope this is also going to be addressed prior to asking for merging into the trunk. I think it could be solved by allowing a user to use vertex weights to increase or decrease the likelihood of certain feature edges being detected.

    Comment by Rudiger — September 26, 2011 @ 5:59 AM

    • To our best knowledge, line flicker in Freestyle occurs for two reasons. One reason is randomness in stroke distortion and stroke attribute alteration. A proper support for time coherence with random stroke geometry/attribute modification is out of scope for now. The other reason is the lack of feature edge detection at mesh intersection. At the moment, Freestyle does not take account of line-plane intersection when line visibility is computed. For example, suppose that two cubes are partly intersecting with each other in a 3D scene, and a line drawn along the silhouette of one cube is intersecting with the surface of the other cube. In this situation, the part of the silhouette line hidden by the surface is invisible. But this information is not available in the present line visibility computation, so that the resulting visibility of the silhouette line is likely to be inaccurate. This inaccuracy becomes appreciable when the camera is moving, especially when silhouette lines disappear and new silhouette lines appear as the camera moves on. If the feature edge detection at mesh intersection is implemented, then Freestyle will also be capable of detecting line-plane intersection. This capability will allow the visible and invisible parts of lines to be cleanly split and thus improve the accuracy of line visibility. The detection of feature edges at mesh intersection is part of the present development plan before the merge is asked. Once it is implemented, then the line flicker due to inaccurate line visibility is expected to be resolved.

      Comment by The dev team — September 27, 2011 @ 12:45 AM

      • Thanks for the reply. I’m not sure if either of those mechanisms quite covers what I’m seeing. To use an example, check out the video of The Light at the End that you recently posted about As he moves his head around in the section between 0.10 and 0.20, the lines around his eyes seem to come and go depending on the angle of his head and the lines are rarely continuous. There doesn’t seem to be any random stroke modifications or overlapping meshes involved. It could just be the Freestyle parameters used by the animator, so is there currently a way to force the eyes to always have lines generated (without using material-based edge detection) or force the eyes to never have lines generated (without affecting the lines for the entire model or scene)?

        Comment by Rudiger — September 27, 2011 @ 6:05 AM

      • I believe the lines around the eyes are silhouette lines, which come and go as the camera and mesh objects move on. At the moment there is no way to force user-specified edges to be detected as feature edges and to exclude arbitrary silhouette lines from the 3D scene. But a few days ago, I was trying to implement new edge/face attributes for making selected edges always/never detected as feature edges. I think I am going to add this functionality to Blender and Freestyle.

        Comment by The dev team — September 27, 2011 @ 7:53 PM

      • Sweet! That would give artists a lot more control over the final output.

        Comment by Rudiger — September 28, 2011 @ 1:53 AM

      • I haven’t tried this, but it sounds like material edges could be used this way though – making duplicate materials to force edge detection. Might take some messing about but could work ok. Of course, better control built in would be great.

        Comment by Hammers — October 9, 2011 @ 2:52 PM

  5. such a great round of updates. great fixes, great additions(sketchy chaining, and caligraphic thickness are awesome!). The infinite line fix is much needed, thank you.

    Comment by 3D uaun (@3duaun) — September 26, 2011 @ 9:58 AM

  6. Suggestion:

    I have been experimenting with the Freestyle module and think that it could be very useful if the ‘Crease Angle’ could be set for individual Line Sets instead of having one setting which applied to all. Especially in those situations where the geometry is changing during the animation various line sets having different crease angle settings could be used to emphasize the creases more boldly. Another way to implement this would be in the form of a modifier which might also have the ability (when used) to override the main crease angle.

    Comment by Ignatz — October 6, 2011 @ 9:27 AM

  7. how can we render all vectors as wireframes?

    Comment by nitrofurano — September 15, 2016 @ 8:48 AM

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

Blog at

%d bloggers like this: