AmbitionEarlyHourSky

#アンリアルクエスト に出したゲームのクオリティをアップした。

キャラクターの作り直しを何度もやった。

ハイヒールのカラーをルブタンみたいにして

ニーアみたいなマスクをつけて
kawaiiphysicsでスカートをひらひらさせた。
kawaiiphysicsで胸も揺らした
kawaiiphysicsで髪をなびくようにジョイントを入れ

レベルデザインも少しちゃんとした。

#kawaiiphysics #UE4 #Unrealお兄さん と#塩谷さん と #おかず さん の おかげです。

ダウンロードはこちら

https://drive.google.com/file/d/1q6O0NIBkd-oH1zD50XCDv74sUi6QfIai/view?usp=sharing

最近開いてみたらこんなエラーが出た

This Project requires the ‘ShallowWater’ plugin whitch could not be found.Would you like to desable it continue?If you do you will no longer be able to open any assets created with it. if not the application will close.

このプロジェクトには、見つからなかった「ShallowWater」プラグインが必要です。引き続き無効にしますか?そうすると、それで作成されたアセットを開くことができなくなります。 そうでない場合、アプリケーションは終了します。

ビルドの必要がありそうなので

A案

cd C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles
Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket

B案

cd C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\DotNET\UnrealBuildTool
UnrealBuildTool.exe AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket

ERROR: Unable to find plugin ‘ShallowWater’ (referenced via AmbitionEarlyHourSky.uproject). Install it and try again, or remove it from the required plugin list.

と言われるので。

AmbitionEarlyHourSky.uprojectの Plugin から ShallowWaterを消す。

{
	"FileVersion": 3,
	"EngineAssociation": "5.0",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "AmbitionEarlyHourSky",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		}
	],
	"Plugins": [
		{
			"Name": "ShallowWater",
			"Enabled": true
		},
		{
			"Name": "Water",
			"Enabled": true
		},
		{
			"Name": "PythonScriptPlugin",
			"Enabled": true
		},
		{
			"Name": "EditorScriptingUtilities",
			"Enabled": true
		},
		{
			"Name": "Bridge",
			"Enabled": true,
			"SupportedTargetPlatforms": [
				"Win64",
				"Mac",
				"Linux"
			]
		}
	]
}

Build.batできたっぽい


C:\Users\furcr>cd C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\

C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64>cd ../../

C:\Program Files\Epic Games\UE_5.0\Engine>cd C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket
Using bundled DotNet SDK
Log file: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log.txt
Creating makefile for AmbitionEarlyHourSky (Build.version is newer)
ERROR: Unable to find plugin 'ShallowWater' (referenced via AmbitionEarlyHourSky.uproject). Install it and try again, or remove it from the required plugin list.

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>Build.bat AmbitionEarlyHourSky Win64 Development "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" -rocket
Using bundled DotNet SDK
Log file: C:\Users\furcr\AppData\Local\UnrealBuildTool\Log.txt
Creating makefile for AmbitionEarlyHourSky (Build.version is newer)
Parsing headers for AmbitionEarlyHourSky
  Running UnrealHeaderTool "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\AmbitionEarlyHourSky.uproject" "F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Intermediate\Build\Win64\AmbitionEarlyHourSky\Development\AmbitionEarlyHourSky.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -WarningsAsErrors -abslog="C:\Users\furcr\AppData\Local\UnrealBuildTool\Log_UHT.txt" -installed
Reflection code generated for AmbitionEarlyHourSky in 6.3933034 seconds
Building AmbitionEarlyHourSky...
Using Visual Studio 2019 14.29.30141 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10).
[Adaptive Build] Excluded from AmbitionEarlyHourSky unity file: MyBlueprintFunctionLibrary.cpp, SaveToText.cpp, TextFileToString.cpp, AmbitionEarlyHourSky.cpp, AmbitionEarlyHourSkyCharacter.cpp, AmbitionEarlyHourSkyGameMode.cpp
Distributing 23 actions to XGE
--------------------Build System Warning---------------------------------------
License is invalid:
    License information is invalid. Please try reloading your license file using the Coordinator Monitor application on the Coordinator machine, or reinstall IncrediBuild.
    This build will run in standalone mode.

-------------------------------------------------------------------------------

Build ID: {5E64F7BF-47B0-4AF8-8F9B-4464A50705EC}

--------------------Project: Default-------------------------------------------
[1/23] SharedPCH.Engine.ShadowErrors.cpp (0:51.37 at +0:00)
[2/23] OpenImageDenoise.dll (0:00.64 at +0:51)
[3/23] tbb.dll (0:00.26 at +0:52)
[4/23] d3d12SDKLayers.dll (0:00.31 at +0:52)
[5/23] D3D12Core.dll (0:00.28 at +0:52)
[6/23] tbb12.dll (0:00.31 at +0:52)
[7/23] AmbitionEarlyHourSkyCharacter.cpp (0:01.64 at +0:53)
[8/23] AmbitionEarlyHourSkyGameMode.cpp (0:01.01 at +0:54)
[9/23] SaveToText.cpp (0:00.60 at +0:55)
[10/23] MyBlueprintFunctionLibrary.gen.cpp (0:00.62 at +0:56)
[11/23] AmbitionEarlyHourSkyCharacter.gen.cpp (0:00.92 at +0:57)
[12/23] MyBlueprintFunctionLibrary.cpp (0:00.57 at +0:58)
[13/23] TextFileToString.gen.cpp (0:00.62 at +0:58)
[14/23] AmbitionEarlyHourSky.cpp (0:00.70 at +0:59)
[15/23] AmbitionEarlyHourSky.init.gen.cpp (0:00.64 at +1:00)
[16/23] TextFileToString.cpp (0:15.11 at +1:00)
[17/23] AmbitionEarlyHourSkyGameMode.gen.cpp (0:01.00 at +1:15)
[18/23] Default.rc2 (0:00.48 at +1:16)
[19/23] Module.KawaiiPhysics.cpp (0:03.53 at +1:17)
[20/23] Module.KawaiiPhysics.gen.cpp (0:03.40 at +1:20)
[21/23] SaveToText.gen.cpp (0:00.65 at +1:24)
[22/23] AmbitionEarlyHourSky.exe (0:26.03 at +1:24)
   Creating library F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Binaries\Win64\AmbitionEarlyHourSky.lib and object F:\Download\Game\AmbitionEarlyHourSky6.0NoCascade\Binaries\Win64\AmbitionEarlyHourSky.exp
[23/23] AmbitionEarlyHourSky.target (0:00.34 at +1:50)
---------------------- Done ----------------------

    Rebuild All: 1 succeeded, 0 failed, 0 skipped

1 build system warning(s):
   - License is invalid

Total time in XGE executor: 111.50 seconds
Total execution time: 128.20 seconds

C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles>

リビルドするか聞かれる。リビルドで、30秒後ぐらいに起動した!

スカートのリグなどを頑張ったオリジナル作品のAmbitionSkyWaterをUE5でビルドしなおして、ポスプロなどブラッシュアップして動画を取り直した #UE5 #UnrealEngine5 #スカート #リグ #Rig #skirts

UE4Joint Auto Set HumanIK ~UE4のジョイントを自動でHumanIKに登録~

maya2016用

GroupNode
・Mesh
・SK_Mannequin/root
にしてから実行

Pythonで書き直した。2021年12月DragonNightにWaterモーション追加時に追記

Daz StudioのジョイントをHumanIKに追加用

