On this page |
概要 ¶
高速に移動するオブジェクトは、カメラシャッターが開いている間に位置が急変化するので、フィルムでは、ぼやけたり、筋状になります。 モーションブラーはそれを模倣します。
Mantraは、模倣する3タイプのモーションブラーに対応しています。使用するタイプは、ブラーをかけたいアニメーションジオメトリのタイプに依存します。
-
トランスフォーム モーションブラーは、フレーム間でのオブジェクトのトランスフォームを補間することでブラーを模倣します。これは、モーションブラーを有効にした時にオブジェクトすべてに適用されるデフォルトタイプのブラーです。計算は軽いですが、時間と共にオブジェクトのジオメトリ形状が変化するような 変形 ブラーは行ないません。
-
変形 モーションブラーは、フレーム間でオブジェクトのジオメトリを再クックすることでブラーを模倣します。Geometry Motion Samples設定を使ってブラーを制御します。これは、変形ジオメトリを適切にブラーさせるのに必要です。Houdiniはセグメント(サブフレーム)毎にジオメトリをクックしてそれをMantraに送信しなければならないので、計算はそのセグメント数に比例して重くなります。
変形ブラーは、シャッター時間内の アトリビュート値の変化 もブラーさせることができます。 例えば、オブジェクトが移動した時にポイントカラーが急変化する場合、その
Cd
アトリビュートにブラーをかけることができます。 vm_segmentattrsプロパティを使って、ブラーをかけるアトリビュートを明示的に指定する必要があります。 -
Velocity モーションブラーは、Velocity (
v
)または加速度(accel
)や角速度(w
)のPointアトリビュートに基づいてポイント位置を補間することで、ブラーを模倣します。このタイプのモーションブラーは、ジオメトリ内のポイント数が時間と共に変化する場合(例えば、パーティクルや流体シミュレーション)に必要です。詳細は、下記の Velocityモーションブラーを参照してください。
Render設定 ¶
Mantraノードの Rendering タブの Allow Motion Blur を有効にします。 これによって、 Xform Time Samples 、 Geo Time Samples 、 Shutter Offset の3つのパラメータが追加されます。
Allow Motion Blur
これは、レンダリング時にモーションブラーをシミュレーションするかどうかの“マスタースイッチ”です。 これをオンにすると、 トランスフォーム モーションブラー(各オブジェクトのフレーム間のトランスフォームの補間によるブラー)が有効になります。 xform_motionsamplesを使用することで、トランスフォームブラーのサンプル数を設定することができます。 変形 モーションブラーを有効にするには、geo_motionsamplesを上げます。
モーションブラーのレンダリングに関する詳細は、モーションブラーを参照してください。
Xform Time Samples
シャッターオープン時間に対して トランスフォーム モーションブラーをレンダリングする時に計算するサンプル数。 デフォルトは2サンプル(シャッター時間の開始と終了)で、1つのセグメントにブラーがかかります。
極端に速く移動したりと方向を変更するオブジェクトの場合、サブフレームでの方向の変更を取り込むためにサンプル数を上げる必要があります。
上図の例では、1フレーム内で発生した複雑な動きを正しくレンダリングするために40個のトランスフォームサンプルが必要です(1フレーム内でのこの変化量は、非常に稀で、説明をするために使用しただけです)。
トランスフォームブラーは、各オブジェクトのフレーム間のトランスフォームを補間することでブラーをシミュレーションしているので、計算が軽いですが、表面の変形を取り込みません。 変形ジオメトリのブラーを有効にするには、geo_motionsamplesを上げます。
Geo Time Samples
シャッターオープン時間に対して 変形 モーションブラーをレンダリングする時に計算するサブフレームのサンプル数。 デフォルトは1サンプル(シャッター時間の開始のみのサンプル)で、デフォルトでは変形ブラーは ありません 。 高速に変形するジオメトリを適切にブラーさせたい場合、この値を2以上に上げなければなりません。 Geometry Time Samplesの数を上げると、HoudiniはサブフレームのジオメトリをクックしてMantraに送信しなければならないので、それに比例して処理が重くなります。
“Deformation”は、ジオメトリ(SOP)レベルでトランスフォームだけを参照したり、キャラクタやフレームに応じて形状が急速に変化するオブジェクトなどの実際の表面の変形を参照することができます。
1フレーム内で複雑に変形するオブジェクトには、Geo Time Samplesの数を上げる必要があります。
変形ブラーは、シャッター時間内の アトリビュート値の変化 もブラーさせることができます。
例えば、オブジェクトが移動した時にポイントカラーが急変化する場合、そのCd
アトリビュートにブラーをかけることができます。
vm_segmentattrsプロパティを使って、ブラーをかけるアトリビュートを明示的に指定する必要があります。
Geo Time Samplesの数を上げると、Mantraの使用メモリ量に 影響を与えてしまします 。 サンプル数が増える度に、Mantraはシャッター時間の間にサンプリングしている間はメモリ内にそれだけのジオメトリのコピーを維持しなければなりません。 レンダリングを最適化する時、滑らかなモーションの軌跡を生成するのに必要な最低限のGeo Time Samplesを調べることは良い考え方です。
Velocity Motion Blurが有効なオブジェクトでは、変形ブラーは無視されます。
Shutter Offset
このパラメータは、モーションブラーを生成する時に考慮される時間のセグメントを制御します。 1の値は、オブジェクトの現行位置と次フレームのオブジェクトの位置を時間の間隔として使用して、それをモーションブラーに使用します。 -1の値は、前フレームのオブジェクトの位置とオブジェクトの現行位置を時間の間隔として使用します。 0の値は、前フレームの最後の半分、次フレームの半分の間隔を生成します。
通常では、Mantraのレンダリング領域外で生成されたモーションブラーに合わせたい場合(例えば、写真背景プレート)を除いて、このパラメータを調整する必要はありません。
現行フレームのオブジェクトの位置に比例して、ブラーを画像で発生させるかどうか制御します。-1
の値は前のフレームから現在のフレームまでの位置でブラーします。0
の値なら前のフレームの半分から次のフレームの半分までの位置でブラーします。1
の値なら、現在のフレームから次のフレームまでの位置でブラーします。小数点のフレーム値や-1
または1
より大きい値を使ってブラーを小さくまたは大きく動かすことができます。
ブラーの サイズ を変更するには、 Shutter Time (shutter
プロパティ)を変更します。
このパラメータは、古い Motion Blur Style (motionstyle
)パラメータの代わりで、“before”(Shutter Offset=-1)、“center”(Shutter Offset=0)、“after”(Shutter Offset=1)の値のみを設定することができます。
Allow Image Motion Blur
場合によっては、後処理または他のコンポジット操作のためにモーションブラーを画像に追加させたい時、最終レンダリング画像にはそのモーションブラーを含めたくないけれどもモーションブラーを計算する必要があります。 そのような場合、Allow Image Motion Blurを無効にしてください。
つまり、GetBlurP()関数をシェーダ内に使用することで、モーションブラーに必要なブラーがかかった位置情報は、レンダリングで実際にシェーディングを行なわずに独自のモーションベクトル画像平面としてエクスポートすることができます。
このパラメータは、Motion Blurが有効な時だけ利用可能なモーションブラーパラメータに関連しています。 このオプションを無効にすると、最終レンダリング画像からモーションブラーが除去されます。 それでもブラーのかかったPositionは計算されているので、独自のモーションベクトル画像平面を作成することができます。
Motion Factor パラメータは、 Dicing タブにあります。
Motion Factor
モーションブラーの量が非常に多い高速移動オブジェクトは、遅く移動するオブジェクトまたは静的オブジェクトと同じサンプリング品質でレンダリングされます。 しかし、非常にブラーのかかったオブジェクトをレンダリングした場合、通常なら細かなディテールが失なわれます。 そういった場合、高速に移動するオブジェクトに対してシェーディング品質を下げることで、モーションブラー内のディテールの損失が減るので、そのような最適化は役立ちます。
Motion Factorを上げると、モーションの速さに基づいてオブジェクトのシェーディング品質が動的に下がります。 この最適化は、主にサブディビジョンサーフェスやディスプレイスメントベースシェーディングのオブジェクトのように、レンダリング時に洗練化されるオブジェクトに対して役立ちます。
上図の例では、Motion Factorが最終レンダリングの品質に大きく影響を与えていないことがわかります。
しかし、場合によってはディテールがたくさん失なわれてしまう可能性があります。特に、表面のディテールがシェーダによって生成されている場合です。 例えば、大きなディスプレイスメントによって形状を定義しているオブジェクトがそれです。
このような場合、表面のディテール量が期待したように維持できるようにMotion Factorの値を注意して調整しなければなりません。
Note
実際に使用されるMotion Factorは、シーン内のモーションの度合いに依存しています。 詳細は、MantraレンダリングプロパティページのMotion Factorを参照してください。
大きくブラーするオブジェクトに対して自動的にシェーディング品質を調整します。オブジェクトのモーション係数を上げると、モーションの速さに応じて動的にシェーディング品質を下げます。これは高速に移動するオブジェクトのレンダリングを飛躍的に高速化することができます。また、被写界深度に影響を与え、深い焦点深度のシーンの速度を改善します。
モーション係数は以下の式を使ってシェーディング品質を下げています:
new_shading_quality = shading_quality / max(motion_factor * pixels_of_motion/16, 1)
これは、motion_factor > 0
の場合にのみTrueです。
フレームで16ピクセル以上動くオブジェクトのシェーディング品質は上記の係数で下がります。例えば、1のシェーディング品質を持つ32ピクセル以上ブラーするオブジェクトは、0.5の品質に下がります。このパラメータには非常に大きな値を使わないでください。0から1の間の値が合理的です。
Ray TracingまたはPhysically Based Renderingのレンダリングエンジンを使用すると、モーション係数はサブディビジョンサーフェス、NURBS/Bezier、ディスプレイスメントの形状の細分化にのみ影響があり、シェーディングの量は変わりません。
カメラオブジェクトには、被写界深度だけでなくシャッタースピード関係のパラメータを含んだ Sampling タブがあります。 モーションブラーに関しては、それに関係するパラメータが Shutter Time です。
Shutter Time
Shutter Timeとは、実際にシャッターが開いているフレームの割合のことです。
物理カメラでは、これをシャッタースピードと呼んでいます。レンダラーは、これを使ってモーションブラーを決定します。
値の範囲は、[0,1]
です。
Shutter Timeの値が0なら、シャッターが一瞬で“開いた”だけなのでモーションブラーはありません。 その一方で、値が1なら、シャッターはそのフレーム全体で開きます。
上図のサンプルでは、1フレームに渡って球が360度ぐるっと回転しています。 シャッター時間に基づいて“モーションの軌跡”または“ブラー”がどれくらいの長さで変化しているのかが分かります。 ほとんどの場合、デフォルトの0.5の値がアニメーションシーケンスに適しており、現実世界の設定でうまく合致します。
このパラメータは、単一フレーム内での時間量を制御し、シャッターが開いていることを忘れないでください。 これは、フレームの長さを意味しているわけではありません。フレームレートを調整するには、Global Animation OptionsのFrames Per Secondパラメータを変更します。
Velocityモーションブラー ¶
Velocityモーションブラーは、Pointアトリビュートに保存されたモーション情報に基づいてブラーをかけます。 これは、時間と共にポイント/プリミティブの数が変化するオブジェクトに対応する唯一のブラータイプです(変形モーションブラーは、あるサンプルのコンポーネントが次のサンプルではどのコンポーネントに呼応するのか知ることができないので、ポイント/プリミティブの数の変化には対応できません)。
このタイプのブラーは、シミュレーションを実行した時にポイント数が変化するようなパーティクルや流体などのポイントベースのシミュレーションで非常に役立ちます。 たいていの場合、ソルバは自動的にそれに適切なアトリビュートを作成します。
他に役立つジオメトリモーションブラーの例は、ジオメトリ(SOP)レベルのトランスフォームまたは変形から派生したアニメーションを持つたくさんのジオメトリがある時です。 このような場合、変形サンプル数を増やすのは推奨しません。その理由は、Mantraがメモリ内に複数のジオメトリコピーを格納しなければならなくなるからです。 代わりに、モーションブラーを使用した方が効率的でメモリ使用量が少なく済みます。
このブラータイプは、オブジェクト単位で有効にします。 この機能を有効にするには、オブジェクトの Sampling タブにある Geometry Velocity Blur メニューを“Velocity”または“Acceleration”に設定する必要があります。
Geometry Velocity Blur
このメニューでは、オブジェクトに対して実行する ジオメトリVelocityブラー のタイプを選択することができます。 トランスフォームブラー や 変形ブラー とは別に、時間と共に変化するポイントに保存されたアトリビュートを使って、ポイントの動きに応じたモーションブラーをレンダリングすることができます。 ジオメトリ内のポイント番号が時間と共に変化する場合(例えば、ポイントが誕生したり死亡するパーティクルシミュレーション)、このタイプのブラーを使用してください。
フレーム間でジオメトリのトポロジーが変化する場合、Mantraはジオメトリを補間できなくて正しくモーションブラーを計算できなくなります。
そのような場合、元のジオメトリが変化しても整合性のあるv
やaccel
のアトリビュートをモーションブラーに使用することができます。
流体シミュレーションのサーフェスがまさにそのよい例です。
この場合と他のタイプのシミュレーションデータでは、ソルバが自動的にVelocityアトリビュートを作成します。
No Velocity Blur
レンダラーでモーションブラーを許可するように設定しても、このオブジェクトに対してモーションブラーをレンダリングしません。
Velocity Blur
Velocityブラーを使用するには、ポイントVelocityを計算して、それをv
Pointアトリビュートに保存しなければなりません。
レンダラーは、このアトリビュートが存在すれば、それを使用してVelocityモーションブラーをレンダリングします(レンダラーがモーションブラーのレンダリングを許可するように設定されていることが前提です)。
シミュレーションノード(例えばパーティクル系DOPs)は自動的にv
アトリビュートを生成します。
他にも、Point Velocity SOPを使ってVelocityを計算して追加することができます。
v
アトリビュートの単位は、1秒あたりのHoudiniユニットです。
Acceleration Blur
加速度ブラーを使用するには、ポイント加速度を計算して、それをaccel
Pointアトリビュートに保存しなければなりません(geo_accelattributeプロパティを使えば、その加速度アトリビュート名を変更することができます)。
レンダラーは、このアトリビュートが存在すれば、それを使用して複数セグメントの加速度モーションブラーをレンダリングします(レンダラーがモーションブラーのレンダリングを許可するように設定されていることが前提です)。
シミュレーション系ノードは自動的にaccel
アトリビュートを生成することができます。
他にも、Point Velocity SOPを使って加速度を計算して追加することができます。
Acceleration Blurがオンの時、ジオメトリに 角速度 アトリビュート(w
)が存在すれば、急回転にもブラーがかかります。
これは、ベクトルアトリビュートであり、各コンポーネントは、X、Y、Z軸を基準とした1秒あたりのラジアンの回転速度を意味しています。
これを“Velocity Blur”または“Acceleration Blur”に設定すると、変形ブラーがオブジェクトに適用されなくなります。 これを“Acceleration Blur”に設定すると、geo_motionsamplesプロパティを使用して、加速度サンプルの数を設定することができます。
Tip
ジオメトリにまだv
やaccel
のアトリビュートがない場合、Point Velocity SOPを使用することで、それらのアトリビュートを計算して追加することができます。
オブジェクト固有のサンプリング ¶
シーン内の全てのオブジェクトは、異なる速さで移動したり、まったく異なる量のサブフレームモーションを持つことがあるので、 他のオブジェクトとは異なるレートで特定のオブジェクトをサンプリングできるのは、便利です。 これは、高い Geo Time Samples を必要とする変形オブジェクトでは特に重要で、非常に重要なオブジェクトと別に扱うことで、 メモリのオーバーヘッドを減少させることができます。
オブジェクトに以下のプロパティを追加(how?)します:
Motion Blurの有効化は、Mantraノードのグローバル設定であり、オブジェクト毎には設定することができません。 とはいえ、 XformとGeo Time Samples を1まで下げると、それらのオブジェクトに対するモーションブラーが実質的に無効になります。
カメラの動きもモーションブラーに寄与し、独自のサンプリング率を適用させることもできますので、覚えておいてください。