Commit Graph

102 Commits

Author SHA1 Message Date
Tamito Kajiyama
e07034f8e1 Freestyle: code cleanup: removed old commented lines of code in SilhouetteGeomEngine. 2014-05-22 00:46:25 +09:00
Tamito Kajiyama
13c92a77d3 Freestyle: Fix for Z normalization in SilhouetteGeomEngine.
The Z component of the projected point in the 2D image space has already been normalized
in GeomUtils::fromWorldToImage().
2014-05-22 00:46:23 +09:00
Tamito Kajiyama
01ac74e4ad Freestyle: Added utility function SilhouetteGeomEngine::CameraToImage().
TODO: Fix for Z normalization in SilhouetteGeomEngine methods.
2014-05-22 00:46:22 +09:00
Tamito Kajiyama
6c136a69b0 Freestyle: Fix for GetOccludeeF1D returning a one-element list containing None when it is supposed to return an empty list. 2014-05-20 15:12:12 +09:00
Bastien Montagne
d0e80b50e9 Fix another Freestyle building glitch. 2014-04-17 14:51:38 +02:00
Sergey Sharybin
d02522b7be Attempt to fix one more issue with Freestyle compilation 2014-04-17 18:46:19 +06:00
Sergey Sharybin
ad2064ae88 Fix compilation error of Freestyle
Seems to be some sort of namespace conflict or so which is
solved by reshuffling the includes a bit.
2014-04-17 16:04:47 +06:00
Tamito Kajiyama
1674a04488 Freestyle: removed unused *_EXPORT qualifiers for building Windows DLLs.
These qualifiers were leftovers of the stand alone Freestyle program and not used
(set to an empty string) in Blender for years.
2014-04-17 14:37:13 +09:00
Tamito Kajiyama
3458bad12d Freestyle: removed unnecessary #include files and made minor code cleanup. 2014-04-17 14:37:10 +09:00
Tamito Kajiyama
01a4a09f29 Freestyle: Fix for VC++ warnings about 'hypot' macro redefinitions (Part 4).
(See commit e1771e72fbbf828dbf5bed871b814288389f3611 for more detail of
the problem).

Fix for a C++ scope issue caused by 'using namespace Freestyle' that was assumed
even within the Freestyle namespace definition.
2014-04-17 14:37:09 +09:00
Tamito Kajiyama
77b37fa461 Freestyle: Fix for VC++ warnings about 'hypot' macro redefinitions (Part 3).
(See commit e1771e72fbbf828dbf5bed871b814288389f3611 for more detail of
the problem).

Made changes to intern/view_map/Interface0D.h and intern/python/Director.h to
avoid #include <Python.h> and keep non-Python header files independent of it.
2014-04-17 14:37:08 +09:00
Tamito Kajiyama
5db8da8105 Freestyle: Fix for VC++ warnings about 'hypot' macro redefinitions (Part 1).
The issue was caused by including both Python.h and BLI_math.h.  Since the macro
definition in Python.h was unconditional, it was necessary to include it first and then
BLI_math.h.

Addressing the issue turned out to affect many Freestyle source files.  There were several
other coding flaws that complicated the situation:

1. intern/system/FreestyleConfig.h was abused just to include BLI_math.h which was in
fact unnecessary in FreestyleConfig.h.  While addressing this, inclusion of both math.h
and BLI_math.h had to be duly dealt with to avoid a compiler error about round().

2. #include <Python.h> was not properly put in the extern "C" { ... } construct.

3. intern/view_map/Interface0D.h and intern/python/Director.h, both of which included
Python.h, were included from within Freestyle header files that were almost or completely
independent of Python.  These non-Python header files were used everywhere in the
Freestyle code base, causing many cases of the reported macro redefinitions.

4. The Director.h file was also declaring 'using namespace Freestyle', which was causing
another scope issue in several Freestyle header files.

