ガラスの割り方(自己流編)  

MAYAで、物をバラバラに壊していく方法を説明して 
みたいと思います。かなり自己中な解釈で行いますので 
ご了承ください。 

サンプルをDownLoadeしてください。 

 
まず、MAYAにG02.maを読み込んでみましょう 
すでにひび割れ済みの1枚のプレートを用意しておきました。 
重なり合うPointはシングルでない、バラバラになる状態の破片、 
です。自分はLightWave3Dで一枚のプレートから、ナイフで切り刻んだ 
後に、コピー&ペーストを多用して、バラバラにしていきました。 
手法はいろいろあるので、自分なりのカッコイイ破片を作ってみてください。 

次に1オブジェクト状態のプレートを破片ごとに別々のオブジェクトにする為に 
Modeling/Polygons/Seqarate を実行 
邪魔になった、job03Shapeを消去します。 
 

ScriptEditorに以下のMelを入れて、実行すると、 
polySeparate -ch 1 job03Shape; 
delete polySurfaceShape1; 
//ガラスを破片ごとが1個のPolygonになるよう処理する。処理前のPolyonを処分します。 
//自分で作ったプレートなら、job03Shapeの名前を変更するように。 
 

次に多数出来た破片に、厚さを与えていきます。 
XXX() という簡単なプログラムを作って、それにシーン中にあるすべての 
PolygonSurfaceに厚さを加えることをおこなっています。 

select -cl  ;  
select -r ("polySurface"+"*"+".f[0]");  
//破片をすべてSelect、破片以外のPolygonをシーン中に置くな。(注意)  

proc XXX()  
 
  string $Xobj[];  
  string $node;  
    $Xobj = `ls -sl`;  

for( $node in $Xobj ){  
    polyExtrudeFacet -ch 1 -kft 0 -pvx 0 -pvy 0 -pvz 0  
                 -tx 0 -ty 0 -tz 0 -rx 0 -ry 0 -rz 0 -sx 1 -sy 1 -sz 1 -ran 0 -off 0  
                 -ltz 1 -ws 0 -ltx 0 -lty 0 -lrx 0 -lry 0 -lrz 0 -lsx 1 -lsy 1 -lsz 1 -ldx 1 -ldy 0 -ldz 0 -w 0  
                 -gx 0 -gy -1 -gz 0 -att 0 -mx 0 -my 0 -mz 0 $node;  
 print "\n";  
 print $node ;  
  }  
 
XXX();  
//破片2Dに厚さを加える。 
 

 

破片に厚さを加えました、次は、Dinamicsの機能を使い 
破片をバラバラにふっ飛ばしてみます。 
が、このままだと破片同士はピッタリ隙間なくお互いが埋まっている為に 
身動き一つ出来ない状態なのです。 
これでは、どんなに力を与えても、ビクともしません。 
隙間をほんの少しあける作業をします。 

ZZZ() という簡単なプログラムを作り、シーン中にあるすべての 
PolygonSurfaceのPivotをObjectの中心に移動して、少し縮小を掛けておきます。 
 

proc ZZZ()  
 
  string $Xobj[];  
  string $node;  
    $Xobj = `ls -type "transform" ("polySurface"+"*")`;  

for( $node in $Xobj ){  
  delete -ch;  
  xform -cp $node ;  
  setAttr ($node+".scaleX") 0.95;  
  setAttr ($node+".scaleZ") 0.95;  
  
 print "\n";  
 print $node ;  
  }  
 
ZZZ();  
select -cl  ;  
//ガラスの破片に中心にPivotを移動,少し縮小を掛けておく 
 

DinamicsのRigidBodyの機能を使い,破片をシュミレーションに反応するObjectにします。 
これにより破片は、風や竜間に影響を受け、かつそれぞれの破片がコリジョン(衝突判定) 
するようになります。 
DinamicsのField(力)には、Radial(爆発)とGravity(重力)を用意します。 
 
  

select -r `ls -type "transform" ("polySurface"+"*")`;  
delete -ch;    //ヒストリーを切る 
rigidBody -active -m 1 -dp 0 -sf 0.2 -df 0.2 -b 0.6 -l 0 -tf 200 -iv 0 0 0 -iav 0 0 0 -c 0  
          -pc 0 -i 0 0 0 -imp 0 0 0 -si 0 0 0 -sio none ;  //リキッドボディー 
performDynamics 1 Radial 0;   //爆発 
select -r `ls -type "transform" ("polySurface"+"*")`;  
performDynamics 1 Gravity 0;  //重力 
//リキッドボディー化して、ダイナミクスFieldの生成とコネクト 

select -r radialField1 ;  
move -r 0 -10 0 ;  

currentTime 0 ;  
setKeyframe "radialFieldShape1.magnitude";  
setAttr "radialFieldShape1.magnitude" 100;  
autoKeyframe;  
currentTime 4 ;  
setKeyframe "radialFieldShape1.magnitude";  
setAttr "radialFieldShape1.magnitude" 0;  
autoKeyframe;  
setAttr "radialFieldShape1.attenuation" 2;  
//アニメーション設定 

ダイナメーションのタイミング合わせは、/DynamicのSetingのDynamicsControllerの 
ダイナミクススタートでFrame合わせと、radialFieldのmagnitudeのアニメションKeyで 
調節してください。 
今回は、0Frameから爆発がおきるようSetしました。

Hideされているjob02は正常な状態のガラスです。これと表示をON/OFFするか、 
画像合成で徐々にひび割れを演出するかはそちらの判断です。 
お手製マスクアニメでひび割れガラスに差し替えるのがベストな選択だと思います。
さて、のっけから飛ばしてしまいましたが、如何だったでしょうか?
このモジュール使用して作品作ったおりには、ぜひとも見てくださいメールいただけたら
幸いです。楽しみにしております。
では、よいMAYA Lifeをお楽しみください。