[Bf-blender-cvs] [79907fb0bef] temp-T97352-3d-texturing-seam-bleeding-b2: Fix reading incorrect uv coordinates.
Jeroen Bakker
noreply at git.blender.org
Fri Jun 10 11:09:24 CEST 2022
Commit: 79907fb0befcb6c992dc46a773bba74d6e663571
Author: Jeroen Bakker
Date: Fri Jun 10 11:09:20 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rB79907fb0befcb6c992dc46a773bba74d6e663571
Fix reading incorrect uv coordinates.
===================================================================
M source/blender/blenkernel/BKE_uv_islands.hh
M source/blender/blenkernel/intern/pbvh_pixels.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_uv_islands.hh b/source/blender/blenkernel/BKE_uv_islands.hh
index 46448295482..a9864d4286a 100644
--- a/source/blender/blenkernel/BKE_uv_islands.hh
+++ b/source/blender/blenkernel/BKE_uv_islands.hh
@@ -296,6 +296,23 @@ struct UVPrimitive {
return false;
}
+ /**
+ * Get the UVVertex in the order that the verts are ordered in the MeshPrimitive.
+ */
+ const UVVertex *get_uv_vertex(const uint8_t mesh_vert_index) const
+ {
+ const MeshVertex *mesh_vertex = primitive->vertices[mesh_vert_index].vertex;
+ for (const UVEdge *uv_edge : edges) {
+ for (const UVVertex *uv_vert : uv_edge->vertices) {
+ if (uv_vert->vertex == mesh_vertex) {
+ return uv_vert;
+ }
+ }
+ }
+ BLI_assert_unreachable();
+ return nullptr;
+ }
+
UVBorder extract_border() const;
};
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 32f5dc2d2f3..3acc49eada3 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -27,7 +27,7 @@ namespace blender::bke::pbvh::pixels {
* During debugging this check could be enabled.
* It will write to each image pixel that is covered by the PBVH.
*/
-constexpr bool USE_WATERTIGHT_CHECK = true;
+constexpr bool USE_WATERTIGHT_CHECK = false;
/* -------------------------------------------------------------------- */
@@ -142,7 +142,6 @@ static void do_encode_pixels(void *__restrict userdata,
EncodePixelsUserData *data = static_cast<EncodePixelsUserData *>(userdata);
Image *image = data->image;
ImageUser image_user = *data->image_user;
- PBVH *pbvh = data->pbvh;
PBVHNode *node = (*data->nodes)[n];
NodeData *node_data = static_cast<NodeData *>(node->pixels.node_data);
LISTBASE_FOREACH (ImageTile *, tile, &data->image->tiles) {
@@ -153,8 +152,9 @@ static void do_encode_pixels(void *__restrict userdata,
continue;
}
- float2 tile_offset = float2(image_tile.get_tile_offset());
UDIMTilePixels tile_data;
+ tile_data.tile_number = image_tile.get_tile_number();
+ float2 tile_offset = float2(image_tile.get_tile_offset());
for (int pbvh_node_prim_index = 0; pbvh_node_prim_index < node->totprim;
pbvh_node_prim_index++) {
@@ -164,10 +164,11 @@ static void do_encode_pixels(void *__restrict userdata,
if (uv_primitive.primitive->index != geom_prim_index) {
continue;
}
+ uv_islands::UVBorder uv_border = uv_primitive.extract_border();
float2 uvs[3] = {
- uv_primitive.edges[0]->vertices[0]->uv - tile_offset,
- uv_primitive.edges[1]->vertices[0]->uv - tile_offset,
- uv_primitive.edges[2]->vertices[0]->uv - tile_offset,
+ uv_primitive.get_uv_vertex(0)->uv - tile_offset,
+ uv_primitive.get_uv_vertex(1)->uv - tile_offset,
+ uv_primitive.get_uv_vertex(2)->uv - tile_offset,
};
const float minv = clamp_f(min_fff(uvs[0].y, uvs[1].y, uvs[2].y), 0.0f, 1.0f);
const int miny = floor(minv * image_buffer->y);
@@ -199,7 +200,6 @@ static void do_encode_pixels(void *__restrict userdata,
continue;
}
- tile_data.tile_number = image_tile.get_tile_number();
node_data->tiles.append(tile_data);
}
}
More information about the Bf-blender-cvs
mailing list