This commit is intended to address the first problem above.  Subsequent commits will deal
with the other three.
2014-04-17 14:37:05 +09:00
Campbell Barton
ea99efeb2c Code cleanup: indentation 2014-04-15 19:44:13 +10:00
Campbell Barton
1279c39609 Code cleanup: use parens around multi-line defines. 2014-04-07 20:38:16 +10:00
Tamito Kajiyama
62bf22e27b Freestyle: Removed SVertex _curvatureFredo and _directionFredo and their getter/setter methods..
These data elements are undocumented and of little use.  For now they are commented out
in the implementation in favor of less memory consumption, and a very limited support for
these data components in the Python API was just removed (should be easy to recover).
2014-04-04 23:47:31 +09:00
Tamito Kajiyama
685d785c98 Freestyle: Fix for class definitions of 0D/1D functions (functors).
Symbol 'real' is an alias of double and is subject to future change, while the interface of
0D/1D functions is part of the stable Freestyle Python API.  So all occurrences of this type
in the class definitions were replaced with double.
2014-04-04 23:47:30 +09:00
Tamito Kajiyama
75c0ced840 Freestyle: Fix for debug information about sweep line intersection detection.
Vertices of two edges were swapped by mistake.  Also fixed indentation and added
a couple of debug prints to make it easier to visualize the lines using Matlab.
2014-04-03 14:59:19 +09:00
Campbell Barton
0a112efcf7 Fix for building with MSVC2008 2014-04-02 09:16:47 +11:00
Campbell Barton
617557b08e Code cleanup: remove TRUE/FALSE & WITH_BOOL_COMPAT define 2014-04-01 15:22:28 +11:00
Alexandr Kuznetsov
e2429d6492 Woo Hoo. First git commit.
Changes for VC2013

