株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • 知っているようで知らなかった!?モーションブラーのあんなことやこんなこと

知っているようで知らなかった!?モーションブラーのあんなことやこんなこと

2014/2/24

皆さんどうもこんにちは。TDチームの塚本です。

今回はタイトルの通りモーションブラーについて少し話をしていきたいと思います。
現実世界のカメラのブレを再現しCGの絵を自然に見せるためのこのモーションブラーですが、
意外と詳しい考え方や使い方を知らないままでなんとなく使っている、っていう方はいませんでしょうか?
(弊社でもそういう状況があったようなので今回のネタにしましたw)
というわけで今回は知らなかったという方はお勉強、
既に知っているという方は復習ということでモーションブラーについて見ていきましょう。


mental ray for Maya でのモーションブラー

あとで VRay の話も少し出てきますが、
今回は Maya さえあればとりあえず触れる最も身近なレンダラーである mental ray で
モーションブラーの説明を進めていきたいと思います。
ちなみに Maya のバージョンは現状最新となる 2014 です。
 
 

– シャッターアングルとフレーム間隔の関係性 –

Maya のカメラの Shutter Angle (シャッターアングル)はデフォルト144です。

そのためモーションブラーの計算を行なうためのフレーム間隔は以下のように求まります。

144 / 360 = 0.4

よって、Maya のデフォルト設定でのモーションブラーのフレーム間隔は前後で 0.4 になります。
試しにモーションブラーの設定をONにしてレンダリングしてみると前後0.2フレームずつタイムスライダーが移動して、
計0.4フレームが計算されていることが分かるかと思います。

つまり、もし1フレーム間隔でモーションを計算させたい場合は Shutter Angle を 360 にすればいいことになります。

360 / 360 = 1 !! (当然ですね・・・)
 
 

– 2種類のモーションブラーモード –

mental ray for Maya では2種類のモーションブラーモードがあります。
ひとつは No Deformation(変形なし) であり、もうひとつは Full(全体) です。
ひとつずつどう違うのかみていきましょう。

●No Deformation(変形なし)
 このモードではシェイプの変形は一切考慮されず、
トランスフォームノードでの移動量のみがモーションブラーに考慮されます。
Shtter Open と Shutter Close でのオブジェクトの位置を計算し、
適用されるモーションブラーの結果はリニア補間となります。

●Full(全体)
 このモードではオブジェクト単位の移動量ではなく頂点単位で計算を行なうため、
変形するシェイプにもモーションブラーを適用させることができます。
No Deformation のようにリニア補間ではないのでより正確な結果が生み出せますが、
レンダリング時間はより多く必要としますので場合によって使い分けてみてください。
 
 

– モーションブラーのオプション –

●Shutter Open と Shutter Close
 フレーム間隔内でのシャッターが開くポイントと閉じるポイントを設定します。
Shutter Close が Shutter Open の値より大きい場合のみブラーエフェクトは適用され、
この差が大きいほどブラーエフェクトの効果は大きくなります。
※このオプションはMaya2014から Legacy Options タブ内に移動しました。


 
 
そして以下は Shutter Open と Shutter Close の値を変えたときの比較画像です。
ボールは上から下へ落下するようにアニメーションしています。
後述する Keyframe Location はこのテストでは [Middle of frame] に設定しています。
画像上にある赤文字は左側が Shutter Open で右側が Shutter Close の値になります。


※画像クリックで拡大
 

●Motion Steps(モーションステップ)
 オブジェクトのトランスフォームに対するモーションセグメント数を設定します。
値を大きくすることでセグメント数が上がるのでより曲線的な動きを正確に計算できるようになります。
 

●Motion Blur By(ブラーのフレーム間隔)
 先程シャッターアングルとフレーム間隔の関係性を説明しましたが、
この Motion Blur By オプションはシャッターアングルで求めたフレーム間隔に対する乗数になります。
つまりどういうことかと言うと、デフォルトでは「1.0」が設定されているので、

Shutter Angle / 360 * 1.0

となります。
先程はフレーム間隔を1.0にするために Shutter Angle を360にする例文を示しましたが、
Shutter Angle がデフォルトの144のままでも Motion Blur By を「2.5」にすることで、
同じ結果を得ることができることになります。

144 / 360 * 2.5 = 1

尚、フレーム間隔が大きくなるほどモーションブラーの正確さがなくなり、
レンダリングにかかるコストが上がる点には注意しましょう!
 

●Displace Motion Factor(モーション係数のディスプレイスメント)
 移動量に応じてディスプレイスメントのテッセレーション密度をコントロールするオプションです。
値を0にすると効果はなくなり、大きくするほどテッセレーション密度を減らすことができるようになります。
 

●Keyframe Location(キーフレームの場所)
 モーションブラーを計算するときの基準となるフレームを指定します。
Start of frame では現在のフレームを基準にそれ以降のモーションを計算します。
End of frame では逆に現在のフレームを基準にそれ以前のモーションを計算します。
Middle of frame はそれらの中間です。

以下は Keyframe Location を変更したときの比較画像です。
レンダリングするフレームは3Fを基準とし、Shutter Angle を360にしてフレーム間隔を1Fとしています。


※画像クリックで拡大

