Fix: Artifacting in experimental texture paint on non-manifold meshes

When texture painting a non-manifold mesh, various artifacts are created
on the image texture.

To add seams to the edges of non-manifold UV islands, the texture
painting system reads and writes pixels near the edge of the UV islands.

The offset calculations used to find pixel positions for reading and
writing were not accounting for color channels (RGBA) in the pixel data.
Because of this, the reading function corrupted the color data for the
seams, and the writing function caused the seams to be scaled down and
repeated.

Pull Request: https://projects.blender.org/blender/blender/pulls/146110
This commit is contained in:
T0MIS0N
2025-09-16 10:05:24 +02:00
committed by Sean Kim
parent b27b7b1803
commit 416b9990c8

View File

@@ -63,7 +63,7 @@ template<typename T, int Channels = 4> struct ImageBufferAccessor {
return float4(&image_buffer.float_buffer.data[offset]);
}
if constexpr ((std::is_same_v<T, int>)) {
int offset = (coordinate.y * image_buffer.x + coordinate.x);
int offset = (coordinate.y * image_buffer.x + coordinate.x) * Channels;
float4 result;
rgba_uchar_to_float(
result,
@@ -80,7 +80,7 @@ template<typename T, int Channels = 4> struct ImageBufferAccessor {
copy_v4_v4(&image_buffer.float_buffer.data[offset], new_value);
}
if constexpr ((std::is_same_v<T, int>)) {
int offset = (coordinate.y * image_buffer.x + coordinate.x);
int offset = (coordinate.y * image_buffer.x + coordinate.x) * Channels;
rgba_float_to_uchar(
static_cast<uchar *>(static_cast<void *>(&image_buffer.byte_buffer.data[offset])),
new_value);