Commit Graph

177 Commits

Author SHA1 Message Date
Tamito Kajiyama
f87ca5f1c3 Fix for missing Freestyle sections in the Blender Python API documentation.
Freestyle sections of the API docs were empty due to Freestyle module reorganization
in commit rB6498b96ce7081db039354228213d72e8c70bd3aa.

Module __all__ property was added to submodules so as to properly exclude irrelevant
documentation elements such as mathutils.Vector.
2014-09-18 15:48:15 +09:00
Tamito Kajiyama
f6b4b12961 Better fix for T41464: Material Boundary bug in Freestyle.
The problem addressed here is that there was no mean to check if an iterator
points the last of the elements being iterated over.  Such checking is necessary
to reliably dereference the iterator (i.e., calling the operator*() method of the
underlying C++ iterator object).

Now Interface0DIterator and StrokeVertexIterator have an .at_last property
to check if an iterator points the last element.  Using this new API feature,
the present commit partly reverts the previous commit rBeb8964fb7f19 to
better address T41464.

Differential revision: https://developer.blender.org/D752

Author: flokkievids (Folkert de Vries)

Reviewed by: kjym3 (Tamito Kajiyama)
2014-09-02 21:24:41 +09:00
Tamito Kajiyama
eb8964fb7f Fix T41464: Material Boundary bug in Freestyle.
The reported issue was caused by an old bug combined with another bug
introduced by recent Freestyle Python API updates.

The old bug was that a mutable reference to CurvePoint was treated as if
it were immutable.  Iteration over CurvePoint objects is implemented by
the C++ CurvePointIterator class, whose dereference method
CurvePointIterator::operator*() returns a reference to a mutable data
member (probably originally intended for better performance).  Hence the
returned reference may vary upon iteration over different CurvePoints.
This implementation detail was overlooked and the returned reference was
treated as immutable (which is the case in fact for other Interface0D
subclasses except for CurvePoint).  This bug was surprisingly old as it
existed before the beginning of Freestyle integration into Blender.

The other bug was in the MaterialBoundaryUP0D predicate class that was
not properly handling the end of iteration.  It is noted that when the
iter() and next() built-in functions are applied to Interface0DIterator,
it is no longer possible to reliably check the end of iteration by the
.is_end property of the iterator.  Namely, the .is_end property works as
expected only when iteration is carried out in combination with the
conventional .increment() and .decrement() methods of the iterator.  For
this reason the commit rBb408d8af31c9 was partly reverted to recover the
previous definition of MaterialBoundaryUP0D.
2014-08-20 10:37:41 +09:00
Tamito Kajiyama
dd13952080 Freestyle: Fix for git merge glitches.
Also made minor code cleanup.
2014-08-12 10:10:50 +09:00
Tamito Kajiyama
34c133a488 Freestyle: an improved workflow of line style shading nodes.
Removed the previous changes for passing a line style through the Controller, and
revised the BlenderTextureShader to assign the shader node tree of a line style
(if specified) to strokes.  This way the assignment of shading nodes can be done
through both the Freestyle GUI and Python scripting.
2014-08-12 10:10:36 +09:00
Tamito Kajiyama
c38e80d632 WIP commit just for a record of a working snapshot of code revisions for node-based textured strokes. 2014-08-12 10:10:35 +09:00
Tamito Kajiyama
d5d540615b Freestyle: minor revisions of Python API docstrings and comments. 2014-07-24 14:29:38 +09:00
Tamito Kajiyama
1819fa2b5a A follow-up to Patch D623: minor code updates and style cleanup. 2014-07-24 14:29:36 +09:00
Tamito Kajiyama
b408d8af31 Freestyle Python API: Updates and speedups for the parameter editor
In addition to D319, this patch updates the parameter editor, the UI of Freestyle.

Using new API functionality and experience gained in making D319, this patch
provides a quite noticable speedup for commonly-used Freestyle linestyle modifiers.

