[Bf-blender-cvs] [a4147edb3e2] soc-2019-npr: LANPR: Fixed occlusion bugs in first-step chaining.
YimingWu
noreply at git.blender.org
Wed Jun 26 08:31:29 CEST 2019
Commit: a4147edb3e244e3f45623cf4ed4313eec3be0bf1
Author: YimingWu
Date: Wed Jun 26 14:02:20 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBa4147edb3e244e3f45623cf4ed4313eec3be0bf1
LANPR: Fixed occlusion bugs in first-step chaining.
===================================================================
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 fbe062c7e31..b19ca4d8c3a 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -295,40 +295,38 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
last_occlusion = rls->occlusion;
}
}
- else {
- if (new_rv == new_rl->r) {
- rls = new_rl->segments.first;
- last_occlusion = rls->occlusion;
- rls = (LANPR_RenderLineSegment *)rls->item.next;
- for (rls; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) {
- double gpos[3], lpos[3];
- lanpr_LinearInterpolate3dv(new_rl->l->fbcoord, new_rl->r->fbcoord, rls->at, lpos);
- lanpr_LinearInterpolate3dv(new_rl->l->gloc, new_rl->r->gloc, rls->at, gpos);
- lanpr_push_render_line_chain_point(rb,
- rlc,
- lpos[0],
- lpos[1],
- gpos[0],
- gpos[1],
- gpos[2],
- N,
- new_rl->flags,
- last_occlusion);
- last_occlusion = rls->occlusion;
- }
+ else if (new_rv == new_rl->r) {
+ rls = new_rl->segments.first;
+ last_occlusion = rls->occlusion;
+ rls = (LANPR_RenderLineSegment *)rls->item.next;
+ for (rls; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) {
+ double gpos[3], lpos[3];
+ lanpr_LinearInterpolate3dv(new_rl->l->fbcoord, new_rl->r->fbcoord, rls->at, lpos);
+ lanpr_LinearInterpolate3dv(new_rl->l->gloc, new_rl->r->gloc, rls->at, gpos);
lanpr_push_render_line_chain_point(rb,
rlc,
- new_rl->r->fbcoord[0],
- new_rl->r->fbcoord[1],
- new_rl->r->gloc[0],
- new_rl->r->gloc[1],
- new_rl->r->gloc[2],
+ lpos[0],
+ lpos[1],
+ gpos[0],
+ gpos[1],
+ gpos[2],
N,
new_rl->flags,
last_occlusion);
+ last_occlusion = rls->occlusion;
}
- ba = lanpr_get_point_bounding_area(rb, new_rv->fbcoord[0], new_rv->fbcoord[1]);
+ lanpr_push_render_line_chain_point(rb,
+ rlc,
+ new_rl->r->fbcoord[0],
+ new_rl->r->fbcoord[1],
+ new_rl->r->gloc[0],
+ new_rl->r->gloc[1],
+ new_rl->r->gloc[2],
+ N,
+ new_rl->flags,
+ last_occlusion);
}
+ ba = lanpr_get_point_bounding_area(rb, new_rv->fbcoord[0], new_rv->fbcoord[1]);
}
/* step 2: this line */
@@ -370,17 +368,13 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
if (new_rv == new_rl->l) {
rls = new_rl->segments.last;
last_occlusion = rls->occlusion;
- rlci->occlusion = last_occlusion;
- /* rls = (LANPR_RenderLineSegment *)rls->item.prev; */
- if (rls) {
- last_occlusion = rls->occlusion;
- }
+ rlci->occlusion = last_occlusion; /* fix leading vertex occlusion */
for (rls = new_rl->segments.last; rls; rls = (LANPR_RenderLineSegment *)rls->item.prev) {
double gpos[3], lpos[3];
lanpr_LinearInterpolate3dv(new_rl->l->fbcoord, new_rl->r->fbcoord, rls->at, lpos);
lanpr_LinearInterpolate3dv(new_rl->l->gloc, new_rl->r->gloc, rls->at, gpos);
- last_occlusion = (LANPR_RenderLineSegment *)rls->item.next ?
- ((LANPR_RenderLineSegment *)rls->item.next)->occlusion :
+ last_occlusion = (LANPR_RenderLineSegment *)rls->item.prev ?
+ ((LANPR_RenderLineSegment *)rls->item.prev)->occlusion :
last_occlusion;
lanpr_append_render_line_chain_point(rb,
rlc,
@@ -394,39 +388,37 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb)
last_occlusion);
}
}
- else {
- if (new_rv == new_rl->r) {
- rls = new_rl->segments.first;
- last_occlusion = rls->occlusion;
- rlci->occlusion = last_occlusion;
- rls = (LANPR_RenderLineSegment *)rls->item.next;
- for (rls; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) {
- double gpos[3], lpos[3];
- lanpr_LinearInterpolate3dv(new_rl->l->fbcoord, new_rl->r->fbcoord, rls->at, lpos);
- lanpr_LinearInterpolate3dv(new_rl->l->gloc, new_rl->r->gloc, rls->at, gpos);
- lanpr_append_render_line_chain_point(rb,
- rlc,
- lpos[0],
- lpos[1],
- gpos[0],
- gpos[1],
- gpos[2],
- N,
- new_rl->flags,
- rls->occlusion);
- last_occlusion = rls->occlusion;
- }
+ else if (new_rv == new_rl->r) {
+ rls = new_rl->segments.first;
+ last_occlusion = rls->occlusion;
+ rlci->occlusion = last_occlusion;
+ rls = (LANPR_RenderLineSegment *)rls->item.next;
+ for (rls; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) {
+ double gpos[3], lpos[3];
+ lanpr_LinearInterpolate3dv(new_rl->l->fbcoord, new_rl->r->fbcoord, rls->at, lpos);
+ lanpr_LinearInterpolate3dv(new_rl->l->gloc, new_rl->r->gloc, rls->at, gpos);
lanpr_append_render_line_chain_point(rb,
rlc,
- new_rl->r->fbcoord[0],
- new_rl->r->fbcoord[1],
- new_rl->r->gloc[0],
- new_rl->r->gloc[1],
- new_rl->r->gloc[2],
+ lpos[0],
+ lpos[1],
+ gpos[0],
+ gpos[1],
+ gpos[2],
N,
new_rl->flags,
- last_occlusion);
+ rls->occlusion);
+ last_occlusion = rls->occlusion;
}
+ lanpr_append_render_line_chain_point(rb,
+ rlc,
+ new_rl->r->fbcoord[0],
+ new_rl->r->fbcoord[1],
+ new_rl->r->gloc[0],
+ new_rl->r->gloc[1],
+ new_rl->r->gloc[2],
+ N,
+ new_rl->flags,
+ last_occlusion);
}
ba = lanpr_get_point_bounding_area(rb, new_rv->fbcoord[0], new_rv->fbcoord[1]);
}
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 4f1637276ae..33dbb10aaa2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -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_image_space(rb, 1);
+ // lanpr_connect_chains_image_space(rb, 0);
}
rb->cached_for_frame = rb->scene->r.cfra;
More information about the Bf-blender-cvs
mailing list