スタジオ・ヒエイの徒然ブログ・CG制作のツボ

つれづれなるままにそこはかとなく3Dを紹介するブログ。 Maya、AfterEffectsを使ったCG制作に関するツボなども書き留めることがあります。 つれづれなるままに、日ぐらしPCにむかひて、こころに うつりゆくよしなしごとを、そこはかとなく打ち込めば、あやしうこそものぐるほしけれ

Counter

mel for maya

Mayaプラグイン xyShrinkWrapについて

Mayaプラグイン xyShrinkWrapについて

xyShrinkWrapについて書き留めることにする。
しかし、xyShrinkWrapについて話す前にNEXについて話す必要がある。

 Maya2014から新たNEXというMaya2013以前に使われていた有料のプラグインが追加された。
NEXサイトは以下、
https://draster.com/nex-1.5/

Maya2014に追加されたNEXの機能は市販のNEXよりも強力な機能をもっている。
それはxyShrinkWrapがインタラクティブなかたちで使用できる。
実行後、ヒストリーを削除しなければ、形にフィットした後も、フィットした形をフィットさせたオブジェクトに沿って移動することができる。
この機能は、プラグインのxyShrinkWrapには存在しない。
Maya2014のNEXは非常に高性能であるといえる。

Maya8.5を使っていた頃はNEXを常用していた。理由は以下画像のようなことができなかったからである。
12

Maya2011以降くらいでデフォルトで追加された機能で、Bキーを押すことによって、ソフト変形ができるようになったためNEXのつねる機能は不要になった。
簡単につねった形を作ることができる。
この機能がMaya8.5以前ではなかった。
数年前まではNEXは非常に強力なモデリングツールであったが、現在はMaya2014のデフォルト機能となった。

2つ目の違いは有料のNEXはMaya2014のNEXに比べて非常に重たいという点がある。
Maya2013で有料版NEXを使うと、ショートカットキーの移動、回転、スケールなどのw,e,rボタンを押すと、フリーズすることがよくある。

3つ目の違いは有料版NEXにはxyShrinkWrapが存在しない

このxyShrinkWrapについて今回は語りたい。
このプラグインはMayaのモデラーにとって非常にありがたいツールだと感じている。
xyShrinkWrapは以下のようなコマンドで、テキストエディタを開き、コピーペーストして保存しておくとよい。
.txtを.melに変更すると、Mayaのスクリプトエディタから簡単に呼び出せるので便利だ。

/* This file downloaded from Highend3d.com
''
'' Highend3d.com File Information:
''
'' Script Name: xyShrinkWrap v0.1
'' Author: Imre Tuske
'' Last Updated: May 9, 2002
'' Update/Change this file at:
'' http://www.highend3d.com/maya/mel/?section=modeling#1721
''
'' Please do not alter any information above this line
'' it is generated dynamically by Highend3d.com and will
'' be changed automatically on any updates.
*/

//
// *** xyShrinkWrap.mel ***
//
// Version 0.1 [09-may-2002] -- by Imre Tuske
//
//
// * THIS IS MAILWARE! *
//
// If you use this software regularly and you like it, let me know by dropping me an
// e-mail. This will guarantee that I'll keep on writing another useful pieces of MEL
// code which will be shared with you. Thanks!
//
// [ All Contents (C) by Imre Tuske (tusimi@freemail.hu), Hungary ]
// [ Developments done at Black Hole Ltd. / Animation Department ]
//
//
//
// Description:
//
// This script can be used to 'shrinkwrap' the selected objects and/or components
// (vertices/CVs) to the last selected object. It's based on the original idea of
// Erick Miller (fitMorph.mel). Just liked the cool idea and wrote my own version
// of it ;)
//
//
//
// Installation/Usage:
//
// Make your selection and enter
//
// xyShrinkWrap
//
//
//
// History:
//
// [09-may-2002] 0.1 Initial version.
//
//


