Render: camera depth of field support for armature bone targets

This is useful when using an armature as a camera rig, to avoid creating and
targetting an empty object.

Differential Revision: https://developer.blender.org/D7012
This commit is contained in:
Damien Picard
2022-07-15 13:30:57 +02:00
committed by Brecht Van Lommel
parent 5ddbc14bb2
commit 2e70d5cb98
8 changed files with 47 additions and 2 deletions

View File

@@ -26,6 +26,7 @@
#include "BLI_utildefines.h"
#include "BKE_anim_data.h"
#include "BKE_action.h"
#include "BKE_camera.h"
#include "BKE_idtype.h"
#include "BKE_layer.h"
@@ -221,7 +222,15 @@ float BKE_camera_object_dof_distance(const Object *ob)
if (cam->dof.focus_object) {
float view_dir[3], dof_dir[3];
normalize_v3_v3(view_dir, ob->obmat[2]);
sub_v3_v3v3(dof_dir, ob->obmat[3], cam->dof.focus_object->obmat[3]);
bPoseChannel *pchan = BKE_pose_channel_find_name(cam->dof.focus_object->pose, cam->dof.focus_subtarget);
if (pchan) {
float posemat[4][4];
mul_m4_m4m4(posemat, cam->dof.focus_object->obmat, pchan->pose_mat);
sub_v3_v3v3(dof_dir, ob->obmat[3], posemat[3]);
}
else {
sub_v3_v3v3(dof_dir, ob->obmat[3], cam->dof.focus_object->obmat[3]);
}
return fabsf(dot_v3v3(view_dir, dof_dir));
}
return cam->dof.focus_distance;