Commit Graph

562 Commits

Author SHA1 Message Date
Tamito Kajiyama
c4956c8ddc Fix for a crash due to a corruption of data for addressing degenerate triangles in imported mesh data. 2012-05-01 18:46:15 +00:00
Tamito Kajiyama
d8e12e8710 Suppressed "unused but set variable" warnings. 2012-04-29 00:19:05 +00:00
Tamito Kajiyama
f11926795f Suppressed a compiler warning about an empty controlled statement.
Reported by flokkievids, thanks!
2012-04-22 01:23:02 +00:00
Tamito Kajiyama
5f02b167d1 New options for specifying unit line thickness.
The Post Processing tab in the Render buttons has new Line Thickness options for
defining unit line thickness in two different modes as follows:

1. Absolute mode: The unit line thickness is given by a user-specified number
in units of pixels.  The default value is 1.

2. Relative mode: The unit line thickness is scaled by the proportion of the
present vertical image resolution to 480 pixels.  For instance, the unit line
thickness is 1 with the image height set to 480, 1.5 with 720, and 2 with 960.
2012-04-10 23:53:46 +00:00
Tamito Kajiyama
8ea8b6a1ba Fix for an unnormalized normal vector in ViewEdgeXBuilder::BuildSmoothFEdge(). 2012-04-07 15:54:21 +00:00
Tamito Kajiyama
04a9f393d8 Fix for broken face normals in FEdgeSharp and FEdgeSmooth, resulting from
splitting of FEdges at 2D intersections (i.e., at TVertices).
2012-04-07 00:37:01 +00:00
Tamito Kajiyama
e9eed190e8 Another possible fix for degenerate triangles in imported mesh data.
A motivating example of the problem the present solution aims to address is a
quad face such that three of the four vertices are colinear (i.e., they are
lying on a line).  Depending on how this quad is separated into two triangles,
one of them can be a degenerate triangle.  Degenerate triangles of this form
are easy to avoid by rotating the diagonal edge of quad faces without affecting
the visual outcome.  The fix implemented in this commit tries to address
degenerate triangles in this way.
2012-03-05 19:01:12 +00:00
Tamito Kajiyama
bdc13c04de Fix for a compilation error with GCC 4.6 (Linux and MinGW32).
Problem report by Bastien Montagne, thanks!
2012-03-03 12:01:14 +00:00
Tamito Kajiyama
00782aae1f Made another attempt to fix degenerate triangles in imported mesh data.
This commit replaces the solution in revision 44539.

It is recalled that a degenerate triangle is a triangle such that
1) A and B are in the same position in the 3D space; or
2) the distance between point P and line segment AB is zero.

Degenerate triangles in the second form are now resolved by adding a
small offset to P (i.e., the resulting triangles have a non-zero area).
2012-03-03 01:03:20 +00:00
Tamito Kajiyama
a20ca0ca32 Better fix for degenerate triangles in imported mesh data.
This commit replaces the solution in revision 44534.

It is recalled that a degenerate triangle is a triangle such that
1) A and B are in the same position in the 3D space; or
2) the distance between point P and line segment AB is zero.

Unlike the previous solution, the present fix is capable of
any mesh topology involving any number of degenerate triangles.

Degenerated triangles are removed in two steps.  First,
degenerate triangles in the second form are transformed into
the first form by moving P to the position of either A or B
that is closer to P.  This modification affects all triangles
sharing the vertex P.  Then, all degenerate triangles in the
first form are removed by just ignoring them.

Obviously, the present solution has a disadvantage that
resulting strokes may appear incorrect.  This drawback is
justified by the fact that the present solution is robust and
easy to implement.  Users are expected to fix incorrect
strokes (if any) by manual removal of degenerate triangles
from mesh data.
2012-02-29 01:11:37 +00:00
Tamito Kajiyama
5729156c36 Experimental fix for degenerate triangles in imported mesh data.
This commit is an attempt to address degenerate triangles (i.e.,
triangles whose area is zero) that cause incorrect line visibility in
Freestyle.

There are two forms of degenerate triangles.  Let A, B and P denote
the three vertices of a triangle.  A degenerate triangle is a triangle
such that 1) A and B are in the same position in the 3D space, or
2) the distance between point P and line segment AB is zero.  Note
that the first form is a special case of the second form.  Degenerate
triangles in the first form is easy to remove by the Remove Doubles
command.  This commit is intended to address those degenerate triangles
in the second form.