この結果から見て分かるように、
Start of frame では3F目をスタート地点として、そこからフレーム間隔分のモーションを計算しています。
End of frame では3F目を終了地点としてそこからフレーム間隔分のモーションを計算しています。
そしてもう言うまでもないですが、
Middle of frame では3F目を中間地点としてそこからフレーム間隔分のモーションを計算していますね。

ちなみに、このオプションは Maya2013 以前では [Motion Offsets] タブで設定していた項目にあたります。

↓Maya2013 までの Render Settings のUI

 

そして Maya2014 の内部ではこの Keyframe Location の設定を変更することで、
mentalrayGlobals.exportMotionOffset の値が変更されています。

※↓ココです。アトリビュートエディタ上では Motion Back Offset って表記されてるからこれまた厄介・・・w

 

この mentalrayGlobals.exportMotionOffset は、
Start of frame で0に、Middle of frame で0.5に、End of frame で1に設定されます。
実際のレンダリングで mental ray が見ている設定は、
mentalrayGlobals.exportMotionOffset になる点には注意しましょう!
Maya2014では Keyframe Location と mentalrayGlobals.exportMotionOffset の値が一方通行になっているため、
mentalrayGlobals.exportMotionOffset の方を直に設定した場合に、
Keyframe Location で設定している項目とレンダリング結果が一致しない!!ってことになってしまいます。
特にスクリプトで setAttr “mentalrayGlobals.exportMotionOffset” 0 などとやる方は、
私みたいに「えっ!?」って一瞬惑わされる可能性大なので十分注意しましょう(笑)
 

モーションブラーの設定項目等のお話はこのへんにして、次はモーションベクターについて見ていきましょう。
 


モーションベクターパスを利用したブラーエフェクト

まずモーションベクターパスとは何でしょうか?
はい、ご存知の通り、オブジェクトの移動情報を画像として吐き出し、コンポジット上でブラーエフェクトを施すアレですね。
弊社では現状 mental ray と VRay をメインとしてCG制作を行なっているのですが、
何も意識しないとこの両者で全く同じモーションベクターパスが出るということはありません。
同じパスが出ないということはコンポジット時に意識しなければいけない点も
レンダラーによって変わってしまうということです。
というわけで、ここでは mental ray と VRay から出力されるモーションベクターパスを合わせるお話をしたいと思います。
 

– フレーム間隔を合わせよう –

モーションベクターパスを合わせる為には当然まずは先程から何度も話に出ているフレーム間隔を合わせる必要があります。
そして困ったことに VRay ではこのフレーム間隔を変更するすべがありません!
(モーションベクターパスではなく3Dモーションブラーなら出来るんですが・・・誰かやり方知っていたらぜひご教授ください)
というわけで必然的に mental ray が VRay のフレーム間隔に合わせる形となります。
VRay のフレーム間隔は1フレーム間隔なので、mental ray では Shutter Angle を360にするか、
Motion Blur By を2.5にすることで合わせることができるようになります。
しかし Motion Blur By の方は Motion Blur のタイプが [No Deformation] または、
[Full] になっていないとモーションベクターに影響しないため、ここでは Shutter Angle を変更する方法を取りましょう。

そしてモーションベクターパスを出力する為に、
mental ray では Render Settings の [Create Render Passes] > [2D Motion Vector] をクリックし、
mv2DToxik を作成します。
VRay では [Render Elements]Velocity を作成します。

mental ray

VRay

 

パスの設定が済んだら両者をレンダリングし、Nuke で VectorBlur を適用してみましょう。


 

以下が mental ray と VRay の結果ですが、ほとんど同じ絵が再現できていることが確認できますね。


 
 

さて、次はAEで Reel Smart Motion Blur(以下、RSMB) を使用する場合を見ていきましょう!
まず、前提として RSMB を使用するモーションベクター素材は,
静止している部分のピクセル値が 0.5 基準である必要があります。
VRay の場合、出力するイメージのフォーマットを exr(multichannel) から,
exr に変更することで 0.5 基準のイメージとなります。
そして、Velocity パスの [Max Velocity] に任意の値を入力して 0.5 基準の 0~1 のイメージとして正規化させます。
今回は 64 に設定しておきましょう。


 

mental ray での設定では今度は [Create Render Passes] > [Normalized 2D Motion Vector] を作成し、
mv2DNormRemap ノードを使います。
先程 VRay の [Max Velocity] で設定したようにここでも [Max Pixel Disp.] に 64 を設定しましょう。


 

そしてレンダリングが済んだらAEでRSMBを適用してみましょう。
RSMB の [Max Displace] には先程 VRay と mental ray で設定した 64 を入力します!


 

これでAEでRSMBを使用した場合でも同じ方法で絵を再現できることが確認できました!


 
 


最後に

いかがでしたでしょうか?今回は一回の記事におさめるために少し駆け足な説明になってしまいましたが、
これを機に興味を持った方はぜひ自分で色々と触って確かめていただければと思います。
今まで意識せず作業していたことも少し仕組みを把握して進めていくだけで、
全く違った世界が見えてくることもあると思います。
それでは今回はこのへんで!


※免責事項※
本記事内で公開している全ての手法の有用性、安全性について、当方は一切の保証を与えるものではありません。
これらの手法を実施したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください

Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*