[Bf-blender-cvs] [c627d7ede25] temp-T96710-pbvh-pixels: Remove experimental uv seam bleeding

Jeroen Bakker noreply at git.blender.org
Fri Apr 15 11:51:45 CEST 2022


Commit: c627d7ede2543f9ac2c9c32c83c7cf8ddd7f2460
Author: Jeroen Bakker
Date:   Fri Apr 15 11:51:21 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBc627d7ede2543f9ac2c9c32c83c7cf8ddd7f2460

Remove experimental uv seam bleeding

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

M	source/blender/blenkernel/BKE_pbvh_pixels.hh
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/pbvh_pixels.cc
D	source/blender/blenkernel/intern/pbvh_pixels_seams.cc

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

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index b2cdb9353e3..dbfc03dd12a 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -184,10 +184,5 @@ struct NodeData {
 
 NodeData &BKE_pbvh_pixels_node_data_get(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser &image_user);
-/** Extend pixels to fix uv seams for the given nodes. */
-void BKE_pbvh_pixels_fix_seams(PBVH &pbvh,
-                               Image &image,
-                               ImageUser &image_user,
-                               const MLoopUV *ldata_uv);
 
 }  // namespace blender::bke::pbvh::pixels
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 1dd270ab591..0444fd33302 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -245,7 +245,6 @@ set(SRC
   intern/pbvh.c
   intern/pbvh_bmesh.c
   intern/pbvh_pixels.cc
-  intern/pbvh_pixels_seams.cc
   intern/pointcache.c
   intern/pointcloud.cc
   intern/preferences.c
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 52f16cdb3fa..07da012f619 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -25,7 +25,6 @@ namespace blender::bke::pbvh::pixels {
 /** Durind debugging this check could be enabled. It will write to each image pixel that is covered
  * by the pbvh. */
 constexpr bool USE_WATERTIGHT_CHECK = false;
-constexpr bool USE_WATERTIGHT_SEAM_CHECK = true;
 
 /**
  * Calculate the delta of two neighbour uv coordinates in the given image buffer.
@@ -268,12 +267,7 @@ static void apply_watertight_check(PBVH *pbvh, Image *image, ImageUser *image_us
                            pixel_row.start_image_coordinate.x;
         for (int x = 0; x < pixel_row.num_pixels; x++) {
           if (image_buffer->rect_float) {
-            if (USE_WATERTIGHT_SEAM_CHECK) {
-              image_buffer->rect_float[pixel_offset * 4] += 0.5;
-            }
-            else {
-              copy_v4_fl(&image_buffer->rect_float[pixel_offset * 4], 1.0);
-            }
+            copy_v4_fl(&image_buffer->rect_float[pixel_offset * 4], 1.0);
           }
           if (image_buffer->rect) {
             uint8_t *dest = static_cast<uint8_t *>(
@@ -321,10 +315,6 @@ static void update_pixels(PBVH *pbvh,
   TaskParallelSettings settings;
   BKE_pbvh_parallel_range_settings(&settings, true, nodes_to_update.size());
   BLI_task_parallel_range(0, nodes_to_update.size(), &user_data, do_encode_pixels, &settings);
-  if (USE_WATERTIGHT_CHECK && USE_WATERTIGHT_SEAM_CHECK) {
-    apply_watertight_check(pbvh, image, image_user);
-  }
-  BKE_pbvh_pixels_fix_seams(*pbvh, *image, *image_user, ldata_uv);
   if (USE_WATERTIGHT_CHECK) {
     apply_watertight_check(pbvh, image, image_user);
   }
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
deleted file mode 100644
index 2a883011cea..00000000000
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ /dev/null
@@ -1,316 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later
- * Copyright 2022 Blender Foundation. All rights reserved. */
-
-#include "BKE_pbvh.h"
-#include "BKE_pbvh_pixels.hh"
-
-#include "pbvh_intern.h"
-
-#include "BLI_math_geom.h"
-
-namespace blender::bke::pbvh::pixels {
-
-struct ExtendUVContext {
-  PBVH *pbvh;
-  const ImBuf *image_buffer;
-  const MLoopUV *ldata_uv;
-};
-
-static bool intersect_uv_pixel(const ushort2 &pixel_coordinate,
-                               const ImBuf &image_buffer,
-                               const float2 triangle_uvs[3])
-{
-
-  float2 uv_bottom_left = float2(pixel_coordinate.x / float(image_buffer.x),
-                                 pixel_coordinate.y / float(image_buffer.y));
-  float2 uv_top_right = float2((pixel_coordinate.x + 1) / float(image_buffer.x),
-                               (pixel_coordinate.y + 1) / float(image_buffer.y));
-  float2 uv_bottom_right(uv_top_right[0], uv_bottom_left[1]);
-  float2 uv_top_left(uv_bottom_left[0], uv_top_right[1]);
-
-  return (isect_seg_seg_v2_simple(
-              uv_bottom_left, uv_bottom_right, triangle_uvs[0], triangle_uvs[1]) ||
-          isect_seg_seg_v2_simple(uv_bottom_left, uv_top_left, triangle_uvs[0], triangle_uvs[1]) ||
-          isect_seg_seg_v2_simple(uv_top_left, uv_top_right, triangle_uvs[0], triangle_uvs[1]) ||
-          isect_seg_seg_v2_simple(
-              uv_bottom_right, uv_top_right, triangle_uvs[0], triangle_uvs[1])) ||
-         (isect_seg_seg_v2_simple(
-              uv_bottom_left, uv_bottom_right, triangle_uvs[1], triangle_uvs[2]) ||
-          isect_seg_seg_v2_simple(uv_bottom_left, uv_top_left, triangle_uvs[1], triangle_uvs[2]) ||
-          isect_seg_seg_v2_simple(uv_top_left, uv_top_right, triangle_uvs[1], triangle_uvs[2]) ||
-          isect_seg_seg_v2_simple(
-              uv_bottom_right, uv_top_right, triangle_uvs[1], triangle_uvs[2])) ||
-         (isect_seg_seg_v2_simple(
-              uv_bottom_left, uv_bottom_right, triangle_uvs[2], triangle_uvs[0]) ||
-          isect_seg_seg_v2_simple(uv_bottom_left, uv_top_left, triangle_uvs[2], triangle_uvs[0]) ||
-          isect_seg_seg_v2_simple(uv_top_left, uv_top_right, triangle_uvs[2], triangle_uvs[0]) ||
-          isect_seg_seg_v2_simple(
-              uv_bottom_right, uv_top_right, triangle_uvs[2], triangle_uvs[0]));
-}
-
-struct UVSeamExtenderRowPackage {
-  /** Amount of pixels to extend beyond the determined extension to reduce rendering artifacts. */
-  static const int ADDITIONAL_EXTEND_X = 1;
-
-  PackedPixelRow *pixel_row;
-  TrianglePaintInput *triangle_paint_data;
-  bool is_new;
-  int extend_xmin_len = 0;
-  int extend_xmax_len = 0;
-
-  UVSeamExtenderRowPackage(ExtendUVContext &context,
-                           PackedPixelRow *pixel_row,
-                           TrianglePaintInput *triangle_paint_data,
-                           bool is_new,
-                           const int3 &loop_indices)
-      : pixel_row(pixel_row), triangle_paint_data(triangle_paint_data), is_new(is_new)
-  {
-    init_extend_x_len(context, loop_indices);
-  }
-
-  bool should_extend_start() const
-  {
-    return extend_xmin_len != 0;
-  }
-
-  void extend_x_start()
-  {
-    BLI_assert(extend_xmin_len != 0);
-    pixel_row->num_pixels += 1;
-    pixel_row->start_image_coordinate[0] -= 1;
-    pixel_row->start_barycentric_coord -= triangle_paint_data->delta_barycentric_coord_u;
-    extend_xmin_len--;
-  }
-
-  bool should_extend_end() const
-  {
-    return extend_xmax_len != 0;
-  }
-
-  void extend_x_end()
-  {
-    BLI_assert(extend_xmax_len != 0);
-    pixel_row->num_pixels += 1;
-    extend_xmax_len--;
-  }
-
- private:
-  void init_extend_x_len(ExtendUVContext &context, const int3 &loop_indices)
-  {
-    if (!is_new) {
-      return;
-    }
-
-    float2 triangle_uvs[3];
-    triangle_uvs[0] = context.ldata_uv[loop_indices[0]].uv;
-    triangle_uvs[1] = context.ldata_uv[loop_indices[1]].uv;
-    triangle_uvs[2] = context.ldata_uv[loop_indices[2]].uv;
-
-    init_extend_xmin_len(context, triangle_uvs);
-    init_extend_xmax_len(context, triangle_uvs);
-    BLI_assert(extend_xmin_len);
-    BLI_assert(extend_xmax_len);
-  }
-
-  void init_extend_xmin_len(ExtendUVContext &context, const float2 triangle_uvs[3])
-  {
-    int result = 0;
-    while (should_extend_xmin(*context.image_buffer, result, triangle_uvs)) {
-      result++;
-    }
-    extend_xmin_len = result + ADDITIONAL_EXTEND_X;
-  }
-
-  bool should_extend_xmin(const ImBuf &image_buffer,
-                          int offset,
-                          const float2 triangle_uvs[3]) const
-  {
-    uint16_t pixel_offset = offset + 1;
-    ushort2 pixel = pixel_row->start_image_coordinate - ushort2(pixel_offset, 0);
-    return intersect_uv_pixel(pixel, image_buffer, triangle_uvs);
-  }
-
-  void init_extend_xmax_len(ExtendUVContext &context, const float2 triangle_uvs[3])
-  {
-    int result = 0;
-    while (should_extend_xmax(*context.image_buffer, result, triangle_uvs)) {
-      result++;
-    }
-    extend_xmax_len = result + ADDITIONAL_EXTEND_X;
-  }
-
-  bool should_extend_xmax(const ImBuf &image_buffer,
-                          int offset,
-                          const float2 triangle_uvs[3]) const
-  {
-    uint16_t pixel_offset = offset + 1;
-    ushort2 pixel = pixel_row->start_image_coordinate + ushort2(pixel_offset, 0);
-    return intersect_uv_pixel(pixel, image_buffer, triangle_uvs);
-  }
-};
-
-class UVSeamExtenderRow : public Vector<UVSeamExtenderRowPackage> {
-
- public:
-  bool has_packages_that_needs_fixing = false;
-
-  void append(UVSeamExtenderRowPackage &package)
-  {
-    has_packages_that_needs_fixing |= package.is_new;
-    Vector<UVSeamExtenderRowPackage>::append(package);
-  }
-
-  void extend_x(int image_buffer_width)
-  {
-    std::sort(
-        begin(), end(), [](const UVSeamExtenderRowPackage &a, const UVSeamExtenderRowPackage &b) {
-          return a.pixel_row->start_image_coordinate[0] < b.pixel_row->start_image_coordinate[0];
-        });
-    extend_x_start();
-    extend_x_end(image_buffer_width);
-  }
-
- private:
-  void extend_x_start()
-  {
-    int prev_package_x = -1;
-    int index = 0;
-
-    for (UVSeamExtenderRowPackage &package : *this) {
-      if (package.is_new) {
-        while (package.should_extend_start()) {
-          if (package.pixel_row->start_image_coordinate[0] - 1 <= prev_package_x) {
-            /* No room left for extending. */
-            break;
-          }
-          package.extend_x_start();
-        }
-      }
-
-      prev_package_x = package.pixel_row->start_image_coordinate[0] +
-                       package.pixel_row->num_pixels;
-      index++;
-    }
-  }
-
-  void extend_x_end(int image_buffer_width)
-  {
-    int index = 0;
-    for (UVSeamExtenderRowPackage &package : *this) {
-      if (package.is_new) {
-        int next_package_x;
-        if (index < size() - 1) {
-          const UVSeamExtenderRo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list