Now, I can build Blender with VC2013 with Cycles, Collada, OpenExr,OpenImageIO disabled. Also, you need VC2008 sp1 installed to make old libs compatible.
2013-11-29 15:13:12 -05:00
Campbell Barton
41e563594d Code Cleanup: int pointer comparison 2013-11-22 08:39:13 +11:00
Campbell Barton
beae4f498d code cleanup: spelling 2013-10-31 14:10:01 +00:00
Bastien Montagne
0e46f1b1f8 Fix [#36727] Curve Object Scaled to 0 + Freestyle = Crash
Division by zero...
2013-09-15 14:27:06 +00:00
Campbell Barton
f6b37f34ec code cleanup:
- add missing headers from cmake (own omission)
- quiet rna_test.c unused define warnings.
- minor style edits
- spelling corrections and ignore all uppercase words with spell checking script.
2013-09-05 19:56:49 +00:00
Tamito Kajiyama
4ece675781 Quiet annoying VC++ warning C4819: The file contains a character that cannot be represented in the current code page. 2013-08-24 17:36:45 +00:00
Campbell Barton
98c574e41a use 'greater/less then or equal to' operators rather then adding 1. 2013-08-11 05:40:35 +00:00
Campbell Barton
5129112072 add c++/guardedalloc to more freestyle classes, also remove redundant 'public:' 2013-08-04 18:50:00 +00:00
Tamito Kajiyama
33b65832d2 Fix for [#35482] 2.67 freestyle line visibility computation bug.
The reported line visibility issue was caused by a wrong calculation of a 2D
bounding box (so-called "proscenium face" in Freestyle) in the case of a
spherical grid data structure used for a perspective camera.  The problem was
resulting from the proscenium computation based on two corners (min and max)
of the 3D bounding box of imported mesh data.  Aware of the spherical coordinate
transformation involving non-linear (arctangent) functions, now the proscenium
is computed by taking in account all the eight corners of the 3D bounding box.

Also added minor code changes to facilitate future debugging.
2013-07-13 19:33:25 +00:00
Tamito Kajiyama
f514fae6d8 Fix for Bug #35695: Freestyle produces extra line across an object with pointed areas.
The cause of inconsistent edge connectivity in the view map (documented in the commit
log of revision 58006) was identified and fixed.  The problem was that when a ViewEdge
was split at a cusp vertex (ViewMapBuilder::computeCusps()), the ViewVertex at one end
of a newly created ViewEdge in ViewMap::InsertViewVertex() was not properly updated to
take account of edge connectivity changes.
2013-07-11 17:25:18 +00:00
Campbell Barton
fad1da062d correct typos in comments. 2013-06-25 22:58:23 +00:00
Tamito Kajiyama
bc9121f627 Fix for Freestyle face marks incorrectly reset when feature edges are split at 2D intersections.
Problem report by an anonymous forum user with a .blend file for reproducing the bug, thanks!
2013-06-16 00:14:28 +00:00
Tamito Kajiyama
b614b81a77 Fix for [#35245] Freestyle getting stuck on view map creation + memory leaks.
There were two issues:

- Line visibility computations are very slow in the case of the provided .blend file, which gave
an impression that the rendering process got stuck.  The slowness can be explained by the present
data structures used for the line visibility computations, together with the specific mesh distribution
of the test scene.  At the moment Freestyle uses a regular grid in the 2D image coordinate system
to divide tris/quads into small groups in order to accelerate the line visibility computations.
On the other hand, the test scene is populated a big plane (made of one quad) and a moderately
detailed mesh object (22K tris).  The scale of the latter mesh is animated from nearly zero to
about 0.2 to make the object show up over time.  When the scale is nearly equal to zero, all the
tris concentrate in one grid cell, so essentially there is no performance gain from the grid data
structure optimized for speed.  It looks like a better grid data structure (possibly based on
adaptive grid refinement) is necessary to genuinely address the identified performance issue.  For now
the progress bar of Blender is employed to better inform users of the amount of work done in the line
visibility computations.

- A crash was caused by an excessive memory allocation request.  The X and Y dimensions of the grid
data structure are determined based on the average area of mesh faces in the given scene.  When the big
plane in the test scene is excluded from the rendering, the average area is almost zero (on the order
of 1e-5).  As a result of this extremely small average area, the X and Y dimensions were set to a very
large number, causing a fatal memory allocation error.  The present revision has introduced a hard
upper limit to the dimensions of the grid data structure to avoid this kind of numerical instability.
2013-05-19 00:56:40 +00:00
Tamito Kajiyama
6ea2dec330 Added support for WITH_CXX_GUARDEDALLOC build option to the Freestyle module. 2013-05-13 22:58:27 +00:00
Brecht Van Lommel
aa2a0e4ab0 More build fixes for visual studio 2012.
Patch #35019, #35131 and #35152 by Jurgen Herrmann.
2013-04-29 19:15:56 +00:00
Campbell Barton
8c1cb10cfd code cleanup: unused vars, make other vars static. 2013-04-10 22:49:50 +00:00
Tamito Kajiyama
800f86c845 Attempt to fix a potential name conflict between Freestyle and the compositor.
A crash in the Freestyle renderer was reported by Ton on IRC with a stack trace
below.  Note that #2 is in Freestyle, whereas #1 is in the compositor.  The problem
was observed in a debug build on OS X 10.7 (gcc 4.2, openmp disabled, no llvm).

----------------------------------------------------------------------
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 72386 thread 0xf303]
0x0000000100c129f3 in NodeBase::~NodeBase (this=0x10e501c80) at COM_NodeBase.cpp:43
43			delete (this->m_outputsockets.back());
Current language:  auto; currently c++
(gdb) where
#0  0x0000000100c129f3 in NodeBase::~NodeBase (this=0x10e501c80) at COM_NodeBase.cpp:43
#1  0x0000000100c29066 in Node::~Node (this=0x10e501c80) at COM_Node.h:49
#2  0x000000010089c273 in NodeShape::~NodeShape (this=0x10e501c80) at NodeShape.cpp:43
#3  0x000000010089910b in NodeGroup::destroy (this=0x10e501da0) at NodeGroup.cpp:61
#4  0x00000001008990cd in NodeGroup::destroy (this=0x10e5014b0) at NodeGroup.cpp:59
#5  0x00000001008990cd in NodeGroup::destroy (this=0x114e18da0) at NodeGroup.cpp:59
#6  0x00000001007e6602 in Controller::ClearRootNode (this=0x114e19640) at Controller.cpp:329
#7  0x00000001007ea52e in Controller::LoadMesh (this=0x114e19640, re=0x10aba4638, srl=0x1140f5258) at Controller.cpp:302
#8  0x00000001008030ad in prepare (re=0x10aba4638, srl=0x1140f5258) at FRS_freestyle.cpp:302
#9  0x000000010080457a in FRS_do_stroke_rendering (re=0x10aba4638, srl=0x1140f5258) at FRS_freestyle.cpp:600
#10 0x00000001006aeb9d in add_freestyle (re=0x10aba4638) at pipeline.c:1584
#11 0x00000001006aceb7 in do_render_3d (re=0x10aba4638) at pipeline.c:1094
#12 0x00000001006ae061 in do_render_fields_blur_3d (re=0x10aba4638) at pipeline.c:1367
#13 0x00000001006afa16 in do_render_composite_fields_blur_3d (re=0x10aba4638) at pipeline.c:1815
#14 0x00000001006b04e4 in do_render_all_options (re=0x10aba4638) at pipeline.c:2021
----------------------------------------------------------------------

Apparently a name conflict between the two Blender modules is taking place.
The present commit hence intends to address it by putting all the Freestyle C++
classes in the namespace 'Freestyle'.  This revision will also prevent potential
name conflicts with other Blender modules in the future.

Special thanks to Lukas Toenne for the help with C++ namespace.
2013-04-09 00:46:49 +00:00
Campbell Barton
829a2cc1b0 remove blender foundation copyright from freestyle files.
this can be added back on case-by-case basis, but better not assume ownership of another projects work by default.
2013-03-31 01:11:07 +00:00
Campbell Barton
ab8c837470 quiet warnings by making undeclared vars static 2013-03-19 10:07:23 +00:00
Tamito Kajiyama
2d801f2bec Another big code clean-up patch from Bastien Montagne, thanks again! 2013-03-11 06:56:51 +00:00
Tamito Kajiyama
9251d628db Slightly generalized the crash fix in revision 54111.
Also added a warning message to anticipate potential issues due to
the implication of the problem addressed here.
2013-01-26 22:28:04 +00:00
Tamito Kajiyama
68715c5ca7 A patch set from Bastien Montagne (thanks!) for silencing build warnings (from gcc 4.7),
mostly by commenting out unused variables, or using the BLI's SET_UINT_IN_POINTER macro.
2013-01-18 02:13:36 +00:00
Tamito Kajiyama
ec78eb353f New command-line option --debug-freestyle to enable verbose debug messages
on the console during Freestyle rendering.  The debug prints are turned off
by default now.  Errors are still printed on the console.

A patch set implementing this functionality was provided by Bastien Montagne.
Many thanks! :)
2013-01-03 23:27:20 +00:00
Tamito Kajiyama
699da2fb0d Yet another big style clean-up patch by Bastien Montagne, thanks a lot!
Now the code style is acceptable for the merge now, according to Bastien.
Thanks again Bastien for having this done! :)
2013-01-02 01:55:30 +00:00
Bastien Montagne
4e5e5412ef Fix encoding (from ISO 8859-15 to utf8). 2012-12-28 22:20:30 +00:00
Tamito Kajiyama
6569902081 Fix for svn:executable.
Reported by Bastien Montagne, thanks!
2012-12-11 23:01:21 +00:00
Tamito Kajiyama
3c4987f983 Fix for a number of compiler warnings as well as a bug hidden by the warnings.
Patch contribution by Bastien Montagne, thanks!
2012-12-08 22:24:41 +00:00
Tamito Kajiyama
a5f8298ea5 Experimental fix for incorrect view edge visibility.
The problem is that the visibility of view edges in the view map may be incorrect.
The main cause of this issue is that view edges are constructed from a series of FEdges
without testing the visibility of the FEdges being concatenated.  Later view edges
are split into pieces if two view edges intersect in the 2D image coordinate system.
After that the visibility of the view edges is computed by taking account of occluding
faces in the 3D scene.  In many cases this procedure results in correct line visibility,
but not always (that is the problem).

