[Blender5.1][Rig][UE5.8] Auto Rig Pro を購入から使用UE5インポートまで

[Blender 5.1][Rig][UE5.8] From purchasing to using Auto Rig Pro and importing into UE5

https://superhivemarket.com/products/auto-rig-pro

Ado To Cartした。

カートに入った CheckOutして

Create Accountした

Confirm My Accountした

もう一回Checkoutしてこの画面きた。PayPal Checkoutした。

Ordersクリックした。

Blender5.1.1にドラッグした

入らないので

8 downloads
auto_rig_pro_3.78.21.zip
proxy_picker_1.1.11.zip
rig_tools_3.78.18.zip
Al_linux_1.20.zip -winにはいらない
Al_macIntel_1.20.zip -winにはいらない
Al_mac_1.20.zip -winにはいらない
Al_win_1.20.zip あとで必要
io_scene_gltf2.zip Blender5.1.1には不要

zipを選択

入った。


Blendr5.1.1に

D:\Download\auto_rig_pro_Set

入れたいけど

AI_win_1.20.zipがMissing Manifestだって。

それはたぶん 入れるzipを間違えているだけ でした。

確認したところ、AI_win_1.20.zip はBlenderアドオン本体ではなく、Auto-Rig ProのAI用データ/実行ファイルでした。なのでBlenderの「Install from Disk」で直接入れると Missing Manifest になります。

つまり入れる順番はこれです。

  1. Blenderで Edit > Preferences > Get Extensions / Add-ons > Install from Disk
  2. まずこれを入れる
    D:\Download\auto_rig_pro_Set\auto_rig_pro_3.78.21.zip

    auto_rig_pro_3.78.21.zip
    proxy_picker_1.1.11.zip – 開発中の機能
    rig_tools_3.78.18.zip ー開発中の機能入れないほうがいい
    Al_win_1.20.zip あとで必要
    io_scene_gltf2.zip Blender5.1.1には不要

Auto-Rig Proの設定内にある Install AI Files… からこれを選ぶ
D:\Download\auto_rig_pro_Set\AI_win_1.20.zip

  1. AI files Installed successfully と言われる。

Auto-Rig Pro公式ドキュメントでも、本体は auto_rig_pro_x.xx.xx.zip をInstall from Disk、AIファイルはAuto-Rig Pro設定内の Install AI Files… から入れる手順になっています: Auto-Rig Pro Installation

補足: Blender 5.1.1なら io_scene_gltf2.zip は入れなくてOKです。公式説明でもBlender 4.2以上はGLTF exporterの追加インストールをスキップするよう書かれています。rig_tools_3.78.18.zip もAuto-Rig Pro本体を入れるなら基本入れない方がいいです。

正常にインストールできると「N」キー押すとARPがでる

素体をインポートして

メッシュ全部選択して

「Auto-Rig Pro:Smart」機能を試してみた

FullBody選択

Guess Markers押す。(10秒ぐらいかかる)

Skelton Setting Presetsから

今回はUE4 Mannequinsを選択した

Guess Fingers 押す。

指にフィットしたようだ。

GO!押す(10秒ぐらいかかる)

できたっぽい。Match To Rig 押す(10秒)

リグができた。

スキニング

Skin押す

Preserved VolumeをOFFでまだBindおさない。

オブジェクトモードにする[Tab]キー

Blender5.1 オブジェクトモード
  1. オブジェクトモードにする[Tab]キー
  2. Shift を押しながらバインドするMeshオブジェクト(複数可)、Armature の(rig)の順に選択する
  3. Bind ボタンを押す

全メッシュではフリーズしたので、Voxelized に切り替え

段階的にBindした

全部Meshの外に行ったので成功がわかった。

スケールが低すぎるため、バインディングが部分的に、または完全に失敗した可能性があります。

スケール修正を有効にして再度バインディングを実行してください。OKした。

ポーズの確認

ポーズモードへの切り替え方法

アーマチュア(ボーン)を選択した状態で、[Ctrl] + [Tab] キーを押すのが最も早いショートカットです。

Blebnder5.1 ポーズモード

屈伸できた

Export

Auto-Rig Pro: ExportのExport FBXでエクスポート

Unreal Engine

Humanoid と

UE4 Legacy をオンにした

書き出し終わったらしい

UE5へインポート

import Texture オン

import Material オン

プロジェクトのUE4マネキンを壊さないようにSkeletonはNoneでインポートした

インポートできたら、skeletonをチェック root、pelvisがあっていればOK

SkeltalMesh > Create > IK Rig

とりあえずはこれくらい設定した

指も設定

IKRig > Create IK Retargeter

①SK_Mannequinも同じようにRoteteOnlyで設定したIK Rigを選ぶ

②Source選択

③Create > Import Animation Seqense

④T_poseを検索してインポートした。

完成

[UE5.8.0][Maya][Retarget] TposeのキャラクターモデルをAposeのMannequinのモーションにリターゲットする方法

