2013年11月29日金曜日

【Script】キーフレームのオフセット

アニメーションを付けているとキーフレームをオフセット(時間をずらす)したいときがあります。
とくに、手付けアニメーションのとき等先端に行くにしたがって遅らせてアニメーションを作成したいときがあります。

そんな時は順番にキーフレームを選択してずらすやり方をします。
数が少なければこの方法でも大きな時間的なロスは少ないかと思いますが
骨階層が20とか100になった場合それを手作業でやるとなると相当時間がかかります。

これまた無いなら作ろうの精神で、キーフレームをオフセットするスクリプトを作成しました。



オブジェクトを選択して、オフセットしたいフレームを決めボタンを押下します。
 



このときオプションでALLにしてボタンを押すと選択したオブジェクトが同じフレームだけ
オフセットされます。



また、Eachにしてボタンを押下すると選択したオブジェクトごとにキーフレームがオフセットされます。



これで手付けアニメーションが少しでも効率的になって、トライアンドエラーの回数がこなせるようになるかと思います。

注意として、このスクリプトは選択しているオブジェクトの全てのキーフレームに対して実行するようになってます。



DownLoad
KeyFrameOffset.py
(MotionBuilder2012で動作確認済み)



2013年9月21日土曜日

【script】プロットの簡略化

MotionBuilderでキャラクターアニメーション作るときの方法の1つで、レイヤーを使ってアニメーションを調整する方法があります。そこでどんどんレイヤーを使って編集していくとどんどん複雑になっていくので一度骨にPlotして、またRigに戻してスッキリさせていく方法があるかと思います。

人によるかと思いますがMotionBuilderのアニメーション作業に慣れてくるとPlotの嵐になるので
いちいちPlotCharacterボタンを押して、どこにPlotするかのボタンを押して、オプションを確認してPlotボタンを押して一度骨にPlotして、さらにRig戻す時は同じようにPlotCharacterボタンを押して、どこにPlotするかのボタンを押して、オプションを確認してPlotボタン押すという、一度スッキリさせたいのにクリックする回数が6回あります。

時間を短縮すれば塵も積もればのことなので、作業効率が計れるかと思います。
そこでRig→Skeleton→RigというPlotの工程を1クリックで出来るスクリプトを作成しました。



このスクリプトを実行すると上図のウィンドウが表示されます。
キャラクターがRigで動いている時にCharaPlotボタンを押すとRig→Skeleton→RigというPlotの工程をしてくれます。

Select Plotボタンは選択しているオブジェクトをPlotしてくれます。
All Takesチェックボックスは読んで字のごとく、チェックがONのときは全てのテイクに対してPlotの工程をしてくれます。

ポイントとしては一度手動でPlotオプションを設定してからのほうがいいです。
このスクリプトでPlotされるときは現在設定されているPlotオプションで実行されます。

私はこのスクリプトを実作業で使って作業効率を計っています。

DownLoad
AutoPlotPlot.py
(MotionBuilder2012)

2013年7月29日月曜日

【Tips】MotionBuilderのRigidBodyシミュレーション

MotionBuilderには便利な機能として剛体の物理シミュレーション、いわゆるRigidBodyシミュレーションがあります。
MoitonBuilderのRigidBodyシミュレーションのメリットとしては、やはりリアルタイムで動いてくれるのでトライ&エラーが何回も出来るところです。
デメリットとしては、複雑な形状をシミュレーション出来ないことですが、プリミティブのオブジェクトを組み合わせて複雑な形状を近似させてあげれば問題ありません。

例えば下図のような形状を近似させることをやってみます。


複雑な形状を近似させる事とは、プリミティブの形状を複数使って形を似せるってことです。
今回はCylinderとCubeを使って、近似させてみました。(赤いワイヤーフレームの物です)




これらをまとめるNullを1つ出して、この形状の重心の位置にくるように配置します。


このNullが親になるようにプリミティブをペアレント化します。

次にRigidBodyをNullへドラッグ&ドロップしてアサインします。