# -*- coding: utf-8 -*- 
from maya import cmds 
import maya.mel as mel
import re
import pymel.core as pm 
def makeHumanIkDef_from_selected_groupName():
    selectedGlp=""
    characterName=""
    selectedArr=cmds.ls(sl=1)
    print("selectedArr= "+str(selectedArr))
    if(str(selectedArr)=="[]"):
        print("You Should Select root Group Node!!!")
    else:
        selectedGlp=selectedArr[0]
        characterName=pm.mel.hikCreateCharacter(selectedGlp)
    #evalStr='$characterName = `hikCreateCharacter('+selectedGlp+')`'
    #myPythonVar=mel.eval('$tempMelVar=$gMainWindow')
    #characterName=mel.eval(evalStr)
    print(u"characterName= " + str(characterName))
    return characterName,selectedGlp
def LongNameToShortName(LongName):
    #childfullpath= |group_meshHIK_Tpose_jointUE4name5|SK_Mannequin|root|hip|spine_01
    LongNameArr=LongName.split("|")
    LongNameArrLong=len(LongNameArr)
    shortName=LongNameArr[LongNameArrLong-1]
    return shortName
    
def Group_in_joint(GroupName,jointName):
    print("jointName= "+jointName)
    HitJointFullPath=""
    groupChild=cmds.ls(GroupName,dag=1,long=1)
    for childfullpath in groupChild:
        searchStr=r'.*'+'\|'+jointName+r'$'
        print("searchStr= "+searchStr +"    childfullpath= "+childfullpath)
        MatchObj=re.match(searchStr, childfullpath)
        MatchBool=bool(MatchObj)
        if(MatchBool==True):
            HitJointFullPath=childfullpath
            print("HitJointFullPath !!!!!!!!= "+HitJointFullPath)
            break
        #shortjointNameArr=cmds.ls(childfullpath,shortNames=1)
        #shortjointName=shortjointNameArr[0]
        shortjointName=LongNameToShortName(childfullpath)
        print("searchStr= "+jointName +"    shortjointName= "+shortjointName)
        if(str(shortjointName)==str(jointName)):
            HitJointFullPath=childfullpath
            print("HitJointFullPath !!!!!!!!= "+shortjointName)
            break
    print("HitJointFullPath= "+HitJointFullPath)
    return HitJointFullPath 

def setCharacterObject(GroupName,jointName,characterDefName,RigInt,RigInt2):
    #MEL setCharacterObject("root",$characterDefName,0,0);
    jointFullName=Group_in_joint(GroupName,jointName)
    evalStr='setCharacterObject("'+jointFullName+'","'+characterDefName+'",'+str(RigInt)+','+str(RigInt2)+');'
    print("evalStr= "+ evalStr)
    mel.eval(evalStr)
       
def UE4JointSetToHumanIK():
    characterDefName,GroupName= makeHumanIkDef_from_selected_groupName()
    #print("characterDefName= "+characterDefName)
    setCharacterObject(GroupName,"root",characterDefName,0,0);
    setCharacterObject(GroupName,"hip",characterDefName,1,0);
    setCharacterObject(GroupName,"thigh_l",characterDefName,2,0);
    setCharacterObject(GroupName,"calf_l",characterDefName,3,0);
    setCharacterObject(GroupName,"foot_l",characterDefName,4,0);
    setCharacterObject(GroupName,"thigh_r",characterDefName,5,0);
    setCharacterObject(GroupName,"calf_r",characterDefName,6,0);
    setCharacterObject(GroupName,"foot_r",characterDefName,7,0);
    setCharacterObject(GroupName,"spine_01",characterDefName,8,0);
    setCharacterObject(GroupName,"upperarm_l",characterDefName,9,0);
    setCharacterObject(GroupName,"lowerarm_l",characterDefName,10,0);
    setCharacterObject(GroupName,"hand_l",characterDefName,11,0);
    setCharacterObject(GroupName,"upperarm_r",characterDefName,12,0);
    setCharacterObject(GroupName,"lowerarm_r",characterDefName,13,0);
    setCharacterObject(GroupName,"hand_r",characterDefName,14,0);
    setCharacterObject(GroupName,"head",characterDefName,15,0);
    
    setCharacterObject(GroupName,"thumb_02_l",characterDefName,50,0);
    setCharacterObject(GroupName,"thumb_03_l",characterDefName,51,0);
    setCharacterObject(GroupName,"thumb_04_l",characterDefName,52,0);
    setCharacterObject(GroupName,"index_01_l",characterDefName,54,0);
    setCharacterObject(GroupName,"index_02_l",characterDefName,55,0);
    setCharacterObject(GroupName,"index_03_l",characterDefName,56,0);
    setCharacterObject(GroupName,"middle_01_l",characterDefName,58,0);
    setCharacterObject(GroupName,"middle_02_l",characterDefName,59,0);
    setCharacterObject(GroupName,"middle_03_l",characterDefName,60,0);
    setCharacterObject(GroupName,"ring_01_l",characterDefName,62,0);
    setCharacterObject(GroupName,"ring_02_l",characterDefName,63,0);
    setCharacterObject(GroupName,"ring_03_l",characterDefName,64,0);
    setCharacterObject(GroupName,"pinky_01_l",characterDefName,66,0);
    setCharacterObject(GroupName,"pinky_02_l",characterDefName,67,0);
    setCharacterObject(GroupName,"pinky_03_l",characterDefName,68,0);

    setCharacterObject(GroupName,"thumb_02_r",characterDefName,74,0);
    setCharacterObject(GroupName,"thumb_03_r",characterDefName,75,0);
    setCharacterObject(GroupName,"thumb_04_r",characterDefName,76,0);
    setCharacterObject(GroupName,"index_01_r",characterDefName,78,0);
    setCharacterObject(GroupName,"index_02_r",characterDefName,79,0);
    setCharacterObject(GroupName,"index_03_r",characterDefName,80,0);
    setCharacterObject(GroupName,"middle_01_r",characterDefName,82,0);
    setCharacterObject(GroupName,"middle_02_r",characterDefName,83,0);
    setCharacterObject(GroupName,"middle_03_r",characterDefName,84,0);
    setCharacterObject(GroupName,"ring_01_r",characterDefName,86,0);
    setCharacterObject(GroupName,"ring_02_r",characterDefName,87,0);
    setCharacterObject(GroupName,"ring_03_r",characterDefName,88,0);
    setCharacterObject(GroupName,"pinky_01_r",characterDefName,90,0);
    setCharacterObject(GroupName,"pinky_02_r",characterDefName,91,0);
    setCharacterObject(GroupName,"pinky_03_r",characterDefName,92,0);
    
UE4JointSetToHumanIK()

MEL(UE4グレイマンジョイントをリファレンスしてる場合) Ver.3

//selected_gloup_nodeName_to_HumanIKCharacterName UE4 joint Refferenced. Ver3  
//you shuld Select Root Joint

global proc string makeHumanIkDef_from_selected_groupName()
{
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    string $selectedGlp = $selectedArr[0];
    $characterName = `hikCreateCharacter($selectedGlp)`;
    print("characterName= "+$characterName+"\n");
    return $characterName;
};

global proc string Get_RefferenceName_selected_groupName()
{
    string $RefferenceName ="";
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    string $selectedGlp = $selectedArr[0];
    string $buffer[];
    $numTokens = `tokenize $selectedGlp ":" $buffer`;
    //print("$buffer= "+$buffer+"\n");
    $RefferenceName=$buffer[0];
    print("$RefferenceName= "+$RefferenceName+"\n");
    return $RefferenceName;
};




