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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user