A simple solution experimentally implemented here is not to chain FEdges at all.
Instead view edges are constructed from at most one FEdge now.  This solution is only
applied to sharp FEdges (roughly corresponding to edges in the input mesh data; specifically,
silhouette, crease, border, edge mark, contour, external contour, and material boundary).

A better solution is to reorder the three steps of view edges construction mentioned above,
i.e., first splitting FEdges at 2D intersection, computing the visibility of the FEdges,
then concatenating them to build view edges.  This solution is left for future work for now.
2012-09-03 01:01:50 +00:00
Tamito Kajiyama
5a581c1fd1 Better handling of the ESC key during Freestyle rendering.
This commit is meant to improve the response of the ESC key for stopping Freestyle rendering
throughout the rendering process.  The rendering with Freestyle consists of several steps
including: (1) mesh data loading, (2) winged edge construction, (3) silhouette edge detection,
(4) view map construction, and (5) stroke drawing.  All these steps have been extended to
frequently check if the ESC key is pressed, so that users can abort time-consuming rendering
at any point of time.
2012-07-16 23:29:12 +00:00
Tamito Kajiyama
742e180a76 Fix for NaN's in the Z component of projected points by SilhouetteGeomEngine::ProjectSilhouette().
This issue arises when the Z depth of the bounding box of the scene being rendered is zero.
2012-06-16 21:15:50 +00:00
Tamito Kajiyama
0f33d5719f Made an attempt to fix an instability issue in stroke rendering due to a failure
of Normal2DF0D with smooth FEdges.  The fix is to avoid generating new FEdgeSmooth
instances whose length is shorter than epsilon.
2012-06-03 22:53:12 +00:00