2014年11月11日火曜日

【Tips】Perlin Noise Filter を使った体の揺らぎ

以前にPerlin Noise Filterを使ったカメラ揺れを紹介しましたが、今回はこのPerlin Noise Filterを使った別のTipsの紹介です。

今回はゲームモーションではなくてカットシーンでのアニメーションを想定しています。
手付けアニメーションでアクション系ではない会話系や何気ない日常の動作を作る時はかなり時間がかかります。しかもアニメーションのクオリティーの落とし所がピクサーやディズニーのようなカートゥーン系ではない、リアルスティックなモーキャプみたないの時は尚更時間がかかります。

さらに言うと何気ない日常の動作というのは意識してないけど普段よくみるアニメーションなので少しでも変だと違和感を感じたりするものです。

手付けで会話系のアニメーションがそんなに大変なら始めからモーションキャプチャーをとれば良いじゃんって話でまさにそうなんですが、予算や時間の関係でモーションキャプチャーが撮影出来なかったり、撮影出来たとしても取りこぼしがあった場合はやっぱりアニメーターやカットシーンアニメーターが作るしかないんですね。

そんな状況の場合、私はビデオカメラを使って自分で演技したものを撮影してそれをロトスコープします。ロトスコープはのやり方は撮影した動画をビューの後ろに張り付けて、ここに特別な方法はなく腰、足、胴、腕、頭に分けて根気よくキーフレームを打ってFカーブを調整するだけです。
コツとしてはフロントビューとサイドビューが同時に見えるようにするとおかしいところがすぐにわかるようになります。

ただ日常系のアニメーションの場合意外と静止しているようにみえて体が揺らいでいるものです。ロトスコープで撮影した動画では静止しているように見えても若干の体が揺らでいるのですが、動画中の人が静止しているからとCGキャラも静止させるととたんに凍りついたように見えるものです。

そこで動いてないような時でも人間の揺らぎを根気よくアニメーションを付けてあげればいいのですが時間がかかるので、ちょっとお手軽揺らぎとしてPerlin Noise Filterを使用して揺らぎを表現しましょうということです。

前置きが長くなってしまいましたが、ただ立っている人のアニメーションをPerlin Noise Filterを使って作成します。本当ならどういうシチュエーションでどんな感情で立っているかで演技が入ってきますが今回は揺らぎをフォーカスしますので割愛します。

地味なものですが、この微妙な揺らぎがあると無いとでは全く違うものになります。

IK/FKのReachは上半身は全て0%(全部FK制御の状態)にして
足と腰だけ100%にしている状態です。


この状態でIKリグのHipsEffectorにアニメーションレイヤーでresampleしたものにPerlinNoiseFilterを適用します。このときTransとRotを別々に適用しています。



そして腕のFKリグのRightArm、RightForeArm、LeftArm、LeftForeArmに同じようにアニメーションレイヤーでPerlin Noiseを適用します。

この時のポイントとしてパラメーターを変えてあげてそれぞれのFKのリグのFカーブが同じにならないようにすることです。またForeArmはZ軸のみで動いているのでX,Y軸はFカーブが0になるように調整しています。

パラメーターのサンプルとしてこんな感じでやっています。



日常系のアニメーションでモーションキャプチャーみたいな手付けアニメーションを作る時はこんな感じの体の揺らぎを入れてあげると意外としっくりくるものになります。
もちろん自分でキーを打っても揺らぎを作成しても全く問題無いですが、今回はPerlin Noise Filterで揺らぎを作成することでトライ&エラーや効率化が計れるものとなります。




2014年11月10日月曜日

MBでカットシーンを作るときのカメラデータ

MotionBuilderを使ってカットシーンを作っていざゲームエンジンにデータを組み込みましょうってなったときにゲームの仕様にもよるんですが、
僕がいままで経験した中で結構多かったのが、1つのカメラデータにまとめるということが多かった気がします。
この1つのカメラデータにまとめるというのは例えば、1カット目はCamera1で作り、2カット目はCamera2でつくり・・・・・・というように別々のカメラで各カットを作りそれをCameraSwitcherでつなげてみている状態の結果を1つのカメラとしてデータを作成するということです。
これを仮にマスターカメラという呼称にします。
マスターカメラのデータは各カットチェンジでは1フレームで切り替わるようになるデータになります。

MBのデフォルトの機能であるCameraSwitcherを右クリックPlotTo→<New Camera>で
マスターカメラのデータは作成できます。


ただこれの問題はベースレイヤーのアニメーションしかこないということです。

