‘MEL’ カテゴリーのアーカイブ

MM_mirrorPose.mel と MM_loadSavePose.mel を更新しました。

2009年11月23日 月曜日

MM_mirrorPose.mel と MM_loadSavePose.mel を更新しました。
Rotate Axis を含んだミラーリングに対応しました。
VisorにあるFBIKサンプルスケルトンでも正しく動作できると思います。
※サンプルスケルトンのleftForearmのスペルをleftForeArmに変更してください。

動作にはMM_library.mll(v.1.0.1)が必要です。
※loadsave_pose.zipに含まれています。
以前に比べ正確に動作すると思います。
Maya7.0~2010 win32bit、8.5~2010 win64bitに対応しています。

spreadObjectsOnSurface

2009年8月29日 土曜日

spreadObjectsOnSurface( “pSphere1″, “pPlane1″, 100 )
                     ↑配置     ↑地面   ↑数
global proc spreadObjectsOnSurface(string $object, string $surface, int $duplicateNb) {
// Get surface size
float $surfaceMinX = `getAttr ($surface+”.boundingBoxMinX”)`;
float $surfaceMaxX = `getAttr ($surface+”.boundingBoxMaxX”)`;
float $surfaceMinY = `getAttr ($surface+”.boundingBoxMinY”)`;
float $surfaceMaxY = `getAttr ($surface+”.boundingBoxMaxY”)`;
float $surfaceMinZ = `getAttr ($surface+”.boundingBoxMinZ”)`;
float $surfaceMaxZ = `getAttr ($surface+”.boundingBoxMaxZ”)`;
for ($n = 0; $n < $duplicateNb; $n++) {
string $duplicatedObject[] = `duplicate $object`;
// Set random value and place the duplicated object
float $randomX = `floor(rand($surfaceMinX, $surfaceMaxX))`;
float $randomY = `floor(rand($surfaceMinY, $surfaceMaxY))`;
float $randomZ = `floor(rand($surfaceMinZ, $surfaceMaxZ))`;
move $randomX $randomY $randomZ $duplicatedObject;
// Could add random rotation and scale task here (apply it to $duplicatedObject)
// Aim the object to the surface
string $geometryConstraintNode[] = `geometryConstraint $surface $duplicatedObject`;
string $normalConstraintNode[] = `normalConstraint -aim 0 1 0 -wut “object” $surface $duplicatedObject`;
// Activate this line if you want to delete the constraints nodes keeping the object pose. So as too manipulate it easier after placing. Note normal constraint node prevent to rotate objects.
// delete $geometryConstraintNode $normalConstraintNode;
}
}

clipsChooser 1.2.0

2008年9月15日 月曜日

clipsChooser 1.2.0
Clips chooser, tool for animatiors
Clip の管理に便利なMELのようです。

displayLayer の順番を変えたい

2008年6月18日 水曜日

LayerのAttributesを開いて、
ExtraAttributesのDisplayOrderを変更する。
あるいは、MELコマンドで
setAttr layer1.do 2;
setAttr layer2.do 3;
setAttr layer3.do 1;
等で変更します。
そのままでは反映されないので、
レイヤーを新規に作(って捨て)るか、
ファイルを保存して再読み込みする。
関連MEL
Displaylayer Manager
レイヤーをフォルダー化できるようになります。
フォルダーに入れるにはレイヤーをフォルダーへ中ドラッグで。
作者は困っていらっしゃるようですが。。。

Digital Hardware Store

2008年6月16日 月曜日

Digital Hardware Store
Davvey’s tools の紹介。
階段やエスカレーター、ナット、ネジなどを生成するMELコマンド。

MEL Fractal Generator

2008年6月14日 土曜日

MEL Fractal Generator
便利MEL2種類の紹介
フラクタルジェネレーター
migFractal.mel
ノーマルツール
migNormalTools

Rivet (button) 1.0

2008年5月27日 火曜日

Rivet (button) 1.0
服のボタンを固定する時に便利なMel。

Load & Save Pose mel に機能追加

2008年1月13日 日曜日

