Fix T55207, fix T55208: hair not positioned correctly after subsurf.
The problem was that the particle system modifier was reading ob->derivedDeform during modifier stack evaluation. Due to the mesh -> DM conversion this was no longer set leading to wrong results. In fact we don't really need the deformed mesh, just the original mesh topology for face/poly index remapping. So the solution is to use that instead.
This commit is contained in:
@@ -847,7 +847,7 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
|
||||
/* Simple children */
|
||||
if (part->childtype != PART_CHILD_FACES) {
|
||||
BLI_srandom(31415926 + psys->seed + psys->child_seed);
|
||||
distribute_simple_children(scene, ob, final_mesh, sim->psmd->mesh_deformed, psys, use_render_params);
|
||||
distribute_simple_children(scene, ob, final_mesh, sim->psmd->mesh_original, psys, use_render_params);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -1233,7 +1233,7 @@ static void distribute_particles_on_dm(ParticleSimulationData *sim, int from)
|
||||
|
||||
BLI_task_pool_free(task_pool);
|
||||
|
||||
psys_calc_dmcache(sim->ob, final_mesh, sim->psmd->mesh_deformed, sim->psys);
|
||||
psys_calc_dmcache(sim->ob, final_mesh, sim->psmd->mesh_original, sim->psys);
|
||||
|
||||
if (ctx.mesh != final_mesh)
|
||||
BKE_id_free(NULL, ctx.mesh);
|
||||
|
||||
Reference in New Issue
Block a user