proc warn( string $mod, string $msg )
{
warning("xyShrinkWrap::"+$mod+"(): "+$msg);
}


global proc string toshape( string $n )
{
string $s[];

if (objExists($n))
{
$s=`listRelatives -pa -s -ni $n`;
$s=`ls -type controlPoint $n $s[0]`;
}

return($s[0]);
}


proc wrapc( string $c, string $n ) // component (node.attr), wrapper transform
{
float $p[];

$p=`xform -q -ws -t $c`; xform -ws -t $p[0] $p[1] $p[2] $n;
$p=`xform -q -ws -t $n`; xform -ws -t $p[0] $p[1] $p[2] $c;
}


proc wrap( string $ss[], string $ds ) // source transform(s)/shape(s)/component(s), destination geometry shape
{
global string $gMainProgressBar;
string $s, $n, $sh;
int $p;

print($ss);

if (size(`ls -type controlPoint $ds`))
{
$n=`group -w -em -n "n1"`; // create temp ('snapper') null
geometryConstraint $ds $n;

progressBar -e -bp -ii 1 -min 0 -max (size($ss)) -st "Shrinkwrapping..." $gMainProgressBar;

for($s in $ss)
{
if (`progressBar -q -ic $gMainProgressBar`) break;

if (match("[^.]+[.][^.]+[\[].+[\]]",$s)=="") // (check for component format)
{
// object

$sh=$s;

if (size(`ls -tr $s`)) // transform node
{
if (($sh=toshape($s))=="") // find shape node
{
wrapc($s,$n); // no shape: snap transform
$sh="";
}
}

if (($sh!="")&&size(`ls -type controlPoint $sh`)) // geom. shape node: snap all control points
{
$m=`getAttr -s ($sh+".controlPoints")`;
$p=`progressBar -q -pr $gMainProgressBar`;

progressBar -e -min 0 -max $m -st "Wrapping object..." $gMainProgressBar;

for($i=0;$i<$m;$i++)
{
if (`progressBar -q -ic $gMainProgressBar`) break;
progressBar -e -s 1 $gMainProgressBar;

wrapc($sh+".controlPoints["+$i+"]",$n);
}

progressBar -e -min 0 -max (size($ss)) -pr $p -st "Wrapping components..." $gMainProgressBar;
}
}
else
{
// component

if (($s!="")&&objExists($s)) wrapc($s,$n);
}
}

progressBar -e -ep $gMainProgressBar;
delete($n); // delete temp snapper null
}
else warn("wrap",$ds+" doesn't exist or not a surface shape");
}


global proc xyShrinkWrap()
{
string $sl[]=`ls -fl -sl`, $d;
int $i, $m=size($sl);

if ( ($m>1)&&(($d=toshape($sl[$m-1]))!="") )
{
$sl[$m-1]="";
wrap($sl,$d);
}
else warn("xyShrinkWrap","Select some objects; select object to shrinkwrap to last");
}

xyShrinkWrap;


このコマンドはダウンロードした状態では使えなかった。
理由は一番下の行のxyShrinkWrap;が抜けていたからだ
Maya2013で直接コマンドを呼び出して実行する場合、このxyShrinkWrap;が抜けていることだけで使えなくなる。
glabal proc xyShrinkWrap(){
}
グローバルプロシージャの宣言をしているmelコマンドについては実行する際、
最後にglabal procの名称、今回ならxyShrinkWrap;を最終行に追加する必要がある。
その際、忘れてはいけないのが、セミコロン;である。

よくフリーのmelスクリプトが配布されているが、実行すると使えないことがよくある。
その際、global proc(グローバルプロシージャ)があるか確認して、最終行にその名前を付け足すといい。

で、実際にxyShrinkWrapのMaya2011からMaya2013での使い方だが、以下に記載しておくことにする。

1、今回の作例ではZbrushの岩を使うことにする。
1

Mキーを押すと岩の種類が表示される。
2

ドローして岩を出現させよう。
3

次にMayaに.obj形式でexportする。
4


