[Bf-blender-cvs] [ab26e4d6a71] temp-T97352-3d-texturing-seam-bleeding: Better Seam fix detection

Jeroen Bakker noreply at git.blender.org
Fri Apr 22 10:51:46 CEST 2022


Commit: ab26e4d6a71c1170079387b5bb025f5e30b00e69
Author: Jeroen Bakker
Date:   Fri Apr 22 10:49:45 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding
https://developer.blender.org/rBab26e4d6a71c1170079387b5bb025f5e30b00e69

Better Seam fix detection

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

M	source/blender/blenkernel/intern/pbvh_pixels_seams.cc

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

diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index 9982888a5b7..685ed16372b 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -49,9 +49,7 @@ void find_connected_loops(BMesh *bm,
       else {
         connection_found = true;
         if (!BM_loop_uv_share_edge_check(l_first, l, cd_loop_uv_offset)) {
-          // This is an edge which is connected in 3d space, but not connected in uv space so fixes
-          // are needed.
-
+          /* Edge detected that is connected in 3d space, but not in uv space. */
           r_connected.append(BMLoopConnection(l_first, l));
           r_connected.append(BMLoopConnection(l, l_first));
           break;
@@ -274,7 +272,7 @@ static void build_fixes(PBVH &pbvh,
 
       /* Distance to the edge in pixel space. */
       float distance_to_edge = len_v2v2(closest_coord, uv_coord);
-      if (distance_to_edge > 3.5f) {
+      if (distance_to_edge > 3.0f) {
         continue;
       }
 
@@ -290,18 +288,27 @@ static void build_fixes(PBVH &pbvh,
       normalize_v2(perpedicular_b);
       perpedicular_b.x /= bitmap.resolution.x;
       perpedicular_b.y /= bitmap.resolution.y;
-      float2 projected_coord = other_closest_point +
-                               perpedicular_b * distance_to_edge * scale_factor;
-      projected_coord.x *= bitmap.resolution.x;
-      projected_coord.y *= bitmap.resolution.y;
+      float2 projected_coord_a = other_closest_point +
+                                 perpedicular_b * distance_to_edge * scale_factor;
+      projected_coord_a.x *= bitmap.resolution.x;
+      projected_coord_a.y *= bitmap.resolution.y;
+      int2 source_pixel = find_source_pixel(bitmap, projected_coord_a);
+      PixelInfo src_pixel_info = bitmap.get_pixel_info(source_pixel);
 
-      int2 source_pixel = find_source_pixel(bitmap, projected_coord);
-      int2 destination_pixel(u, v);
+      if (!src_pixel_info.is_extracted()) {
+        float2 projected_coord_b = other_closest_point -
+                                   perpedicular_b * distance_to_edge * scale_factor;
+        projected_coord_b.x *= bitmap.resolution.x;
+        projected_coord_b.y *= bitmap.resolution.y;
+        source_pixel = find_source_pixel(bitmap, projected_coord_b);
+        src_pixel_info = bitmap.get_pixel_info(source_pixel);
+      }
 
-      PixelInfo src_pixel_info = bitmap.get_pixel_info(source_pixel);
       if (!src_pixel_info.is_extracted()) {
         continue;
       }
+
+      int2 destination_pixel(u, v);
       int src_node = src_pixel_info.get_node_index();
 
       PBVHNode &node = pbvh.nodes[src_node];
@@ -394,7 +401,7 @@ static void build_fixes(
       float2 closest_coord(closest_point.x * bitmap.resolution.x,
                            closest_point.y * bitmap.resolution.y);
       float distance_to_edge = len_v2v2(uv_coord, closest_coord);
-      if (distance_to_edge > 2.5f) {
+      if (distance_to_edge > 3.0f) {
         continue;
       }



More information about the Bf-blender-cvs mailing list