load&save_pose.rar
Load & Save Pose mel に機能追加しました。
あまり頻繁に更新するのは好きではないんですけれども、
これはやはりあった方が便利かなということで更新します。
名前の通りポーズをセーブ・ロード出来ます。
ジョイントでPinningする機能を追加しました。
以前のものをお使いいただいていた方は、
MELファイルを上書きしていただくだけでOKです。
使い方は、以前と変わりません。
キャラクターのポーズデータをディレクトリ内に保存し、
いろんなシーンでポーズを使いまわすことが出来ます。
また、ジョイント名(構造)が同じ他キャラにもポーズをロード可能です。
※オリエントジョイントも揃っていることが必要です。
loadsavepose_1.gif
◎インストール方法
load&save_pose.rarを解凍すると、
load&save_poseディレクトリが作成されます。
その中のscripts、prefs/iconsそれぞれのディレクトリ内にあるファイルを
お使いのMayaディレクトリ内の同名のディレクトリに移動してください。
Windowsの場合
C:\Documents and Settings\USER\My Documents\maya\8.5\scripts
C:\Documents and Settings\USER\My Documents\maya\8.5\prefs\icons
Mayaを起動後、
スクリプトエディターを開いて、
MM_loadSavePose 1;
と入力し、Ctrl+Enterを押すとパネルが開きます。
このコマンドをシェルフに登録しておくと便利です。
loadsavepose_4.gif
◎ポーズの保存の仕方
ルートジョイントを選択して、パネルのlsp_button.gifボタンを押すか、
Pose Space 内で右クリックをしてポップアップメニューから Save Pose を選択します。
プロンプトダイアログが表示されますので、
名前を入力してSaveを押します。
するとPose Space リスト内に名前が追加されます。
◎ポーズのロードの仕方
ジョイントを何も選択していない状態で、
リスト内のポーズ名をダブルクリックします。
すると、ポーズがロードされます。
◎Pinning(V1.2)
固定したいジョイントを選択します。
次に、Pinボタンを押します。
すると、テキストフィールドにジョイント名が入力されます。
対象キャラクターのルートジョイントを選択し、
パネル内のPose spaceのポーズ名をダブルクリックします。
※何も選択せずにポーズをロードした場合は、
Pinningは機能しません。
◎ちょっと便利な使い方
ジョイント構造が同じ場合、
他のキャラクターのルートジョイントを選択して、
リスト内のポーズをダブルクリックすることで、
違うキャラクターにもポーズがロードできます(ロードには若干時間がかかります)。
◎ちょっと便利な使い方2
選択箇所以下の階層にロードされますので、
部分的なポーズのロードが可能です。
手足のジョイントを選択後、ポーズ名をダブルクリックすると、
選択ジョイント以降にポーズがロードされます。
◎ちょっと便利な使い方3
キャラクターのルートジョイントを複数選択して一度に保存できます。
※ただし読み込みに時間がかかるようになります。
lsp_dec.gif

ネームスペースが入っているもの同士でも、
右部の名前が揃っていればロード可能です。
セーブしたファイルはプロジェクトディレクトリ内の任意のディレクトリ
(保存先はディレクトリスペースで作成できます)に拡張子.paファイルとして保存されます。
中身はアスキーファイルですので、テキストエディタで編集が可能です。
ファイルフォーマットは
//ヘッダー部分
//createPose
jointname tx ty tz rx ry rz sx sy sz
 ・
 ・
 ・
// End of ファイル名
となっています。
tx・・・translate
rx・・・rotate
sx・・・scale
Fix first translate のチェックを入れると、
ポーズロード時にキャラの位置を固定できます。
Fixed Plane で固定する平面を指定します。
※noneの場合は、移動しません。
※Pinningが有効の場合は、この機能は無視されます。
loadsavepose_2.gif
ミラー機能も付いています。
loadsavepose_3.gif
設定部分は、ディレクトリネームはポーズを保存するディレクトリの初期値です。
ニュートラルポーズはスキニングしていない時でも初期状態を保存出来ます。
セーブニュートラルで保存し、ロードニュートラルで元に戻せます。
gotoBindPoseはジョイントの全てのRotateをゼロにリセットします。
保険的な機能です。※ただし、位置情報は含まれません。
パネルは伸縮自在です。

FBIK用小粒MEL GotoStanceParts

2008年1月12日 土曜日

FBIK_GotoStanceParts.mel
コマンド FBIK_GotoStanceParts;
FBIKリグのパーツをスタンスポーズに戻します。
※スタンスポーズに戻るわけではなく、
 ローテートを初期化しているだけです。
 なので、Hipsで実行すると、その場でスタンスポーズになります。