2、MayaにZbrushのオブジェクトを読み込んだ際に非常にポリゴン数が多くなる
これを改善するためにxyShrinkWrapは活躍してくれる。
5

まずcube立方体を作成して分割数を上げる。
6

次にフリーでダウンロードできるxyShrinkWrapを読み込んで、以下の行を追加する。
今回は上に記載したコマンドをそのまま使用すればよい。
7

次に分割した立方体の中にZbrushの岩を入れて、囲ってしまう。
8

次にctrl+Aでコマンドを全選択して実行する。
実行する際のオブジェクトの選択順序は、分割したcube立方体から先に選択、2番目にZbrushの岩を選択する。
9

10

ピッタリとひっついたのが分かる。
Zbrushから出力したハイポリの岩を削除しよう。
11

ロウポリ化することができた。

このxyShrinkWrapはキャラクターなどでも使える非常に重要なツールで役に立つ。
ただ一点残念なのは、Maya2014のxyShrinkWrapのようにインタラクティブ性がない点である。
Maya2011からMaya2013ユーザーの参考のために記載した。

スタジオ ヒエイ作成提供
⇒⇒: http://www.studio-hiei.com
hiei

Maya版FloorGeneratorを発見

Maya版のfloor generatorになりそうなmelコマンド。
先週Maya版のfloorgeneratorがありますか?という質問にたいする回答です。
move($x * 100)のこの100の値を30など調整して横の感覚を詰めることが可能です。
またZ方向への移動に関しては($z * 40.0)、の40を200など任意の数値に変更します。後もう少し改良しないと、すこし3dsMaxのプラグインに比べてはやや幼稚な感じです。
オブジェクトを選択して実行します。

string $box[] = ` ls -sl `;

int $kazu = ` size ( $box ) `;

for ( $z = 0; $z < 5; $z++ ){

for ( $x = 0; $x < 10; $x++ ){

int $rnd = ` rand ( $kazu ) `;

string $fukusei[] = `duplicate $box[ $rnd ] `;

move ($x * 100) 0 ($z * 40.0) $fukusei[0];
}
}

1



スタジオ ヒエイ提供(Studio Hiei Presents)
⇒⇒ http://www.studio-hiei.com
hiei


はじめてのmelスクリプト 3dsMaxの角度スナップ機能をMayaに実装

3dsMaxの角度スナップ機能をMayaに実装

今回作ったmelスクリプトはモデリングの際、非常に便利なものです。
特に建築物をモデリングする際、重宝するでしょう。
以下がRotate45_degree_Toolです。
使い方は下記に記載



// create the Rotate45_degree proc

proc superKeyer(int $choice){
string $sel[] = `ls -sl`;
for ($obj in $sel ) {

if ($choice == 1) rotate -r -os 45 0 0 ;
if ($choice == 2) rotate -r -os 0 45 0 ;
if ($choice == 3) rotate -r -os 0 0 45 ;
if ($choice == 4) rotate -r -os -45 0 0 ;
if ($choice == 5) rotate -r -os 0 -45 0 ;
if ($choice == 6) rotate -r -os 0 0 -45 ;
}
}


//Check for window and delete if needed

if (`window -exists Rotate45_degree` ) {
deleteUI -window Rotate45_degree;
}


// ui for the Rotate45_degree window

string $ezWindow = `window -title "Rotate45_degree"
-wh 128 256
Rotate45_degree`;
// define layout

rowColumnLayout -numberOfColumns 2 -cw 1 16;

// column 1 column 2

symbolButton -i "ezX.bmp" -c "superKeyer(1)"; text -label " RotateX45";
symbolButton -i "ezY.bmp" -c "superKeyer(2)"; text -label " RotateY45";
symbolButton -i "ezZ.bmp" -c "superKeyer(3)"; text -label " RotateZ45";

separator; separator;
separator; separator;

