From 675d8a9c4331b512745a69f3ec1eff98400291a7 Mon Sep 17 00:00:00 2001 From: YimingWu Date: Tue, 27 Jul 2021 14:02:22 +0800 Subject: LineArt: Occlusion accuracy fix. This patch fixes occlusion function to handle one specific case (when an edge shares a point with triangle) better,especially when there's overlapping edges in this case. --- source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h | 3 ++- source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'source/blender/gpencil_modifiers') diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h index 1d4370ed3a9..3730dba8e70 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h +++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h @@ -473,7 +473,8 @@ typedef struct LineartBoundingArea { BLI_INLINE int lineart_LineIntersectTest2d( const double *a1, const double *a2, const double *b1, const double *b2, double *aRatio) { -#define USE_VECTOR_LINE_INTERSECTION +/* Legacy intersection math aligns better with occlusion function quirks. */ +/* #define USE_VECTOR_LINE_INTERSECTION */ #ifdef USE_VECTOR_LINE_INTERSECTION /* from isect_line_line_v2_point() */ diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c index 83abac201d0..a97d79a886e 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c @@ -2475,8 +2475,8 @@ static bool lineart_triangle_edge_image_space_occlusion(SpinLock *UNUSED(spl), } } else if (st_r == 0) { - INTERSECT_JUST_GREATER(is, order, 0, LCross); - if (LRT_ABC(LCross) && is[LCross] > 0) { + INTERSECT_JUST_GREATER(is, order, DBL_TRIANGLE_LIM, LCross); + if (LRT_ABC(LCross) && is[LCross] > DBL_TRIANGLE_LIM) { INTERSECT_JUST_GREATER(is, order, is[LCross], RCross); } else { -- cgit v1.2.3