diff options
author | Martin Felke <martin.felke@googlemail.com> | 2019-06-17 11:59:55 +0300 |
---|---|---|
committer | Martin Felke <martin.felke@googlemail.com> | 2019-06-17 11:59:55 +0300 |
commit | af7032e9f056c0ee5968015c64d63bf2d3c18031 (patch) | |
tree | 96ff3fc5ae710f2f49e767f88f911508cb1724ca | |
parent | 9c1016b74e15cb038f91b4f8aad56cf9c30397fe (diff) |
only write rotation data to mesh if particle rotation was enabled
-rw-r--r-- | source/blender/blenkernel/intern/fracture.c | 7 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_remesh.c | 57 |
2 files changed, 40 insertions, 24 deletions
diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c index 4b458cfd405..4c593f25ac3 100644 --- a/source/blender/blenkernel/intern/fracture.c +++ b/source/blender/blenkernel/intern/fracture.c @@ -4249,9 +4249,9 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, Object *ob, bool do_bi copy_v3_v3(co, mvert[v].co); copy_v3_v3(off, fmd->anim_bind[i].offset); - //if (fmd->anim_mesh_rot) + if (fmd->anim_mesh_rot) { - if (quats && fmd->anim_mesh_rot) + if (quats) { quat[0] = quatX[v]; quat[1] = quatY[v]; @@ -4297,8 +4297,9 @@ void BKE_read_animated_loc_rot(FractureModifierData *fmd, Object *ob, bool do_bi copy_v3_v3(mi->rigidbody->pos, co); + if (fmd->anim_mesh_rot) { - if (quats && fmd->anim_mesh_rot) { + if (quats) { //if rotations are changed, re-bind the object to fix mul_qt_qtqt(quat, ob_quat, quat); } diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c index 173d7d16a74..3f5899beb5d 100644 --- a/source/blender/modifiers/intern/MOD_remesh.c +++ b/source/blender/modifiers/intern/MOD_remesh.c @@ -265,10 +265,13 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, Object* ob, DerivedMes velY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "velY"); velZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "velZ"); - quatX = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatX"); - quatY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatY"); - quatZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatZ"); - quatW = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatW"); + if (psys->part->flag & PART_ROTATIONS) + { + quatX = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatX"); + quatY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatY"); + quatZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatZ"); + quatW = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n, "quatW"); + } orig_index = CustomData_add_layer(&dm->vertData, CD_ORIGINDEX, CD_CALLOC, NULL, n); @@ -281,10 +284,13 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, Object* ob, DerivedMes velY[i] = vel[i][1]; velZ[i] = vel[i][2]; - quatX[i] = rot[i][0]; - quatY[i] = rot[i][1]; - quatZ[i] = rot[i][2]; - quatW[i] = rot[i][3]; + if (quatX) + { + quatX[i] = rot[i][0]; + quatY[i] = rot[i][1]; + quatZ[i] = rot[i][2]; + quatW[i] = rot[i][3]; + } orig_index[i] = index[i]; } @@ -328,11 +334,14 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, Object* ob, DerivedMes velX = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "velX"); velY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "velY"); velZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "velZ"); - - quatX = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatX"); - quatY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatY"); - quatZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatZ"); - quatW = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatW"); + + if (psys->part->flag & PART_ROTATIONS) + { + quatX = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatX"); + quatY = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatY"); + quatZ = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatZ"); + quatW = CustomData_add_layer_named(&dm->vertData, CD_PROP_FLT, CD_CALLOC, NULL, n + derived->numVertData, "quatW"); + } orig_index = CustomData_add_layer(&dm->vertData, CD_ORIGINDEX, CD_CALLOC, NULL, n + derived->numVertData); @@ -362,10 +371,13 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, Object* ob, DerivedMes velY[i] = vel[i][1]; velZ[i] = vel[i][2]; - quatX[i] = rot[i][0]; - quatY[i] = rot[i][1]; - quatZ[i] = rot[i][2]; - quatW[i] = rot[i][3]; + if (quatX) + { + quatX[i] = rot[i][0]; + quatY[i] = rot[i][1]; + quatZ[i] = rot[i][2]; + quatW[i] = rot[i][3]; + } orig_index[i] = index[i]; @@ -384,10 +396,13 @@ static DerivedMesh *repolygonize(RemeshModifierData *rmd, Object* ob, DerivedMes velY[i] = ovY ? ovY[i-n] : 0.0f; velZ[i] = ovZ ? ovZ[i-n] : 0.0f; - quatX[i] = oqX ? oqX[i-n] : 1.0f; - quatZ[i] = oqY ? oqY[i-n] : 0.0f; - quatY[i] = oqZ ? oqZ[i-n] : 0.0f; - quatW[i] = oqW ? oqW[i-n] : 0.0f; + if (quatX) + { + quatX[i] = oqX ? oqX[i-n] : 1.0f; + quatZ[i] = oqY ? oqY[i-n] : 0.0f; + quatY[i] = oqZ ? oqZ[i-n] : 0.0f; + quatW[i] = oqW ? oqW[i-n] : 0.0f; + } orig_index[i] = i; if (dvert_new && dvert && defgrp_size > -1) |