Finish euler methods

This commit is contained in:
henryruhs 2024-09-19 23:06:10 +02:00
parent 9fc2964879
commit 8251af3a7f
2 changed files with 9 additions and 12 deletions

View File

@ -63,17 +63,15 @@ def limit_expression(expression : LivePortraitExpression) -> LivePortraitExpress
return numpy.clip(expression, EXPRESSION_MIN, EXPRESSION_MAX)
def limit_euler_angles(target_euler_angles : Tuple[LivePortraitPitch, LivePortraitYaw, LivePortraitRoll], output_euler_angles : Tuple[LivePortraitPitch, LivePortraitYaw, LivePortraitRoll]) -> Tuple[LivePortraitPitch, LivePortraitYaw, LivePortraitRoll]:
pitch, yaw, roll = output_euler_angles
pitch_min, pitch_max, yaw_min, yaw_max, roll_min, roll_max = calc_rotation_limits(target_euler_angles)
pitch = numpy.clip(pitch, pitch_min, pitch_max)
yaw = numpy.clip(yaw, yaw_min, yaw_max)
roll = numpy.clip(roll, roll_min, roll_max)
return pitch, yaw, roll
def limit_euler_angles(target_pitch : LivePortraitPitch, target_yaw : LivePortraitYaw, target_roll : LivePortraitRoll, output_pitch : LivePortraitPitch, output_yaw : LivePortraitYaw, output_roll : LivePortraitRoll) -> Tuple[LivePortraitPitch, LivePortraitYaw, LivePortraitRoll]:
pitch_min, pitch_max, yaw_min, yaw_max, roll_min, roll_max = calc_euler_limits(target_pitch, target_yaw, target_roll)
output_pitch = numpy.clip(output_pitch, pitch_min, pitch_max)
output_yaw = numpy.clip(output_yaw, yaw_min, yaw_max)
output_roll = numpy.clip(output_roll, roll_min, roll_max)
return output_pitch, output_yaw, output_roll
def calc_rotation_limits(euler_angles : Tuple[LivePortraitPitch, LivePortraitYaw, LivePortraitRoll]) -> Tuple[float, float, float, float, float, float]:
pitch, yaw, roll = euler_angles
def calc_euler_limits(pitch : LivePortraitPitch, yaw : LivePortraitYaw, roll : LivePortraitRoll) -> Tuple[float, float, float, float, float, float]:
pitch_min = -30.0
pitch_max = 30.0
yaw_min = -60.0
@ -85,16 +83,15 @@ def calc_rotation_limits(euler_angles : Tuple[LivePortraitPitch, LivePortraitYaw
pitch_min = min(pitch, pitch_min)
else:
pitch_max = max(pitch, pitch_max)
if yaw < 0:
yaw_min = min(yaw, yaw_min)
else:
yaw_max = max(yaw, yaw_max)
if roll < 0:
roll_min = min(roll, roll_min)
else:
roll_max = max(roll, roll_max)
return pitch_min, pitch_max, yaw_min, yaw_max, roll_min, roll_max

View File

@ -445,7 +445,7 @@ def edit_head_rotation(pitch : LivePortraitPitch, yaw : LivePortraitYaw, roll :
edit_pitch = pitch + float(numpy.interp(face_editor_head_pitch, [ -1, 1 ], [ 20, -20 ]))
edit_yaw = yaw + float(numpy.interp(face_editor_head_yaw, [ -1, 1 ], [ 60, -60 ]))
edit_roll = roll + float(numpy.interp(face_editor_head_roll, [ -1, 1 ], [ -15, 15 ]))
edit_pitch, edit_yaw, edit_roll = limit_euler_angles(( pitch, yaw, roll ), ( edit_pitch, edit_yaw, edit_roll ))
edit_pitch, edit_yaw, edit_roll = limit_euler_angles(pitch, yaw, roll, edit_pitch, edit_yaw, edit_roll)
rotation = create_rotation(edit_pitch, edit_yaw, edit_roll)
return rotation