[Bf-blender-cvs] [fbbffc0420e] soc-2019-npr: LANPR: separate thresholds for image/geometry space chaining.

YimingWu noreply at git.blender.org
Wed Jun 26 08:31:31 CEST 2019


Commit: fbbffc0420e1c2606c1581487de93379f538c3b2
Author: YimingWu
Date:   Wed Jun 26 14:29:28 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBfbbffc0420e1c2606c1581487de93379f538c3b2

LANPR: separate thresholds for image/geometry space chaining.

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

M	release/scripts/startup/bl_ui/properties_render.py
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 75412dd46c8..cf24fc4b6e3 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -1029,7 +1029,12 @@ class RENDER_PT_lanpr_software_chain_styles(RenderButtonsPanel, Panel):
         layout = self.layout
         scene = context.scene
         lanpr = scene.lanpr
-        layout.prop(lanpr, "chaining_threshold")
+        
+        layout.label(text="Threasholds:")
+        row = layout.row(align=True)
+        row.prop(lanpr, "chaining_geometry_threshold", text="Geometry")
+        row.prop(lanpr, "chaining_image_threshold", text="Image")
+
         layout.label(text="Taper:")
         layout.prop(lanpr, "use_same_taper", expand = True)
         if lanpr.use_same_taper == "DISABLED":
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index eb8eedcb275..4f431e4b8e3 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -999,7 +999,8 @@ void BKE_scene_init(Scene *sce)
 
   sce->lanpr.enable_intersections = 1;
   sce->lanpr.enable_chaining = 1;
-  sce->lanpr.chaining_threshold = 0.01;
+  sce->lanpr.chaining_image_threshold = 0.01;
+  sce->lanpr.chaining_geometry_threshold = 0.1;
 }
 
 Scene *BKE_scene_add(Main *bmain, const char *name)
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 5d584cc81f9..edc2759341e 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3542,7 +3542,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 
       sce->lanpr.enable_intersections = 1;
       sce->lanpr.enable_chaining = 1;
