Motion Blur
2nd

98/04/22(水)  − Motion Blur 2nd − モーションブラー再び

 前回はモーションブラーについて、 モーションブラーとは何なのか、 何のために使うのかについて簡単に述べた。 実は数日前から、モーションブラーに関してとあるサイトで ちょっとした論議が交わされている(いた?)。 そこで、再びモーションブラーについて、まあ前回のちょっとした訂正も含め 書くことにした次第である。

 さて、そのちょっとした論議が起こっているサイトとは、 「Direct3Dプログラミングガイドブック」 の著者でもあり、日夜さまざまな(?) 研究に励まれている 清3Z氏のページ である。 氏のページに行ったことのある方なら、 「Prejudice」コーナーはご存知かと思う。 この「Prejudice」の内容(4/18 晴れときどきニューロン)と BBSを覗かれると、その様子を多少なりとも掴めることだろう。
 このことについては後程触れることとして、まずは前回の訂正から行こう。 前回このコーナーで、 本当の意味でのモーションブラーとは 時間軸に対するアンティエイリアシングである と述べた。 CGの離散的な画像では、アニメーションさせた時に動きが妙に硬くなってしまう。 これは、 CGは1フレーム(例えば1/60秒)毎にある瞬間のシーンを描画するため、 その間隔よりも細かな動作を表現できないからである。 この現象を緩和するため、 フレーム間の時間をさらに細かく分割して画像を作成し、 それらを平均化した画像を最終的にそのフレームの画像とする方法がある。 これが時間軸に対するアンティエイリアシング、すなわちモーションブラーである。
 そしてもう一つ、よく使われる残像効果がある。 これは、前のフレームやその前のフレームの情報を薄く残し、 その名の通り残像を残す方法である。

 前回私は、「この 残像というものは厳密にはモーションブラーではない」と 豪語してしまった訳だが、 今月発売号のCマガジン(98年5月号) 第1特集「三次元ライブラリ DrawPrimitive & OpenGL」 「OpenGLプログラミング:森山弘樹@そむにうむ氏筆」での モーションブラーについての記述を拝読し、一概にそうは言えないことに気付いた。
 すなわち、 動態視力が追い付かずに物がぼやけて見える(残像)現象を再現したいのであれば、 時間(フレーム)経過とともに減衰する まさに「残像」が正しい表現ということになるのである。 ただ、 このような残照現象もモーションブラーと呼ぶのかについては、 正式な論述を読んでいない私には分からない。 どなたか詳しい方教えてください。m(_ _)m  ここでは混乱を避けるため、 モーションブラーと言った場合は 1フレーム内の補間(数フレームには及ばず、減衰もしないアンティエイリアシング用)のことを指し、 残像と言った場合は目に映る残像を表現する手段(数フレームに渡って残り、また時間とともに減衰する)を指すことにする。 また、これら 残像とモーションブラーはまったく別のものである ことを明記しておく。 これらのことを踏まえて、以下を読んで頂きたい。

 今回は、人間が見ている(認識している?)画像とは 実際にはどのようなものかを考えてみることにする。
 ここで、人間が動きの速い映画を見ているとしよう。 この映画にはモーションブラーがかかっている。 当然静止画等で見ると、一枚一枚の絵はひどくぼやけて見えるだろう。 だが これを動画で見た場合、フレームレートよりも滑らかなアニメーションに見える ことになる。 理由は今更説明するまでもないだろう。 ところが、人間が認識する映像には、さらに他の要素が絡んでくる。 目への刺激(つまりは目に映った映像)は、それが強烈な刺激であるほど、 長い時間、映像情報として網膜に残るという残像現象である。 目の前で指を高速に動かすと、指が薄い尾を引いて見えるのがこれだ。 個人の動態視力にもよるが、 そこそこのフレームレートで再生された画像は 目に残像現象を残すことになる。 つまり、
数フレーム前までの映像が現在の映像に加えて微妙に見えているはずだ。 とすると、人間が映画を見ている時ある一瞬で認識している映像は、 撮影時のモーションブラーに、数フレーム分の残像現象を加えたもの となるだろう。 ただし注意点として、 これはあくまで静止画の場合の話である。 充分なフレームレートの動画の場合は、残像現象は人間が勝手に付ける からである。

 半分偶然だが、glclockはこの処理が行えるようになっている。
 glclock -m 5 -sh 1.0
のように、モーションブラーに加えて -sh オプションで 1.0 を指定してみて欲しい。 この -sh オプションは、元々カメラで言うところの シャッタースピードの指定である。 デフォルトは 0.5 だが、これは前回から今回までの連続した実時間の内、 50% シャッターが開いていることを意味している。 1.0 にすることで、前フレームの最終画像と今フレームの最初の画像が完全に繋がる訳だ。 しかし、このオプションでは 1.0 は少々特殊な値で、前回の画像が残像として残るようになっている。 前回の画像が残るということは、 連続で繰り返せば数回分の情報がどんどん減衰しながら残像として残る ということである(残像はかなり薄いので解りづらいが...)。

 ここで最初の話に戻る。 清3Zさんのページでのちょっとした論議とは すなわち、 「動画を作成する場合にモーションブラーもしくは残像効果が必要か否か」 である。 いや、実際には答えはもう出ている。 離散的に発生する映像で連続時間を表現するためには、 モーションブラーは明らかに必要である。 モーションブラーがないと、 動きの速い画像は飛び飛びに目に映ってしまう。 これについては清3Zさんがちょっとしたサンプルを作成しているので (Prejudice 参照)、興味のある方は是非見てみることをお勧めする。 モーションブラーの効果をよく理解できるはずだ。
では残像はどうか?
 これは先程述べた通り、 充分なフレームレートを持った動画であれば人間が自動的に残像を付けるため、 必要ないというのが正しいだろう。 下手に付けると、 残像が残像を呼び、妙にだらだらした映像に感じることになる。 バーチャファイター3の残像効果(特定の技で起こる)が、実際よりも激しく残像が残るように感じるのはこのためだ。

 まあしかし、「残像を付けるのは間違いだ」と言っている訳ではない。 うまく使えば、面白い効果を表現できる可能性もあるだろう。
 ただ、あくまでワタシ的には、ゲーム等 インタラクティブなプログラムで使う場合は 特に動きの速いオブジェクトに対してのみ、1フレーム間の動きを補間する モーションブラーを施すのが最も良いのではないかと思う。 速度的にもその程度が限界だろうし....。