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:
-rw-r--r--source/blender/blenkernel/intern/armature.c18
-rw-r--r--source/blender/blenkernel/intern/armature_update.c12
2 files changed, 21 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index cf7b9981b72..1a13c8d50a0 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -1070,7 +1070,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_i
copy_v3_v3(cop, co);
if (vec) {
- if (pchan->bone->segments > 1)
+ if (pchan->bone->segments > 1 && pdef_info->b_bone_mats != NULL)
/* applies on cop and bbonemat */
b_bone_deform(pdef_info, pchan->bone, cop, NULL, (mat) ? bbonemat : NULL);
else
@@ -1084,7 +1084,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_i
pchan_deform_mat_add(pchan, weight, bbonemat, mat);
}
else {
- if (pchan->bone->segments > 1) {
+ if (pchan->bone->segments > 1 && pdef_info->b_bone_mats != NULL) {
b_bone_deform(pdef_info, pchan->bone, cop, &bbonedq, NULL);
add_weighted_dq_dq(dq, &bbonedq, weight);
}
@@ -1110,11 +1110,17 @@ static void armature_bbone_defmats_cb(void *userdata, Link *iter, int index)
bPoseChanDeform *pdef_info = &data->pdef_info_array[index];
const bool use_quaternion = data->use_quaternion;
- if (pchan->bone->segments > 1) {
- BLI_assert(pchan->runtime.bbone_segments == pchan->bone->segments);
+ pdef_info->b_bone_mats = NULL;
+ pdef_info->b_bone_dual_quats = NULL;
- pdef_info->b_bone_mats = pchan->runtime.bbone_deform_mats;
- pdef_info->b_bone_dual_quats = pchan->runtime.bbone_dual_quats;
+ if (pchan->bone->segments > 1) {
+ if (pchan->runtime.bbone_segments == pchan->bone->segments) {
+ pdef_info->b_bone_mats = pchan->runtime.bbone_deform_mats;
+ pdef_info->b_bone_dual_quats = pchan->runtime.bbone_dual_quats;
+ }
+ else {
+ BLI_assert(!"invalid B-Bone shape data");
+ }
}
if (use_quaternion) {
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index 12f3f5c7354..5cd82803fae 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -704,7 +704,9 @@ void BKE_pose_bone_done(struct Depsgraph *depsgraph,
}
bPoseChannel *pchan = pose_pchan_get_indexed(object, pchan_index);
float imat[4][4];
- DEG_debug_print_eval(depsgraph, __func__, pchan->name, pchan);
+ DEG_debug_print_eval_subdata(
+ depsgraph, __func__, object->id.name, object,
+ "pchan", pchan->name, pchan);
if (pchan->bone) {
invert_m4_m4(imat, pchan->bone->arm_mat);
mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
@@ -731,7 +733,9 @@ void BKE_pose_eval_bbone_segments(struct Depsgraph *depsgraph,
return;
}
bPoseChannel *pchan = pose_pchan_get_indexed(object, pchan_index);
- DEG_debug_print_eval(depsgraph, __func__, pchan->name, pchan);
+ DEG_debug_print_eval_subdata(
+ depsgraph, __func__, object->id.name, object,
+ "pchan", pchan->name, pchan);
if (pchan->bone != NULL && pchan->bone->segments > 1) {
BKE_pchan_bbone_segments_cache_compute(pchan);
if (DEG_is_active(depsgraph)) {
@@ -862,8 +866,10 @@ void BKE_pose_eval_proxy_copy_bone(
return;
}
BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL);
- DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
bPoseChannel *pchan = pose_pchan_get_indexed(object, pchan_index);
+ DEG_debug_print_eval_subdata(
+ depsgraph, __func__, object->id.name, object,
+ "pchan", pchan->name, pchan);
/* TODO(sergey): Use indexec lookup, once it's guaranteed to be kept
* around for the time while proxies are evaluating.
*/