The implemented fix cannot address degenerate triangles in general.
It fails when a triangle touches with multiple degenerate triangles.
A more general solution needs to be implemented.
2012-02-28 20:56:31 +00:00
Tamito Kajiyama
5f093d6a58 Fix for a bug in the computation of smooth edges (used for ridges and valleys). 2012-02-19 21:07:32 +00:00
Tamito Kajiyama
b0d39d83b9 Unified "Ridge" and "Valley" into "Ridge & Valley" in the Parameter Editor mode.
The Valley edge type is merely an alias of Ridge in the present Freestyle implementation.
2012-02-05 12:50:01 +00:00
Tamito Kajiyama
29db9103e9 Reorganization of two view map construction parameters.
* Sphere radius and Kr derivative epsilon were removed from the
Parameter Editor mode.  Now sphere radius of 1.0 and Kr derivative
epsilon of 0.0 are used by default.  The rationale of the removal
is two-fold: little predictability and very minor artistic values.
The effects of these parameters are hard to estimate in advance,
which likely leads to a frustration of users due to repeated
trials and unpredicted results.  Therefore, the two parameters
are considered to have quite limited artistic values.  Proper
definitions of the two parameters more and less require the
knowledge of differential geometry and would not make sense to
most artists for which the Parameter Editor is intended.

* Sphere radius and Kr derivative epsilon are still available in
the Python Scripting mode, but now in an "advanced options" section
that is disabled and hidden by default.  This way new users are
properly warned, while expert users with specific technical needs
can enable these options if they want.  The same default values
mentioned above are used when the two parameters are disabled.
2012-02-05 11:37:39 +00:00
Tamito Kajiyama
12baf364f5 Fix for invalid pointers within a copied line set.
Now the line set buffer is cleared when a new .blend file is opened, so
that a line set may not be copied and pasted between two .blend files.
2012-01-23 23:32:09 +00:00
Tamito Kajiyama
3667cddf1a Fix for color management not working properly with Freestyle. 2012-01-21 21:58:47 +00:00
Tamito Kajiyama
0634b4decd Removed a hard-coded limit that the backbone stretching effect was applied to
stokes with 2D length longer than 50.  Problem report by Forrest Gimp, thanks!
2012-01-20 18:03:12 +00:00
Tamito Kajiyama
40f215bbc9 Added SVertex::curvatures() in the Python API to retrieve curvature
information at a given SVertex.
2011-12-17 19:31:30 +00:00
Tamito Kajiyama
8a182d41b1 Fix for Operators.recursiveSplit() not able to split a chain within the last segment. 2011-12-11 11:17:41 +00:00
Tamito Kajiyama
b6569ee4e7 Merged changes in the trunk up to revision 42116. 2011-11-26 13:11:55 +00:00
Tamito Kajiyama
1b8c14b453 Replaced the changes in revision 41810 with a better implementation
of copy/paste functionality.  Instead of making a copy of the active
line set, now the settings of the active line set are copied to and
pasted from a buffer.  This allows for copying and pasting line set
settings among different scenes and render layers.
2011-11-20 23:44:50 +00:00
Tamito Kajiyama
bb9976f058 Fix for duplicated feature edges due to a numerical instability of line
clipping by near/far Z planes.

Problem report by vicentecarro together with a .blend file to reproduce
the issue, thanks!
2011-11-20 19:03:52 +00:00
Tamito Kajiyama
caeeb37601 Added a new operator in the Parameter Editor mode to make a copy
of the active line set.
2011-11-13 21:55:13 +00:00
Tamito Kajiyama
1ae159bff4 Fix for the view map construction not taking account of face marks. 2011-11-12 19:08:16 +00:00
Tamito Kajiyama
72cfdfec30 Fix for a crash when two scenes in the compositor have different render
resolution (i.e., image width and height, scaled by the size factor).
Problem report by flokkievids together with a .blend file for reproducing
the bug, thanks!
2011-11-06 12:23:44 +00:00
Tamito Kajiyama
f0acdcf135 Fix for stroke rendering instability with stroke geometry shaders.
* Stroke::Resample(int nPoints) was not properly working when a wrong
value was returned from Stroke::getLength2D(), resulting in repeated
warning messages "Warning: incorrect points number" during stroke
rendering.  The main cause was that stroke geometry shaders did not
update the two-dimensional (2D) length (also referred to as curvilinear
abscissa) after they modified the 2D points of stroke vertices.  Now
all stroke geometry shaders make explicit calls for Stroke::UpdateLength()
that has been introduced for recomputing the 2D length.  Many thanks to
Josef who reported the problem together with sample .blend files for
reproducing the issue.

