Commit Graph

223 Commits

Author SHA1 Message Date
Tamito Kajiyama
a2a2d4679a Made temporary changes to use G.main rather than Freestyle-local Main for debugging. 2014-08-12 10:10:34 +09:00
Tamito Kajiyama
1ddb8e238e Freestyle: Keep a reference of the line style in Stroke rather than in StrokeRep. 2014-08-12 10:10:31 +09:00
Tamito Kajiyama
83360eccae Fix for renamed API functions in rB415af0b. 2014-08-12 10:10:29 +09:00
Tamito Kajiyama
701f0356df Freestyle: Removed a debug print in BlenderStrokeRenderer::GetStrokeShader(). 2014-08-12 10:10:28 +09:00
Tamito Kajiyama
722951eceb Freestyle: Added "blend_type" and "use_clamp" options to the Output Line Style shader node. 2014-08-12 10:10:27 +09:00
Tamito Kajiyama
7e9ac19b2c Freestyle: Fix for stroke_shader node default values copied from the Output Line Style node. 2014-08-12 10:10:24 +09:00
Tamito Kajiyama
4e11fcead0 Follow-up to rB647969f9b617: Renamed CTX_data_linestyle_from_scene() to BKE_get_linestyle_from_scene(). 2014-08-12 10:10:21 +09:00
Tamito Kajiyama
fc85446c50 Freestyle: Added preliminary support for textured strokes in Cycles.
Now the shader node tree of a line style ID datablock is used to define textures
as well as their mapping and influence.

TODO: Textures alpha channel mapping and influence.
TODO: Blend mode in the Output Line Style shader node.
2014-08-12 10:10:20 +09:00
Tamito Kajiyama
91c31efe01 Enabled USE_CYCLES_FOR_STROKE_RENDERING compile-time flag by default. 2014-08-12 10:10:15 +09:00
Tamito Kajiyama
1e513658de Always use the Blender Internal renderer for stroke rendering. 2014-08-12 10:10:12 +09:00
Tamito Kajiyama
d459d102b5 Added new operator "Create Freestyle Stroke Material" for testing. 2014-08-12 10:10:11 +09:00
Tamito Kajiyama
ea1f54d8f3 Fix for hard-coded #include file paths. 2014-08-12 10:10:10 +09:00
Tamito Kajiyama
b272b729ce Removed ad-hoc use of R_PERSISTENT_DATA for Freestyle/Cycles. 2014-08-12 10:10:08 +09:00
Tamito Kajiyama
f75d87bd76 Initial implementation of Cycles materials for Freestyle stroke rendering. 2014-08-12 10:10:06 +09:00
Tamito Kajiyama
f70e1ad2fb Proof-of-concept implementation of Freestyle support for Cycles. 2014-08-12 10:10:05 +09:00
Tamito Kajiyama
54109add65 Freestyle: minor speedup by omitting unnecessary transform matrix operations in the file loader.
Previously the imported mesh data were transformed by a local-to-world projection matrix
through NodeTransform.  Now that the file loader assumes the imported mesh data already
in the camera coordinate system, an indentity matrix was supplied to NodeTransform.
The present commit avoids this redundant matrix operation by using NodeGroup instead of
NodeTransform, recalling the latter is a subclass of the former with extra matrix computations.
2014-07-23 13:03:55 +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
944e576717 Fix for a wrong threads count shown in Freestyle debug mode (--debug-freestyle). 2014-07-04 15:18:44 +09:00
Tamito Kajiyama
6c6fa749f6 Second attempt to fix T40833: Crash when rendering with freestyle.
The cause of the crash was identified in an uninitialized member variable
`Main->lock`.  Now that struct Main has a few member variables whose
values are dynamically allocated, per-render Freestyle-specific Main data
structures will be allocated and released using `BKE_main_new()` and
`BKE_main_free()`, respectively.

