Since the last blog post, branch development mainly focused on stability improvements of the Freestyle renderer and new functionality for fine control of feature edge selection.
Stability improvements with the face smoothness option
Several branch users kindly reported that Freestyle failed when the Face Smoothness option was enabled and object materials were used to determine line colors. When the Face Smoothness option is enabled, the view map computed from a given 3D scene is populated by not only sharp FEdges (i.e., edges in the original meshes) but also smooth FEdges (i.e., newly constructed edges across faces). This situation often resulted in a failure of the getFEdge() method (defined in the Interface0D class and its subclasses) used to obtain the FEdge between two given 0D elements (such as SVertices and CurvePoints). The instability of getFEdge() caused many related issues because the method is widely used in other predicates and functions that rely on it. The most prominent example of related user-visible problems is a failure of the built-in MaterialF0D class that retrieves object materials of given 0D elements, as seen in the problem reports from branch users.
The persistent failure of getFEdge() was resulting from several bugs in the view map construction algorithm. These bugs were fixed through careful code revisions and intensive testing. Also, the built-in MaterialF0D turned out to be incapable of handling Curve objects (such as chains and strokes), so that a new CurveMaterialF0D class has been introduced to address the material retrieval in the case of Curve objects.
These changes have improved the stability of the renderer with the Face Smoothness enabled. The dev team is very grateful to those branch users who provided the bug reports together with .blend files to reproduce the issues. The .blend files were indeed indispensable test cases during the bug hunting.
Fine control of feature edge selection with mesh face and edge marks
With the aim of allowing for fine control of feature edge selection, new “face marks” and “edge marks” have been introduced in mesh data blocks. In the edit mode of a mesh object, face marks can be put to selected faces by choosing Mesh > Faces > Mark Freestyle Face from the menu of a 3D View window or Ctrl-F > Mark Freestyle Face from the context menu. Similarly, edge marks can be put to selected edges by Mesh > Edges > Mark Freestyle Edge or Ctrl-E > Mark Freestyle Edge. These marks should work fine with the Subdivision Surface and Mirror modifiers.
Moreover, two new conditions for feature edge selection have been added to the Parameter Editor mode, as described below:
- The Selection by Edge Types option now includes the new Edge Mark type, which can be used to (de)select feature edges having edge marks. This option can be used to add to (or remove from) the view map arbitrary edges of mesh objects.
- Selection by Face Marks option has been newly introduced, in which face marks are used for feature edge selection in two ways. One option is called “One Face” which is to (de)select feature edges if one of faces on the left and right of each feature edge has a face mark. The other option is “Both Faces” to (de)select feature edges if both faces on the left and right have a face mark. Those feature edges that meet the conditions are selected if the Inclusive option is enabled; they are deselected if the Exclusive option is turned on.
The following screenshot shows the new GUI controls (highlighted in red) based on face and edge marks.
Edge marks are useful when you want to draw lines along particular mesh edges. The following example images demonstrate the use of edge marks.
The image on the left shows a sphere mesh with edge marks (in the edit mode). In a 3D View window, edge marks are displayed in light green. The image on the right is a render without the Edge Mark type enabled in the Selection by Edge Types option (the black line shows the silhouette of the sphere). The image below is a rendering result with the Edge Mark type enabled. The blue lines indicate those resulting from mesh edges with edge marks.
Face marks are useful for removing lines from certain portions of mesh surfaces. Suppose that two faces of the default cube have face marks as shown in the image on the left below. Marked faces are displayed in light green. The image on the right is a rendering result without using the Selection by Face Marks option.
The following images show how rendering results vary with four combinations of the Inclusive/Exclusive and One Face/Both Faces toggle options. Notice that only the edge between the two marked faces is (de)selected when the Both Faces option is used, while all the edges touching the marked faces are (de)selected when the One Face option is enabled.
Renders from branch users
In the meantime, branch users have been sharing their renders made with Blender and Freestyle. Here are some selected rendering results.
Architectural line drawing by flokkievids:
Many thanks to jikz and flokkievids for the excellent contributions!