RigidBodyのプロパティで、Correct Mass Center のチェックをオフにします。


ここまで設定すれば後はいつも通りのシミュレーションのやり方です。
適当なアニメーション付けて、RigidBodyのプロパティのActivationのPassiveとActiveにキーフレームを打ち、キーフレームアニメーションからRigidBodyシミュレーションへと変わるように設定します。


その結果が以下の動画です。


今回のRigidBodyシミュレーションのポイントとして、複数のプリミティブをNullでシミュレーションするということと、そのNullが形状の重心になるということです。
これを応用すれば、色々な形状をRigidBodyシミュレーションさせることが出来るようになります。

 

2013年5月21日火曜日

【PlugIn】 Perlin Noise Filter でお手軽カメラ揺れ

CGでハンディカメラっぽい揺れを作るときの1つの方法として、
注視点をランダムに動かして揺れを作る方法があります。

この時ランダムに動かすっていうのが結構面倒くさいのでプログラム的なアプローチで自動で出来ないかと色々考えます。

最初に思いつくのがrandom関数などで出力された値を使ってランダムに動かすことです。
試しに作ってみると、出力される値がバラバラすぎて規則性が無いものになります。

これだと1フレで瞬間移動しているような動きになりハンディカメラっぽい揺れに適さないです。



次にnoise関数を色々調べるとPerlinNoiseというのが具合が良さそうです。
このPerlinNoiseというのは簡単に言うと、山の起伏のように連続していながらもランダムな数値を返すもののようです。

Mayaではnoise関数というのがあって、この関数自体がPerlinNoiseとして実装されています。
MotionBuilderには勿論そういう機能がないので、いつもの事ながら無いなら作ろうの精神で
PerlinNoiseを加えるFilterを作りました。


選択した範囲にあるキーフレームに対して、PerlinNoiseで出力された値を加算します。
なのでカメラのアニメーションを作るときは、ベースレイヤーには普通にアニメーションを付けて、
別レイヤーで値が0のキーフレームでResampleしてある状態にこのPerlinNoiseフィルターをかけてカメラ揺れを再現するのが調整しやすいやり方だと思います。

DownLoad
Nagao_PerlinNoise_Filter.zip
(MotionBuilder2012 64bit版)

2013年1月9日水曜日

レイアウトと黄金比

明けましておめでとうございます。
前回からだいぶ開いてしまいましたが今年一発目の更新です。
これからもよろしくお願い致しいます。

さて、
写真や映像を作っているときに大事な事として、見せたい被写体を画面のどこに収めるかがあります。いわゆるレイアウトまたは構図ってことですね。

被写体をどこに収めるのにこれという決まりはありません。むしろ自由です。
ですが、いわゆる定石とも言うべき安定した構図が存在します。

その1つに、画面を黄金螺旋(ゴールデンスパイラル)で作図した点に見せたい被写体を配置するということです。

黄金螺旋とは以下のような線です。
これは黄金比の縦横比1:1.618の比率の長方形の中に同じ比率の長方形を書いていき
長方形を分割してできた正方形の辺の長さを半径とする円弧を繋げたものです。

この黄金螺旋で作図された点に配置すると、自然な視線誘導として見やすい配置なります。
上図では右下に配置されてますが、上下左右反転しても問題ありません。


他には対角線を引き、その対角線と垂直になるように垂線を角から描いて交わった点に配置する方法です。

 
これら交点にみせたい被写体を配置するとみやすい安定感のある画になります。
 
 
ただ映像の解像度には、1920x1080ピクセルや1280x720ピクセル、640x480ピクセルなどなど様々存在します。これらに対して黄金螺旋や対角線の補助線を描いていくのは面倒でネットを色々探してみると嬉しいことに、PhotoShopのスクリプトでこれら補助線を描いてくれるのを以下のサイトで発見しました。
 
これを使えばどの解像度のサイズでもボタン一発で補助線が出来るので嬉しいもんです。
 
 
 