-      sce->lanpr.chaining_threshold = 0.01;
+      sce->lanpr.chaining_image_threshold = 0.01;
+      sce->lanpr.chaining_geometry_threshold = 0.1;
     }
   }
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index b19ca4d8c3a..266d1edf8ae 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -592,7 +592,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, int do_geometry_space)
+void lanpr_connect_chains(LANPR_RenderBuffer *rb, int do_geometry_space)
 {
   LANPR_RenderLineChain *rlc, *new_rlc;
   LANPR_RenderLineChainItem *rlci, *next_rlci;
@@ -602,6 +602,11 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_sp
   int occlusion;
   ListBase swap = {0};
 
+  if ((!do_geometry_space && rb->scene->lanpr.chaining_image_threshold < 0.0001) ||
+      (do_geometry_space && rb->scene->lanpr.chaining_geometry_threshold < 0.0001)) {
+    return;
+  }
+
   swap.first = rb->chains.first;
   swap.last = rb->chains.last;
 
@@ -620,7 +625,8 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_sp
 
     rlci = rlc->chain.last;
     while (ba = lanpr_get_end_point_bounding_area(rb, rlci)) {
-      dist = do_geometry_space ? rb->scene->lanpr.chaining_threshold : 100.0f;
+      dist = do_geometry_space ? rb->scene->lanpr.chaining_geometry_threshold :
+                                 rb->scene->lanpr.chaining_image_threshold;
       closest_cre = NULL;
       if (!ba->linked_chains.first) {
         break;
@@ -645,7 +651,7 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_sp
           dist = new_len;
         }
       }
-      if (dist < rb->scene->lanpr.chaining_threshold && closest_cre) {
+      if (closest_cre) {
         closest_cre->picked = 1;
         closest_cre->rlc->picked = 1;
         BLI_remlink(&ba->linked_chains, cre);
@@ -665,7 +671,8 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_sp
 
     rlci = rlc->chain.first;
     while (ba = lanpr_get_end_point_bounding_area(rb, rlci)) {
-      dist = do_geometry_space ? rb->scene->lanpr.chaining_threshold : 100.0f;
+      dist = do_geometry_space ? rb->scene->lanpr.chaining_geometry_threshold :
+                                 rb->scene->lanpr.chaining_image_threshold;
       closest_cre = NULL;
       if (!ba->linked_chains.first) {
         break;
@@ -690,7 +697,7 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb, int do_geometry_sp
           dist = new_len;
         }
       }
-      if (dist < rb->scene->lanpr.chaining_threshold && closest_cre) {
+      if (closest_cre) {
         closest_cre->picked = 1;
         closest_cre->rlc->picked = 1;
         BLI_remlink(&ba->linked_chains, cre);
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 33dbb10aaa2..c130916e17d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3810,7 +3810,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, int do_geometry_space);
+void lanpr_connect_chains(LANPR_RenderBuffer *rb, int do_geometry_space);
 
 void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction)
 {
@@ -4120,9 +4120,9 @@ 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, 1);
-    // lanpr_connect_chains_image_space(rb, 0);
+    lanpr_split_chains_for_fixed_occlusion(rb);
+    lanpr_connect_chains(rb, 1);
+    lanpr_connect_chains(rb, 0);
   }
 
   rb->cached_for_frame = rb->scene->r.cfra;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index a6ccd284e3f..b4494b3df64 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1640,7 +1640,7 @@ struct LANPR_LineLayer;
 typedef struct SceneLANPR {
 
   int enabled;
-  int auto_update;  // for LANPR->GP to update automatically
+  int auto_update; /* for LANPR->GP to update automatically */
 
   int master_mode;
 
@@ -1681,22 +1681,19 @@ typedef struct SceneLANPR {
   int reloaded;
 
   /* offline render */
-
-  // struct LANPR_RenderBuffer *render_buffer; /* no longer accessible directly from here */
-  ListBase line_layers; /* now here!!! */
+  ListBase line_layers;
   struct LANPR_LineLayer *active_layer;
 
   char enable_intersections;
   char enable_chaining;
   char enable_chain_connection;
   char _pad1;
-  float chaining_threshold;
+  float chaining_geometry_threshold;
+  float chaining_image_threshold;
 
   /* composite utility */
   int composite_render_animation;
 
-  int _pad2;
-
 } SceneLANPR;
 
 /* *************************************************************** */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 4e1d530f242..41a209b6f2b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -7361,13 +7361,23 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
                            "Enable Chain Connection",
                            "Connect short chains in the image space into one longer chain");
 
-  prop = RNA_def_property(srna, "chaining_threshold", PROP_FLOAT, PROP_NONE);
+  prop = RNA_def_property(srna, "chaining_geometry_threshold", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_default(prop, 0.1f);
+  RNA_def_property_ui_text(prop,
+                           "Geometry Threshold",
+                           "Segments where their geometric distance between them lower than this "
+                           "will be chained together");
+  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 3);
+  RNA_def_property_range(prop, 0.0f, 1.0f);
+
+  prop = RNA_def_property(srna, "chaining_image_threshold", PROP_FLOAT, PROP_NONE);
   RNA_def_property_float_default(prop, 0.01f);
   RNA_def_property_ui_text(
       prop,
-      "Threshold",
-      "Segments where distance between them lower than this value will be chained together");
-  RNA_def_property_ui_range(prop, 0.0f, 0.02f, 0.001, 3);
+      "Image Threshold",
+      "Segments where their image distance between them lower than this will be chained together");
+  RNA_def_property_ui_range(prop, 0.0f, 0.1f, 0.001, 4);
+  RNA_def_property_range(prop, 0.0f, 0.1f);
 
   /* here's the collection stuff.... */



More information about the Bf-blender-cvs mailing list