Created
April 14, 2024 03:46
-
-
Save yohawing/040435404ac5a900d39cbc1b424aad81 to your computer and use it in GitHub Desktop.
【Maya】Bake Deformer to Blendshape Tareget with time range
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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ターゲットに追加しました。") |
Author
yohawing
commented
Apr 14, 2024

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