MM_T_Pose をエクスポート

Export Optionはこう

MayaにFBXインポートした状態で保存する SKM_Quinn_Simple_Tpose.ma

Tposeのキャラクターモデル(ここではfanModelのサイトからダウンロードしたものを用意した)

https://www.deviantart.com/d-presso/art/Nier-Re-in-carnation-Levannia-XPS-DL-880627377

を開いて


先ほどのTposeのFBXをインポートして

Root ( SKM_Quinn_Simple_Tpose:root_Quinn_T_pose ) のトップ のjointをスケールしてキャラクターにあわせる。

複製してフリーズする

以下ツールでスキンウェイトをコピー

SkinWeightCopy_First_Select_MeshGroup_to_Second Select_MeshGroup.mel

// SkinWeightCopy First Select MeshGroup to Second Select MeshGroup 
string $selectedArrFUllPath[] = `ls -long -sl`;
print($selectedArrFUllPath);

string $FirstSelect=$selectedArrFUllPath[0];

string $SecondSelect=$selectedArrFUllPath[1];

string $rejectArr[];

//string $inputNodes[] = `ls -type transform -long -dag $FirstSelect`;
//string $destNodes[] = `ls -type transform -long -dag $SecondSelect`;

string $inputNodes_mesh[] = `ls -type mesh -long -dag $FirstSelect`;
string $destNodes_mesh[] = `ls -type mesh -long -dag $SecondSelect`;

$inputNodes_meshlong=size($inputNodes_mesh);
$destNodes_meshlong=size($destNodes_mesh);

string $inputNodes[];
string $destNodes[];
clear $inputNodes;
clear $destNodes;
string $mesh;
string $parent;
for($d0 = 0; $d0 <$inputNodes_meshlong;$d0++){
    $mesh=$inputNodes_mesh[$d0];
    string $parentS[] = `listRelatives -parent -path -type transform $mesh`;
    $parent=$parentS[0];
    $inputNodes[size($inputNodes)] = $parent;
}
for($d0 = 0; $d0 <$destNodes_meshlong;$d0++){
    $mesh=$destNodes_mesh[$d0];
    string $parentS[] = `listRelatives -parent -path -type transform $mesh`;
    $parent=$parentS[0];
    $destNodes[size($destNodes)] = $parent;
}

print("$inputNodes= ------------------------------------------------ \n");
print($inputNodes);

print("$destNodes= ------------------------------------------------ \n");
print($destNodes);



$inputNodeslong=size($inputNodes);
$destNodeslong=size($destNodes);

string $buffer[];
string $buffer_i[];
$finded = 0;
for($d = 0; $d <$destNodeslong;$d++){
    string $destNode_name=$destNodes[$d];
    
    if($destNode_name==$SecondSelect){
            
    }else{
        print("$destNode_name= "+$destNode_name+"\n");
        
        $numTokens = `tokenize $destNode_name "|" $buffer`;
        $bufferlong=size($buffer);
        string $destNode_name_Short = $buffer[$bufferlong-1]+"";
        print("$destNode_name_Short= "+$destNode_name_Short+"\n");
        $finded = 0;
        for($i = 0; $i <$inputNodeslong;$i++){
            string $inputNode_name=$inputNodes[$i];
            $numTokens_i = `tokenize $inputNode_name "|" $buffer_i`;
            $bufferlong_i=size($buffer_i);
            string $inputNode_name_Short = $buffer_i[$bufferlong_i-1]+"";
            print("$inputNode_name_Short= "+$inputNode_name_Short+"\n");
                
            //$index=`gmatch $inputNode_name $destNode_name_Short`;
            //if($index > 0){
            if($inputNode_name_Short==$destNode_name_Short){
                //$blendShapeName = $blendshapeRet_name;
                print("$destNode_name= "+$destNode_name+" isHit!! "+"\n");
                select -r $inputNode_name;
                select -add $destNode_name;
                copySkinWeights  -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint;
                //copySkinWeights -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint -sourceSkin $inputNode_name -destinationSkin $destNode_name;
                $finded = 1;
            }//if
        }//for
        if($finded==0){
            $rejectArr[size($rejectArr)] = $destNode_name;
        }//if
    }//if
}//for
print("----rejected_list---start"+"\n");
print($rejectArr);
print("----rejected_list---end"+"\n");
select -r $FirstSelect ;
select -add $SecondSelect ;

適当にスキンウェイトを確認

rootとMesh 選択してFBX出力

UEへインポート

IKRig作成

IKRig設定

マネキンのほうはこう

IK Retargeter 作成

SounceにCreate>Import From Animation Sequence

MM_T_Pose選択

ポーズがそろう

Op Stack >Add Default Ops 押す とそろった

あとは必要なアニメーションを選択してエクスポート

追加で調整した作業 RootMotionを切ってエクスポートしないとだめだった

そのあとは以下を参考にしてください。