* Missing Python wrapper of Stroke::getLength2D() was added.
2011-10-30 16:00:35 +00:00
Tamito Kajiyama
16702c1729 Merged changes in the trunk up to revision 41225.
Conflicts resolved:
source/blender/render/intern/source/pipeline.c
2011-10-29 15:46:14 +00:00
Tamito Kajiyama
f0ca79bccb Extended the set of conditions for feature edge selection by edge types.
In the Parameter Editor mode, each edge type check button in the Selection
by Edge Types has now an associated toggle button to exclude the edge type
from the feature edge selection.  This allows you to select, for instance,
those edges that are silhouette lines but not external contours.
2011-10-27 20:57:14 +00:00
Tamito Kajiyama
b53505f5e1 Another attempt to fix the failure of SVertex::getFEdge due to a discontinuity
of underlying FEdges introduced by chaining operations.  The material of a
smooth FEdge is identified by the material index of the FEdge and the array
of materials in the SShape to which the first SVertex (i.e., vertexA) of the
FEdge belong.  The present fix makes sure that the material index refers to the
intended array of materials, to avoid inconsistent reference and out-of-index
errors that lead to a crash.
2011-10-16 22:54:08 +00:00
Tamito Kajiyama
2d25a12bbd Fix for a failure of SVertex::getFEdge due to a discontinuity of underlying FEdges
introduced by chaining operations.  When two ViewEdges are concatenated by a chaining
operator, the last vertex of one ViewEdge and the first vertex of the other reside
in the same 3D position, so that the latter vertex is omitted.  This caused a pair
of SVertices unconnected by an FEdge.  The present commit intends to fix this issue.

The bug was reported by mato_sus304 with a .blend file reproducing the issue.  Thanks!
2011-10-16 10:29:21 +00:00
Tamito Kajiyama
28cc31ba11 Stability improvements for the Face Smoothness option.
The instability considered here is due to a persistent failure of the
getFEdge() method in the Interface0D class and its subclasses in the
presence of smooth FEdges.  When the Face Smoothness option is
enabled, the view map is populated with not only sharp FEdges (i.e.,
edges in the original meshes) but also smooth FEdges (i.e., newly
built edges lying on triangular surfaces).  The failure 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 constant failure of the built-in
MaterialF0D.

The main issue and related problems were addressed as follows:

* A bug in the construction of smooth FEdges was fixed.  Individual
smooth FEdges, even when they were detected as a series of smooth
FEdges that constitute one smooth ViewEdge, may have some irregular
geometry in the form of non-uniform OWXFaceLayer::order values.  The
OWXFaceLayer::order values were used in an inappropriate way, so that
resulting smooth ViewEdges may have an FEdge between two subsequent
SVertices that were indeed the same SVertex object.  This was an
unexpected situation that getFEdge() could not handle.

* Another issue in the construction of smooth FEdges was resolved.
When sharp FEdges are constructed, two SVertices at both ends of an
FEdge are generated only when no SVertex exists in a given 3D position
(this way, the original mesh topology is reconstructed from a bunch of
independent triangles that the BlenderFileLoader class passes to the
view map creation process).  This sharing of SVertices was used also
for the generation of SVertices at the two ends of each smooth FEdge,
causing the getFEdge() failure in the presence of smooth FEdges.  The
workaround implemented here is to simply suppress the sharing of
generated SVertices when smooth FEdges are created.

* In the Parameter Editor mode, the built-in MaterialF0D was replaced
with a better implementation that works well with Curves and Strokes.
MaterialF0D does not work with these 1D data types.
2011-10-10 19:57:06 +00:00
Tamito Kajiyama
f84e8e7640 Fine control of feature edge selection with mesh face and edge marks.
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 modifier.

Moreover, two new conditions for feature edge selection have been
added to the Parameter Editor mode as described below:

1. The Selection by Edge Types option has now 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.