global proc UE4JointSetToHumanIK()
{
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    if($selectedArr[0]==""){
        print("You Should Select joint And Mesh Group!!!!!!!");
    }else{
        
        $RefferenceName= `Get_RefferenceName_selected_groupName`;
        print("$RefferenceName= "+$RefferenceName+"\n");
        
        $characterDefName= `makeHumanIkDef_from_selected_groupName`;
        print("characterDefName= "+$characterDefName+"\n");
        
        
        
        //setCharacterObject to UnrealEngine4 (UE4)Joint
        setCharacterObject($RefferenceName+":root",$characterDefName,0,0);
        setCharacterObject($RefferenceName+":pelvis",$characterDefName,1,0);
        setCharacterObject($RefferenceName+":thigh_l",$characterDefName,2,0);
        setCharacterObject($RefferenceName+":calf_l",$characterDefName,3,0);
        setCharacterObject($RefferenceName+":foot_l",$characterDefName,4,0);
        setCharacterObject($RefferenceName+":thigh_r",$characterDefName,5,0);
        setCharacterObject($RefferenceName+":calf_r",$characterDefName,6,0);
        setCharacterObject($RefferenceName+":foot_r",$characterDefName,7,0);
        setCharacterObject($RefferenceName+":spine_01 ",$characterDefName,8,0);
        setCharacterObject($RefferenceName+":upperarm_l ",$characterDefName,9,0);
        setCharacterObject($RefferenceName+":lowerarm_l ",$characterDefName,10,0);
        setCharacterObject($RefferenceName+":hand_l ",$characterDefName,11,0);
        setCharacterObject($RefferenceName+":upperarm_r ",$characterDefName,12,0);
        setCharacterObject($RefferenceName+":lowerarm_r ",$characterDefName,13,0);
        setCharacterObject($RefferenceName+":hand_r ",$characterDefName,14,0);
        setCharacterObject($RefferenceName+":head ",$characterDefName,15,0);
        
        setCharacterObject($RefferenceName+":thumb_01_l ",$characterDefName,50,0);
        setCharacterObject($RefferenceName+":thumb_02_l ",$characterDefName,51,0);
        setCharacterObject($RefferenceName+":thumb_03_l ",$characterDefName,52,0);
        setCharacterObject($RefferenceName+":index_01_l ",$characterDefName,54,0);
        setCharacterObject($RefferenceName+":index_02_l ",$characterDefName,55,0);
        setCharacterObject($RefferenceName+":index_03_l ",$characterDefName,56,0);
        setCharacterObject($RefferenceName+":middle_01_l ",$characterDefName,58,0);
        setCharacterObject($RefferenceName+":middle_02_l ",$characterDefName,59,0);
        setCharacterObject($RefferenceName+":middle_03_l ",$characterDefName,60,0);
        setCharacterObject($RefferenceName+":ring_01_l ",$characterDefName,62,0);
        setCharacterObject($RefferenceName+":ring_02_l ",$characterDefName,63,0);
        setCharacterObject($RefferenceName+":ring_03_l ",$characterDefName,64,0);
        setCharacterObject($RefferenceName+":pinky_01_l ",$characterDefName,66,0);
        setCharacterObject($RefferenceName+":pinky_02_l ",$characterDefName,67,0);
        setCharacterObject($RefferenceName+":pinky_03_l ",$characterDefName,68,0);
        
        setCharacterObject($RefferenceName+":thumb_01_r ",$characterDefName,74,0);
        setCharacterObject($RefferenceName+":thumb_02_r ",$characterDefName,75,0);
        setCharacterObject($RefferenceName+":thumb_03_r ",$characterDefName,76,0);
        setCharacterObject($RefferenceName+":index_01_r ",$characterDefName,78,0);
        setCharacterObject($RefferenceName+":index_02_r ",$characterDefName,79,0);
        setCharacterObject($RefferenceName+":index_03_r ",$characterDefName,80,0);
        setCharacterObject($RefferenceName+":middle_01_r ",$characterDefName,82,0);
        setCharacterObject($RefferenceName+":middle_02_r ",$characterDefName,83,0);
        setCharacterObject($RefferenceName+":middle_03_r ",$characterDefName,84,0);
        setCharacterObject($RefferenceName+":ring_01_r ",$characterDefName,86,0);
        setCharacterObject($RefferenceName+":ring_02_r ",$characterDefName,87,0);
        setCharacterObject($RefferenceName+":ring_03_r ",$characterDefName,88,0);
        setCharacterObject($RefferenceName+":pinky_01_r ",$characterDefName,90,0);
        setCharacterObject($RefferenceName+":pinky_02_r ",$characterDefName,91,0);
        setCharacterObject($RefferenceName+":pinky_03_r ",$characterDefName,92,0);
    }
};
UE4JointSetToHumanIK()

MEL(UE4ジョイントがシーンに2つある場合用) hipがないタイプ用