This revision complements the commit rB6135556f4556.
2014-07-01 23:36:53 +09:00
Tamito Kajiyama
ccfe845ff4 Freestyle: Fix for "cast shadows only" materials not handled properly.
Problem report by Light BWK through personal communications, thanks!
2014-06-29 22:24:28 +09:00
Tamito Kajiyama
e3e56971eb Reverted part of my previous commit causing a crash. 2014-06-26 12:54:55 +09:00
Tamito Kajiyama
2c004708f2 Freestyle: code cleanup: removed unused (outdated) static variables. 2014-06-26 12:13:39 +09:00
Tamito Kajiyama
e7c92f1145 Freestyle: Progress bar updates during mesh loading. 2014-06-24 17:25:04 +09:00
Sergey Sharybin
ca0c0e7549 Implement resolution divider in the Blender Internal
Currently resolution divider is not exposed to the
interface yet, and i'm not even sure it needs to be
exposed because it's somewhat weird configuration.
Need to check how often artists are changing start
resolution in Cycles.

Pretty much straightforward implementation with the
only weak part: render result is getting re-allocated
and upscaled when current resolution is finished.
Not sure how to make it faster actually. Maybe it's
just a matter of making upscale fast enough.

Needed to fix some possible memory leak happening
in Freestyle when canceling rendering on a special
stage -- it was missing temp bmain free,

Reviewers: campbellbarton, dingto

CC: sebastian_k, fsiddi, venomgfx

Differential Revision: https://developer.blender.org/D609
2014-06-20 17:32:45 +06:00
Tamito Kajiyama
56b67cb2b4 Freestyle: code cleanup - removed very old commented lines of code. 2014-05-22 00:46:25 +09:00
Tamito Kajiyama
7a085b4c85 Revised the debug code added in the commit rB4958aff780a3 according to the raised concern. 2014-05-17 17:40:04 +09:00
Tamito Kajiyama
4958aff780 Freestyle: Added a piece of debug code for checking the consistency of face normals.
The code was found helpful while addressing T39669 and might help solving similar
issues related to face normals in the future.
2014-05-17 10:36:39 +09:00
Tamito Kajiyama
ae00a2b3fd Freestyle: Removed redundant flipping of UV coordinates.
Patch contribution by Paolo Acampora.  Thank you!
2014-05-13 09:16:28 +09:00
Tamito Kajiyama
d930c63f03 Freestyle: Fix for the active line set index possibly invalidated after deleting a line set. 2014-05-11 17:57:41 +09:00
Tamito Kajiyama
39c078202d Added BKE_freestyle_lineset_delete() by generalizing FRS_delete_active_lineset(). 2014-05-11 17:57:40 +09:00
Tamito Kajiyama
40520d549d Freestyle: Stroke rendering optimization.
Previously mesh objects were created for individual visible stroke segments (recalling that
a stroke may consist of alternate visible and invisible segments).  This could result in an
excessive memory consumption in stroke rendering when strokes are composed of many
short visible segments (for instance by means of dashed lines and/or blueprint geometry
modifiers).

Now mesh objects represent individual strokes instead of stroke segments, which tends to
reduce the number of generated mesh objects by an order of magnitude.
2014-05-09 12:19:29 +09:00
Tamito Kajiyama
b24708775f De-duplicated #includes. 2014-05-09 12:19:28 +09:00
Tamito Kajiyama
1064b74196 Fix for an occasional crash in Freestyle stroke rendering.
Materials were freed before releasing meshes that may have references to the materials.
2014-05-09 12:19:25 +09:00
Tamito Kajiyama
75d49b7f55 Removed a Freestyle hack for DAG updates introduced in commit rBae58968e0a61.
Now that Freestyle employs a separate Main, this workaround is no longer necessary.

