Mayaのマテリアルをスクリプトで変更する方法です。
今回Twitterで「歯磨き粉」さんに助けられました。
スクリプトでここを変更する方法を誰か教えて下さい!#Maya pic.twitter.com/bYgOxjyMDt
— ですぽんた|モーデザ|サウナ歴2年 (@deathponta) 2019年8月16日
下記サイトのやり方で変更できるみたいです。
試してみたところ出来ました!
引用元:MEL How-To #69
// This would be your existing Lambert Material string $shaderNode = "myLambert"; // This would be the desired Material type string $replaceType = "blinn"; string $replaceWith = `createNode $replaceType`; replaceNode $shaderNode $replaceWith; // Not strictly necessary... showEditor $replaceWith; delete $shaderNode; // Rename the new node to match the original. rename $replaceWith $shaderNode;
改造
せっかくなので汎用性を増すためにちょっと改造しました。
// 第1引数:シーン内のマテリアル名を入力 、 第2引数:マテリアルのタイプ(lambert , phong ..etc) proc ChangeMaterialType( string $_tgtMatNodeName , string $_matType ){ string $shaderNode = $_tgtMatNodeName; string $replaceWith = `createNode $_matType`; replaceNode $shaderNode $replaceWith; delete $shaderNode; rename $replaceWith $shaderNode; } // シーン内の全マテリアルを指定したマテリアルに変更する proc ConvertAllMaterial2Lambert( string $_matType ){ // 下記マテリアルは除外する $excludeMats = {"particleCloud1", "shaderGlow1", "lambert1"}; $mats = `ls -materials`; for( $mat in $mats ){ // 処理対象外のマテリアルがあったら処理せずスルー。particleCloud1 とか。 $isExcludeMat = stringArrayContains( $mat , $excludeMats ); if( $isExcludeMat )continue; // マテリアルをlambertにコンバート(lambertでもLambertにコンバートするw) ChangeMaterialType( $mat , $_matType ); } } ConvertAllMaterial2Lambert( "phong" );
上記の関数を実行すると、シーン内のマテリアルがすべてPhongマテリアルに変わります。
ConvertAllMaterial2Lambert() の引数を変えることで、好きなマテリアルタイプに変更することが出来ますね!
終わり!