[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