[Bf-blender-cvs] [506dbb8cff9] soc-2019-npr: LANPR: discard very short chains.

YimingWu noreply at git.blender.org
Mon Jul 1 09:51:08 CEST 2019


Commit: 506dbb8cff9409affb2069be8599d0141b6d7776
Author: YimingWu
Date:   Mon Jul 1 15:49:42 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB506dbb8cff9409affb2069be8599d0141b6d7776

LANPR: discard very short chains.

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

M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_ops.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index eaecdc04609..7f33c467a35 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -723,6 +723,33 @@ void lanpr_connect_chains(LANPR_RenderBuffer *rb, int do_geometry_space)
   }
 }
 
+/* length is in image space */
+float lanpr_compute_chain_length(LANPR_RenderLineChain *rlc){
+  LANPR_RenderLineChainItem *rlci;
+  float offset_accum = 0;
+  float dist;
+  float last_point[2];
+
+  rlci = rlc->chain.first;
+  copy_v2_v2(last_point, rlci->pos);
+  for (rlci = rlc->chain.first; rlci; rlci = rlci->next) {
+    dist = len_v2v2(rlci->pos, last_point);
+    offset_accum += dist;
+    copy_v2_v2(last_point, rlci->pos);
+  }
+  return offset_accum;
+}
+
+void lanpr_discard_short_chains(LANPR_RenderBuffer* rb, float threshold){
+  LANPR_RenderLineChain *rlc,*next_rlc;
+  for(rlc = rb->chains.first;rlc;rlc=next_rlc){
+    next_rlc = rlc->next;
+    if(lanpr_compute_chain_length(rlc)<threshold){
+      BLI_remlink(&rb->chains,rlc);
+    }
+  }
+}
+
 int lanpr_count_chain(LANPR_RenderLineChain *rlc)
 {
   LANPR_RenderLineChainItem *rlci;
@@ -733,7 +760,7 @@ int lanpr_count_chain(LANPR_RenderLineChain *rlc)
   return Count;
 }
 
-float lanpr_compute_chain_length(LANPR_RenderLineChain *rlc, float *lengths, int begin_index)
+float lanpr_compute_chain_length_draw(LANPR_RenderLineChain *rlc, float *lengths, int begin_index)
 {
   LANPR_RenderLineChainItem *rlci;
   int i = 0;
@@ -811,7 +838,7 @@ void lanpr_chain_generate_draw_command(LANPR_RenderBuffer *rb)
 
   for (rlc = rb->chains.first; rlc; rlc = rlc->next) {
 
-    total_length = lanpr_compute_chain_length(rlc, lengths, i);
+    total_length = lanpr_compute_chain_length_draw(rlc, lengths, i);
 
     for (rlci = rlc->chain.first; rlci; rlci = rlci->next) {
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index f48220af0f4..4311831f5e4 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3877,6 +3877,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(LANPR_RenderBuffer *rb, int do_geometry_space);
+void lanpr_discard_short_chains(LANPR_RenderBuffer* rb, float threshold);
 
 void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction)
 {
@@ -4193,6 +4194,7 @@ int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph)
     lanpr_split_chains_for_fixed_occlusion(rb);
     lanpr_connect_chains(rb, 1);
     lanpr_connect_chains(rb, 0);
+    lanpr_discard_short_chains(rb, 0.01);
   }
 
   rb->cached_for_frame = rb->scene->r.cfra;



More information about the Bf-blender-cvs mailing list