手足の指がぐちゃぐちゃになったとき戻すのに便利です。
使い方
FBIKエフェクターを選択
FBIK_GotoStanceParts;
で、そのエフェクターから先が初期化されます。
指などの先端エフェクターをざくっと選択して、
コマンドのシェルフを押すという具合に使うと便利です。
FBIK関係のMELはFBIKUtilityToolsとして、
1つのパネルに纏めようと思います。

FBIK用小粒便利ツールをいくつか

2008年1月11日 金曜日

FBIK_KeyCopy.mel
FBIK_KeyPaste.mel
FBIK_allKeyOffset.mel
モーションの編集をする時に、
これが要るなぁというコマンドを作ってみました。
他のリグで使えるかはわかりませんが、
FBIKRIGをお使いの方にはお勧めかもです。
スクリプトディレクトリに放り込んで、
FBIK_KeyCopy;
FBIK_KeyPaste;
FBIK_allKeyOffset;
これらをシェルフに登録すると便利です。
FBIK_KeyCopy.mel
FBIKキーのコピー
FBIKエフェクターを選択。
キーのあるタイムライン上で
コマンド FBIK_KeyCopy;
でコピーします。
FBIK_KeyPaste.mel
FBIKキーのペースト
上のエフェクターを選択したまま、フレームをペーストしたいタイムラインへ移動。
コマンド FBIK_KeyPaste;
反応が悪いのか、2回実行するのがいいようです。
FBIK_allKeyOffset.mel
FBIKキーのオフセット
エフェクターを選択
キーの打ってあるタイムライン上で
エフェクターを移動・回転させます。
コマンド FBIK_allKeyOffset;
これで、すべてのキーが移動・回転分オフセットされます。
昨日のもついでに
MM_simpleAnimCurveCP.mel
アニメーション元のルートオブジェクトを選択
転送させたい先のルートオブジェクトをシフト選択
コマンド MM_simpleAnimCurveCP;
で、アニメーションカーブが転送されます。

アニメーションカーブのコピペ

2008年1月10日 木曜日

同一サイズ・リグ構造のキャラ間で、アニメーションカーブをコピペするMELです。
非常にシンプルですので、このままシェルフに登録しておくだけで使えるかと思います。
使い方は、アニメーション元のルートオブジェクトを選択、
続いて、シフト選択で転送先のルートオブジェクトを選択(複数可)
で、下のコマンドを実行します。
{
string $sel[] = `ls -sl`;
int $i = 0;
for ($s in $sel) {
select -hi $s;
if($i == 0){
copyKey;
}
else {
pasteKey;
}
$i++;
}
}
いろいろオプションをつけていると非常に重くなってしまいましたので、
もっともシンプルな形にしてみました。動作も軽快です。
複雑な物はバイナリーで。。。そのうち。

Load & Save Pose mel を少し修正

2008年1月8日 火曜日

load&save_pose.rar
Load & Save Pose mel を少し修正しました。
名前の通りポーズをセーブ・ロード出来ます。
7.0以前のミラー・ポーズの不具合の修正と、
位置の固定が出来るようになりました。
以前のものをお使いいただいていた方は、
MELファイルを上書きしていただくだけでOKです。
使い方は、以前と変わりません。
キャラクターのポーズデータをディレクトリ内に保存し、
いろんなシーンでポーズを使いまわすことが出来ます。
また、ジョイント名(構造)が同じ他キャラにもポーズをロード可能です。
※オリエントジョイントも揃っていることが必要です。
loadsavepose_1.gif
◎インストール方法
load&save_pose.rarを解凍すると、
load&save_poseディレクトリが作成されます。
その中のscripts、prefs/iconsそれぞれのディレクトリ内にあるファイルを
お使いのMayaディレクトリ内の同名のディレクトリに移動してください。
Windowsの場合
C:\Documents and Settings\USER\My Documents\maya\8.5\scripts
C:\Documents and Settings\USER\My Documents\maya\8.5\prefs\icons
Mayaを起動後、
スクリプトエディターを開いて、
MM_loadSavePose 1;
と入力し、Ctrl+Enterを押すとパネルが開きます。
このコマンドをシェルフに登録しておくと便利です。
loadsavepose_4.gif
◎ポーズの保存の仕方
ルートジョイントを選択して、パネルのlsp_button.gifボタンを押すか、
Pose Space 内で右クリックをしてポップアップメニューから Save Pose を選択します。
プロンプトダイアログが表示されますので、
名前を入力してSaveを押します。
するとPose Space リスト内に名前が追加されます。
◎ポーズのロードの仕方
ジョイントを何も選択していない状態で、
リスト内のポーズ名をダブルクリックします。
すると、ポーズがロードされます。
◎ちょっと便利な使い方
ジョイント構造が同じ場合、
他のキャラクターのルートジョイントを選択して、
リスト内のポーズをダブルクリックすることで、
違うキャラクターにもポーズがロードできます(ロードには若干時間がかかります)。
◎ちょっと便利な使い方2
選択箇所以下の階層にロードされますので、
部分的なポーズのロードが可能です。
手足のジョイントを選択後、ポーズ名をダブルクリックすると、
選択ジョイント以降にポーズがロードされます。
◎ちょっと便利な使い方3
キャラクターのルートジョイントを複数選択して一度に保存できます。
※ただし読み込みに時間がかかるようになります。
lsp_dec.gif

