During the last two months both this blog and the integration work were quiet mainly due to very limited time resources. However, all the changes in the trunk have been merged into the Freestyle branch on a weekly basis. In addition, a few problems that affected many branch users have been addressed as summarized below.
1. Fixes for unexpected long straight lines
First, the issue of occasional unexpected long straight lines has been partially addressed. Branch users may encounter this issue when a number of frames for animation is rendered. A typical situation is that a few frames (e.g., one or two out of a hundred frames) suffer from weird long straight lines that are not in the scene data. An example of such a long straight line is shown in the image below. This problem is mostly due to a known bug in stroke mesh generation. The bug is that quick U-turns in stroke topology are not handled properly. A fix for this bug is planned as part of a comprehensive improvement of stroke mesh generation described in a blog post in last September. As a quick remedy for now, the Parameter Editor mode has been extended so as to prevent strokes from doing quick U-turns.
Branch users writing custom style modules may be interested in the way how the fix is implemented. Take a look at AngleLargerThanBP1D() in scripts/freestyle/style_modules/parameter_editor.py. This predicate is used with ChainPredicateIterator() to allow two consecutive edges to be chained only when the angle of the two edges is larger than a given threshold.
In the meantime, another issue was identified as a source of unexpected long straight lines. This issue arose when stroke thickness was specified by a curve mapping of a thickness modifier in the Parameter Editor mode. In some occasions the curve mapping resulted in extrapolation, which gave an extremely large thickness value. Now the extrapolation option is unconditionally disabled to prevent this issue, even when users turn on the option through the GUI.
2. Consolidation of stroke drawing
Second, consolidation of stroke drawing has been made through several related bug fixes. After the introduction of face smoothness in last November, branch users may have seen a warning message shown below in the middle of stroke drawing:
Warning: you should not be there…
This warning turned out to be due to those edges in the view map that have a two-dimensional length almost or exactly equal to zero. When such a zero-length edge was in a chain of edges on which a stroke was drawn, a number of style module API functions such as MaterialF0D() failed. In addition, MaterialF0D() had another bug that an error condition was ignored due to a wrong return value. In the end, these bugs jointly caused stroke color to be left undefined.
This stroke drawing instability has been addressed by automatically removing the zero-length edges (and chains of them) before stroke drawing begins and after stroke splitting is performed (e.g., using Operators.sequentialSplit()). The bug in MaterialF0D was also fixed.
Moreover, possible memory leaks due to errors in user-defined style modules have been fixed. Since scripting errors during style module coding are inevitable, these fixes improve the stability of the program regardless of having temporary programming errors in user-defined predicates, chaining iterators, and shaders.