[maya]スキンウェイトを部分的に頂点を選択してコピーしたい。

スキンウェイトを部分的に頂点を選択してコピーしたい。

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です