[Bf-blender-cvs] [332423a7caa] soc-2019-npr: LANPR: two step chaining, need a toggle for switching 2d/3d space priority.

YimingWu noreply at git.blender.org
Sun Jun 23 12:02:44 CEST 2019


Commit: 332423a7caa01ed0988f63546009054e4a4f753e
Author: YimingWu
Date:   Sun Jun 23 18:00:03 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB332423a7caa01ed0988f63546009054e4a4f753e

LANPR: two step chaining, need a toggle for switching 2d/3d space priority.

===================================================================

M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_ops.c

===================================================================

diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 865a01d64c2..0295494624a 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1513,7 +1513,7 @@ bool BKE_gpencil_sample_stroke(bGPDstroke *gps, float dist)
     length += len_v3v3(last_coord, this_coord);
   }
 
-  int count = (int)(length / dist) + 3;  // preserve some extra in case
+  int count = (int)(length / dist) + 10;  // preserve some extra in case
 
   bGPDspoint *new_pt = MEM_callocN(sizeof(bGPDspoint) * count, "gp_stroke_points_sampled");
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index 849b161c8dc..4ed3d873c20 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -525,7 +525,7 @@ void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb)
                                              rlci->normal,
                                              rlci->line_type,
                                              fixed_occ);
-
+        new_rlc->object_ref = rlc->object_ref;
         rlc = new_rlc;
         fixed_occ = rlci->occlusion;
       }
@@ -569,7 +569,7 @@ void lanpr_connect_two_chains(LANPR_RenderBuffer *rb,
 
 // this only does head-tail connection.
 // overlapping / tiny isolated segment / loop reduction not implemented here yet.
-void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
+void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_space)
 {
   LANPR_RenderLineChain *rlc, *new_rlc;
   LANPR_RenderLineChainItem *rlci, *next_rlci;
@@ -596,7 +596,7 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
 
     rlci = rlc->chain.last;
     while (ba = lanpr_get_end_point_bounding_area(rb, rlci)) {
-      dist = 100.0f;
+      dist = do_geometry_space?rb->scene->lanpr.chaining_threshold:100.0f;
       closest_cre = NULL;
       if (!ba->linked_chains.first)
         break;
@@ -610,7 +610,9 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
           BLI_remlink(&ba->linked_chains, cre);
           continue;
         }
-        float new_len = len_v2v2(cre->rlci->pos, rlci->pos);
+        float new_len = do_geometry_space?
+                        len_v3v3(cre->rlci->gpos,rlci->gpos):
+                        len_v2v2(cre->rlci->pos, rlci->pos);
         if (new_len < dist) {
           closest_cre = cre;
           dist = new_len;
@@ -636,7 +638,7 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
 
     rlci = rlc->chain.first;
     while (ba = lanpr_get_end_point_bounding_area(rb, rlci)) {
-      dist = 100.0f;
+      dist = do_geometry_space?rb->scene->lanpr.chaining_threshold:100.0f;
       closest_cre = NULL;
       if (!ba->linked_chains.first)
         break;
@@ -649,7 +651,9 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
           BLI_remlink(&ba->linked_chains, cre);
           continue;
         }
-        float new_len = len_v2v2(cre->rlci->pos, rlci->pos);
+        float new_len = do_geometry_space?
+                        len_v3v3(cre->rlci->gpos,rlci->gpos):
+                        len_v2v2(cre->rlci->pos, rlci->pos);
         if (new_len < dist) {
           closest_cre = cre;
           dist = new_len;
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 16248a8e8c1..714bf2c8d34 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3748,7 +3748,7 @@ void lanpr_viewport_draw_offline_result(LANPR_TextureList *txl,
 
 void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb);
 void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb);
-void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb);
+void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_space);
 
 void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction)
 {
@@ -4041,7 +4041,8 @@ int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph)
   if (lanpr->enable_chaining) {
     lanpr_NO_THREAD_chain_feature_lines(rb);  // should use user_adjustable value
     lanpr_split_chains_for_fixed_occlusion(rb);
-    lanpr_connect_chains_image_space(rb);
+    lanpr_connect_chains_image_space(rb, 1);
+    lanpr_connect_chains_image_space(rb, 0);
   }
 
   rb->cached_for_frame = rb->scene->r.cfra;
@@ -4305,6 +4306,7 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
             gpl = BKE_gpencil_layer_addnew(gpd,"lanpr_layer",true);
           }
           gpf = BKE_gpencil_frame_addnew(gpl,frame);
+          BKE_gpencil_free_strokes(gpf); // force clear now
 
           lanpr_generate_gpencil_from_chain(md, dg, ob, gpl, gpf);
         }



More information about the Bf-blender-cvs mailing list