[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