Fix T54488: hair disconnect/reconnect not working with modifiers

Take the Use Modifier Stack setting into account when connecting hair, and
fix wrong results results when using deforming modifiers also.

Differential Revision: https://developer.blender.org/D13704
This commit is contained in:
Aleksi Juvani 2022-01-05 16:36:34 +01:00 committed by Philipp Oeser
parent b61a912128
commit a4171f4866
Notes: blender-bot 2023-10-18 15:23:11 +02:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
Referenced by issue #54488, hair disconnect/reconnect not working with modifiers
1 changed files with 11 additions and 3 deletions

View File

@ -742,8 +742,10 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
invert_m4_m4(from_imat, from_mat);
invert_m4_m4(to_imat, to_mat);
if (target_psmd->mesh_final->runtime.deformed_only) {
/* we don't want to mess up target_psmd->dm when converting to global coordinates below */
const bool use_dm_final_indices = (target_psys->part->use_modifier_stack &&
!target_psmd->mesh_final->runtime.deformed_only);
if (use_dm_final_indices) {
mesh = target_psmd->mesh_final;
}
else {
@ -823,7 +825,13 @@ static bool remap_hair_emitter(Depsgraph *depsgraph,
tpa->foffset = 0.0f;
tpa->num = nearest.index;
tpa->num_dmcache = psys_particle_dm_face_lookup(target_mesh, mesh, tpa->num, tpa->fuv, NULL);
if (use_dm_final_indices) {
tpa->num_dmcache = DMCACHE_ISCHILD;
}
else {
tpa->num_dmcache = psys_particle_dm_face_lookup(
target_psmd->mesh_final, target_psmd->mesh_original, tpa->num, tpa->fuv, NULL);
}
}
else {
me = &medge[nearest.index];