//selected_group_nodeName_to_HumanIKCharacterName
string $selectedArr[] = `ls -sl`;
print($selectedArr);
string $selectedGlp = $selectedArr[0];
global proc string makeHumanIkDef_from_selected_groupName()
{
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    string $selectedGlp = $selectedArr[0];
    $characterName = `hikCreateCharacter($selectedGlp)`;
    print("characterName= "+$characterName+"\n");
    return $characterName;
};
global proc UE4_pelvis_JointSetToHumanIK_FullPath(string $selectedGlp)
{
$characterDefName= `makeHumanIkDef_from_selected_groupName`;
print("characterDefName= "+$characterDefName+"\n");

//setCharacterObject to UnrealEngine4 (UE4)Joint
setCharacterObject($selectedGlp+"|SK_Mannequin|root",$characterDefName,0,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis",$characterDefName,1,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_l",$characterDefName,2,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_l|calf_l",$characterDefName,3,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_l|calf_l|foot_l",$characterDefName,4,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_r",$characterDefName,5,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_r|calf_r",$characterDefName,6,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|thigh_r|calf_r|foot_r",$characterDefName,7,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01 ",$characterDefName,8,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l",$characterDefName,9,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l",$characterDefName,10,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l",$characterDefName,11,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r",$characterDefName,12,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r",$characterDefName,13,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r",$characterDefName,14,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|neck_01|head",$characterDefName,15,0);

setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l",$characterDefName,50,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l|thumb_02_l",$characterDefName,51,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l|thumb_02_l|thumb_03_l",$characterDefName,52,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l",$characterDefName,54,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l|index_02_l",$characterDefName,55,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l|index_02_l|index_03_l",$characterDefName,56,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l",$characterDefName,58,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l|middle_02_l",$characterDefName,59,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l|middle_02_l|middle_03_l",$characterDefName,60,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l",$characterDefName,62,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l|ring_02_l",$characterDefName,63,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l|ring_02_l|ring_03_l",$characterDefName,64,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l",$characterDefName,66,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l|pinky_02_l",$characterDefName,67,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l|pinky_02_l|pinky_03_l",$characterDefName,68,0);

setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r",$characterDefName,74,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r|thumb_02_r",$characterDefName,75,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r|thumb_02_r|thumb_03_r",$characterDefName,76,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r",$characterDefName,78,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r|index_02_r",$characterDefName,79,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r|index_02_r|index_03_r",$characterDefName,80,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r",$characterDefName,82,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r|middle_02_r",$characterDefName,83,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r|middle_02_r|middle_03_r",$characterDefName,84,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r",$characterDefName,86,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r|ring_02_r",$characterDefName,87,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r|ring_02_r|ring_03_r",$characterDefName,88,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r",$characterDefName,90,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r|pinky_02_r",$characterDefName,91,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|pelvis|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r|pinky_02_r|pinky_03_r",$characterDefName,92,0);
}
UE4_pelvis_JointSetToHumanIK_FullPath($selectedGlp)

MEL (UE4ジョイントがシーンに2つある場合用) hipがあるタイプ用

//selected_gloup_nodeName_to_HumanIKCharacterName
string $selectedArr[] = `ls -sl`;
print($selectedArr);
string $selectedGlp = $selectedArr[0];
global proc string makeHumanIkDef_from_selected_groupName()
{
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    string $selectedGlp = $selectedArr[0];
    $characterName = `hikCreateCharacter($selectedGlp)`;
    print("characterName= "+$characterName+"\n");
    return $characterName;
};
global proc UE4JointSetToHumanIK_FullPath(string $selectedGlp)
{
$characterDefName= `makeHumanIkDef_from_selected_groupName`;
print("characterDefName= "+$characterDefName+"\n");

//setCharacterObject to UnrealEngine4 (UE4)Joint
setCharacterObject($selectedGlp+"|SK_Mannequin|root",$characterDefName,0,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip",$characterDefName,1,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_l",$characterDefName,2,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_l|calf_l",$characterDefName,3,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_l|calf_l|foot_l",$characterDefName,4,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_r",$characterDefName,5,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_r|calf_r",$characterDefName,6,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|pelvis|thigh_r|calf_r|foot_r",$characterDefName,7,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01 ",$characterDefName,8,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l",$characterDefName,9,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l",$characterDefName,10,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l",$characterDefName,11,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r",$characterDefName,12,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r",$characterDefName,13,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r",$characterDefName,14,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|neck_01|neckUpper|head",$characterDefName,15,0);

setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l",$characterDefName,50,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l|thumb_02_l",$characterDefName,51,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|thumb_01_l|thumb_02_l|thumb_03_l",$characterDefName,52,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l",$characterDefName,54,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l|index_02_l",$characterDefName,55,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|index_01_l|index_02_l|index_03_l",$characterDefName,56,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l",$characterDefName,58,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l|middle_02_l",$characterDefName,59,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|middle_01_l|middle_02_l|middle_03_l",$characterDefName,60,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l",$characterDefName,62,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l|ring_02_l",$characterDefName,63,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|ring_01_l|ring_02_l|ring_03_l",$characterDefName,64,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l",$characterDefName,66,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l|pinky_02_l",$characterDefName,67,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_l|upperarm_l|lowerarm_l|hand_l|pinky_01_l|pinky_02_l|pinky_03_l",$characterDefName,68,0);

setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r",$characterDefName,74,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r|thumb_02_r",$characterDefName,75,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|thumb_01_r|thumb_02_r|thumb_03_r",$characterDefName,76,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r",$characterDefName,78,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r|index_02_r",$characterDefName,79,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|index_01_r|index_02_r|index_03_r",$characterDefName,80,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r",$characterDefName,82,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r|middle_02_r",$characterDefName,83,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|middle_01_r|middle_02_r|middle_03_r",$characterDefName,84,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r",$characterDefName,86,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r|ring_02_r",$characterDefName,87,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|ring_01_r|ring_02_r|ring_03_r",$characterDefName,88,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r",$characterDefName,90,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r|pinky_02_r",$characterDefName,91,0);
setCharacterObject($selectedGlp+"|SK_Mannequin|root|hip|spine_01|spine_02|spine_03|clavicle_r|upperarm_r|lowerarm_r|hand_r|pinky_01_r|pinky_02_r|pinky_03_r",$characterDefName,92,0);
}
UE4JointSetToHumanIK_FullPath($selectedGlp)

MEL (UE4 ジョイントはシーンに1つ用)

//selected_gloup_nodeName_to_HumanIKCharacterName
global proc string makeHumanIkDef_from_selected_groupName()
{
    string $selectedArr[] = `ls -sl`;
    print($selectedArr);
    string $selectedGlp = $selectedArr[0];
    $characterName = `hikCreateCharacter($selectedGlp)`;
    print("characterName= "+$characterName+"\n");
    return $characterName;
};
global proc UE4JointSetToHumanIK()
{
$characterDefName= `makeHumanIkDef_from_selected_groupName`;
print("characterDefName= "+$characterDefName+"\n");

//setCharacterObject to UnrealEngine4 (UE4)Joint
setCharacterObject("root",$characterDefName,0,0);
setCharacterObject("root|hip",$characterDefName,1,0);
setCharacterObject("thigh_l",$characterDefName,2,0);
setCharacterObject("calf_l",$characterDefName,3,0);
setCharacterObject("foot_l",$characterDefName,4,0);
setCharacterObject("thigh_r",$characterDefName,5,0);
setCharacterObject("calf_r",$characterDefName,6,0);
setCharacterObject("foot_r",$characterDefName,7,0);
setCharacterObject("spine_01 ",$characterDefName,8,0);
setCharacterObject("upperarm_l ",$characterDefName,9,0);
setCharacterObject("lowerarm_l ",$characterDefName,10,0);
setCharacterObject("hand_l ",$characterDefName,11,0);
setCharacterObject("upperarm_r ",$characterDefName,12,0);
setCharacterObject("lowerarm_r ",$characterDefName,13,0);
setCharacterObject("hand_r ",$characterDefName,14,0);
setCharacterObject("neck_01|neckUpper|head ",$characterDefName,15,0);

setCharacterObject("thumb_01_l ",$characterDefName,50,0);
setCharacterObject("thumb_02_l ",$characterDefName,51,0);
setCharacterObject("thumb_03_l ",$characterDefName,52,0);
setCharacterObject("index_01_l ",$characterDefName,54,0);
setCharacterObject("index_02_l ",$characterDefName,55,0);
setCharacterObject("index_03_l ",$characterDefName,56,0);
setCharacterObject("middle_01_l ",$characterDefName,58,0);
setCharacterObject("middle_02_l ",$characterDefName,59,0);
setCharacterObject("middle_03_l ",$characterDefName,60,0);
setCharacterObject("ring_01_l ",$characterDefName,62,0);
setCharacterObject("ring_02_l ",$characterDefName,63,0);
setCharacterObject("ring_03_l ",$characterDefName,64,0);
setCharacterObject("pinky_01_l ",$characterDefName,66,0);
setCharacterObject("pinky_02_l ",$characterDefName,67,0);
setCharacterObject("pinky_03_l ",$characterDefName,68,0);

setCharacterObject("thumb_01_r ",$characterDefName,74,0);
setCharacterObject("thumb_02_r ",$characterDefName,75,0);
setCharacterObject("thumb_03_r ",$characterDefName,76,0);
setCharacterObject("index_01_r ",$characterDefName,78,0);
setCharacterObject("index_02_r ",$characterDefName,79,0);
setCharacterObject("index_03_r ",$characterDefName,80,0);
setCharacterObject("middle_01_r ",$characterDefName,82,0);
setCharacterObject("middle_02_r ",$characterDefName,83,0);
setCharacterObject("middle_03_r ",$characterDefName,84,0);
setCharacterObject("ring_01_r ",$characterDefName,86,0);
setCharacterObject("ring_02_r ",$characterDefName,87,0);
setCharacterObject("ring_03_r ",$characterDefName,88,0);
setCharacterObject("pinky_01_r ",$characterDefName,90,0);
setCharacterObject("pinky_02_r ",$characterDefName,91,0);
setCharacterObject("pinky_03_r ",$characterDefName,92,0);
}
UE4JointSetToHumanIK()

Python のsetCharacterObjectはないみたい。mel.evalで呼ぶこともできるかなあ。

ちょっとめんどいのでまた今度。

UE4ジョイントが二つあった場合にうまく動かないのでフルパスに更新予定

//以下調べもの用

HumanIKをコマンドで操作する
https://qiita.com/amanatsu-knit/items/8c66297b012d74f7438a

whatIs hikCreateCharacter;
whatIs setCharacterObject;
C:/Program Files/Autodesk/Maya2016/scripts/others/hikGlobalUtils.mel

[MEL] 戻り値を配列で返す
なぜかずっと出来ないと思っていた、
プロシージャの戻り値を配列で返す方法。
以下サンプル。

proc string[] sample(string $param[])
{
string $return[];
for ($i = 0 ; $i < size($param) ; $i++)
{
$return[$i] = “Re_”+$param[$i];
}
return $return;
}

sample({“aaa”,”bbb”,”ccc”});
// Result: Re_aaa Re_bbb Re_ccc //

//HumanIKのコントローラー番号
for($i = 0; $i < 212; $i++)
{
$HIKname = GetHIKNodeName($i);
print ($i + ” :” + $HIKname + “\n”);
};
0 :Reference
1 :Hips
2 :LeftUpLeg
3 :LeftLeg
4 :LeftFoot
5 :RightUpLeg
6 :RightLeg
7 :RightFoot
8 :Spine
9 :LeftArm
10 :LeftForeArm
11 :LeftHand
12 :RightArm
13 :RightForeArm
14 :RightHand
15 :Head
16 :LeftToeBase
17 :RightToeBase
18 :LeftShoulder
19 :RightShoulder
20 :Neck
21 :LeftFingerBase
22 :RightFingerBase
23 :Spine1
24 :Spine2
25 :Spine3
26 :Spine4
27 :Spine5
28 :Spine6
29 :Spine7
30 :Spine8
31 :Spine9
32 :Neck1
33 :Neck2
34 :Neck3
35 :Neck4
36 :Neck5
37 :Neck6
38 :Neck7
39 :Neck8
40 :Neck9
41 :LeftUpLegRoll
42 :LeftLegRoll
43 :RightUpLegRoll
44 :RightLegRoll
45 :LeftArmRoll
46 :LeftForeArmRoll
47 :RightArmRoll
48 :RightForeArmRoll
49 :HipsTranslation
50 :LeftHandThumb1
51 :LeftHandThumb2
52 :LeftHandThumb3
53 :LeftHandThumb4
54 :LeftHandIndex1
55 :LeftHandIndex2
56 :LeftHandIndex3
57 :LeftHandIndex4
58 :LeftHandMiddle1
59 :LeftHandMiddle2
60 :LeftHandMiddle3
61 :LeftHandMiddle4
62 :LeftHandRing1
63 :LeftHandRing2
64 :LeftHandRing3
65 :LeftHandRing4
66 :LeftHandPinky1
67 :LeftHandPinky2
68 :LeftHandPinky3
69 :LeftHandPinky4
70 :LeftHandExtraFinger1
71 :LeftHandExtraFinger2
72 :LeftHandExtraFinger3
73 :LeftHandExtraFinger4
74 :RightHandThumb1
75 :RightHandThumb2
76 :RightHandThumb3
77 :RightHandThumb4
78 :RightHandIndex1
79 :RightHandIndex2
80 :RightHandIndex3
81 :RightHandIndex4
82 :RightHandMiddle1
83 :RightHandMiddle2
84 :RightHandMiddle3
85 :RightHandMiddle4
86 :RightHandRing1
87 :RightHandRing2
88 :RightHandRing3
89 :RightHandRing4
90 :RightHandPinky1
91 :RightHandPinky2
92 :RightHandPinky3
93 :RightHandPinky4
94 :RightHandExtraFinger1
95 :RightHandExtraFinger2
96 :RightHandExtraFinger3
97 :RightHandExtraFinger4
98 :LeftFootThumb1
99 :LeftFootThumb2
100 :LeftFootThumb3
101 :LeftFootThumb4
102 :LeftFootIndex1
103 :LeftFootIndex2
104 :LeftFootIndex3
105 :LeftFootIndex4
106 :LeftFootMiddle1
107 :LeftFootMiddle2
108 :LeftFootMiddle3
109 :LeftFootMiddle4
110 :LeftFootRing1
111 :LeftFootRing2
112 :LeftFootRing3
113 :LeftFootRing4
114 :LeftFootPinky1
115 :LeftFootPinky2
116 :LeftFootPinky3
117 :LeftFootPinky4
118 :LeftFootExtraFinger1
119 :LeftFootExtraFinger2
120 :LeftFootExtraFinger3
121 :LeftFootExtraFinger4
122 :RightFootThumb1
123 :RightFootThumb2
124 :RightFootThumb3
125 :RightFootThumb4
126 :RightFootIndex1
127 :RightFootIndex2
128 :RightFootIndex3
129 :RightFootIndex4
130 :RightFootMiddle1
131 :RightFootMiddle2
132 :RightFootMiddle3
133 :RightFootMiddle4
134 :RightFootRing1
135 :RightFootRing2
136 :RightFootRing3
137 :RightFootRing4
138 :RightFootPinky1
139 :RightFootPinky2
140 :RightFootPinky3
141 :RightFootPinky4
142 :RightFootExtraFinger1
143 :RightFootExtraFinger2
144 :RightFootExtraFinger3
145 :RightFootExtraFinger4
146 :LeftInHandThumb
147 :LeftInHandIndex
148 :LeftInHandMiddle
149 :LeftInHandRing
150 :LeftInHandPinky
151 :LeftInHandExtraFinger
152 :RightInHandThumb
153 :RightInHandIndex
154 :RightInHandMiddle
155 :RightInHandRing
156 :RightInHandPinky
157 :RightInHandExtraFinger
158 :LeftInFootThumb
159 :LeftInFootIndex
160 :LeftInFootMiddle
161 :LeftInFootRing
162 :LeftInFootPinky
163 :LeftInFootExtraFinger
164 :RightInFootThumb
165 :RightInFootIndex
166 :RightInFootMiddle
167 :RightInFootRing
168 :RightInFootPinky
169 :RightInFootExtraFinger
170 :LeftShoulderExtra
171 :RightShoulderExtra
172 :
173 :
174 :
175 :
176 :

AポーズからTポーズにしてモーションの流し込みやすいMaya HumanIKスケルトンにキレイにモデルを合わせる方法1~Duplicateで固まるメッシュ※0 を使う方法~

AポーズからTポーズにしてモーションの流し込みやすいMaya HumanIKスケルトンにキレイにモデルを合わせる方法1~Duplicateで固まるメッシュ※0 を使う方法~

きれいにというのは「もとのAポーズのモデルのスキンウェイトをつかってTポーズにしようとしてる」と「新しいjointはできるだけHumanIKのジョイントで作ることでHumanIKでバグらせないことが目標」

大きな流れは
 ジョイントをHIKに差し替え→AポーズからTポーズ→Tポーズでのバインド

1,AposeモデルにMeshEdit用のApose JointをHumanIKスケルトンを複製して作る
(これでHumanIKのベースのジョイント方向や階層構造をキープすると流し込みが完璧になる)
2,そのMeshEdit用のjointをスケールしないで移動と回転などしてApose Meshに合わせる。
2.5,MayaHumanIKにはない頭のジョイントをコピーして親子付けする※1

3,Apose MeshにあわせたそのMeshEdit用のApose jointとApose meshをスキンのバインドする 
3.5 元のAposeモデルからのAposeのスキンウェイトのコピーをする。

4.1見る用にHumanIKスケルトンデフォルトのTposeを複製して作る
4.2 AposeジョイントをAポーズからTポーズにアニメーション30でTポーズに全部「S」でキーを打つ 必要なのは肩のキーだけだ。他に見る用にHumanIKスケルトンに足幅が合ってなければもも関節もキーを打つ。
5,Tposeへ変形+バインドされたApose MeshグループをTポーズの30フレームで「Mesh+Joint」のグループごと複製したグループC(groupMeshHIK_Tpose)とする

6.Cのスキンバインドを外す、
6a. フレームヘッドを0フレームに移動し、
6b. Tポーズのジャケットなどをインポートして、
6c. 0 frame Tposeでスキンバインドここ重要
6d. 30 frameでスキンウェイトをコピーここが肝
※Genesis8Femaleの場合スキンウェイトのコピーの設定※
7a,CをHumanIKスケルトン(groupMeshHIK_TposeSK)として定義
モーション流し込みなおすならこのファイルから
 Genesis8Skelton_HumanIK_049_group_meshHIK_AposeToTposeFr30humanIKfinger.mb
https://www.mediafire.com/file/n4ekyeubv6c4m96/Genesis8Skelton_HumanIK_049_group_meshHIK_AposeToTposeFr30humanIKfinger.zip/file
 これに下のMotionMergeツールで作成したmbアニメーション全体を読み込む
 >>full_end_python_saved__all_onetimeline.mb 読み込まれるファイル
7b.HumanIkの青のボタン>定義>スケルトン
 HumanIkの青のボタン>編集>定義>名前の変更
 SK_manequinを「Character_SK_Mannequin」としてHumanIKに定義する。
 全身Assainしていくことになるが、アサイン結果が左右ミラーされるのでちょっと楽
 手の指先までやる。
 

8,groupMeshHIK_TposeSKに2段目のソースにアニメーションを指定してモーションを流し込む 詳細は※2
8a, スケルトン定義に移動して青のボタンから編集>定義>プロパティを編集
8b.リターゲット指定からソースの一致をONにすると歩く歩幅が合わせることが可能
8c.達成度の項目の左手首を1に右手首を1に指定すると手の位置が合ってテーブルのコップがつかめます。ここでやっとアニメーションの見た目が完璧近い状態で合う。
8d.HumanIKパネルに戻って、青いボタンからベイク処理>コントロールリグのベイク処理
8f. ソースのモーションスケルトンをアウトライナから削除とソースキャラクタ定義へ移動しをゴミ箱アイコンで削除。

8f2ここまでやったらアニメーションレイヤー使うかどうかはモーション作業内容次第。
  
 8g.アニメーションレイヤーでの調整作業。
  ベイクしたTポーズ定義でなく「コントロール」タブで背景を
  ダブルクリックしてコントロールリグを全選択し
  (とビデオではいっているがアウトライナで選択しないと指が全部にならなかった。)、  
   チャネルボックス・レイヤエディタ・アニメーションタブを開く。
 8h.アニメーションタブで「選択項目からレイヤを作成」でAnimLayer1が
  作成され上乗せでキーをうつことが可能になる。
 8i.二つのアニメーションレイヤーを選択して右クリックから
  レイヤーのマージでアニメーションをベイクします。

  1. コントロールリグアニメーションを直接編集しなおす。
      リグのキーフレームをフレーム間で削除して修正
      前のリグアニメを書き出した
      それはこれを使った
    https://furcraea.verse.jp/wp/2021/03/18/humanik-effector-ctrl-animationexporter-importer/

10a groupMeshHIK_TposeSK にコントローラのアニメーションをベイクします。
ジョイントツリーを全部開いて選択後、タイムレンジを0~1000(最終fr)に設定
 アニメーションタブのアニメーションのベイクボタンを押す。
10b,FBXをエクスポート スムーズメッシュをオン FBX2014/2015 で書き出し。
E:\Download\Game\UE4_SK_Mannequin_Motions\scenes\OneTimeLine\Unity_fbx
motion_000_000_all_unkeyReduction_fbx.fbx
を上書きします。

10c,UE4で編集>プラグイン>プラグインウィンドウで検索pythonと入力し
Python Editor Script Pluginの Enables をチェックを入れONにします。
プラグインウィンドウで検索Editorと入力し
Editor Scripting Utilitiesの Enables をチェックを入れONにします。
UE4を再起動してプラグインをアクティブにします。

10d.UE4で
見た目でいうと
/コンテンツ/UE4_OneTimeLineGenesis8Tpose/
パスでいうと
/Game/UE4_OneTimeLineGenesis8Tpose/
にmotion_000_000_all_unkeyReduction_fbx.fbxを
インポートウィンドウでスケルトン設定を「なし」で
スケルタルメッシュとしてインポートします。
スケルタルメッシュmotion_000_000_all_unkeyReduction_fbxと
ひとつなぎのアニメーション motion_000_000_all_unkeyReduction_fbx_Anim
ができていたら
/Game/UE4_OneTimeLineGenesis8Tpose/motion/ フォルダを作成しておきます
command + shift + s またはファイル>すべて保存します。

10d.アニメーションスプリットツールでインポートします。

UE4_SK_Mannequin_Motions\script\
UE4_chara_anim_split_importer.py
をテキストエディタで開き
E:\Download\Game\UE4_SK_Mannequin_Motions\
を自分のパスに検索置換します。

それをすべて選択して
UE4 >ウィンドウ>デベロッパーツール>アウトプットログの一番下のCmdのプルダウンをPython(無印)を選択して
Enter Python script…の部分に
さきほどのコピーしたものをペーストし+Enterを押します。
8~10分で読み込まれます。
~やっと終わり~

モーションを修正する場合には

  1. コントロールリグアニメーションを直接編集しなおす。
    からやりなおせばOK

と思ったが
Paragliderのプロジェクトに入れたら問題が出てきた。
UE4のジョイント名でないとr_handからik_handが探せないエラー
できあがったモーションセットをソースとしてSK_mannequinに戻す作業が必要そうだ。
motion_000_000_all_unkeyReduction_fbx.fbxを
つづく。。。

※0 Duplicateで固まるメッシュ というのは スキンバインドしてアニメーションさせたMeshをモーション後のフレームでDuplicate するとその複製されたメッシュがその形状のまま固まる現象をいう。ちょっとしたバグなのか仕様なのかわからない。都合がいい。

※1 MayaHumanIKにはない頭のジョイントをコピーして親子付けすると変なtransformができるが、全ジョイントのスケールをフリーズして、ヒストリ削除したら親子付けできる。
https://www.deathponta.com/entry/190724_parentingAjointProduceMysteriousTransformNode

※2 HumanIKモーションの流し込みのビデオ
https://area.autodesk.jp/movie/start-at-maya/24.html
https://www.youtube.com/watch?v=S214-96uXqc

使用+橋渡しができたプラットフォームのデータ
ここでは DAZ 3D Studio のGenesis8FemaleはAposeなのでHumanIKのTposeにする。
モーションはUnrealEngine4のデフォルトSK_Mannequinのモーションを
書き出して使った。

UE4 FBX Export Options 設定は
▼Exporter
 Fbx Export Compatibility > FBX2013
▼Mesh
 Vertex Color OFF
 Level Of Detail OFF
▼Static Mesh
 コリジョン OFF
▼Skeletal Mesh
 Export Morph Targets OFF
▼Animation
 Export Preview Mesh ON
 Map Skeletal Motion to Root OFF

全モーションのマージにはこれを作った (書き直したが疲れた。)
https://www.mediafire.com/file/x9tdw9jtrl0t2p2/MotionMerge_p030motionbuilder_chimera_0_Start2.zip/file
インストール方法
C:\Users\whaison\Documents\maya\2016\ja_JP\scripts
にpythonフォルダごと突っ込む。

Maya起動後
プロジェクト設定で指定するワークスペースのディレクトリ構造はこう。
scenes\motion\motionbuilder_fbx\ にUE4SK_mannequinのモーションfbxを全部突っ込む
ファイル名は名前順で並ぶようにちゃんとリネームしておくこと。

C:\Users\whaison\Documents\maya\2016\ja_JP\scripts\python\MotionMerge\p030motionbuilder_chimera_0_Start
Motionbuilder_chimera_0_Start_______Maya_____Starter.py
の内容をスクリプトエディタで実行する。と30分後?ぐらいに
scenes\OneTimeLine\
full_end_python_saved__all_onetimeline.mb
ができあがる。

フレームのどこの部分に該当のモーションが入ってるかは下に出力した。
scenes\motion に
frameCSV.txt
motion_[C0000]_000_Tstance,0,0,OnMotionStart,0.0,OnMotionEnd,1.0,
motion_0000_00_000_Tstance_manual,10,10,OnMotionStart,0.0,OnMotionEnd,1.0,
motion_0000_00_000_Tstance,20,20,OnMotionStart,0.0,OnMotionEnd,1.0,
motion_ZZZZ_ZZ_999_TposeEnd,30,30,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonIdle,40,103,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonJump_Loop_previewMesh2,113,130,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonJump_Start,140,151,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonRun,161,175,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonSwordAttack2,185,206,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPersonWalk,216,240,OnMotionStart,0.0,OnMotionEnd,1.0,
ThirdPerson_Jump,250,254,OnMotionStart,0.0,OnMotionEnd,1.0,
TJ_Paraglider_Deploy_Additive,264,356,OnMotionStart,0.0,OnMotionEnd,1.0,
TJ_Paraglider_Idle,366,606,OnMotionStart,0.0,OnMotionEnd,1.0,
TJ_Paraglider_Idle_AdditiveBase,616,616,OnMotionStart,0.0,OnMotionEnd,1.0,
TJ_Paraglider_Moving_Additive,626,650,OnMotionStart,0.0,OnMotionEnd,1.0,
TJ_Paraglider_Turning_Additive,660,684,OnMotionStart,0.0,OnMotionEnd,1.0,
TK_0-26_A_LedgeClimb,694,720,OnMotionStart,0.0,OnMotionEnd,1.0,
TK_30-102_A_LedgeHold,730,802,OnMotionStart,0.0,OnMotionEnd,1.0,
TK_120-144_A_wallclimb,812,836,OnMotionStart,0.0,OnMotionEnd,1.0,
TK_160-184_A_wallclimbDown,846,870,OnMotionStart,0.0,OnMotionEnd,1.0,
TK_200-249_A_wallCling_01,880,929,OnMotionStart,0.0,OnMotionEnd,1.0,

これをUE4読み込み時にUE4Pythonスクリプトで使う
同じZIPの
https://www.mediafire.com/file/d82x4dd6o1a4k28/MotionMerge_p030motionbuilder_chimera_0_Start4.zip/file
UE4_chara_anim_split_importer.py
E:\Download\Game\UE4_SK_Mannequin_Motions\script\UE4_chara_anim_split_importer.py
に移動して使う
E:/Download/Game/UE4_SK_Mannequin_Motions/scenes/OneTimeLine/
Unity_fbx/motion_000_000_all_unkeyReduction_fbx.fbxが入ってる前提で動く
必要な場合はパスを検索置換したらうごく。


※Genesis8Femaleの場合スキンウェイトのコピーの設定※は
サーフェースの関連付け:UV空間 or レイキャスト
インフルエンスの関連付け1:名前
インフルエンスの関連付け2:なし
インフルエンスの関連付け3:なし
にしたら顔のウェイトが比較的良く転送できた。目の周りのジョイントは位置が同じでUVは違うのでこうなったようだ。
といってもこんなもん
コピー元


コピー先

ほかの設定だと全くコピーされないか、完全におかしいコピーだった。

キーワード
Daz3D,DazStudio
UE4,UnrealEngine4,UnrealEngine
HumanIK
Apose,Tpose,AposeからTposeへの変換
スキニング,スキンウェイト

HumanIK Effector Ctrl AnimationExporter/importer

HumanIKのコントローラーのRIGアニメーション作成は楽しいので昔のKeyFrameを新しいファイルに入れたいときに使う。

animでもatomでも持っていけなかったのでに作るしかないかーと思った。

どうしてもRigなので引っ張られている分ポーズがまんま持っていけるわけではないので確認と調整が必要、ポーズによってはそのまま使える

OKなポーズ

NGだったポーズ

ほとんどNGやないかい。まあ大体の大枠のポーズはインポートできてる。
膝のまがりとかがダメだった。

腰の位置にキーが入らないというかそこらへんが問題ある
HumanIKのHipはへんな記事があった。
HumanIKヒップエフェクターが壊れています
https://forums.cgsociety.org/t/humanik-hip-effector-broken/1583635/3
によると設定をデフォルトにすると直るとか直らないとか神のみぞ知るとか。。

まあとりあえずソース公開

HumanIK Effecter Ctrl Animation Exporter

import maya.cmds as cmds

class HumanIK_Effecter_Ctrl_AnimationExporter:
	def MainWay(self):

		selects=cmds.ls(sl=True)
		selectRef=selects[0]
		print("selectRef= "+selectRef)

		_CtrlIndex=selectRef.find("_Ctrl")
		print("_CtrlIndex= "+str(_CtrlIndex))

		SkeletonName=selectRef[0:_CtrlIndex]
		print("SkeletonName= "+SkeletonName)

		HipsCtrlName=SkeletonName+"_Ctrl_Hips"
		print("HipsCtrlName= "+HipsCtrlName)
		
		startFrame=185
		endFrame=206


		self.keyAllLineStr=""
		
		self.NodeAllLoop(selectRef,HipsCtrlName,startFrame,endFrame)
	
	def key_to_add_line(self,CtrlNode,Way,key_arr):
		if(str(key_arr)=="None"):
			pass
		else:
			 key_arr.insert(0, Way)
			 key_arr.insert(0, CtrlNode)
			 key_str_arr=[]
			 #1度数値を文字列に変換する
			 for v in key_arr:
				str_v=str(v)
				key_str_arr.append(str_v)
			 key_arr_str=",".join(key_str_arr)
			 
			 print("key_arr_str= "+key_arr_str)
			 self.keyAllLineStr=self.keyAllLineStr+key_arr_str+"\n"

	def NodeAllLoop(self,selectRef,HipsCtrlName,startFrame,endFrame):
		
		# 指定したノード以下全てを検索
		CtrlNodeAll=cmds.ls(HipsCtrlName,dag=1)
		#CtrlNodeAll=cmds.ls(selectRef,dag=1)
		print("CtrlNodeAll= "+str(CtrlNodeAll))
		
		CtrlNodeAll.insert(0,selectRef)
		
		for CtrlNode in CtrlNodeAll:
			keyFrameData=""
			#0〜20の時間範囲内のオブジェクト「surface1」のすべてのキーフレームをクエリします。
			#
			keyFrames_rx = cmds.keyframe( CtrlNode,at='rx', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_ry = cmds.keyframe( CtrlNode,at='ry', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_rz = cmds.keyframe( CtrlNode,at='rz', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			
			self.key_to_add_line(CtrlNode,"rx",keyFrames_rx)
			self.key_to_add_line(CtrlNode,"ry",keyFrames_ry)
			self.key_to_add_line(CtrlNode,"rz",keyFrames_rz)
			#print("keyFrames_rx= "+str(keyFrames_rx))
			#print("keyFrames_ry= "+str(keyFrames_ry))
			#print("keyFrames_rz= "+str(keyFrames_rz))

			keyFrames_tx = cmds.keyframe( CtrlNode,at='tx', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_ty = cmds.keyframe( CtrlNode,at='ty', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_tz = cmds.keyframe( CtrlNode,at='tz', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			#keyFrames=cmds.keyframe( sel、time =(185,206)、query = True、valueChange = True、timeChange = True);

			self.key_to_add_line(CtrlNode,"tx",keyFrames_tx)
			self.key_to_add_line(CtrlNode,"ty",keyFrames_ty)
			self.key_to_add_line(CtrlNode,"tz",keyFrames_tz)

			#print("keyFrames_tx= "+str(keyFrames_tx))
			#print("keyFrames_ty= "+str(keyFrames_ty))
			#print("keyFrames_tz= "+str(keyFrames_tz))
			
			keyFrames_sx = cmds.keyframe( CtrlNode,at='sx', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_sy = cmds.keyframe( CtrlNode,at='sy', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			keyFrames_sz = cmds.keyframe( CtrlNode,at='sz', time=(startFrame,endFrame), query=True, valueChange=True, timeChange=True);
			
			self.key_to_add_line(CtrlNode,"sx",keyFrames_sx)
			self.key_to_add_line(CtrlNode,"sy",keyFrames_sy)
			self.key_to_add_line(CtrlNode,"sz",keyFrames_sz)
			
		print("self.keyAllLineStr ="+ self.keyAllLineStr)
		self.fileWrite()
		
	def fileWrite(self):
		
		import codecs

		fout = codecs.open('C:/Users/whaison/Documents/maya/2016/ja_JP/scripts/python/MotionMerge/p030motionbuilder_chimera_0_Start/HumanIK_Effecter_Ctrl_AnimationExporter_keyFrameData.csv', 'w', 'utf_8')
		fout.write(self.keyAllLineStr)




ClassIns = HumanIK_Effecter_Ctrl_AnimationExporter()
ClassIns.MainWay()

HumanIK Effecter Ctrl Animation Importer

import maya.cmds as cmds

class HumanIK_Effecter_Ctrl_AnimationImporter:
	def MainWay(self):

		selects=cmds.ls(sl=True)
		selectRef=selects[0]
		print("selectRef= "+selectRef)

		_CtrlIndex=selectRef.find("_Ctrl")
		print("_CtrlIndex= "+str(_CtrlIndex))

		SkeletonName=selectRef[0:_CtrlIndex]
		print("SkeletonName= "+SkeletonName)

		HipsCtrlName=SkeletonName+"_Ctrl_Hips"
		print("HipsCtrlName= "+HipsCtrlName)
		
		startFrame=185
		endFrame=206


		self.keyAllLineStr=""
		
		#self.NodeAllLoop(HipsCtrlName,startFrame,endFrame,)
		
		self.fileReader()
		
		
	def fileReader(self):
		
		import codecs
		fin = codecs.open('C:/Users/whaison/Documents/maya/2016/ja_JP/scripts/python/MotionMerge/p030motionbuilder_chimera_0_Start/HumanIK_Effecter_Ctrl_AnimationExporter_keyFrameData.csv', 'r', 'utf_8')
		for line in fin:
			print("line= "+line)
			if(line==""):
				pass
			else:
				self.line_to_setkeyframe(line)
			
	
	def line_to_setkeyframe(self,line):
		key_arr=line.split(",")
		CtrlName=key_arr[0]
		print("CtrlName= "+CtrlName)
		Way=key_arr[1]
		print("Way= "+Way)
		key_arr_len=len(key_arr)
		frameStr=""
		valueStr=""
		for i in range(2,key_arr_len):
			val=key_arr[i]
			
			if i % 2 == 0:
				print('frame= '+val)
				frameStr=val
				framefloat=float(frameStr)
			else:
				print('Value= '+val)
				valueStr=val
				valuefloat=float(valueStr)
				print('cmds.setKeyframe( '+CtrlName+","+Way+",t="+str(framefloat)+",v="+str(valuefloat)+")")
				try:
					cmds.setKeyframe( CtrlName, attribute=Way, t=framefloat,v=valuefloat)
				except OSError as err:
					print("OS error: {0}".format(err))
				except ValueError:
					print("Could not convert data to an integer.")
				except:
					print("Unexpected error:", sys.exc_info()[0])
					raise
				
	
	def NodeAllLoop(self,HipsCtrlNam,startFrame,endFramee):
		
		# 指定したノード以下全てを検索
		CtrlNodeAll=cmds.ls(HipsCtrlName,dag=1)
		print("CtrlNodeAll= "+str(CtrlNodeAll))
		
		for CtrlNode in CtrlNodeAll:
			pass
"""
keyFrames_rx= [185.0, 21.089741780299963, 186.0, 21.15808805587963, 187.0, 21.57269253024709, 188.0, 15.651666434240237, 189.0, -27.60824368710669, 190.0, -66.8640151602632, 191.0, -3.6033652533432057, 192.0, -12.976039746033836, 193.0, 21.089741780299963, 206.0, 21.089741780299963]
keyFrames_ry= [185.0, 64.06950181042265, 186.0, -43.06801204369242, 187.0, -42.23534535644165, 188.0, 6.3003207259776, 189.0, -18.619267402281043, 190.0, -46.39726736167605, 191.0, 7.25455667934068, 192.0, 22.112923704038533, 193.0, 64.06950181042265, 206.0, 64.06950181042265]
keyFrames_rz= [185.0, -39.35273351243995, 186.0, -71.88505367073185, 187.0, -71.23919938208138, 188.0, -12.884469861914607, 189.0, -23.728143045065494, 190.0, 1.5441603410596807, 191.0, -29.38106191819622, 192.0, 27.959038658924545, 193.0, -39.35273351243995, 206.0, -39.35273351243995]

#tx
keyFrames_tx= [185.0, -31.063541412353516, 186.0, 13.386266787875757, 187.0, 12.569612782818957, 188.0, -68.13177446430325, 189.0, -14.078931727868042, 190.0, 34.98399964606946, 191.0, -58.035783944634446, 192.0, 38.62583642912938, 193.0, -31.063541412353516, 206.0, -31.063541412353516]
keyFrames_ty= [185.0, 103.91255187988281, 186.0, 160.48102799110984, 187.0, 135.33789404307092, 188.0, 123.42318340077544, 189.0, 143.61781646990772, 190.0, 162.44752777221774, 191.0, 147.59765966522042, 192.0, 149.99067818831213, 193.0, 103.91255187988281, 206.0, 103.91255187988281]
keyFrames_tz= [185.0, -13.255008697509766, 186.0, 126.81360281638925, 187.0, 114.12469622889218, 188.0, 62.25401426920391, 189.0, 116.16546039338427, 190.0, 124.82832123482547, 191.0, 79.97223357269715, 192.0, 43.964009286900165, 193.0, -13.255008697509766, 206.0, -13.255008697509766]

cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_Reference', attribute='translateX', t=186.0,v=-27.940739594423125,)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_Reference', attribute='rotationX', t=186.0,v=-27.940739594423125,)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_Reference', attribute='rx', t=186.0,v=-27.940739594423125,)

cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightArm', attribute='rx', t=185.0,v=21.15808805587963)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightArm', attribute='ry', t=185.0,v=-43.06801204369242)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightArm', attribute='rz', t=185.0,v=-71.88505367073185)
#translate
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightWristEffector', attribute='tx', t=186.0,v= 13.386266787875757)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightWristEffector', attribute='ty', t=186.0,v=160.48102799110984)
cmds.setKeyframe( 'group_meshHIK_TposeSK_Ctrl_RightWristEffector', attribute='tz', t=186.0,v=126.81360281638925)
"""
ClassIns=HumanIK_Effecter_Ctrl_AnimationImporter()
ClassIns.MainWay()