[maya2025]animImportExportがインポートメニューからなくなった様子なのだがmelでやると動くので置いておく。

■アニメーションのエクスポート&インポート機能を有効にする

  • プラグインマネージャーを開いて「animImportExport.mll」の「Loaded」「Auto load」をチェック

■アニメーションのエクスポート

  1. アニメーションをコピーしたいリグのトップノードを選択してツールバーの「File」→「Export Selection(オプション)」を実行する。 
  2. 出力時の設定で「General Option」→「File type」を「animExport」に設定する。  
  3.  「File Type Specific Options」→「Hierarchy階層」→「Below(下位)」に設定する。 

※階層ではなくそれぞれのノードを選択して出力しようとするとインポートの際に失敗することが多いので注意。

select -r Root ;
file -force -options “precision=8;intValue=17;nodeNames=1;verboseUnits=0;whichRange=1;range=0:10;options=keys;hierarchy=below;controlPoints=0;shapes=1;helpPictures=0;useChannelBox=0;copyKeyCmd=-animation objects -option keys -hierarchy below -controlPoints 0 -shape 1 ” -typ “animExport” -pr -es “D:/work/right.anim”;

■アニメーションのインポート

  1. アニメーションをロードしたい階層構造のトップノードを選択。
  2. 「File」→「Import(オプション)」で、先ほど出力したファイルを選択する。 
  3. 「File Type」を「animImport」にして、必要に応じて「Paste Method」の「Insert」「Replace」「Merge」を選択する。
select -r Root ;
file -import -type “animImport”  -ignoreVersion -ra true -mergeNamespacesOnClash false -namespace “right” -options “;targetTime=4;copies=1;option=insert;pictures=0;connect=0;”  -pr “D:/work/right.anim”;
 

成功した。

[maya]法線の仕上げ方法

maya sphere normal to mesh

Mayaで球状の法線をメッシュに反映するには?

Mayaで球状の法線をメッシュに反映させるには、法線転送機能を使用します。まず、球状の法線を持つメッシュ(転送元)と、法線を反映させたいメッシュ(転送先)を用意します。次に、転送元と転送先のメッシュを選択し、「メッシュ>アトリビュートの転送」を選択、頂点法線のみを転送するように設定して「転送」を実行します。これにより、転送元の法線情報が転送先のメッシュに適用され、球状の滑らかな陰影が再現されます

そんなことをしなくてもよかった

を直すには

Mesh Display > Set Vertex Normal

Match face normal

Apply

でOKだった。

UE5ぷちコン23に出したWTV-Wing Tip Vortex翼端渦(よくたんうず)のメモ

是非迫力のエギゾーストノートを聞いて遊んでみてください。

WindowsPackageExe 公開用 感想などコメント頂けると泣いて喜びます。

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

止まってるだけでも絵になるなあ

オフロードコース

ハマったら出られません。笑

最初はシャーシからNurbsCurveで作り始めたが、顔から作ればやる気がでて効率がいいことに気づいた

フロントウィングを作った

リアが完成した。

タイヤが完成した。

Cyber formula Orga Maya Model 管理用ですが 欲しかったらfurcraea.tokyo@gmail.comまでメールください。日本語でのみ受け付けます。

.ma

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

.fbx

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

以下が六輪の真ん中のタイヤの制御の追加方法

凰呀 AOI OGRE AN-21 V12気筒エンジンサウンドをMetaSoundで作ったよ。パラメータ調整大変だった。。 ちゃんとアクセルの具合でエギゾーストノートがピッチ調整される具合が大変だったよ

MetaSoundノード自体はシンプルだがピッチを25にしてる

Speed変数に0.01をかけてからMultifyPich調整に使ってる。これを見つけるまで8時間以上かかった。

プロジェクトデータ管理用

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

[Maya][RIG]maya PythonのOpenMaya の Vector で任意の座標からもっとも近い線分上の点、PoleVecterを求める

こんな感じの状態、

# -*- coding: utf-8 -*-
import maya.cmds as cmds
from maya import OpenMaya
#任意の1点と線分の両端の座標から線分上のもっとも近い点を返す
def xGetClosestPoint(myPoint, begin, end):
    myVector3D = OpenMaya.MVector(myPoint[0] - begin[0], myPoint[1] - begin[1], myPoint[2] - begin[2])
    baseVector3D = OpenMaya.MVector(end[0] - begin[0], end[1] - begin[1], end[2] - begin[2])
    nDotProduct = myVector3D * baseVector3D
    print("nDotProduct= "+str(nDotProduct))
    if (nDotProduct > 0):
        print("Big if")
        nBaseLength = baseVector3D.length()
        print("nBaseLength= "+str(nBaseLength))
        nProjection = nDotProduct / nBaseLength
        
        if (nProjection < nBaseLength):
            print("small if")
            scaleValue = nProjection / nBaseLength
            print("scaleValue= "+str(scaleValue))
            baseVector3D = baseVector3D * scaleValue
            
            return [begin[0] + baseVector3D[0], begin[1] + baseVector3D[1], begin[2] + baseVector3D[2]]
        else:
            print("small else")
            return end

    else:
        print("Big else")
        return begin;
    