symbolButton -i "ezX.bmp" -c "superKeyer(4)"; text -label " RotateX-45";
symbolButton -i "ezY.bmp" -c "superKeyer(5)"; text -label " RotateY-45";
symbolButton -i "ezZ.bmp" -c "superKeyer(6)"; text -label " RotateZ-45";

// this will show the window
showWindow $ezWindow;



以下使い方。
1、3dsMaxには以下のように回転スナップボタンがついていて、15度づつスナップして回転可能です。
例えば建物の柱を45度や90度に回転したい場合、非常にダイレクトです。
これがMayaにないので欲しかったわけです。

1


2、Mayaのスクリプトエディタを開いてmelをコピーしましょう。タブがmelになっていることに注意してください。
2


3、CTRL+Aですべて選択して実行ボタンを押しましょう。
3


4、Rotate45_degree_Toolが起動します。
4


5、melスクリプトを全選択して、中マウスボタンドラッグでシェルフに追加すると、ワンクリックでmelが実行されます。
5


6、枠左にあるのがボタンです。右側の文字を押しても何も起こりません(注意!)。(ボタンに画像を割り当てることも可能です。sorceimagesフォルダの中に16×16pixelの画像を入れてなど・・・別にやらなくてもOKです。)
6


7、RotateX45ボタンを押してみましょう。カメがX軸を基点に45度回転しました。2回押したら90度ですね。
7


8、次はmelスクリプトのカスタマイズ方法です。以下画像の値45を15に変更すると15度ずつ回転するようになります。3dsMaxのように自分でカスタマイズできていますよね。
8


9、以下のようにmelスクリプトを追加すると-45度回転させる項目を追加することが可能です。
9


10、-45度回転しました。
10


11、シェルフに保存して名前をつけましょう。
11




他にも3dsMaxにはオブジェクト間の完璧な接地ツールがあります。Mayaは若干目測です。
なので、以下のようなmelがフリーダウンロード可能です。
Mayaでのインテリアシーンの作成に便利です。
MakePlanar and SetNormal Tools 0.2.1 (maya script)
http://www.creativecrash.com/maya/downloads/scripts-plugins/c/makeplanar-and-setnormal-tools--2

以下はDeo's Aligner Tool 1.0.1 (maya script) で3dsMaxにはあってMayaにないです。
Mayaでの方法はscaleを0方向に絞っていくことでポイントを平行にします。
http://www.creativecrash.com/maya/downloads/scripts-plugins/c/deo-s-aligner-tool


GeoSpheres 2.2.0 (maya script) 3dsMaxにあってMayaにありませんので拡張しましょう。
様々なポリゴンメッシュの球体が作成できます。
三角化してnclothを割り当てると、布のテイストが変化します。
宇宙船のアニメーションなどで役立つでしょう。他にインテリアシーンでも使えるかと・・・。
http://www.creativecrash.com/maya/downloads/scripts-plugins/modeling/poly-tools/c/geospheres--2


Mayaは若干アバウトな側面を兼ね備えながらも、ユーザー自身で簡単にカスタマイズできる良い点があるのです。特にmelはC言語がベースですので非常に安易な方みたいです。
FlashのActionScriptなどweb開発をやっている方なら簡単にマスターできるかと思います。
皆さんも、やったことがない方、便利で楽なので挑戦してみましょう。



以下youtubeてもmelの使い方をアップロードしました。参考にしてください。
工業製品を作るお仕事でRotate45_degree_Toolを使用しているシーンです。



MELスクリプト名 Rotate45_degree_Tool

3dsMaxの回転スナップツールをMayaでも使いたかったので作りました。
建築物など作成の際15度〜90度の範囲で回転をスナップさせる機能が非常に重要かと思います。Mayaを拡張するツールとしてお使いください。
大規模なマンションなどをモデリングする際にこの回転スナップツールfor Mayaの存在が大きなものになるでしょう。


スタジオ ヒエイ制作(Studio Hiei Presents)
hiei
QRコード
QRコード
Recent Comments
  • ライブドアブログ