カメラのアニメーションを付ける時、ドリーやパンなどのベースのアニメーションはベースレイヤーにいれて手ぶれ感や微調整をする時には他のレイヤーにアニメーションを入れることが多いかと思います。
それらをプロットしてベースレイヤーに統合すればCameraSwitcherを右クリックPlotTo→<New Camera>でマスターカメラのデータは作成出来るのですが、ベースレイヤーにPlotしてしまうと後から調整するのがかなり困難になってしまいます。

わたしの経験上、ゲームエンジンに組み込んでみてから調整の作業は発生しやすいのでやっぱり作業中のレイヤー別のアニメーションはとっておきたいですね。

これまた無いなら作ろうの精神で、ベースレイヤにPlotせずともCameraSwitcherで表示されている状態のデータを出力出来るプラグインを作成しました。


単純にRelationコンストレインを使用してCameraSwitcherで表示されているカメラデータが出力されるのでマスターカメラにしたいカメラに繋ぐだけでの簡単構造のものです。

実機に組み込む時はこのマスターカメラをPlotするだけなので、各カットを作成しているカメラはPlotせずレイヤー別のアニメーションを保持出来るということです。

これで調整を含めたトライ&エラーをしやすく、作業効率が図れるものとなります。

2014年4月26日土曜日

【Tips】Mayaでキーフレームアニメーションからダイナミクスに切り替えるアニメーション

ここ最近Mayaを使って、吹っ飛ばされて死亡するアニメーションを作ってます。
キャラによっては武器などを持っているので、武器も地面にぶつかって転がるアニメーションをつけなくちゃいけないんですが、これが微妙にめんどくさいので地面にぶつかるまではキーフレームアニメーションで、地面にぶつかる寸前で物理シミュレーションに切り替える方法でアニメーションを付けています。

今回はそんなTipsです。

始めに地面にぶつかるまではキーフーレムアニメーションを作ります。
この例だと0~20f(30fps)で作っています。

次にダイナミクスを設定していきます。
まずは床のポリゴンにパッシブリジッドボディを割り当てます。


次にキーフレームアニメーションをつけたオブジェクトにアクティブリジッドボディを割り当てます


次にキーフレームアニメーションからダイナミクスに切り替わるようにキーを打ちます。
アクティブリジッドボディを割り当てたオブジェクトを選択し、rigidbodyのノードでアクティブのところに、この作例だと19fにオフ、20fにオンのキーを打ちます。

これで再生すると地面にぶつかってから跳ねた状態のまま上へ上昇して戻ってこない状態になっているのでフィールドの重力を割り当てます。
オブジェクトを選択した状態でフィールド→重力で割り当てます。


これで重力に従って動いてくれるはずですが、ダイナミクス(シミュレーション)は単位が重要なので、重力のマグニチュードがデフォルトだと9.8になっていますが、9.8という値は作業単位がメートルの場合に都合がいい値なのですが、この作例だと作業単位はセンチメールとになっていて9.8だと小さすぎるので980に設定しています。


地面を付け抜けてしまう場合はrigidSolverノードのコリジョン許容値を小さくしてみると
突きぬけを直すことが出来るようになります。


後はこれをベイクしてダイナミクスからキーフレームアニメーションに直してあげれば完了です!

簡単な手順で効率的なアニメーションを作れる方法だと思います。

2014年2月12日水曜日

【Tips】MotionBuilder のAudioで文字化けするのを直す方法

MotionBuilderで作業していて実務にはさほど影響は出ないのですが、気になるところがあります。
その気になるところというのが、MotionBuilderに音声を追加した時にAudioのセクションで文字化けが起きていることです。以下の図で黄色く囲った個所です。


この文字化けが起きているのはどうやら日本語(全角文字)が混じっているため起きているようです。この日本語文字はどこからきているかというと、画面の右下のスピーカーの設定からきています。

そのスピーカーのアイコンを右クリック → 音声デバイス で以下の画面が開きます。


表示されたデバイス(スピーカーだったりヘッドホン)の名称がそのままMoitonBuilderに読み込まれてるため文字化けが起きています。

これらの名称を日本語(全角文字)から英数字(半角文字)に変更すれば文字化けも直ります。
方法はそれぞれのアイコンの上で右クリック → プロパティで以下の画面が開きます。


黄色く囲ったところを半角の文字で例えば「speaker」などとしてあげてOKボタンを押します。

同様に録音タブのマイクやライン入力も英数字(半角文字)にしてあげます。



これでMotionbuilderを立ち上げなおすと文字化けしていたのが直ります。






◆おまけ◆
まだ上図では文字化けしている個所がありますが、これは下図の黄色く囲ったところの文字が表示されて文字化けしているみたいです。



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が知りたいなどあったらコメントいただけると、私の知りうる限りで記事を書いていきたいと思いますので、リクエストなど受け付けますのでどしどしコメントいただけたら嬉しいです。