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へ

関連記事

  1. 2014.09.03

    Vimeo

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

このサイトについて

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

RSS

follow us in feedly

Archives

  • 2024 (4)
  • 2023 (2)
  • 2022 (9)
  • 2021 (14)
  • 2020 (46)
  • 2019 (17)
  • 2018 (33)
  • 2017 (29)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (55)

スポンサードリンク

言語切り替え

  • English (United States)
  • 日本語

スポンサードリンク

言語切り替え

  • English (United States)
  • 日本語

Houdiniを使えるようになる本


Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132

Warning: file_get_contents(): Failed to enable crypto in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132

Warning: file_get_contents(http://api.facebook.com/restserver.php?method=links.getStats&urls=http%3A%2F%2Fnomoreretake.net%2F2013%2F01%2F15%2Fmaya_traileffects_part02%2F): failed to open stream: operation failed in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132

Warning: file_get_contents(): Failed to enable crypto in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132

Warning: file_get_contents(http://api.b.st-hatena.com/entry.count?url=http%3A%2F%2Fnomoreretake.net%2F2013%2F01%2F15%2Fmaya_traileffects_part02%2F): failed to open stream: operation failed in /usr/home/nomorere/nomoreretake.net/wordpress/wp-content/themes/n1-custom/functions/social.php on line 132