diff options
author | YimingWu <xp8110@outlook.com> | 2021-07-27 09:02:22 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2021-07-27 09:02:34 +0300 |
commit | 675d8a9c4331b512745a69f3ec1eff98400291a7 (patch) | |
tree | 28fff29d3bcc323d05eb7689170cd437472fd294 /source/blender | |
parent | 6ee14c966d05362228511756c4906e043b87e346 (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h | 3 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c | 4 |
2 files changed, 4 insertions, 3 deletions
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 { |