No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Maya:軌跡エフェクトの作例 その2

はい、Mayaで作る軌跡エフェクトの作例、2例目です。
今回はExpressionを使って軌跡を作っていきたいと思います。
Expressionといっても、それほど難しくない(と思う)ので気軽に試せるのでは、と。

前回と同じものを作るのもアレなので、今回はライン状の軌跡を作ってみようと思います。
こんなヤツ↓

パーティクルでやれば、とか言わないように。

レシピはLocatorが一つと、ほどよい長さのCurveが一つ、あとはExpressionがちょいちょい。

Locatorの動いた軌跡をCurveが辿る、というふうなExpressionを作成したいのです。
Nフレーム前(Nは自然数)のLocatorの位置に、カーブの各Control Vertex(以下CV)を移動すればできる気がします。
こんな感じ。

位置情報を取得する場合は “getAttr”コマンドで取得可能です。
また”-t”オプションで指定したフレームの情報を取得することができます。

getAttr -t 時間 Locatorの位置情報

あとは取得した各フレームのLocator位置へ、カーブの各CVを移動していけば・・・
その前に、カーブのCVがいくつあるかを取得する必要もあるな・・・
記述するExpressionの内容を少し言葉でまとめてみましょう。

①:カーブを構成するCVの数を取得
②:Nフレーム前のLocatorの位置を取得
③:N個目のCVを①の場所まで移動
④:②~③の処理をCVの数だけ繰り返す

いきなりですが、上をExpressionにするとこんな感じになりました。

string $curve = "curve1";
string $locator = "locator1";

//現在のフレームを取得
int $frm = frame;

//SpanとDegreeからControl Vertexの数を取得
int $cSpan = `getAttr ("curveShape1.spans")`;
int $cDegree = `getAttr ("curveShape1.degree")`;
int $iCV = $cSpan + $cDegree;

//フレームごとのLocator位置に、CurveのCVを移動
//Control Vertexの数だけ処理を繰り返す
for($i = 0; $i < $iCV; $i++){

   //0フレームより前のフレームを参照する場合は、すべて0フレを参照。
 if($frm-$i<0){
  vector $pos = `getAttr -t 0 ($locator+".t")`;
  move -ws -a ($pos.x) ($pos.y) ($pos.z) ($curve + ".cv["+$i+"]");
 }else{
  vector $pos = `getAttr -t ($frm - $i) ($locator+".t")`;
  move -ws -a ($pos.x) ($pos.y) ($pos.z) ($curve+".cv["+$i+"]");
    }
}

ちなみに、必要な機能を並べたコードになってますので、あしからず(・ω≦)

Expression? 何それって人は、新規でシーンからLocatorとCurveを一個ずつ作り、
[Window]→[Animation Editor]→[Expression Editor]を開いて、
Expressionの欄に、上のコードを貼り付けてCreateボタンを押すと、
Locatorに追従するCurveが見れると思います。

上で作れる軌跡は1本ですが、配列使えば任意の数の軌跡を作成可能です。
もっとも、Expressionなので数が多くなりすぎると処理が重くなります。

複数の軌跡をLoftで繋げると、”その1”で作ったような軌跡になります。
また上の例のように、ラインのみレンダリングしたいなんて場合は、CurveにPaintEffectをアタッチすると簡単だったりします。
Mentalrayでレンダリンスするときは、さらにポリゴンにコンバート。

 


 

上記の機能を昔Tool化したものがあったので公開。→ FX_AddStroke.mel

melを実行すると、↑のToolが起動します。
ちょっと解説!
[Num]に作成したいLineの軌跡の数を入力し、[CreateStrokeLine]ボタンを押す。
Boxとnullが作成されます。
Boxをアニメーションさせると、nullからLineの軌跡が生成されます。

Boxにはコントロール用のパラメータがあります。

・Echo Frame :軌跡の長さ
・Global Scale:軌跡の太さ
・Thin:末端の太さ
Expressionなので、軌跡の数が多くなると比例して重くなります。ご注意を。

その1へ

関連記事

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

あなたはプロのCG屋さんですか?

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2016 (33)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (54)

スポンサードリンク