Skip to content

Instantly share code, notes, and snippets.

@yohawing
Created April 14, 2024 03:46
Show Gist options
  • Save yohawing/040435404ac5a900d39cbc1b424aad81 to your computer and use it in GitHub Desktop.
Save yohawing/040435404ac5a900d39cbc1b424aad81 to your computer and use it in GitHub Desktop.
【Maya】Bake Deformer to Blendshape Tareget with time range
import maya.cmds as cmds
import ywta.deform.blendshape as blendshape
import maya.mel as mel
# 現在のメッシュのをBlendShapeターゲットに追加
def add_blendshape_target_with_frame(mesh, frame):
# blendspageがなければ作成
blendshape_name = blendshape.get_blendshape_node(mesh)
# メッシュを複製して
mesh_target = cmds.duplicate(mesh, name=f"deformer_{frame}")[0]
# ブレンドシェイプターゲットに追加
blendshape.add_target(blendshape_name, mesh_target)
# 複製したshapeを削除
cmds.delete(mesh_target)
return mesh_target
def bake_deformed_to_blendshape():
"""
デフォーマーで変形されたメッシュをBlendShapeターゲットに追加します。
TimeSliderのStartからEndまでのフレームを1フレームずつ移動してベイクします。
メッシュを選択して実行してください。
"""
sel = cmds.ls(selection=True)
# Check mesh selection
if not sel:
cmds.warning("メッシュが選択されていません。")
return
mesh = sel[0]
blendshape_name = blendshape.get_blendshape_node(mesh)
# 現在のTimeSliderのStartとEndを取得
start_frame = cmds.playbackOptions(q=True, minTime=True)
end_frame = cmds.playbackOptions(q=True, maxTime=True)
for frame in range(int(start_frame), int(end_frame) + 1):
# タイムスライダーを移動
cmds.currentTime(frame)
tareget_name = add_blendshape_target_with_frame(mesh, frame)
#シェイプキーのキーフレームを追加
mel.eval(f"setAttr {blendshape_name}.{tareget_name} 1")
mel.eval(f"setKeyframe {blendshape_name}.{tareget_name}")
if frame != end_frame:
cmds.currentTime(frame+1)
mel.eval(f"setAttr {blendshape_name}.{tareget_name} 0")
mel.eval(f"setKeyframe {blendshape_name}.{tareget_name}")
if frame != start_frame:
cmds.currentTime(frame-1)
mel.eval(f"setAttr {blendshape_name}.{tareget_name} 0")
mel.eval(f"setKeyframe {blendshape_name}.{tareget_name}")
print(f"フレーム{start_frame}から{end_frame}までのデフォームをBlendShapeターゲットに追加しました。")
@yohawing
Copy link
Author

transfer shape key

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