スキンウェイトを部分的に頂点を選択してコピーしたい。
1 つの頂点からウェイトをコピーする
1 つの頂点を選択し、そのウェイト値を選択したその他の頂点にコピーすることができます。ウェイト値をペーストする頂点は、同じメッシュ上にあっても別のメッシュ上にあっても構いません。
スキン ポイントのウェイト値をコピーしてペーストするには
スキン ウェイト ペイント ツール(Paint Skin Weights Tool)で、選択(Select)またはペイント選択(Paint Select)モードに切り替えます。

ウェイト値をコピーする頂点を選択し、コピー ツール アイコン をクリックします。ウェイト

値をペーストする頂点を選択し、ペースト ツール アイコン をクリックします。コピーしたウェイト値が選択したすべての頂点にペーストされます。
注:
メッシュから別のメッシュにウェイト値をペーストする場合、ソースの頂点に対応するウェイト値のインフルエンスがターゲット メッシュに見つからない場合はエラーが表示されます。
次のホットキーを使用して、頂点から頂点にウェイト値をコピーしてペーストすることもできます。
(Windows) [Alt]+[Ctrl]+[C]、[Alt]+[Ctrl]+[V]
(Mac OS X) [Option]+[Control]+[C]、[Option]+[Control]+[V]
スキンウェイトを部分的に頂点を選択してコピーしたい。がうまくいかない。
// エラー: file: C:/Program Files/Autodesk/Maya2022/scripts/others/artAttrSkinWeightCopy.mel line 22: 選択した項目が多すぎます。ウェイトをコピーする頂点を 1 つだけ選択してください。 //
C:/Program Files/Autodesk/Maya2022/scripts/others/artAttrSkinWeightPaste.mel
1回コピーさせてペーストするのをループさせればできる?
と思って作ったが、いらなくなったコードサンプル 参考にしかならないけど乗せておく。
global proc artAttrSkinWeightCopy_One()
{
global string $gSkinWeightCopyInfluences[];
global float $gSkinWeightCopyWeights[];
string $sel[] = `ls -sl -flatten`;
if(size($sel) < 1) {
error("選択した項目がありません。ウェイトをコピーする頂点を 1 つだけ選択してください。");
return;
}
if(size($sel) > 1) {
error("選択した項目が多すぎます。ウェイトをコピーする頂点を 1 つだけ選択してください。");
return;
}
string $skinCluster = findSkinClusterFromSelectedComponent($sel[0]);
if($skinCluster == "")
return;
$gSkinWeightCopyInfluences = `skinCluster -q -influence $skinCluster`;
$gSkinWeightCopyWeights = `skinPercent -q -v $skinCluster`;
}
global proc artAttrSkinWeightCopy_multiSelect_test()
{
global string $gSkinWeightCopyInfluences[];
global float $gSkinWeightCopyWeights[];
string $sel[] = `ls -sl -flatten`;
if(size($sel) < 1) {
error("選択した項目がありません。ウェイトをコピーする頂点を 1 つ以上だけ選択してください。");
return;
}
if(size($sel) > 1) {
error("選択した項目が多すぎます。ウェイトをコピーする頂点を 1 つだけ選択してください。");
return;
}
string $skinCluster = findSkinClusterFromSelectedComponent($sel[0]);
if($skinCluster == "")
return;
$gSkinWeightCopyInfluences = `skinCluster -q -influence $skinCluster`;
print("$gSkinWeightCopyInfluences--------------\n");
print($gSkinWeightCopyInfluences);
print("\n--------------\n");
$gSkinWeightCopyWeights = `skinPercent -q -v $skinCluster`;
print("$gSkinWeightCopyWeights--------------\n");
$gSkinWeightCopyWeights_Str=floatArrayToString($gSkinWeightCopyWeights, ",");
print("$gSkinWeightCopyWeights_Str= "+$gSkinWeightCopyWeights_Str);
print("\n--------------\n");
}
global proc artAttrSkinWeightCopy_multiSelect2()
{
$OldSelectVtx = `ls -sl`;
print("$OldSelectVtx");
$OldSelectVtx_Str = stringArrayToString($OldSelectVtx, ",");
print("$OldSelectVtx_Str= "+$OldSelectVtx_Str+"\n");
//UIで選択しておく
$BaseMesh = "|Mesh|Arm_Only5";
$PastMesh = "|Mesh|Jacket_For_ShortSkirtUV";
select($BaseMesh);
string $selectBaseVtx[] = `polyInfo -nonManifoldVertices`;
//string $selectBaseVtx[] = `ls -sl -flatten`;
select($PastMesh);
string $selectPastVtx[] = `polyInfo -nonManifoldVertices`;
//string $selectPastVtx[] = `ls -sl -flatten`;
//選択した頂点を再選択
select($OldSelectVtx);
$selectBaseVtx_len = `size($selectBaseVtx)`;
$selectBaseVtx_Str = stringArrayToString($selectBaseVtx, ",");
print("$selectBaseVtx_Str= "+$selectBaseVtx_Str+"\n");
print("$selectBaseVtx_len= "+$selectBaseVtx_len+"\n");
for($i = 0; $i < $selectBaseVtx_len; $i++)
{
select($selectBaseVtx[$i]);
print("$selectBaseVtx["+$i+"] \n");
//artAttrSkinWeightCopy;
select($selectPastVtx[$i]);
print("$selectPastVtx["+$i+"] \n");
//artAttrSkinWeightPaste;
}
select($OldSelectVtx);
}
artAttrSkinWeightCopy_multiSelect2();
参考URL
https://help.autodesk.com/view/MAYACRE/JPN/?guid=GUID-7D895BB0-1522-4388-96E0-4245127F90AB