Skip to content

Instantly share code, notes, and snippets.

@galaktyk
Last active February 21, 2023 11:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save galaktyk/f471a6ff62f888215705edf24aa50661 to your computer and use it in GitHub Desktop.
Save galaktyk/f471a6ff62f888215705edf24aa50661 to your computer and use it in GitHub Desktop.
reduce some face's shape value. hotfix for weird character face in gameplay params by: BobG123
import bpy
import re
TARGET_SHAPES = {
"eye_in_l":0.5,
"eye_out_r":0.5,
"eye_in_r":0.5,
"eye_out_l":0.5,
"eye_sqz_l":0.2,
"eye_sqz_r":0.2,
"eye_low_open_l":0.5,
"eye_low_open_r:":0.5,
"eye_squint_r":0.5,
"eye_squint_l":0.5,
"eye_bag_r":0.5,
"eye_bag_l":0.5,
"smile_l":0.5,
"smile_r":0.5,
"eye_open_l":0.5,
"eye_open_r":0.5,
"pull_l":0.5,
"pull_r":0.5,
"lwr_lip_in_l":0.5,
"lwr_lip_in_r":0.5,
"smile_open_l":0.5,
"smile_open_r":0.5,
"upr_lip_up_l":0.5,
"upr_lip_up_r":0.5,
"upr_lip_dn_l":0.5,
"upr_lip_dn_r":0.5,
"upr_lip_in_l":0.5,
"upr_lip_in_r":0.5,
"lwr_lip_up_l":0.5,
"lwr_lip_up_r":0.5,
"lwr_lip_dn_l":0.5,
"lwr_lip_dn_r":0.5,
"mouth_tension":0.5,
"mouth_tension2":0.5,
"mouth_press":0.5,
"mouth_press2":0.5,
"chin_dn":0.25,
"mth_mov_up_2":0.2,
"mth_mov_up_3":0.2,
"dimple_r":0.5,
"dimple_l":0.5,
"puff_up":0.5,
"puff_dn":0.5,
"brows_bow_l":0.25,
"brows_bow_r":0.25,
"chin_up":0.5,
"shh":0.5,
"o":0.5,
"mouth_mov_dn":0.5,
"sneer_r":0.25,
"sneer_l":0.25,
"jaw_drop_close":0.02,
"lips_press_l":0.5,
"lips_press_r":0.5,
"frown_r":0.5,
"frown_l":0.5,
"nose_open_r":0.15,
"nose_open_l":0.15,
"mouth_mov_r":0.5,
"mouth_mov_l":0.5,
"mouth_mov_up":0.5,
"mm":0.5,
"squinch":0.5,
"lips_stretch_r":0.4,
"lips_stretch_l":0.4,
"suck_r":0.5,
"suck_l":0.5,
"puff_r":0.5,
"puff_l":0.5,
"cheek_raise_r":0.4,
"cheek_raise_l":0.4,
"brows_squez_up_r":0.5,
"brows_squez_up_l":0.5,
"brows_squez_r":0.5,
"brows_squez_l":0.5,
"lwr_lip_in":0.5,
"upr_lip_in":0.5,
"lips_narrow_r":0.5,
"lips_narrow_l":0.5,
"upr_lip_funl_r":0.5,
"upr_lip_funl_l":0.5,
"Nose_Sneer":0.25,
"Brow_Scrunch":0.25,
}
selected_object = bpy.context.object
for target_name, blend_val in TARGET_SHAPES.items():
ref_shape = selected_object.data.shape_keys.key_blocks.get(target_name)
if ref_shape is None:
print("[ERROR] Cannot find shape: ", target_name)
continue
# Create new blendshape
temp_name = target_name + "_temp"
new_shape = selected_object.shape_key_add(name=temp_name)
new_index = selected_object.data.shape_keys.key_blocks.find(temp_name)
# Select new created blendshape
selected_object.active_shape_key_index = new_index
# Enter editmode
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
bpy.ops.mesh.reveal()
bpy.ops.mesh.select_all(action='SELECT')
# Assign shape
bpy.ops.mesh.blend_from_shape(shape=target_name, blend=blend_val)
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
# Remove old shape
old_index = selected_object.data.shape_keys.key_blocks.find(target_name)
selected_object.active_shape_key_index = old_index
bpy.ops.object.shape_key_remove()
# Rename new shape
new_shape = selected_object.data.shape_keys.key_blocks.get(temp_name)
new_shape.name = target_name
@galaktyk
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment