Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2022-04-22 11:56:55 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2022-04-22 16:28:12 +0300
commit9c279723da7132ed5f2a09d75ff3b116fb9959a6 (patch)
treeca647cf07df5512da55c675d7eb806aab23379ae
parent5179b8236ba84e50d26485a17df6b17d8e581477 (diff)
Fix Data Transfer Projected Face/Edge Interpolated mode is wrong
Caused by {rBcfa53e0fbeed} Above commit mixed up source and destination meshes causing bad lookups on calculated normals. Now make sure we get normals from our destination mesh to project along. Note this was only reported for Projected Face Interpolated mode, but same was true for Projected Edge Interpolated mode (though that one is a bit weird to test since I think there is generally something wrong with that mode -- with or without rBcfa53e0fbeed). Fixes T97528 Maniphest Tasks: T97528 Differential Revision: https://developer.blender.org/D14726
-rw-r--r--source/blender/blenkernel/BKE_mesh_remap.h2
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c2
-rw-r--r--source/blender/blenkernel/intern/mesh_remap.c8
3 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_mesh_remap.h b/source/blender/blenkernel/BKE_mesh_remap.h
index 395fc5c7eba..e2b16a7681d 100644
--- a/source/blender/blenkernel/BKE_mesh_remap.h
+++ b/source/blender/blenkernel/BKE_mesh_remap.h
@@ -178,6 +178,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(int mode,
int numverts_dst,
bool dirty_nors_dst,
struct Mesh *me_src,
+ struct Mesh *me_dst,
MeshPairRemap *r_map);
void BKE_mesh_remap_calc_edges_from_mesh(int mode,
@@ -190,6 +191,7 @@ void BKE_mesh_remap_calc_edges_from_mesh(int mode,
int numedges_dst,
bool dirty_nors_dst,
struct Mesh *me_src,
+ struct Mesh *me_dst,
MeshPairRemap *r_map);
void BKE_mesh_remap_calc_loops_from_mesh(int mode,
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index f1365256fed..6a3f6a47f5e 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -1501,6 +1501,7 @@ bool BKE_object_data_transfer_ex(struct Depsgraph *depsgraph,
num_verts_dst,
dirty_nors_dst,
me_src,
+ me_dst,
&geom_map[VDATA]);
geom_map_init[VDATA] = true;
}
@@ -1579,6 +1580,7 @@ bool BKE_object_data_transfer_ex(struct Depsgraph *depsgraph,
num_edges_dst,
dirty_nors_dst,
me_src,
+ me_dst,
&geom_map[EDATA]);
geom_map_init[EDATA] = true;
}
diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c
index 2e634a14872..3a37c29c1d0 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -478,6 +478,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode,
const int numverts_dst,
const bool UNUSED(dirty_nors_dst),
Mesh *me_src,
+ Mesh *me_dst,
MeshPairRemap *r_map)
{
const float full_weight = 1.0f;
@@ -580,7 +581,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode,
MPoly *polys_src = me_src->mpoly;
MLoop *loops_src = me_src->mloop;
float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
- const float(*vert_normals_src)[3] = BKE_mesh_vertex_normals_ensure(me_src);
+ const float(*vert_normals_dst)[3] = BKE_mesh_vertex_normals_ensure(me_dst);
size_t tmp_buff_size = MREMAP_DEFAULT_BUFSIZE;
float(*vcos)[3] = MEM_mallocN(sizeof(*vcos) * tmp_buff_size, __func__);
@@ -592,7 +593,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode,
if (mode == MREMAP_MODE_VERT_POLYINTERP_VNORPROJ) {
for (i = 0; i < numverts_dst; i++) {
copy_v3_v3(tmp_co, verts_dst[i].co);
- copy_v3_v3(tmp_no, vert_normals_src[i]);
+ copy_v3_v3(tmp_no, vert_normals_dst[i]);
/* Convert the vertex to tree coordinates, if needed. */
if (space_transform) {
@@ -703,6 +704,7 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode,
const int numedges_dst,
const bool UNUSED(dirty_nors_dst),
Mesh *me_src,
+ Mesh *me_dst,
MeshPairRemap *r_map)
{
const float full_weight = 1.0f;
@@ -938,7 +940,7 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode,
BKE_bvhtree_from_mesh_get(&treedata, me_src, BVHTREE_FROM_EDGES, 2);
- const float(*vert_normals_dst)[3] = BKE_mesh_vertex_normals_ensure(me_src);
+ const float(*vert_normals_dst)[3] = BKE_mesh_vertex_normals_ensure(me_dst);
for (i = 0; i < numedges_dst; i++) {
/* For each dst edge, we sample some rays from it (interpolated from its vertices)