diff options
Diffstat (limited to 'source/blender/modifiers/intern/MOD_displace.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_displace.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index 07da18f990d..010292d2ebb 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -177,6 +177,7 @@ typedef struct DisplaceUserdata { float (*vertexCos)[3]; float local_mat[4][4]; MVert *mvert; + const float (*vert_normals)[3]; float (*vert_clnors)[3]; } DisplaceUserdata; @@ -194,7 +195,6 @@ static void displaceModifier_do_task(void *__restrict userdata, bool use_global_direction = data->use_global_direction; float(*tex_co)[3] = data->tex_co; float(*vertexCos)[3] = data->vertexCos; - MVert *mvert = data->mvert; float(*vert_clnors)[3] = data->vert_clnors; const float delta_fixed = 1.0f - @@ -272,9 +272,7 @@ static void displaceModifier_do_task(void *__restrict userdata, add_v3_v3(vertexCos[iter], local_vec); break; case MOD_DISP_DIR_NOR: - vertexCos[iter][0] += delta * (mvert[iter].no[0] / 32767.0f); - vertexCos[iter][1] += delta * (mvert[iter].no[1] / 32767.0f); - vertexCos[iter][2] += delta * (mvert[iter].no[2] / 32767.0f); + madd_v3_v3fl(vertexCos[iter], data->vert_normals[iter], delta); break; case MOD_DISP_DIR_CLNOR: madd_v3_v3fl(vertexCos[iter], vert_clnors[iter], delta); @@ -363,6 +361,9 @@ static void displaceModifier_do(DisplaceModifierData *dmd, data.vertexCos = vertexCos; copy_m4_m4(data.local_mat, local_mat); data.mvert = mvert; + if (direction == MOD_DISP_DIR_NOR) { + data.vert_normals = BKE_mesh_vertex_normals_ensure(mesh); + } data.vert_clnors = vert_clnors; if (tex_target != NULL) { data.pool = BKE_image_pool_new(); |