ネームスペースが入っているもの同士でも、
右部の名前が揃っていればロード可能です。
セーブしたファイルはプロジェクトディレクトリ内の任意のディレクトリ
(保存先はディレクトリスペースで作成できます)に拡張子.paファイルとして保存されます。
中身はアスキーファイルですので、テキストエディタで編集が可能です。
ファイルフォーマットは
//ヘッダー部分
//createPose
jointname tx ty tz rx ry rz sx sy sz
 ・
 ・
 ・
// End of ファイル名
となっています。
tx・・・translate
rx・・・rotate
sx・・・scale
Fix first translate のチェックを入れると、
ポーズロード時にキャラの位置を固定できます。
Fixed Plane で固定する平面を指定します。
※noneの場合は、移動しません。
loadsavepose_2.gif
ミラー機能も付いています。
loadsavepose_3.gif
設定部分は、ディレクトリネームはポーズを保存するディレクトリの初期値です。
ニュートラルポーズはスキニングしていない時でも初期状態を保存出来ます。
セーブニュートラルで保存し、ロードニュートラルで元に戻せます。
gotoBindPoseはジョイントの全てのRotateをゼロにリセットします。
保険的な機能です。※ただし、位置情報は含まれません。
パネルは伸縮自在です。

おちゃめなMaya6 挙動のおかしいsubstituteAllString

2008年1月7日 月曜日

文字列処理用のコマンドのsubstituteAllStringの挙動がおかしいです。
{
string $text = “|Hips|Spine|Spine1|Spine2|Spine3|LeftShoulder|LeftArm”;
$text = substituteAllString($text, “Left”, “Right”);
print $text;
}
が、期待通りの動作をしてくれません。
おかしいのは7.0まで
8.0以降は直っているようです。
回避コードを書くべきか、そのままにしておくか、うーむ。
一応回避コード
{
string $buffer[];
string $text = “|Hips|Spine|Spine1|Spine2|Spine3|LeftShoulder|LeftArm”;
int $numTokens = `tokenize $text “Left” $buffer`;
int $i;
for($i=1;$i<$numTokens;$i++){
$text = `substitute “Left” $text “Right”`;
}
print $text;
}
変換文字でtokenizeした数-1回substituteする。
こちらもまともに動いていないみたいなんですけど、
得られる結果は期待していたものなので良とします。

CGarena | Free Magazine

2007年10月13日 土曜日

CGarena | Free Magazine
CGarena の リリースする Free Magazine 2007年10月号です。
DLするにはCGarenaでアカウントを取る必要があります。

Visual Mel Studio

2007年10月9日 火曜日

Visual Mel Studio
視覚的にUIを構築できるMELのようです。
MELでカスタムUIを作るのが面倒な人にはオススメです。

SS Maya Heaven 1.0.0

2007年10月7日 日曜日

SS Maya Heaven 1.0.0
便利機能満載のMELスクリプト MayaHeaven
FBIKより、これでRig作った方が簡単かも知れません。

Rubiks Cube

2007年8月13日 月曜日

lightsaver_action.jpg

