edgeToEdgeLoopSkinWeightHanmer
global proc edgeToEdgeLoopSkinWeightHanmer(){
SelectEdgeLoopSp;
//polySelectSp -loop;
ConvertSelectionToVertices;
WeightHammer;
}
edgeToEdgeLoopSkinWeightHanmer()
edgeToEdgeLoopSkinWeightHanmer
global proc edgeToEdgeLoopSkinWeightHanmer(){
SelectEdgeLoopSp;
//polySelectSp -loop;
ConvertSelectionToVertices;
WeightHammer;
}
edgeToEdgeLoopSkinWeightHanmer()
[maya][mel] Check if a file is read-only in MEL.
global proc MEL_FileReadModeCheck(string $Save_path){
//MELでファイルの読み取り専用をチェックする。
print("MEL_FileReadModeCheck("+$Save_path+") \n");
python("import os");
int $FileReadOnlybool = python("os.access('"+$Save_path+"', os.W_OK)");
print("$FileReadOnlybool= "+$FileReadOnlybool+" \n");
if($FileReadOnlybool==0){
print("読み取り専用 のため書き込み不可 \n");
}else{
print("書き込み出来ます \n");
}
}
MEL_FileReadModeCheck("D:/check_ON.txt");
MEL_FileReadModeCheck("D:/check_OFF.txt");
maya mel get mesh from material
hyperShade -objects materialName;
//結果のmeshは選択される
Function
global proc string get_MeshTransform_from_Material_v2(string $mat){
string $selected[];
//選択を取っておく
$selected =`ls -sl`;
string $mesh_arr[];
//$mesh_arr =`hyperShade -objects $mat`;
//結果のmeshは選択されるので
hyperShade -objects $mat;
//選択からとる
$mesh_arr =`ls -sl`;
int $mesh_arr_len=size($mesh_arr);
string $returnStr;
print("$mesh_arr_len= "+$mesh_arr_len+"\n");
if($mesh_arr_len==0){
$returnStr="";
}else{
print("$mesh_arr= "+ stringArrayToString($mesh_arr, ", ") +"\n");
string $mesh= $mesh_arr[0];
string $trans_arr[] = `listRelatives -noIntermediate -fullPath -parent $mesh`;
print("$trans_arr= "+ stringArrayToString($trans_arr, ", ") +"\n");
$returnStr=$trans_arr[0];
}
//選択を戻す
select -cl;
string $sel;
for($sel in $selected){
select -add $sel;
};
return $returnStr;
}
動画はこれだよ
ControlRig と KawaiiPhysicsを接続してるよ
4分岐
1L
1R
2L
2R
ちなみに最後のこれはデバッグであってもなくても動く
で完成!
今後の参考
参考
管理者用 ZIP
https://drive.google.com/file/d/1l5EAxrJS8_Ll6ElZsOLRPNZ7p1tXPgUZ/view?usp=sharing
get SkinCluster from mesh
string $SkinSkinCluster = `findRelatedSkinCluster $mesh`;
応用例
print(">>>>>>>>>>>>>SkinWeightCheck Start>>>>>>>>>>\n");
select "|parts_low";
string $selected[] = `ls -sl -long -absoluteName`;
string $selectedStr = stringArrayToString($selected, ","); // ","を区切り文字として結合する
print("SkinWeightCheckの 選択したもの $selected= "+$selectedStr+"\n");
string $mesh[];
for ($sel in $selected) {
string $allMesh[] = `listRelatives -ni -pa -ad -typ "mesh" $sel`;
for ($am in $allMesh) {
string $trans[] = `listRelatives -ni -pa -p $am`;
$mesh[size($mesh)] = $trans[0];
}
}
$mesh = stringArrayRemoveDuplicates($mesh);
string $meshStr = stringArrayToString($mesh, ","); // ","を区切り文字として結合する
print("SkinWeightCheckの メッシュのみ選別したもの $mesh= "+$meshStr+"\n");
for ($mesh_i in $mesh){
//print("$mesh_i= "+$mesh_i+"\n");
string $SkinCluster = `findRelatedSkinCluster $mesh_i`;
print("メッシュ : "+$mesh_i+" SkinCluster : "+$SkinCluster+" \n");
//string $influenceJoint[] = `skinCluster -q -influence $mesh_i`;
string $influenceJoint[];
int $inflenceJointBool=0;
if ( catch ($influenceJoint=`skinCluster -q -influence $mesh_i`)) {
print("B ------------------------------------------------------------------------------->>>>>メッシュ : "+$mesh_i+" のインフルエンスジョイントがありません!!NG \n");
$inflenceJointBool=1;
$AllWeightMeshBool=1;
}else{
print("A OK \n");
$inflenceJointBool=0;
}
int $WeightMeshBool=0;
if($inflenceJointBool==0){
print("メッシュ : "+$mesh_i+" influenceJoint : "+$influenceJoint[0]+" \n");
//vtx[100] の joint1 の weight を取得
//skinPercent( 'skinCluster1', 'pPlane1.vtx[100]', t='joint1', query=True, value=True)
//string $weight[] = `skinPercent -query -value -t $influence[0] $SkinCluster $mesh `;
string $vertex = $mesh_i+".vtx[0]" ;
//string $weight[] = `skinPercent -query -value $vertex $SkinCluster`;
float $weightFloatArr[] = `skinPercent -query -value $SkinCluster $vertex`;
print("$weightFloatArr= "+floatArrayToString($weightFloatArr, ", ")+"\n");
//skinPercent -query -value skinCluster1 pPlane1.vtx[100];
float $weightAll=0;
for ($val in $weightFloatArr){
$weightAll=$weightAll + $val;
}
print("$weightAll= "+$weightAll+"\n");
if($weightAll>0){
print("SkinWeight OK !!! $mesh_i= "+$mesh_i+" OK!!!!!\n");
}else{
$WeightMeshBool=1;
print("SkinWeight -----------------------------------------------------------スキンウェイトがありません--Attention !!! $mesh_i= "+$mesh_i+" NG!!!!!\n");
}
$AllWeightMeshBool=$AllWeightMeshBool+$WeightMeshBool;
}
}//for
参考
[maya][python] findRelatedskinCLuster
https://discourse.techart.online/t/maya-python-findrelatedskincluster/2673
あるようで知らない特殊な複製。
// 選択したノードに至る上流ノード (およびその接続) も複製されます。
// スキンウェイトなどもコピーされます。
duplicate -upstreamNodes;
上記の場合
duplicate -returnRootsOnly -upstreamNodes;
group root1 parts_low1;
カスタムした例
global proc skinWeightCopy_JointMeshGroup(){
//選択
select root parts_low;
//スキンウェイトモデルのスキンウェイトごとコピー
duplicate -returnRootsOnly -upstreamNodes;
//グループ化
group -name "group_dup" root1 parts_low1;
//元の名前にリネーム
rename "group_dup|root1" "root";
rename "group_dup|parts_low1" "parts_low";
}
skinWeightCopy_JointMeshGroup();
combine しながらエクスポート
global proc skinWeightCopy_JointMeshGroup(){
//選択
select "|root" "|parts_low";
//スキンウェイトモデルのスキンウェイトごとコピー
duplicate -returnRootsOnly -upstreamNodes;
//グループ化
group -name "group_dup" root1 parts_low1;
//元の名前にリネーム
rename "group_dup|root1" "root";
rename "group_dup|parts_low1" "parts_low";
}
global proc group_dup_parts_low_combine(){
string $selected[] = `ls -sl -long -absoluteName`;
//string $selectedStr = stringArrayToString($selected, ","); // ","を区切り文字として結合する
//print("選択したもの $selected= "+$selectedStr+"\n");
string $mesh[];
for ($sel in $selected) {
string $allMesh[] = `listRelatives -ni -pa -ad -typ "mesh" $sel`;
for ($am in $allMesh) {
string $trans[] = `listRelatives -ni -pa -p $am`;
$mesh[size($mesh)] = $trans[0];
}
}
$mesh = stringArrayRemoveDuplicates($mesh);
string $meshStr = stringArrayToString($mesh, ","); // ","を区切り文字として結合する
print(" メッシュのみ選別したもの $mesh= "+$meshStr+"\n");
select -r $mesh; // <メッシュのみ選択
// Combine実行
// Skeletalだった場合
string $combine[] = `polyUniteSkinned -ch 0 -muv 1`;
rename $combine[0] "MeshGP";
//よけておくグループ化
select "|root" "parts_low";
string $group_root;
$group_root =`group -world -name "group_root"`;
//MeshGPをparts_lowへ入れる
select "MeshGP";
string $group_parts_low;
$group_parts_low =`group -world -name "parts_low"`;
//worldへ移動
parent -world "group_dup|root";
//出力用選択
select "|root" "|parts_low";
// Export
// --------------------------------------------------------------------------
simple_model_common_Export(2, "D:/MOSADesign/WorkData/Avatar/008/001/PL_008_001_001/Game/SK_PL_008_001_001_Body.fbx", 0);
//おかたずけ partslow|MeshGP rootを削除
delete "|parts_low" "|root" "|group_dup";
//worldへ移動
parent -world "group_root|root";
//worldへ移動
parent -world "group_root|parts_low";
//group_root 削除
delete "|group_root";
}
// Export
//--------------------------------------------------------------------------
global proc simple_model_common_Export(int $type, string $expName, int $modelType) {
showHidden -a;
// if($type == 2) {
if ($type == 1) {
FBXExportSmoothMesh -v 0;
} else {
FBXExportSmoothMesh -v 1;
}
FBXExportAnimationOnly -v 0;
FBXExportInAscii -v 0 ;
FBXExportConvertUnitString cm;
FBXExportTriangulate -v 0;
FBXExportSmoothingGroups -v 1;
FBXExportConstraints -v 0;
FBXExport -f $expName -s;
}
参考URL
https://help.autodesk.com/cloudhelp/2025/ENU/Maya-Tech-Docs/Commands/duplicate.html
http://me.autodesk.jp/wam/maya/docs/Maya2010/Commands/duplicate.html
Checkout AssetとCheckout Directoryは前からあったが。
Editor Scripting
Asset
f Checkout Asset
f Checkout Directory
Editor Revision Control Helpers
f Check in File
1つのファイルをPERFORCEにチェックイン=アップロード+読み取り専用へ
f Check in Files
複数のファイルをPERFORCEにチェックイン=アップロード+読み取り専用へ
f Check Out File
1つのファイルをPERFORCEにチェックアウト=自分だけ書き込み許可
f Check Out or Add File
1つのファイルをPERFORCEにチェックアウトまたはファイルを追加+自分だけ書き込み許可
今回の場合
https://docs.unrealengine.com/5.2/en-US/PythonAPI/class/StaticMesh.html
から引用すると
・asset_import_data
(AssetImportData): [Read-Write] Importing data and options used for this mesh
の場合
Pythonでは、「asset_import_data
」
Blueprintでは「AssetImportData」だ。
だれもそこんところ教えてはくれないぜ笑