[UE5.3]第21回UE5ぷちコン テーマ「おす」題名「下痢ゲー2」で使った技術とexeダウンロード

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

MetaHumanでサードパーソンテンプレートBPを乗っ取り。リターゲット(Reterget)

【UE5】サードパーソンテンプレートのBPを乗っ取るまで【備忘録】

テーマ「おす」のために腕をIKで構えさせる

【第6.5回】武器を持たせる・IKで構えさせる

Idle時にお腹が痛いアイドル、Run時に上半身:お腹が痛い+下半身:走り

Blend Poses by boolを使用してIdle時とRun時で分岐させる

押すBoxを見つける

[UE4] プレイヤーを検知する敵キャラクターを作る

https://historia.co.jp/archives/25062/

[UE5.3][Retarget]mixamo animation Retarget to UE5.3 Tips Edit Retarget Poseそんなとこにあったのかいって記事です。

Edit Retarget Poseそんなとこにあったのかいって記事です。

Mixiamoからデフォルトのまま(root移動しないIn Placeオプション付けて)アニメーションダウンロード

idleポーズなど何でもいいのでmixamo.fbxとファイル名を書き換えてインポートするとskeltonもその名前になるので見やすいです。
その1つを読み込みSkelton Noneで Importします。

他のファイルを上記のスケルトンでインポートします。

IKRig_mixamoをIKゴールとかソルバとかなしでチェーンだけで作ります

それに合わせて合わせて

IKRig_mannyをIKゴールとかソルバとかなしでチェーンだけで作ります

IKRetargeterでソースにmixamo ターゲットに作ったUE5_Manny

:からEdit Retarget Poseを選びます。(またはTposeを読み込みます)

斜めから見ても合うように+基本はTなので肘とかは棒になるようにします。

でできたああ!あとは書き出して使うだけ。

ここまで作業した 自分用リンク

https://drive.google.com/file/d/1KbIDgPs8oSwBlVK_DV_1adJUNfFhl4iP/view?usp=sharing

参考URL この動画だけどこのままやるとモーションがガタガタになったのでアレンジした↑

[Daz3D][Maya][Marvelous Designer] Das3D 4.22 Genesis9をMaya2022に持ってきてMarvelous Designerの服をスキニングしてコピースキンウェイトしたVol.02(まとめ)

このノード状態がキレイなので「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のキャラクターをAポーズベースのモーションへのリターゲット方法

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になる。

[UE4/UE5]MasterPoseComponentの説明

ぷちコンでも乱用した

MasterPoseComponentの説明です。

これがあればぶっちゃけリターゲットとか必要なくない?

みたいなお話です。

大きいEnableMasterPose図はこれです。

アップのEnableMasterPoseはこれです。

UE5.1ではこうしないと

ブループリントランタイム エラー:”プロパティ SkeletalMeshComponent の読み取りを試行するためのアクセスはありません”。 ノード: ブランチ グラフ: EnableMasterPose 関数: Enable Master Pose ブループリント: BP_ThirdMetaHuman

のエラー出た から 最初からSkeletel Mesh Component をIsVaildしたら治った。

添わせたいスケルタルメッシュを以下のように設定するだけで

あたまがこれです。

そうびがこれです。

グレイマンはトランスペアレントなマテリアルで見せてません。

グレイマンはVisibleはTrueにしておかないと壊れます。

こうしているせいで全モーションはグレイマンに追加するだけででOKです。
どんどんグレーマンが鬼カスタムモーション化していくだけなので他のプロジェクトを作る際も鬼グレイマンさえ移行すればいいから簡単です。

以上でした。

5.1のバージョンはこんな感じでした。

Meshの下に入れ子にするのがポイント

参考

https://forums.unrealengine.com/t/topic/402278

#UE5 #UE5Study アニメーションリターゲットのメモ (なんかちょっと工程長くなったけど論理的で安心感ある)

ソースとターゲット両方のスケルタルメッシュを開いて

スケルトンツリー>リターゲットオプションを表示する

ソースもターゲットも以下をやる

マネキンの場所でアニメーション>IKリグを作成する。

どのスケルタルメッシュにするか表示されるのでマネキンを選択

名前を
IKRig_SK_Mannequinとした。

IKRig_NierA2_MayaV2とした

それぞれ開いて

階層から
Pelvisを右クリックして
リターゲティングルートの設定をクリック

IKリターゲティングの>新しいチェーンを追加するを6回おす。

ソースもターゲットも以下をやる。

head spine leftarm rightarm leftleg rightleg を入力 開始ボーン終了ボーンを設定する。

でーがっちゃんこようにアニメーションリターゲッターを作ります。

アニメーションをコピーする元のリグを選択するので今回はマネキン用のあにめを他のスケルタルメッシュにつけたいのでこうなりました

ダブルクリックして開いて

ターゲットが未選択なので選びます

アセットブラウザから選択したア二メーションをエクスポートボタンで出力できます。

参考