ルービック・キューブを作ってみました。
Rig組をいろいろと試してみましたが、
最終的にexpressionで26個のキューブを制御するという方法に行き着きました。
キーを打ったりなんなりするなら、結局この方が便利だということで。
ただ、expressionでRotationを制御する場合、
ジンバルロックにはまってしまうために、
自前でその回避コードを一個一個検証しながら書いていかなければなりませんでした。
とかなんとかやってたら、膨大な行数になってしまった。
3600行くらい。
読み込みにすごい時間がかかります。
rubikscube.ma(8.5maファイル)
注意点:
再生速度が速いと正常に動きません。
まれにブロックが崩れます。
フレーム1で元に戻ります。

Expressionでローテーションの怪

2007年8月10日 金曜日

Expressionでローテーションを仕込むとジンバルロックに嵌ってしまう。
これはどうにか回避できない物なんだろうか?
自分で回避コードを書くのは辛過ぎるっす。
Maya2008詳報

catch と catchQuiet

2007年7月21日 土曜日

エラーが出ても処理を続けられる「Mel言語のキーワード」だそうです。
使い方が今一わからなかったので検証。
catchQuiet ( `underConstruction` );
// Result: 1 //
catch ( `underConstruction` );
// Error: line 1: Cannot find procedure “underConstruction”. //
// Result: 1 //
catchはエラー表示も返すが処理は続ける。
catchQuietはエラー表示も出さず処理を続ける。
ということのようです。
で、catch ( `<ここに>` );
プロシージャを入れると、そのプロシージャが存在するかどうかで判定するみたい。
プロシージャ内で発生するエラーをチェックしたいんだけど、
これを判定する方法がわからないっす。
既存のプロシージャを使った時にエラーが出る場合はどうやって回避すればいいのかなぁ?

Load & Save Pose mel

2007年7月20日 金曜日

load&save_pose.rar
※プログレスバーの一部不具合を修正しました。(16:48修正)
※済みません。リンクが間違っておりました。(11:57修正)
Load & Save Pose mel というMELスクリプトを作りました。
名前の通りポーズをセーブ・ロード出来ます。
キャラクターのポーズデータをディレクトリ内に保存し、
いろんなシーンでポーズを使いまわすことが出来ます。
また、ジョイント名(構造)が同じ他キャラにもポーズをロード可能です。
※オリエントジョイントも揃っていることが必要です。
loadsavepose_1.gif
◎インストール方法
load&save_pose.rarを解凍すると、
load&save_poseディレクトリが作成されます。
その中のscripts、prefs/iconsそれぞれのディレクトリ内にあるファイルを
お使いのMayaディレクトリ内の同名のディレクトリに移動してください。
Windowsの場合
C:\Documents and Settings\USER\My Documents\maya\8.5\scripts
C:\Documents and Settings\USER\My Documents\maya\8.5\prefs\icons
Mayaを起動後、
スクリプトエディターを開いて、
MM_loadSavePose 1;
と入力し、Ctrl+Enterを押すとパネルが開きます。
このコマンドをシェルフに登録しておくと便利です。
loadsavepose_4.gif
◎ポーズの保存の仕方
ルートジョイントを選択して、パネルのlsp_button.gifボタンを押すか、
Pose Space 内で右クリックをしてポップアップメニューから Save Pose を選択します。
プロンプトダイアログが表示されますので、
名前を入力してSaveを押します。
するとPose Space リスト内に名前が追加されます。
◎ポーズのロードの仕方
ジョイントを何も選択していない状態で、
リスト内のポーズ名をダブルクリックします。
すると、ポーズがロードされます。
◎ちょっと便利な使い方
ジョイント構造が同じ場合、
他のキャラクターのルートジョイントを選択して、
リスト内のポーズをダブルクリックすることで、
違うキャラクターにもポーズがロードできます(ロードには若干時間がかかります)。
◎ちょっと便利な使い方2
選択箇所以下の階層にロードされますので、
部分的なポーズのロードが可能です。
手足のジョイントを選択後、ポーズ名をダブルクリックすると、
選択ジョイント以降にポーズがロードされます。
◎ちょっと便利な使い方3
キャラクターのルートジョイントを複数選択して一度に保存できます。
※ただし読み込みに時間がかかるようになります。
lsp_dec.gif

