[Bf-blender-cvs] [fb6010e47ca] temp-lineart-contained: LineArt: Fix light contour when no ref is selected

YimingWu noreply at git.blender.org
Tue Jun 22 13:57:20 CEST 2021


Commit: fb6010e47ca789dadeabf7bbe8c73aa5acfdbc62
Author: YimingWu
Date:   Tue Jun 22 19:57:05 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBfb6010e47ca789dadeabf7bbe8c73aa5acfdbc62

LineArt: Fix light contour when no ref is selected

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/makesdna/DNA_gpencil_modifier_defaults.h
M	source/blender/makesdna/DNA_lineart_types.h

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index ab283053ab4..4833954c0ac 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit ab283053ab455f76f5620b59b823e73bd9f601ce
+Subproject commit 4833954c0ac85cc407e1d5a153aa11b1d1823ec0
diff --git a/release/scripts/addons b/release/scripts/addons
index ec07ed4c2e0..f86f25e6221 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit ec07ed4c2e0495bea7fbe0b546d25e35211506a9
+Subproject commit f86f25e62217264495d05f116ccb09d575fe9841
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 9b915041c50..81ce421d2c9 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1529,33 +1529,38 @@ static uint16_t lineart_identify_feature_line(LineartRenderBuffer *rb,
   double result;
   uint16_t edge_flag_result = 0;
 
-  if (rb->cam_is_persp) {
-    sub_v3_v3v3_db(view_vector, l->gloc, rb->camera_pos);
-  }
-  else {
-    view_vector = rb->view_vector;
-  }
+  if (rb->use_contour) {
 
-  dot_1 = dot_v3v3_db(view_vector, tri1->gn);
-  dot_2 = dot_v3v3_db(view_vector, tri2->gn);
+    if (rb->cam_is_persp) {
+      sub_v3_v3v3_db(view_vector, l->gloc, rb->camera_pos);
+    }
+    else {
+      view_vector = rb->view_vector;
+    }
 
-  if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
-    edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
-  }
+    dot_1 = dot_v3v3_db(view_vector, tri1->gn);
+    dot_2 = dot_v3v3_db(view_vector, tri2->gn);
 
-  if (rb->light_is_sun) {
-    view_vector = rb->light_vector;
-  }
-  else {
-    view_vector = vv;
-    sub_v3_v3v3_db(view_vector, l->gloc, rb->light_vector);
+    if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
+      edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
+    }
   }
 
-  dot_1 = dot_v3v3_db(view_vector, tri1->gn);
-  dot_2 = dot_v3v3_db(view_vector, tri2->gn);
+  if (rb->use_light_contour) {
+    if (rb->light_is_sun) {
+      view_vector = rb->light_vector;
+    }
+    else {
+      view_vector = vv;
+      sub_v3_v3v3_db(view_vector, l->gloc, rb->light_vector);
+    }
+
+    dot_1 = dot_v3v3_db(view_vector, tri1->gn);
+    dot_2 = dot_v3v3_db(view_vector, tri2->gn);
 
-  if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
-    edge_flag_result |= LRT_EDGE_FLAG_LIGHT_CONTOUR;
+    if ((result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
+      edge_flag_result |= LRT_EDGE_FLAG_LIGHT_CONTOUR;
+    }
   }
 
   if (rb->use_crease && (dot_v3v3_db(tri1->gn, tri2->gn) < crease_threshold)) {
@@ -3131,7 +3136,8 @@ static LineartRenderBuffer *lineart_create_render_buffer(Scene *scene,
   rb->use_edge_marks = (edge_types & LRT_EDGE_FLAG_EDGE_MARK) != 0;
   rb->use_intersections = (edge_types & LRT_EDGE_FLAG_INTERSECTION) != 0;
   rb->use_floating = (edge_types & LRT_EDGE_FLAG_FLOATING) != 0;
-  rb->use_light_contour = (edge_types & LRT_EDGE_FLAG_LIGHT_CONTOUR) != 0;
+  rb->use_light_contour = ((edge_types & LRT_EDGE_FLAG_LIGHT_CONTOUR) != 0 &&
+                           (lmd->light_contour_object != NULL));
 
   rb->filter_face_mark_invert = (lmd->calculation_flags & LRT_FILTER_FACE_MARK_INVERT) != 0;
   rb->filter_face_mark = (lmd->calculation_flags & LRT_FILTER_FACE_MARK) != 0;
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_defaults.h b/source/blender/makesdna/DNA_gpencil_modifier_defaults.h
index 52a5df3b49a..05f37da56fe 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_defaults.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_defaults.h
@@ -289,7 +289,7 @@
 
 #define _DNA_DEFAULT_LineartGpencilModifierData \
   { \
-    .edge_types = LRT_EDGE_FLAG_ALL_TYPE, \
+    .edge_types = LRT_EDGE_FLAG_INIT_TYPE, \
     .thickness = 25, \
     .opacity = 1.0f, \
     .flags = LRT_GPENCIL_MATCH_OUTPUT_VGROUP, \
diff --git a/source/blender/makesdna/DNA_lineart_types.h b/source/blender/makesdna/DNA_lineart_types.h
index 576bcc37f3d..3aa61c3c775 100644
--- a/source/blender/makesdna/DNA_lineart_types.h
+++ b/source/blender/makesdna/DNA_lineart_types.h
@@ -77,6 +77,7 @@ typedef enum eLineartEdgeFlag {
 } eLineartEdgeFlag;
 
 #define LRT_EDGE_FLAG_ALL_TYPE 0x7f
+#define LRT_EDGE_FLAG_INIT_TYPE 0x37 /* Without material & light contour */
 #define LRT_EDGE_FLAG_TYPE_MAX_BITS 7
 
 #endif



More information about the Bf-blender-cvs mailing list