As this patch touches a lot of code (and mainly the foundations) it is likely that
mistakes are made.  The patch has been tested with a regression suite for Freestyle
(https://github.com/folkertdev/freestyle-regression-tests/tree/master), but testing
with scenes used in production is very much appreciated.

Differential revision: https://developer.blender.org/D623

Author: flokkievids (Folkert de Vries)

Reviewed by: kjym3 (Tamito Kajiyama)
2014-07-24 14:29:35 +09:00
Tamito Kajiyama
7915d7277a Per-material line color settings for Freestyle.
New properties 'line_color' and 'line_priority' are added to Material ID data blocks.

The 'line_color' property allows users to specify a per-material line color that can be
used as a Freestyle line color through Material color modifiers of line style settings.

The new line color property is intended to provide a solution for line color
stylization when a proper Freestyle support for Cycles is implemented (likely
as part of the upcoming Blender 2.72 release; see Patch D632).  Materials in
Cycles are usually set up using shader nodes, and Freestyle won't be capable
of retrieving colors and other properties from node-based materials any soon.

The new line color property of materials addresses this foreseen limitation by
providing artists with an intuitive alternative mean to specify line colors on a
per-material basis independently from node trees.

The 'line_priority' property gives users a way to control line colors at material
boundaries.  When a line is drawn along a feature edge at material boundaries,
one of the two materials on both sides of the edge has to be picked up to
determine the line color.  So far there was no way to control this selection
(which was in effect at random).  Now the material with a higher line color
priority will be selected.

The new per-material line settings are shown in the new Freestyle Line tab in
the Material context of the Properties window (only when Freestyle is enabled).
2014-07-07 16:19:51 +09:00
Tamito Kajiyama
dd96be356d Freestyle: Fix for a couple of missing names in freestyle.chainingiterators.__all__. 2014-06-24 17:25:02 +09:00
Tamito Kajiyama
ce729677db D319: Freestyle Python scripts update.
This revision is meant to update Freestyle's Python scripts to make full usage
of the new features of Python and Freestyle's Python API.

Freestyle's Python scripts are pretty old already, and were never given much
attention. With the 2.7x generation of Blender coming up, this is an excellent
time to update Freestyle's Python scripts, hopefully adding some new features
and achieving some speed improvements on the way.

Main goals:
* use for loops where possible
* general cleanup, making use of more recent python features (generators,
  ternary operator, ect.)
* update the documentation on the way (it's lacking atm)


Differential revision: https://developer.blender.org/D319

Author: flokkievids (Folkert de Vries)

Reviewed by: kjym3 (Tamito Kajiyama)
2014-06-24 13:53:14 +09:00
Tamito Kajiyama
de280ffa32 Freestyle: Fix for a wrong formula used for RGB to grayscale conversion.
This bug fix is likely to affect the visual results of existing Freestyle setups using the
Material color/alpha/thickness modifiers with the 'material_attribute' parameter set to
either 'Diffuse' (default) or 'Specular', and also the Ramp option enabled in the case
of the Material color modifier.
2014-06-05 12:56:49 +09:00
Tamito Kajiyama
fce731a175 Fix for thinning strokes at intersections between visible and background hidden lines.
This commit is intended to fully fix the problem described in
https://developer.blender.org/T36425#19 (see also the previous commit rB08528f577dcb).

Addition of a small offset (to avoid singularity in stroke rendering due to overlapping vertices)
was not performed for all overlapping vertices.

Removed the StrokeCleaner and related helper functions which were added as a
temporary workaround in rB2a5b6d9c8f16.
2014-05-26 10:54:25 +09:00
Tamito Kajiyama
0516071a86 Fix for a regression in rBe84732858590. 2014-05-22 00:46:24 +09:00
Tamito Kajiyama
3a0be8a0d6 Freestyle: Fix for dashed lines when applied to invisible stroke segments.
Dashed lines were resetting stroke segment visibility by mistake (making invisible segments
visible, for example when applied to the results of square blueprint geometry modifier).
2014-05-09 20:48:15 +09:00
Tamito Kajiyama
38b512576f Freestyle: minor code clean-up. 2014-05-06 16:58:58 +09:00
Tamito Kajiyama
b7f085d9c1 Patch D246: Texture Marks for freestyle strokes, written and contributed by Paolo Acampora.
Reviewers: brecht, kjym3, #freestyle

Reviewed By: brecht, kjym3

Differential Revision: https://developer.blender.org/D246
2014-05-03 18:54:59 +09:00
Tamito Kajiyama
f60a66f417 Freestyle: New options for sorting to arrange the stacking order of lines.
Line styles now have a set of new options for rearranging the stacking order of lines.
This gives artists more control to determine which lines should be drawn on top of others.
Two available sort keys are the distance from camera and curvilinear 2D length.
Since the distance of a line from camera may vary over vertices, another option called
integration type is used to compute the sort key for a line from the values computed at
individual vertices.  Available integration types are MEAN, MIN, MAX, FIRST and LAST
(see the tool tips for more detail).
2014-04-18 15:02:45 +09:00
Tamito Kajiyama
6a94e73a85 Freestyle: Added logical operators for binary predicates for 1D elements.
The implemented operators are:
freestyle.predicates.AndBP1D
freestyle.predicates.NotBP1D
freestyle.predicates.OrBP1D
2014-04-18 15:02:44 +09:00
IRIE Shinsuke
4ed16bc3e6 Freestyle: Fix ImportError in anisotropic_diffusion.py 2014-04-18 08:48:03 +09:00
Tamito Kajiyama
a86d8bceb5 Revised freestyle.predicates.pyZBP1D so that the constructor accepts an integration type. 2014-04-18 01:32:29 +09:00
Tamito Kajiyama
716803c0a0 Fix for Sinus Displacement and 2D Offset stroke geometry modifiers.
These modifiers were not working properly when they were applied to strokes
whose backbone was already modified by other geometry shaders.  This problem
was due to the use of Normal2DF0D that compute 2D vertex normals based on
the underlying FEdges up on which initial stroke geometry is defined.  Now vertex
normals are computed on the basis of modified stroke vertices.

A helper function 'stroke_normal' for computing normals of stroke vertices was
added to the 'freestyle.utils' API module.
2014-04-11 15:16:46 +09:00
Tamito Kajiyama
054094f582 Freestyle: Fix for chaining operators not concatenating edges with Freestyle edge marks and at material boundaries.
Problem report by Postoman on the BlenderArtists.org Freestyle thread, thanks a lot!
2014-02-12 18:17:21 +09:00
Campbell Barton
a283b099b1 Code cleanup: pep8 2014-01-29 02:20:59 +11:00
Tamito Kajiyama
4683ac3886 Fix for a typo reported by flokkievids through code review comments D163#1. 2014-01-28 23:34:02 +09:00
Tamito Kajiyama
0b22827033 Moved the Operators class from the 'freestyle' module to the 'freestyle.types' submodule. 2014-01-28 23:34:01 +09:00
Tamito Kajiyama
e847328585 Patch set by Folkert Vries (flokkievids) with respect to T37565-patch-v1.zip (F32402).
Applied with minor modifications.
2014-01-28 23:34:00 +09:00
Tamito Kajiyama
8ab3cf1db0 Fix for a missing submodule in the top-level 'freestyle' module package.
Reported by flokkievids, thanks!
2014-01-28 23:33:59 +09:00
Tamito Kajiyama
54e9016770 Updated Freestyle API modules according to the new hierarchical package structure.
Additional bug fixes were also done along with the code updates:
* Fix for the use of old Interface1D.pointsBegin() and .pointsEnd() method names
in the definition of pyDensityAnisotropyF1D and pyViewMapGradientNormF1D.
* Fix for wrong data types (int instead of bool) for:
- pyChainSilhouetteGenericIterator constructor and its .orientation property in
modules/freestyle/chainingiterators.py.
- SpatialNoiseShader constructor in styles/external_contour_sketchy.py.
- ChainSilhouetteIterator constructor in styles/multiple_parameterization.py.
2014-01-28 23:33:58 +09:00
Tamito Kajiyama
6498b96ce7 Reorganized the Freestyle Python API in a hierarchical package structure.
Both C- and Python-coded API components were rearranged into logical groups.
New Python modules are packaged as follows:

freestyle - Top-level package
freestyle.types - Classes for core data structues (e.g., view map)
freestyle.chainingiterators - Pre-defined chaining iterators
freestyle.functions - Pre-defined 0D and 1D functions
freestyle.predicates - Pre-defined 0D and 1D predicates
freestyle.shaders - Pre-defined stroke shaders
freestyle.utils - Utility functions

The Python modules are installed in scripts/freestyle/modules.  Pre-defined
styles are installed in scripts/freestyle/styles.

To-do: update styles according to the new Freestyle API package structure.
2014-01-28 23:33:57 +09:00
Tamito Kajiyama
8a5b07c46e Removed unused Freestyle env_map images. 2013-12-06 08:20:34 +09:00
Tamito Kajiyama
e4b9e28b86 Fix for a bug in StrokeCleaner identified through a discussion for Bug #36425 (freestyle edge marks not working).
Many thanks for Anthony Edlin who helped fix the issue.
2013-10-13 18:17:46 +00:00
Tamito Kajiyama
e424002d30 Fix for Freestyle hang up in stroke rendering, due to missing update of 2D stroke length in StorkeCleaner.
Problem report by Light BWK through personal communications, thanks!
2013-09-26 20:14:29 +00:00
Brecht Van Lommel
5a201fa479 Freestyle: remove a bunch of debug prints in the python code, these are confusing
and don't give any meaningful info to users.
2013-09-26 16:29:54 +00:00
Tamito Kajiyama
91e5189c90 Fix for [#36599] Freestyle: Line thickness modifier with certain blend types incorrectly calculated.
The inner/outer thickness values were separately blended by Multiply, Divide and other binary
operators, which resulted in the wrong thickness values reported in the issue.  The operations
must be applied to the sum of the inner and outer thickness values.

Also the Minimum and Maximum operators were not properly implemented (one of the two operands
were ignored by mistake).
2013-08-30 09:17:27 +00:00
Campbell Barton
636b200709 style cleanup: pep8, also use float literals when comparing floats and pass tuples to mathutils.Vector() rather then list. 2013-08-21 23:19:01 +00:00
Tamito Kajiyama
2a5b6d9c8f Temporary fix for gaps in strokes when objects are behind the lines.
Problem report by Light BWK through personal communications, thanks a lot!

Apparently there is something wrong in the way how edges are chained to
create strokes.  For some unknown reason, strokes may contain a very small
line segment that proceeds in the opposite direction (e.g., downward
even when adjacent stroke segments proceed upward), resulting in the
reported visual artefact.

This revision is intended to address the reported issue in most cases.
The present solution is not a proper fix of the issue.  Another code
update with better understanding of the real cause is due in the future
work.
2013-08-21 21:20:51 +00:00
Tamito Kajiyama
15a2287a8e Fix for incorrect clipping of Freestyle strokes when the viewport preview is used. 2013-07-07 15:29:00 +00:00
Tamito Kajiyama
db71b5ef88 Partial fix for Bug #35695: Freestyle produces extra line across an object with pointed areas.
The reported problem is a visual artefact (extra lines) generated by 
ChainingIterators.pySketchyChainingIterator used for sketchy chaining with the Same Object
option disabled in the Parameter Editor mode.  The issue is caused by an inconsistency in
the internal data structure (i.e., view map).  For now this fatal error condition is addressed
to avoid visually incorrect results.  Another fix will follow to address the cause of the
internal inconsistency.
2013-07-04 20:24:22 +00:00
Tamito Kajiyama
865096919d Fixed the feature edge selection by Freestyle face marks to properly account for border edges. 2013-06-16 00:15:05 +00:00
Tamito Kajiyama
829581bbbd Fix for potential division by zero during Freestyle stroke rendering.
Problem report by Light BWK through personal communications with a
sample .blend file for reproducing the problem.  Thanks!
2013-06-02 11:42:04 +00:00
Tamito Kajiyama
b1afee23da Fix for shaders.py based on code review comments from flokkievids.
Only the suggested changes that cause backward incompatibility were considered for now.

* Removed pyFXSThicknessShader that is identical with pyConstantThicknessShader.

* Swapped the order of two arguments of the pyDecreasingThicknessShader constructor
in line with other shaders taking the same arguments.

* Made module functions smoothC and get_fedge into methods of relevant shader classes.

* Removed pyExtremitiesOrientationShader that relied on undefined Stroke methods.
2013-05-03 02:37:43 +00:00
Tamito Kajiyama
ad6cc0d0ac Fix for broken Material color/alpha/thickness modifiers.
Reverted part of the trunk revision 56234 (RNA attribute consistency edits).
2013-04-24 00:14:16 +00:00
Campbell Barton
53917c4e3a rna attribute consistency edits, use common prefix for booleans. 2013-04-23 07:06:29 +00:00
Campbell Barton
eb495b2a8a use lowercase name for freestyle module (as with all other blender modules). 2013-04-07 11:22:54 +00:00
Tamito Kajiyama
5841d1c814 Added header comments to indicate the author(s) of original files.
Suggested by Sergey Sharybin through a code review of the branch.

The information was mostly recovered from the AUTHORS file [1] of the
stand-alone Freestyle package version 2.2.0.

[1] http://freestyle.cvs.sourceforge.net/viewvc/freestyle/freestyle/AUTHORS.TXT
2013-03-24 00:53:05 +00:00
Tamito Kajiyama
dbd0c37119 Removed a global variable from PredicatesU1D.pyNFirstUP1D.
Suggested by Sergey Sharybin through a code review of the branch.
2013-03-19 21:11:45 +00:00
Tamito Kajiyama
21dc9660d9 Fix for missing imported classes in style_modules/contour.py.
Identified by Campbell Barton through a code review of the Freestyle branch.
2013-03-19 20:16:13 +00:00
Tamito Kajiyama
ed053f4730 Fix for the Selection by Image Border not taking account of resolution percentage.
Problem report by octane98 in the BlenderArtists Freestyle thread in June 2012, thanks a lot!
2013-03-15 00:30:20 +00:00