ネームスペースが入っているもの同士でも、
右部の名前が揃っていればロード可能です。
セーブしたファイルはプロジェクトディレクトリ内の任意のディレクトリ
(保存先はディレクトリスペースで作成できます)に拡張子.paファイルとして保存されます。
中身はアスキーファイルですので、テキストエディタで編集が可能です。
ファイルフォーマットは
//ヘッダー部分
//createPose
jointname tx ty tz rx ry rz sx sy sz
 ・
 ・
 ・
// End of ファイル名
となっています。
tx・・・translate
rx・・・rotate
sx・・・scale
loadsavepose_2.gif
ミラー機能も付いています。
loadsavepose_3.gif
設定部分は、ディレクトリネームはポーズを保存するディレクトリの初期値です。
ニュートラルポーズはスキニングしていない時でも初期状態を保存出来ます。
セーブニュートラルで保存し、ロードニュートラルで元に戻せます。
gotoBindPoseはジョイントの全てのRotateをゼロにリセットします。
保険的な機能です。※ただし、位置情報は含まれません。
パネルは伸縮自在です。

WireFrameRender v0.1

2007年5月11日 金曜日

WireFrameRender v0.1
Mayaで簡単にワイヤーフレーム画像をレンダリングするためのMEL。

Meltris v1.01

2007年5月2日 水曜日

Meltris v1.01 2005-07-02
Mayaでテトリス
MELで書かれているそうです。
最近見つけたのですが、
リリース自体は古いものです。
コードの参考ということで。

Quick easy corrective blendshapes using. Video demonstraition.

2007年3月27日 火曜日

Quick easy corrective blendshapes using. Video demonstraition.
ブレンドシェイプを簡単に登録できるMel。
ビデオで使い方を解説しています。
なかなか便利です。
今後も開発を進める予定だそうです。

expressionでスプラインダイナミクス

2007年2月4日 日曜日

wings_demo.gif

Goalオブジェクトに追従させる先日のダイナミクスでは動きがあまり芳しくなかったので、
簡単なダイナミクスのMELを書いてみました。
ダイナミクスといいつつ動きを少し遅らせるくらいのシンプルな物です。
スプラインカーブにソフトボディを適用し、
そのパーティクルにexpressionで仕込んでいます。
両翼40本ともなると複雑なことはしてないのに
FPSが3以下と再生スピードがとっても遅いのが残念です。
バイナリー化するとどれくらい速くなるのかな?

セットアップをMELで自動化

2007年2月1日 木曜日

左右で40本の羽に同じ仕込をする必要がありますから、
羽1本1本に仕込んでいくのが面倒なので、
簡単なMELを組んでみました。
for文の単純な繰り返し作業です。
後からの修正するにも一から再構築するにも大変便利です。
{
//ミラーボーン
for($i=1; $i<=20;$i++){
string $obj = “LeftWingSkl|LeftWing” + $i;
select -r $obj ;
mirrorJoint -mirrorYZ -mirrorBehavior -searchReplace “Left” “Right”;
}
}
{
//スプラインIK
for($i=1; $i<=20;$i++){
string $obj = “LeftWingSkl|LeftWing” + $i + “|LeftWingm1.rotatePivot”;
string $obj2 = “LeftWingSkl|LeftWing” + $i + “|LeftWingm1|LeftWingm2|LeftWingm3|LeftWingm4|LeftWingm5.rotatePivot”;
select -r $obj ;
select -add $obj2 ;
ikHandle -sol ikSplineSolver;
}
for($i=1; $i<=20;$i++){
string $obj = “RightWingSkl|RightWing” + $i + “|RightWingm1.rotatePivot”;
string $obj2 = “RightWingSkl|RightWing” + $i + “|RightWingm1|RightWingm2|RightWingm3|RightWingm4|RightWingm5.rotatePivot”;
select -r $obj ;
select -add $obj2 ;
ikHandle -sol ikSplineSolver;
}
}
{
//リビルドカーブ
for($i=1; $i<=40;$i++){
string $obj = “curve” + $i;
select -r $obj ;
rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kep 1 -kt 0 -s 2 -d 3 -tol 0.01 $obj;
}
}
{
//ソフトボディ
for($i=1; $i<=40;$i++){
string $obj = “curve” + $i;
select -r $obj ;
dynCreateSoft 0 0 1 0.5 0;
}
}
{
//パーティクルウェイト設定
float $fv[5] = {1.0, 0.9, 0.8, 0.7, 0.5};
for($i=1; $i<=40;$i++){
for($j=1; $j<=4;$j++){
string $obj = “curve” + $i + “ParticleShape”;
particle -e -or $j -at goalPP -fv $fv[$j] $obj ;
}
}
}
{
//ダイナミクスウェイト値設定
for($i=1; $i<=40;$i++){
string $obj = “curve” + $i + “ParticleShape.dynamicsWeight”;
setAttr $obj 0.1;
}
}
{
//コンサーブ値設定
for($i=1; $i<=40;$i++){
string $obj = “curve” + $i + “ParticleShape.conserve”;
setAttr $obj 0.8;
}
}
{
//羽のスムースバインド
//Left
for($i=1; $i<=20;$i++){
string $obj = “LeftWingGroup|LeftWingPoly” + $i;
string $skl = “LeftWingSkl|LeftWing” + $i;
select -r $obj;
select -tgl $skl;
SmoothBindSkin;
}
//Right
for($i=1; $i<=20;$i++){
string $obj = “RightWingGroup|RightWingPoly” + $i;
string $skl = “RightWingSkl|RightWing” + $i;
select -r $obj;
select -tgl $skl;
SmoothBindSkin;
}
}