Reviewers: sergey

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D513
2014-05-08 18:42:47 +09:00
Tamito Kajiyama
1d03a8b309 Freestyle: minor code clean-up. 2014-05-07 23:16:24 +09:00
Tamito Kajiyama
fe0236be78 Freestyle: time/space optimization in stroke rendering without textures.
When strokes do not have textures assigned, UV coordinates are not computed now.
This will save a bit of time and space in stroke rendering.
2014-05-07 23:16:23 +09:00
Tamito Kajiyama
a351ff7264 Freestyle: removed the dummy implementation of a texture manager.
Legacy texture shaders from the original stand-alone Freestyle program are also
declared as deprecated, in favor of Blender's new line style textures.

Patch contribution by Paolo Acampora.  Thanks!
2014-05-07 10:57:32 +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
59b94f2193 Freestyle: quiet BMESH validator warnings of zero normals. 2014-04-24 13:57:10 +09:00
Tamito Kajiyama
6161e4420e Quite compiler warnings. 2014-04-18 15:02:43 +09: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
68aea619f5 Replaced assert() with BLI_assert(). 2014-04-17 14:37:11 +09:00
Campbell Barton
617557b08e Code cleanup: remove TRUE/FALSE & WITH_BOOL_COMPAT define 2014-04-01 15:22:28 +11:00
Campbell Barton
433d55e9b4 Code cleanup: spelling & style 2014-03-15 23:46:02 +11:00
Campbell Barton
37026b12ec Code cleanup: use bool for static methods 2014-02-05 22:36:15 +11:00
Brecht Van Lommel
e79b244097 Fix collada and freestyle module compile errors after recent commit, forgot to
compile with those enabled.
2014-01-15 19:15:51 +01:00
Sergey Sharybin
ebbb6adf32 Fix for infinite freestyle re-render in the viewport
Was a regression since e618d8238e and was caused by the wrong
main being tagged for update.
2014-01-15 17:42:01 +06:00
Sergey Sharybin
e618d8238e Fix T38054: High CPU usage with many objects
This is a regression since threaded dependency graph landed to master.
Root of the issue goes to the loads of graph preparation being done
even if there's nothing to be updated.

The idea of this change is to use ID type recalc bits to determine
whether there're objects to be updated. Generally speaking, we now
check object and object data datablocks with DAG_id_type_tagged()
and if there's no such IDs tagged we skip the whole task pool creation
and so,

The only difficult aspect was that in some circumstances it was possible
that there are tagged objects but nothing in ID recalc bit fields.

There were several different circumstances when it was possible:

* When one assigns object->recalc flag directly DAG flush didn't
  set corresponding bits to ID recalc bits. Partially it is fixed
  by making it so flush will set bitfield, but also for object
  types there's no reason to assign recalc flag directly. Using
  generic DAG_id_type_tag works almost the same fast as direct
  assignment, ensures all the bitflags are set properly and for the
  long run it seems it's what we would actually want to.

* DAG_on_visible_update() didn't set recalc bits at all.

* Some areas were checking for object->recalc != 0, however it is was
  possible that object recalc flag contains PSYS_RECALC_CHILD which
  was never cleaned from there.

  No idea why would we need to assign such a flag when enabling
  scene simplification, this is to be investigated separately.

* It is possible that scene_update_post and frame_update_post handlers
  will modify objects. The issue is that DAG_ids_clear_recalc is called
  just after callbacks, which leaves objects with recalc flags but no
  corresponding bit in ID recalc bitfield. This leads to some kind of
  regression when using ID type tag fields to check whether there objects
  to be updated internally comparing threaded DAG with legacy one.

  For now let's have a workaround which will preserve tag for ID_OB
  if there're objects with OB_RECALC_ALL bits. This keeps behavior
  unchanged comparing with 2.69 release.
2014-01-13 15:57:51 +06:00
Campbell Barton
b6ea073af2 more fixes relating to [#36878], freestyle was only checking for NULL linestyles in some places. 2013-09-30 09:28:43 +00:00
Campbell Barton
5129112072 add c++/guardedalloc to more freestyle classes, also remove redundant 'public:' 2013-08-04 18:50:00 +00:00