[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