Jointのアップ方向をvectorで返すMEL

2006年12月14日 木曜日

DetermineAxis
Jointの向いている方向をvectorで返してくれます。
説明書き
// DIRECTIONS: select an aligned joint, then run DetermineAxis()
// RETURNED: aim vector is -X
// // Result: -X -1 << -1 0 0 >> << 0 0 1 >> //
Jointを選択してDetermineAxis() を実行すると、
// Result: -X -1 << -1 0 0 >> << 0 0 1 >> //
が返ります。
結構便利かも、と思ったんですが、軸がずれている場合にはエラーを返します。
なもんであんまり意味は無いなぁと。。。改良すればいいわけですが。。。
ちとがっかりしたんですが、
MELを読むとロケーターを作ってParent Constrainしています。
考えることは一緒ですねぇ。なるほど。

whatIs コマンド

2006年12月12日 火曜日

「コマンド」、「MELプロシージャ」、「スクリプト」、「変数」のいずれであるかを返します。
これを使うとスクリプトがどこにあるのかを教えてくれます。
whatIs プロシージャ名;
で、そのプロシージャが記述されているスクリプト名を返してくれます。
参考にしたいMELを読む時に便利です。

MELでファイル操作2

2006年12月11日 月曜日

ちなみに、ディレクトリーを作る方法
workspace -create $myDir;
or
sysFile -makeDir $myDir;
or
system(”mkdir \”" + $myDir + “\”");
3番目はシステムに依存するコマンドなので、
linuxやMacでは違うかもしれません。

MELでファイル操作

2006年12月10日 日曜日

意外と骨が折れたのがこれ
 ディレクトリーの削除
見つけるまで相当時間がかかりました。
疲れた。
//ファイルorディレクトリパスを取得
string $name = (`workspace -q -rootDirectory` + “/” + $one);
//ディレクトリかどうかの判定
if(`filetest -d $name`){
//ディレクトリ削除 パスを”"で囲うところがミソ \で回避してます
system(”rmdir /s /q \”" + $name + “\”");
}
else {
//ファイルの削除
if (`exists $name`){
sysFile -delete $name;
}
}
この判定順序が違うと動かない。
。。。これはWindowsしか動かないのかな?

Visor の Projects タブで表示されるディレクトリの変更

2006年12月9日 土曜日

デフォルトのままだと、デフォルトのプロジェクトディレクトリが表示されます。
C:/Documents and Settings/Administrator/My Documents/maya/projects/default/
これではあんまり意味が無いので、少し修正。
C:\Program Files\Alias\Maya7.0\scripts\others
visorPanel.mel の 977行目と1741行目の
string $projectsDir = `internalVar -userWorkspaceDir`;

// string $projectsDir = `internalVar -userWorkspaceDir`;
string $projectsDir = `workspace -q -rootDirectory`;
に修正します。
これで現在のプロジェクトディレクトリの内容を表示してくれます。