2. 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.
2011-10-06 02:04:43 +00:00
Tamito Kajiyama
cb4f662927 Fix for an uninitialized member variable. 2011-10-05 21:10:23 +00:00
Tamito Kajiyama
f24255b5a0 Fix for the Link/Append commands not working when scenes had line styles.
The problem was reported by mato.sus304, thank you!
2011-09-15 00:06:49 +00:00
Tamito Kajiyama
6f418c55c8 Fix for a crash reported (four months ago!) by bupla, thanks! 2011-09-12 23:07:33 +00:00
Tamito Kajiyama
2ce1945c5e Fix for a minor inconsistency in the use of stroke thickness values in
Strip::createStrip().
2011-09-11 22:28:12 +00:00
Tamito Kajiyama
6be21a9125 Implemented a calligraphic thickness modifier in the Parameter Editor mode.
Also fixed a typo in the docstring of the CalligraphicShader.
2011-09-11 19:57:38 +00:00
Tamito Kajiyama
f045c18a78 Fix for the handling of stroke vertex orientation in Strip::createStrip(). 2011-09-11 11:44:19 +00:00
Tamito Kajiyama
6a1190836c Made an attempt to fix the long-standing issue of occasional infinite lines.
This is still not the best solution, but seems to yield much better results.
2011-09-10 22:27:36 +00:00
Tamito Kajiyama
95d92095e1 Fix for an error condition in CurvePoint::getFEdge() within the C++ layer.
The error was identified thanks to a problem report that MaterialF0D() failed
when the Face Smoothness option was enabled.
2011-08-30 23:09:07 +00:00
Tamito Kajiyama
4ec69d5a2b Added an optional argument 'seed' to the Freestyle.Noise class constructor.
The value is used as a seed for random number generation if it is equal to
or greater than zero; otherwise, time is used as a seed.
2011-08-18 23:07:17 +00:00
Tamito Kajiyama
ce03ec4b86 Merged changes in the trunk up to revision 38543.
Conflicts resolved:
doc/python_api/sphinx_doc_gen.py
source/blender/blenkernel/CMakeLists.txt
source/blender/makesdna/DNA_material_types.h
source/blender/render/intern/source/pipeline.c
source/creator/CMakeLists.txt
2011-07-20 23:33:10 +00:00
Tamito Kajiyama
32c7e22d36 Merged changes in the trunk up to revision 37388.
Conflicts resolved:
release/scripts/startup/bl_ui/properties_render.py
source/creator/SConscript
source/blender/blenlib/intern/bpath.c
source/blender/editors/space_outliner/outliner.c
2011-06-11 00:22:10 +00:00
Tamito Kajiyama
b1db37dd05 Fix for a memory leak in silhouette edge detection. 2011-05-02 03:11:39 +00:00
Tamito Kajiyama
4bb277117f Fix for composite node parameter animation not working with Freestyle.
The problem was reported by ikeahloe together with a .blend file for
reproducing the issue.  Thanks!
2011-04-17 02:47:32 +00:00
Tamito Kajiyama
4ee5dcf7ab Fix for a crash in silhouette edge detection. The problem was
reported by macouno.  Thanks!

The crash was caused by a lack of curvature information required
for smooth edges.  Now the curvature information is computed if and
only if there are smooth edges.  This leads to a minor performance
improvement, because in the past the curvature information was
always computed when the Face Smoothness was enabled.

(To be precise, the above description is true when both the Ridges
and Valleys and Suggestive Contours options are disabled.  If they
are enabled, the curvature information is always computed because
it is necessary for the determination of these edge natures.)
2011-04-12 22:17:15 +00:00
Tamito Kajiyama
4569f9ae4e Optimized view map calculation by Alexander Beels.
* View map calculation has been intensively optimized for speed by
means of:

1) new spatial grid data structures (SphericalGrid for perspective
cameras and BoxGrid for orthographic cameras; automatically switched
based on the camera type);

2) a heuristic grid density calculation algorithm; and

3) new line visibility computation algorithms: A "traditional"
algorithm for emulating old visibility algorithms, and a "cumulative"
algorithm for improved, more consistent line visibility, both exploiting
the new spatial grid data structures for fast ray casting.

A new option "Raycasting Algorithm" was added to allow users to choose
a ray casting (line visibility) algorithm.  Available choices are:

- Normal Ray Casting
- Fast Ray Casting
- Very Fast Ray Casting
- Culled Traditional Visibility Detection
- Unculled Traditional Visibility Detection
- Culled Cumulative Visibility Detection
- Unculled Cumulative Visibility Detection

The first three algorithms are those available in the original
Freestyle (the "normal" ray casting was used unconditionally, though).
The "fast" and "very fast" ray casting algorithms achieve a faster
calculation at the cost of less visibility accuracy.

The last four are newly introduced optimized options.  The culled
versions of the new algorithms will exclude from visibility
calculation those faces that lay outside the camera, which leads to a
faster view map construction.  The unculled counterparts will take all
faces into account.  The unculled visibility algorithms are useful
when culling affects stroke chaining.

The recommended options for users are the culled/unculled cumulative
visibility algorithms.  These options are meant to replace the old
algorithms in the future.

Performance improvements over the old algorithms depend on the scenes
to be rendered.

* Silhouette detection has also been considerably optimized for speed.

Performance gains by this optimization do not depend on scenes.

* Improper handling of error conditions in the view map construction
was fixed.
2011-03-14 00:36:27 +00:00
Tamito Kajiyama
33efa9eeb6 Merged changes in the trunk up to revision 35367.
To branch builders: From this revision Python 3.2 will be used.
Don't forget svn update in the "lib" directory as well.
2011-03-06 12:13:32 +00:00
Tamito Kajiyama
29fafab107 Fixed possible memory leaks due to errors in user-defined style modules.
Error handling in Operators::Chain(), Operators::bidirectionalChain(), and
Operators::create() was improved to release allocated data structures when
errors raised in user-defined predicates, chaining iterators, and shaders.
2011-02-26 22:11:40 +00:00
Tamito Kajiyama
63b31ef91b Merged changes in the trunk up to revision 35203.
Conflicts resolved:
source/creator/creator.c
source/blender/python/intern/bpy.c
2011-02-26 20:21:09 +00:00