[UE5][Retarget]How to retarget at runtime
1,各スケルトンのスケルタルメッシュからIKRigを作る
2,IKリターゲッターを作る。
3、動かしたいターゲットのABPを作って
4,Retarget Pose From MeshのノードでIKリターゲッターをセットする
5,BPの構造はこうする。
参考URL
[UE5][Retarget]How to retarget at runtime
1,各スケルトンのスケルタルメッシュからIKRigを作る
2,IKリターゲッターを作る。
3、動かしたいターゲットのABPを作って
4,Retarget Pose From MeshのノードでIKリターゲッターをセットする
5,BPの構造はこうする。
参考URL
Technology used in the 21st UE5 Petit Con theme “Osu” title “Diarrea Game 2”
windowsBuildをアップしました。ぜひプレイしてみてください。
▼furcraeaTokyo_GeliGa2_Windows2.zip
https://drive.google.com/file/d/18n38Hj44_s3AVEObuP43kYCyn5T4Gb_k/view?usp=sharing
【UE5】サードパーソンテンプレートのBPを乗っ取るまで【備忘録】
Blend Poses by boolを使用してIdle時とRun時で分岐させる
押すBoxを見つける
Edit Retarget Poseそんなとこにあったのかいって記事です。
Mixiamoからデフォルトのまま(root移動しないIn Placeオプション付けて)アニメーションダウンロード
idleポーズなど何でもいいのでmixamo.fbxとファイル名を書き換えてインポートするとskeltonもその名前になるので見やすいです。
その1つを読み込みSkelton Noneで Importします。
他のファイルを上記のスケルトンでインポートします。
それに合わせて合わせて
IKRetargeterでソースにmixamo ターゲットに作ったUE5_Manny
斜めから見ても合うように+基本はTなので肘とかは棒になるようにします。
でできたああ!あとは書き出して使うだけ。
ここまで作業した 自分用リンク
https://drive.google.com/file/d/1KbIDgPs8oSwBlVK_DV_1adJUNfFhl4iP/view?usp=sharing
参考URL この動画だけどこのままやるとモーションがガタガタになったのでアレンジした↑
このノード状態がキレイなので「bindPose1が一つだけ」キープしながらモデリング編集すること。
Genesis9 やったこと
—————————————-ここからはモデリングとする。——————————————–
Das3D 4.22 のGenesis9を
Maya2022に持ってきて
duplicateでスキンバインド外し=複製して
meshGroupのグループに
・genesis9のまつ毛や口のレイヤーも入れる(skinCluster初めから無いので)
・Marvelous Designerの服レイヤーも入れる
・highheelレイヤーも入れる
highheelの高さにhipとmeshGroupをmoveする。(オプション)
↑高さはBluePrintで変更可能
—————————————-ここまではモデリングとする。——————————————–
新しい方の骨とmeshGroupでバインド
↑ちゃんとしたバインドオプションが重要
cmds.skinBind()引数なしじゃclusterがダメ
genesis9からcopySkinWeightした
モデル編集後ファイル (自分用リンク)」
jennie9_6_v12z_v00122_dupGen9_Kihon.zip
#jennie9_6_v12z_v00122_dupGen9_Kihon__ModelEnd_SkinBindSkinWeight.py
def startSelectionToNewSkinCluster():
selectList=cmds.ls(sl=1,long=1)
print("selectList= "+str(selectList))
# 全部必要だから引数にした
Genesis9 = selectList[0]
Genesis9_Mesh = selectList[1]
Genesis9s = selectList[2]
MeshGroup = selectList[3]
#------------------------------------------------------------------------
ModelEnd_SkinBind(Genesis9s,MeshGroup)
ModelEnd_SkinWeight(Genesis9,Genesis9_Mesh,Genesis9s,MeshGroup)
#------------------------------------------------------------------------
def ModelEnd_SkinBind(Genesis9s,MeshGroup):
cmds.select(Genesis9s,MeshGroup)
#MEL (Script found in: C:/Program Files/Autodesk/Maya2022/scripts/others/newSkinCluster.mel)
#newSkinCluster " -bindMethod 0 -normalizeWeights 1 -weightDistribution 0 -mi 3 -dr 4 -rui false -ihs , multipleBindPose, 0";
#Python でMEL実行
import maya.mel
maya.mel.eval('newSkinCluster " -bindMethod 0 -normalizeWeights 1 -weightDistribution 0 -mi 3 -dr 4 -rui false -ihs , multipleBindPose, 0";')
#Python NG 'maya.cmds' has no attribute 'newSkinCluster' #
#cmds.newSkinCluster(" -bindMethod 0 -normalizeWeights 1 -weightDistribution 0 -mi 3 -dr 4 -rui false -ihs , multipleBindPose, 0")
#import pymel.core as pm #OK
#pm.mel.newSkinCluster(" -bindMethod 0 -normalizeWeights 1 -weightDistribution 0 -mi 3 -dr 4 -rui false -ihs , multipleBindPose, 0")
def ModelEnd_SkinWeight(Genesis9,Genesis9_Mesh,Genesis9s,MeshGroup):
Genesis9_Low_skincluster = Get_SkinCluster(Genesis9_Mesh)
print("Genesis9_Low_skincluster= "+str(Genesis9_Low_skincluster))
MeshList = cmds.listRelatives(MeshGroup,shapes=0,fullPath=1)
print("MeshList= "+str(MeshList))
for closet_mesh in MeshList:
closet_skinCluster = Get_SkinCluster(closet_mesh)
print("closet_skinCluster= "+str(closet_skinCluster))
# 元のスキンクラスターを服のスキンクラスターへコピースキンウェイト
cmds.copySkinWeights(
sourceSkin = Genesis9_Low_skincluster,
destinationSkin = closet_skinCluster,
noMirror=True,
influenceAssociation="oneToOne",
surfaceAssociation="closestPoint"
)
def Get_SkinCluster(LowMeshTransformLong):
# トランスフォームのシェイプノードを取得
shapeList = cmds.listRelatives(LowMeshTransformLong, shapes=True, noIntermediate=True,fullPath=True)
#print("shapeList= "+str(shapeList))
# lowのヒストリーを取得し、スキンクラスターのみ取得
historyList = cmds.listHistory(shapeList[0], pruneDagObjects=True, interestLevel=2)
#print("historyList= "+str(historyList))
skinclusterList = cmds.ls(historyList, type="skinCluster")
#print("skinclusterList= "+str(skinclusterList))
skincluster = skinclusterList[0]
#print("skincluster= "+str(skincluster))
return skincluster
startSelectionToNewSkinCluster()
完成ファイル (自分用リンク)
jennie9_6_v12z_v00127_Mouse_SW_Take2OK_Kihon_UE532ExportEnd.zip
UE5.3.2 Retarget IK RetargeterでのT_Poseのキャラクターのリターゲット方法
MannyのモーションをT_Poseのキャラクターにリターゲットする方法
Showing Reterget Poseモードにして>Sourceタブを選択して>Create>Import from Animation Sequence を選択
デフォルトで用意されている.AnimSequenceの
/Game/Characters/Mannequins/Animations/Manny/MM_T_Poseを読み込む
反映されればMannyがTposeになる。
Showing Reterget Poseモードボタンを押してRunning Retargetモードにすると
TposeのキャラがAposeになる。
スケルトンのウィンドウ>アセット詳細の+ボタンで
追加したいスケルトンを選びます。
参考
ぷちコンでも乱用した
MasterPoseComponentの説明です。
これがあればぶっちゃけリターゲットとか必要なくない?
みたいなお話です。
大きいEnableMasterPose図はこれです。
アップのEnableMasterPoseはこれです。
UE5.1ではこうしないと
ブループリントランタイム エラー:”プロパティ SkeletalMeshComponent の読み取りを試行するためのアクセスはありません”。 ノード: ブランチ グラフ: EnableMasterPose 関数: Enable Master Pose ブループリント: BP_ThirdMetaHuman
のエラー出た から 最初からSkeletel Mesh Component をIsVaildしたら治った。
添わせたいスケルタルメッシュを以下のように設定するだけで
あたまがこれです。
そうびがこれです。
グレイマンはトランスペアレントなマテリアルで見せてません。
グレイマンはVisibleはTrueにしておかないと壊れます。
こうしているせいで全モーションはグレイマンに追加するだけででOKです。
どんどんグレーマンが鬼カスタムモーション化していくだけなので他のプロジェクトを作る際も鬼グレイマンさえ移行すればいいから簡単です。
以上でした。
5.1のバージョンはこんな感じでした。
Meshの下に入れ子にするのがポイント
参考
ソースとターゲット両方のスケルタルメッシュを開いて
スケルトンツリー>リターゲットオプションを表示する
ソースもターゲットも以下をやる
マネキンの場所でアニメーション>IKリグを作成する。
どのスケルタルメッシュにするか表示されるのでマネキンを選択
名前を
IKRig_SK_Mannequinとした。
IKRig_NierA2_MayaV2とした
それぞれ開いて
階層から
Pelvisを右クリックして
リターゲティングルートの設定をクリック
IKリターゲティングの>新しいチェーンを追加するを6回おす。
ソースもターゲットも以下をやる。
head spine leftarm rightarm leftleg rightleg を入力 開始ボーン終了ボーンを設定する。
でーがっちゃんこようにアニメーションリターゲッターを作ります。
アニメーションをコピーする元のリグを選択するので今回はマネキン用のあにめを他のスケルタルメッシュにつけたいのでこうなりました
ダブルクリックして開いて
ターゲットが未選択なので選びます
アセットブラウザから選択したア二メーションをエクスポートボタンで出力できます。
参考