2015年7月11日土曜日

モーションブラー メモ01 ~ノーマライズ


久々の投稿です。
今回から数回にわたって、Max(&Vray)とAEという環境においてモーションブラーまわりの内容を紹介したいと思います。


まず、モーションブラーとは動いているものを撮影すると対象がぶれることです。
いや、止まっているものでも撮影者が動いていれば、それもまたぶれますね。
---------------------------------------------------------------------------------
追記
ブレはブレでも、カメラ固定で対象のみがぶれる事を被写体ブレ、手持ちカメラなどでカメラ自体がぶれる事を手ブレといいます。

---------------------------------------------------------------------------------

モーションブラーはシャッタースピードに依存しますが、これはカメラや露出の話になってくるので今回は割愛します。


CGで同様な効果を得るには、レンダリング時に3D上でモーションブラーをonにするか、2Dで(AEなど)後処理するかの大きく二つあります。
仕事ではほぼ後者の手段をとっているので、その説明からします。

レンダリング画像に後処理でモーションブラーを施すにはエレメントに VrayVelocity を追加します。
なくても行けるっちゃ行けますが、あった方がいいです。
なぜ VrayVelocity を出すのかというのは、今後AEでの処理と共に説明します。今回は割愛します。


さてVrayVelocity を扱う際に何となくでも理解しておきたいのが、ノーマライズ(正規化)。
このノーマライズを僕なりにザックリと説明していきます。(分かりづらかったらすみません。)


ではまず、速さ1~200の間で移動している複数の物体があるとしましょう。(ここでは時速という言い方はしないことにします。)
1で移動しているものもあれば、120で移動しているもの、200出して暴走しているものなど様々。

次にこれらを速さ150まで観測できるスカウター、200まで観測できるスカウター、300まで観測できるスカウターで見たとします。

150では無論150までの速度を出している物体は見れます。しかし150から上の速度で移動しているものは一体どれくらいの速さで移動しているかがわかりません。ザーボンさんのスカウターが数値振り切れて壊れちゃった・・・みたいなことです。確かなのは少なくとも150は出ているということ。
なので150から上の速さのものは切り捨てて全て150にしちゃおうというのが以下の状態。
VrayVelocity に置き換えると、 max velocity 150 でclamp on です。















clamp は固定という意味ですが、ここでは max velocity より上の数値は切り捨てるという意味で捉えた方がわかりやすいでしょう。


では300のスカウターではどうでしょう?
全て観測は出来ますけど、200から300までの速度で移動しているものが無いから物足りないですよね?ラディッツの「戦闘力たったの5か、ゴミめ」状態ですわ。

なので、1から200までの速度で移動しているのであれば、丁度200まで観測できるスカウターを使って無駄なく漏れなく見よう・・・というのがザックリではありますが VrayVelocity の特に clamp を on 、max velocity を適宜設定、、、の時のノーマライズの考え方です。


では clamp を off とはどういうことか。
どんなに速いものでも見れるということです。フリーザの最新型スカウターも壊れることはありません。
そしてこの時 max velocity は1.0がいいでしょう。
ニュアンスとしては1.0の速度の時は1.0、50.0の時は50.0・・・のようにその時出ている速度がそのまま表示されるようなイメージです。















もし仮に max velocity を2.0にすると、速度2倍フィルターなるものを被せて物体を見るわけで、表示上空間を1.0の速度で移動しているように見えたければ、物体は0.5で移動しないとそうは見えないということになります。つまり1/2の係数がかかるといった感じでしょうか。
これは厄介なので1.0以外は避けたいところです。


ここで更に注意することは、ノーマライズとclampの関係は保存するフォーマットによってそれら設定が変わってくるということです。

例えば8bitや16bitのinteger(整数)で保存・・・なんて場合は数値に上限があるわけです。
上限を超えるようなことがあればそれらは clamp されます。
8bitで言うと、白255の更に上の白300とか保存出来ないのです。
仮に256以上だとして、それらは全てclampされて255扱いになります。
この辺は「スカウター理論」としておきましょう 笑

なので、VrayVelocity も情報が切り捨てられないように上手く収めなければなりません。
ということは決められた階調の中でそれを表現するので16bitの方がいいですね。

今度は500の速度で移動しているものを、8bitと16bitのどちらも500まで観測できるスカウターで見た場合。
どちらも同じ情報量かというと、そうではありません。16bitの方がより分割数があるイメージです。










こんな感じでしょうか。。速度500の長さは気にしないで下さい。
8bitだとぎゅうぎゅう過ぎて情報が歯抜けになってそうですよね。

ちょっとこの辺は言葉選びに悩みますね。分かりづらくてすみません。


ということで、8bitや16bitのinteger(整数)で保存の場合は VrayVelocity もフォーマットに併せて clamp on にして、max velocity を適宜設定することをお勧めします。
設定の仕方は次回説明します。


さて一方32bit full float や16bit half float (不動少数)で保存の場合、0.0~1.0より上の数値も扱えるので clamp off でmax velocity を1.0にすれば、フォーマットのポテンシャルを活かせます。
勿論 clamp on してmax velocityを適宜設定・・・でも構いませんが、折角壊れないスカウター持っているんだから最大限に活かしましょう!


と、ここまでが僕なりの精一杯噛み砕いたノーマライズの説明でした。
ノーマライズの処理は色んな分野で行われますが、果たしてこの説明がノーマライズの説明としていいのかどうか怪しいです。デジタルサウンドの世界ではレベルオーバーで歪んだ音(大きすぎて音が割れた状態)をノーマライズして、歪まないぎりぎりのところまで下げたりとか、色々使われていますね。適正に“収める”という点においてはどこか通じるところがあるかもですが。。。

とは言え、この説明で何となくでもノーマライズを理解して頂けたら幸いです。スカウター理論!

もしもここ違いますよ・・・などありましたらお気軽にお知らせ下さい。


次回は max velocity と max velocity in last frame まわりを紹介できればと思います。



-----------------------------------
追記

depth を出す時、near - far をそれぞれ測っていい感じに白黒のグラデーションになるようにしますよね?
これも一種のノーマライズと言えると思います。

0 件のコメント:

コメントを投稿