ただここまで書いてきた構図の取り方は1つの方法で、映像の場合前後のカットの関係やカット切り替えのタイミングなど様々な要素が絡み合ってくるのでこの方法が必ずしも良いというわけではありません。けれど、映画など映像作品を補助線をかぶせて見ると面白いことに、これら補助線のところに被写体を配置している構図が多いものです。
 

2012年11月13日火曜日

【記念】1万View突破

このBlogを始めて約4カ月位経ちました。
ようやくこのBlogのページViewが1万を超えました。

記事の更新回数頻度から考えると上出来じゃないかと思います。
振り返るとおもにMotionBuilderの記事を書いていて、たまにMayaの記事も書いてたりするのですが、やっぱりMayaの記事の方が閲覧数は圧倒時に高いですね。
何だかんだで、需要はMayaのほうに軍配が上がりました。

けど、ネットで検索してもMotionBuilderの情報が少ないので、当Blogが少しでも情報を発信して
有益なものになれるようこれからもMotionBuilderの記事をメインに書いていきたいと思います。

こんな情報やTipsが知りたいなどあったらコメントいただけると、私の知りうる限りで記事を書いていきたいと思いますので、リクエストなど受け付けますのでどしどしコメントいただけたら嬉しいです。

2012年9月24日月曜日

【Rig】MotionBuilderでSplineIK

MotionBuilderでアニメーションを付けていて思うのが、鞭とか触手系のアニメーションが付けづらいというか、そういうものが出てきたらMayaとかに持って行ってSplineIKのRigを組んでアニメーションを付けていました。

そもそもMotionBuilderでSplineIKが実装されないのが不思議ですが、あったらかなり便利というか欲しいので、これまた無いなら作ろうの精神でなんちゃってSplineIKを作りました。


※動画が分かりづらかったので、更新

これは前の記事で書いたパスをアニメーションさせるプラグインと、今回新たに作成したパス上にIKのハンドルをコンストレインするプラグインを組み合わせたものです。
厳密に言うと、カーブの長さを積分して全長を算出して、その値からPathコンストレインのWarp値を計算で出力するRelationのBoxのプラグインです。


RelationのBoxとして実装しているので間に色々な物を組み合わせることが出来るので
動画のように伸び縮みするようなRigを組んだりすることも可能です。

これがあれば、関節が多い触手系や鎖、尻尾などを簡単にアニメーションさせる事が出来るようになりました。

2012年9月23日日曜日

画角と焦点距離のお話

カメラの話をしていると、焦点距離50ミリレンズが人間の見た目と同じパース感だとか、
人物をとるときは60~70ミリが良いよとか、風景は広角がいいよとか言います。

ただ、この時に言われてるレンズのミリ数というのは35ミリフィルムというサイズの時のお話です。
この35ミリフィルムサイズ以外にもCGの場合は出力する媒体で
特殊なフィルムサイズを採用したりする場合があります。
35ミリフィルムサイズ以外のフィルムサイズの場合の時は、
上記で言われているレンズのミリ数を同じにしても見え方が変わってくるんです。

これは、焦点距離(Focal Length)と画角(Field Of View)が密接に関わっていることは明白ですね。

ここで基準として考えるのは画角の値で、この値が同じでフィルムサイズが変わった時に焦点距離は変わってきます。
今回は焦点距離と画角とフィルムサイズの関係を式で見ていきます。

フィルムからレンズまでの距離をいわゆる焦点距離(Focal Length)といい、上図でいうbになります。
フィルムの半分の長さがcになります。これらの関係式を表すと高校の数学で習った以下の式がでてきます。
 これをbについて整理すると

になります。このときθの値というのはFOVの半分の値になります。つまり、画角とフィルムの半分の長さがわかれば焦点距離がわかるというわけです。

つまり上記の式から、θに画角(縦の画角または横の画角)の半分の値を代入し、35mmフィルムの縦又は横のフィルムサイズの半分をCに代入すれば焦点距離が算出できるというわけです。

このような式をRelationコンストで作ってあげて、カメラにCustomProperties作成してつなげてあげれば、いつでも35mmフィルムサイズのときの焦点距離を確認しながらアニメーションが付けれるようになるので効率的になります。