sel = cmds.ls(sl =True)

# get Translate
start = cmds.xform(sel[0],q=1 ,ws =True,t=True)
mid = cmds.xform(sel[1],q=1 ,ws =True,t=True)
end = cmds.xform(sel[2],q=1 ,ws =True,t=True)

# Vector for Translate
#startV = OpenMaya.MVector(start[0] ,start[1],start[2])
#midV = OpenMaya.MVector(mid[0] ,mid[1],mid[2])
#midV = OpenMaya.MVector(end[0] ,end[1],end[2])

c_vPos = xGetClosestPoint(mid, start, end)
cmds.xform("pSphere1",ws =True,translation=(c_vPos[0], c_vPos[1], c_vPos[2]) )

線状に乗った!!

参考URL

野中文雄先生の任意の座標からもっとも近い線分上の点を求める

http://www.fumiononaka.com/TechNotes/Flash/FN1104002.html

MAYAチュートリアル:Pythonで極ベクトルを正しく配置する方法

[Maya]Mayaで同じトポロジーを持ったオブジェクトの頂点番号を合わせる ReorderVertices (Shift+クリックではありません)(1つのポリゴンを囲むようにクリックしてください)

mel :ReorderVertex;

Plug-in Manager内の「meshReorder. mll」にチェックマークを入れると機能がアクティブになります。
~Mayaの機能「Reorder Vertices」~
Maya2017から新規に追加された機能で、頂点番号を後から調整することが可能です。

以下より
https://help.autodesk.com/view/MAYAUL/2025/JPN/?guid=GUID-8CF82D97-203C-4056-BEF2-EA0CD27336ED

https://help.autodesk.com/view/MAYACRE/JPN/?guid=GUID-8CF82D97-203C-4056-BEF2-EA0CD27336ED

頂点の順序を変更するには

1,頂点の順序を変更するポリゴン オブジェクトのヒストリを削除します。
2,ディスプレイ> ポリゴン > コンポーネント ID > 頂点(Display > Polygons > Component IDs > Vertices)に移動し、オブジェクトの頂点 ID を選択して表示します。
3,頂点の順序を変更(Reorder Vertices)コマンドを選択します。
4,設定する新しい頂点の順序の最初の 3 つの頂点に関連する 3 つの隣接する頂点をクリックします。
(Shift+クリックではありません)(1つのポリゴンを囲むようにクリックしてください)
Maya では、設定した初期パスに基づいて、残りの頂点が並べ替えられます。

注: 頂点の順序を変更(Reorder Vertices)コマンドは、異なるコマンドやツールに切り替えるまでアクティブであるため、希望の順序になるまで新しい頂点の順序を繰り返し試すことができます。


頂点を手動で並べ替えるのではなく、頂点の順序を転送(Transfer Vertex Order)コマンドを使用して、1 つのオブジェクトから別のオブジェクトに頂点の順序を転送できます。

注: 最良の結果を得るには、まず、2 つのメッシュのトポロジが類似していることを確認します。
1 つのメッシュから別のメッシュに頂点の順序を転送するには

1,転送に関連する両方のオブジェクトのヒストリを削除します。
2,ディスプレイ > ポリゴン > コンポーネント ID > 頂点(Display > Polygons > Component IDs > Vertices)に移動し、オブジェクトの頂点 ID を選択して表示します。
頂点の順序を転送(Transfer Vertex Order)コマンドを選択します。
ソース オブジェクト上で 3 つの隣接する頂点をクリックします。
(Shift+クリックではありません)(1つのポリゴンを囲むようにクリックしてください)
ソース オブジェクト上で選択した 3 つの頂点とトポロジ的に関連しているターゲット オブジェクト上の 3 つの隣接する頂点をクリックします。
(Shift+クリックではありません)(1つのポリゴンを囲むようにクリックしてください)
選択した 3 つのベース頂点とソース オブジェクトが相対関係になるように、残りの頂点が並べ替えられます。

参考URL

[maya][mel] MELでファイルの読み取り専用をチェックする。

[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

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;
}

[maya][mel] mesh から SkinCluster を取得する

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