計算するときに気をつけないといけないのが、CGソフトでフィルムサイズはインチで表記されているのが多いのでミリに変換しないといけないのと、画角が縦なのか横なのかと、使用するソフトのtanの関数で「度」を使用するのか、「ラジアン」を使用するかを気をつけないといけないです。

2012年5月6日日曜日

【Rig】フェイシャルのRigについて

フェイシャルのアニメーションを付けようしたときにまず考えることは、
どういうRigにしようかといつも考えてしまいます。基本骨で制御されているものとして考えていきます。

ぱっと、思いつくのは感情を表すスライダー、母音を表す口パク用のスライダーを基本として思いつきます。これでだいたいのアニメーションは付けられると思いますが、細かいニュアンスを味付けしたいときとかはスライダーだけでは限界があります。

そこで、スライダーで動かすことができつつ、直に骨も動かせるような2重構造を作ります。
この状態で細かいニュアンスも付けることが出来るようになります。
この2重構造のRigであれば、どんなアニメーションをつけることが出来ることが出来ると思います。

ここまで来たら次に考えるのは、効率的にアニメーションをつけるために感情スライダーをどこまで用意すればいいのかということです。人の感情は喜怒哀楽だけではなく、他にも豊富にあります。
その感情だけ全部スライダー用意すれば問題ないですけど、アニメーションを付けるキャラクターの性格など考えると使わない感情など出てくることがあります。

そこで感情スライダーの変わりに1つの方法としてFACS(Facial Action Coding System)という考えで動くスライダーを用意するというのがいいのかと思います。

FACSを簡単にいうと、眉や目、口、など顔を部分に分けてそれぞれを上げる下げる、すぼめる広げるなどなどの動きに分けて、顔の表情を表すという考えの物です。
参考URL: http://www.cs.cmu.edu/afs/cs/project/face/www/facs.htm

これらの動作1つ1つをアクションユニットと言い、このアクションユニットを組み合わせればだいたいの感情を表すことが出来ると言われています。

FACSの考えで作られたスライダーと、口パク用のスライダー、さらに直に骨を動かす2重構造のRigが今のところ私が考える最適化されたフェイシャルのRigとしていいのかと考えています。

ただ、他にも使いやすいRigがあるかと思いますし、使い慣れたRigが良かったりもします。

2012年2月11日土曜日

【Tips】モーキャプデータの揺らぎを抑える

モーションキャプチャーのデータというのはリアルに動かすことができるアニメーションの1つです。
実際にモーションキャプチャーのデータを触ってみるとわかるのですが、人というのはじっと立って演技していても、バランスをとろうとして意外と体がゆらいでいるものです。
シーンを組んでいるときバストショットやクロースショットなど割とアップのレイアウトの場合このゆらぎがもうちょっとじっとしていてほしいなど演出に合わないときが多々あります。

そこでモーキャプの揺らぎのニュアンスを残しつつ抑える1つの方法を紹介します。

まず始めにゆらいでいる状態のデータです。
このときのキーフレームの状態は以下の図のようになってます。

この状態でもOKな演出やレイアウト(映るサイズ)があると思いますが、割とアップめの時は抑えたいと思います。


1.まず体全部のIKのTrans、Rotのキーフレームを全部をフラット(同じ値)にします。
 
このときReachT,ReachRは100%の状態にしておきます。

この状態になれば全く微動だにしない動かない状態のデータになります。

2.あとはアニメーションをみながらReachT、ReachRの値を小さくしていきます。
上記の例だとReachT、ReachRは30%にしてありますがアニメーションによっては80%などするときもあります。

これで出来上がったムービーは以下のようになります。

あまり抑えすぎると前後のアニメーションのつながりが悪くなったりしますが、つながりが悪いところとかはFilterで滑らかにしたりとか抑えるのを少しにしたりとか工夫が必要になるかもしれません。

忘れちゃいけないのがあくまでこれは1つの方法論であって、アニメーションが良くなれば手法は何だっていいってことです。