全区間におけるモーションブラー現象 (2022)
(osar.fr)- モーションブラーを「論理的極限」まで押し進めるこの実験は、人間の視覚における motion smear と画面再生の差を縮める形でブラーを再定義し、これを手続き的リアルタイムアニメーションに適用している
- 自然なシーンでは、網膜の錐体細胞が光刺激を時間的に統合することで 受容体段階のブラー が生じるが、低フレームレートの画面では、ブラーのない映像は自然な smear の代わりに重なったフレームのように見える
- 従来のモーションブラーは、1フレームの時間区間を平均化して自然なシーンに近づけるが、高速な物体では不連続が残ることがあり、開始と終了の重みを下げる シャッター関数 (shutter function) がより自然な結果を生む
- リアルタイムシェーダー実装では、マルチサンプリングや解析的レイトレーシングを避け、動く物体を時間を含む座標の 密度関数 として表現したうえで、時間積分値をボリュームレイキャスティングでレンダリングする
- 最終的な「Torusphere Accelerator」は、軌道運動する球と回転するトーラスに対して実質的に無限速度までブラー処理を行い、「モーションブラーされた法線」が存在しないため、表面法線は別途補間で扱う
自然なシーンの動きと画面再生の違い
- モーションブラーは本来、カメラのシャッターが開いている間に被写体が動くことで生じる フィルムアーティファクト だったが、映像が自然なシーンと知覚的により似る効果があるため有用になった
- 3Dやアニメーションでは、「カメラをシミュレーションすること」と「自然に見えること」が常に同じ目標とは限らない
- 自然なモーションブラーを考えるには4つの問いが必要になる
- 自然なシーンの動きをどのように知覚するのか
- 画面に再生されたシーンをどのように知覚するのか
- この2つの知覚の違いは何か
- ビデオのモーションブラーはその差をどのように縮められるか
錐体細胞の時間統合と motion smear
- 明るい環境では、人間の視覚の初期処理は錐体細胞が担い、光変換 (phototransduction) は即座には起こらない
- 光刺激の遅延は、時間方向に刺激を滑らかにする形でモデル化できる
- Howlett et al. (2017) による金魚の錐体細胞の例では、光受容体に入る光子数、重み関数、その結果としての「effective stimulus」が示されている
- この重み関数の形と既知の人間の錐体細胞の応答時間を組み合わせることで、入力シーンから 知覚された画像 をシミュレーションできる
- その結果、自然なシーンでも光受容体レベルの自然なブラーである motion smear がすでに存在している
- 例のシミュレーションでは、観察者は物体を目で追わず、固定された点を見ていると仮定する
画面映像で従来のモーションブラーが果たす役割
- フレームレートが限られた画面を見るとき、モーションブラーのない映像の知覚画像は、期待される motion smear ではなく 重なり合ったフレーム のように見える
- モーションブラーが適用された映像では、各フレームはある一瞬を示すのではなく、フレームが覆う時間区間のすべての瞬間を平均する
- これは、1フレーム時間のあいだシャッターが開いているカメラで作られた映像に近い
- この方式の知覚画像は、自然なシーンの場合にはるかに近づく
シャッター関数で不連続を減らす
- 従来のモーションブラーでも、物体速度によっては motion smear に 不連続アーティファクト が残ることがある
- シャッター関数は、フレーム区間全体を一様に平均するのではなく、フレームの開始時刻と終了時刻に低い重みを与え、中央の時刻により高い重みを与える
- 名前はダイアフラムカメラのシャッター効率の比喩に由来するが、ここでの目的はカメラのシミュレーションよりも、画面と自然なシーンの知覚差を減らす関数を選ぶことにある
- この問題は信号処理における 窓関数 (window function) を設計する問題と非常によく似ており、よく使われる窓関数が良い結果をもたらす
- 主観的テストの基準では、物体が1フレームのあいだに移動する距離が物体の幅と同程度になると、シャッター関数が有効になる
- 低速では必要性はそれほど高くないが、高速で動く物体ではより自然に見え、静止フレームもより滑らかに見える
- このアプローチは一般的なカメラシミュレーション方式ではなく、連続するフレームの時間範囲が互いに重なることがある
- 一般的なカメラシミュレーションでは、フレーム間の時間的重なりはなく、フレーム間の瞬間を捨てることが多い
リアルタイムシェーダーで「無限モーションブラー」を作る
- 目標とするアニメーションは 軌道運動する球 と 回転するトーラス を組み合わせ、両方に対して実質的に無限速度までモーションブラーをかけること
- 最終結果をインタラクティブにするため、リアルタイムの shader として実装している
- マルチサンプリングは、各フレームごとに複数の時刻のシーンをレンダリングする方式である
- 物体速度が高いほど必要なサンプル数は比例して増える
- 「無限速度」のアニメーションには向いていない
- 解析的レイトレーシングによるモーションブラーも代替案になり得る
- メッシュでは三角形をプリズムに変換する方式がある
- 純粋な解析的アプローチも可能だが、ここではより重い方式になり得る
- どちらの方式でも、材質処理のためにはなおマルチサンプリングが必要になる
- 採用された実装は、「integrated volume motion blur」と呼べるハックに近い方式である
- 動く物体を、時間を含む座標を入力として受け取り、内部では1、それ以外では0の 密度 を返す関数として表現する
- この密度関数を時間について積分すると、任意の時間区間におけるモーションブラー済み密度が得られる
- 結果は volume ray casting でレンダリングする
- 写真的に正確な方式ではないが、非常に長い軌跡をリアルタイム性能で扱える
軌道運動する球のモーションブラー密度
- 軌道運動する球は、2D断面では 軌道運動する円 の問題に還元できる
- 円の中心は原点から距離 R にあり、円の半径は a とする
- 極座標で与えられた半径 r に対し、物体表面の角度 θ を求めることで、点が物体の内部に入る時刻と出る時刻を計算できる
- 物体が速度 v で軌道運動すると、角度座標から時間項 vt を引く形で表現される
- ある空間点において物体が存在する時間区間 I と、現在のフレーム時間区間 F の交差の長さが モーションブラー済み密度 になる
- シャッター関数 s を適用する場合は、密度に s(t) を掛けて積分し、s の不定積分 S があれば
S(max I) - S(min I)の形で計算できる - アニメーションで使われた正弦ベースのシャッター関数は積分値が 1 で、時間軸上で重なっても任意時点での総和が常に 1 になるよう設計されている
回転するトーラスと spiric section
- 回転するトーラスも球と同じ手順で処理する
- トーラスの2D垂直断面は spiric section、または Spiric of Perseus と呼ばれる
- トーラスの minor radius を a、major radius を b とし、特定位置 c の断面を取ることで、極座標式でトーラス内部領域を表現できる
- 表面角度 θ を解くと正と負の2つの場合が得られ、この2つの境界の間を solid torus の密度として使う
- 以降の手順は軌道運動する球と同様に、時間区間を求めてシャッター関数積分を適用する
最終的な Torusphere Accelerator
- 最終シーンは球とトーラスを組み合わせ、標準的なボリュームレイキャスティングでレンダリングする
- Surface normals には追加の処理が必要である
- 「モーションブラーされた表面法線」という概念はないため、実装では法線を混ぜて使っている
- ライブアニメーションは基本的なマウス操作とタッチ操作に対応している
- すべてのデバイスでうまく動作しない可能性があるため、ページ上部には事前レンダリングされた映像も用意されている
- 最終シェーダーは Shadertoy でも見られる
HNでの議論から続いた論点
- Hacker News での議論では、モーションブラーの品質を 芸術的な選択 と見る視点が挙げられた
- 色空間変換の重要性についてもあわせて語られている
- 映画VFXにおいてモーションブラーが歴史的にどのように発展してきたかも議論された
- 初期のCG映画 Jurassic Park は、物理的には不可能な box shutter function を使った事例として言及されている
- ゲームにおけるモーションブラーは、今なお議論の多いテーマである
1件のコメント
Hacker Newsのコメント
有限の画面リフレッシュレートでモーションブラーをレンダリングしたり撮影したりする際のトレードオフは、観客が画面内の動く物体を目で追えることにあります。
現実では、そうすると物体は鮮明に見えます。そのため、目の動きを追跡して相対運動に合わせてブラーをかけるか、無限のリフレッシュレートでモーションブラーを完全になくす必要があります。どちらも現在の技術では実用的ではないため、常にどこか不自然にならざるを得ません。優れた監督やゲームデザイナーなら、観客の目がどう動くかを予測してシャッタースピードやレンダリング時のブラーを選ぶことになります。
レンダリングされたコンテンツが同じ映像言語を話せないなら、リフレッシュレートに関係なく、道具が一つ欠けていることになります。もちろん限界はあるので、400Hzで違いがはっきり見えるならかなり驚きです。
レンダリングコンテンツで興味深いのは、これをさらに拡張できる点です。たとえば1フレームの持続時間を超えるシャッター角のように、すでに理解したと思っていた概念で遊ぶことができます。
この方式は最大画面輝度を下げ、ちらつきを避けるには最低限のフレームレートを必要としますが、現実には存在しない目追跡ブラーである持続性ブラーを減らします。正確に言えば、追跡ブラーを完全になくすには各フレームを無限に短い時間だけ表示しなければならないため、現実的ではありません。それでもVRヘッドセットはこのような閃光/ストローブ方式を使っています。
これがCRTやプラズマ画面がLCDやOLEDよりも動きの鮮明さではるかに優れていた理由でもあります。前者は各フレームを短く点滅するように表示し、後者はフレーム全体の時間にわたって同じフレームを保持するサンプル・アンド・ホールド方式です。たとえば60Hzでは1/60秒の間保持します。CRTの60FPSがOLEDの120FPSより滑らかに見えることもあります。
ゲームでは再投影手法で多数のフレームを追加する方法もあります。エンジンで高コストなフレームを大量にレンダリングしなくても、実際のカメラの動きを近似できます。これもVRではすでに使われていますが、まだ非常に高いフレームレートまでではありません。詳しくはこの記事がよく扱っています:
https://blurbusters.com/frame-generation-essentials-interpol...
再投影で1000FPS程度はかなり現実的だというので、画面輝度を下げずに追跡ブラーの問題を解決できそうです。
これはCRT/OLEDの走査出力、通常はローリング方式、またはLCDバックライトストロビング、多くは全フレーム方式で実装できます。ただし24Hzで各フレームを短く表示すると耐えがたいほどちらつくため、映画映写機はフィルムフレームを2〜3回ずつ表示していました。50Hzではかろうじて耐えられる水準なので、一部の欧州のCRTテレビは50Hz映像を100Hzにフレームダブリングし、その結果、動く物体が二重に見えることもありました。最適に滑らかな動きと最小限の眼精疲労のためには、理想的には70〜75Hz以上が必要ですが、そうすると60FPSで録画された映像をジャダーやティアリングなしに表示するのが難しくなります。
これは視覚メディアをより現実的に感じさせるという期待とは裏腹に、ゲームではビデオゲームを過度に編集された映画の安っぽい近似物のように見せてしまう感じがある。
非常に速く動くものや、非常に近くを通り過ぎるもの、特に自分の視点ではない動きには筋が通る。だが「キャラクターが素早く回転する」といった状況であまりにも乱用されている。
頭や目をさっと動かすとき、ぼやけた画像を見るのではなく新しい画像を見ており、脳が途中のデータを捨てている。鏡で片方の目を見てから、もう片方の目へ焦点を移してみると分かる。目や顔がぼやけて見えるだろうか?
ゲームで視点を動かすときにブラーを加えると、新しい視界を見せるのが遅れるだけだ。気が散るし、非現実的である。
より良いテストは、指や手を非常に速く振りながら見ることだ。指が動くときにモーションブラーが見えるはずだ。場合によっては残像として個別の「フレーム」が見えることもある。たとえば最近の車のテールランプを見ると、LEDが点灯し続けているのではなく、PWMで非常に高速に点滅している。だから夜にテールランプを見ながら目を動かすと、ぼやけた像ではなく点の連続が見える。このコツを知ると、ぼやけて見えるか途切れた点に見えるかで、アナログ照明とPWMを見分けられる。
しかし車内にいるときや、ゲーム内で空中を飛んでいるときは、ちらっと見る間に画像が歪むことはあり得る。期待するのは、加速するほど引きずられるようなブラーで、こうした効果は高速なシーンをずっと面白くできる。問題は、モーションブラーがほとんどどこでもひどく実装されていることだ。
最大の三つの罪は、物体を遠くまでぼかしすぎること、ぼかすべきでないものをぼかすこと、そしてシーン全体をぼかすことだ。三つ目は結局二つ目に帰着するので、実際には二つの罪かもしれない。最も重要なのは、モーションブラーは控えめであるべきという点だ。適切なモーションブラーはゲームをぼやけさせるのではなく、より現実的で滑らかに見せる。
物体がフレーム間で50ピクセル動いたなら、ブラー幅は50ピクセルを超えるべきではない。実際には、もっとさりげなくするなら25ピクセル程度が適切である可能性が高い。ところがなぜか、レーシングゲームは高速走行時にシーン全体へ放射状ブラーを大量にかけ、個人的にはそれがシーンを台無しにしている。
同様に、カメラに対して相対的に動いていない物体にはモーションブラーがあってはならない。多くのゲームはここで間違える。回転時に後処理でシーンをぼかすのだ。完全に静的なシーンなら筋は通るし、計算コストも非常に効率的な方法である。しかし、ある物体を追跡するために回転しているなら、追跡中の物体はぼけてはならない。レーシングゲームで隣の車が自分と同じ速度で走っているなら、その車はぼかされるべきではない。
正しいモーションブラーを得る確実な方法は、複数の完全なフレームを連続してレンダリングしてから混ぜることだが、見栄えを良くするには非常に多くのサンプルが必要になる。そうでないと、縦線のようなものが画面を横切って飛ぶとき、滑らかなブラーではなく縦帯の連続のように見える。
おそらく最善はハイブリッド方式だろう。シーン内の各物体を別々にレンダリングし、カメラに対する相対移動方向に応じて物体ごとの後処理ブラーを適用する方法である。ただし、Z順序の処理が大きな難題になり得る。
まれに120FPSでゲームをできたときは、プロジェクターが残念ながら60Hzに縛られているものの、モーションブラーなしでプレイする方をより好んだ。
良い概説は[1]にある。
興味深いことに、シャッター効率のモデリングに関する古典的論文[2]が2005年に出るまで、VFX制作で使われていたすべてのレンダラーはボックスシャッターを使っていた。つまり、シャッターが即座に開き、指定された時間だけ開いたままで、その後即座に閉じる方式である。
“Jurassic Park”や“The Mask”のような映画で極端なモーションブラーのシーンを見ると、それはボックスシャッターを使ったPhotoRealistic RenderManによるものだ。
[2]のパラメータ化を現場で1:1に初めて実装した事例は、論文が出た同じ年に[3]で行われ、今日まで変わっていない。最初に使われた作品は“Charlotte's Web”で、Rising Sun Picturesが[3]を使って制作したクモのキャラクターにのみ適用された。
Pixarも数年後に追加したが、[4]では少しやり過ぎていた。現在のほとんどのオフラインレンダラーはこの機能を備えており、シャッターカーブと呼んでいる。
[1] O. Navarro et al.: Motion Blur Rendering: State of the Art (https://citeseerx.ist.psu.edu/doc_view/pid/fc23fb525cafa8fe6...)
[2] Stephenson, Ian: Improving Motion Blur: Shutter Efficiency and Temporal Sampling (https://staffprofiles.bournemouth.ac.uk/display/journal-arti...)
[3] https://www.3delight.com/, 特に https://nsi.readthedocs.io/en/latest/nodes.html を参照
[4] https://renderman.pixar.com/resources/RenderMan_20/cameramod...
デモは sRGB 空間で計算されているように見える。つまり非線形の輝度値を使っているので、にじみが不自然に見える理由の大半はそこから来ている気がする
物理現象をシミュレートするなら、線形の輝度値で処理して、最後にだけ sRGB に変換すべき
人間の視覚認知の非線形効果がこれをすべて相殺するなら話は別だが、そうなら少なくともその点に触れるべき
もう一度確認して、正しければインタラクティブな図と本文を更新する。メインの「torusphere」シェーダーはモーションブラーが非現実的で手で調整したものなので大丈夫だと思うが、前半のいくつかのインタラクティブな図は理論を直接適用したものなので、この指摘が当てはまる。それでも全体として、本文の核となるアイデアを無効にするものではないと思う
トーラスのデモが本当に見事。高いフレームレートがブラーの知覚をどう変えるのかが興味深い
240Hz ディスプレイを使っているが、図 5 では約 12rad/s までは離れた円が見えない。40rad/s でも、従来のシャッターとサインシャッターのオプションの違いは、動いている最中には感じられない
マウスの動きの滑らかさと低遅延だけでも 240Hz は強くおすすめできる。60Hz のマウスポインターに戻るのは本当に、本当にきつい
本当に気にしない人もいる。入力遅延やターミナルエミュレーター聖戦のような議論もよく分からない。フレームバッファコンソールで作業するのと、50ms 追加された ssh で作業することの違いが感じられない
30FPS と 60FPS のゲームの違いは分かるが、意識して見ているときだけだ。2 つの値の間を行き来せず安定してさえいれば、あまり気にしない
ただ、より滑らかな遷移を持つインターフェースのほうが安定感を与えるし、高いリフレッシュレートが時間とともに精神状態に影響することもあるのではないかとは気になる
トーラスと奥の球体がモーションブラーで作られているのなら、部分的に 透明であるべきではないか? ある瞬間にまた不透明になるように見えて、不思議に感じる
だからタイトルも motion blur all the way down なのだ
ただし、動く物体が発する光は静止した物体より低くあるべきだ。だから距離が伸びるほど、物体はどんどん暗くなるべきだ
これはフィルムカメラをシミュレートしようとするところから離れ、人間の視覚システムをシミュレートしようとする試みだ。有用な方向性だ
古い技術をまねることから離れ、現実に一歩近づくということだ。シャッター式のモーションブラーも、セピア調のプリント、16FPS の白黒映画、機械式シャッターのせいで生じる楕円形の車輪のように消えていくかもしれない
現実の再現は目標ではない。達成できないからだ
ambient.garden がちょうどフロントページに上がってきたので、この記事も上がってきたようだ。読み直してみると、実は 2 本の記事にすべきだったと感じる
前半は今でも気に入っている。モーションブラーとは何か、理論的にはどうあるべきかを適切に掘り下げている。後半は、モーションブラーに基づく特定の「torusphere」アニメーション用シェーダーがどう動くかについての、やや混乱した超圧縮説明だ。その部分は、少なくとも自分にとっては、コードが現時点で完全に理解不能にならないようにしてくれるという点で主に有用だ。振り返ると、2 つの部分の間の移行は、凍った湖に飛び込むような感じに近い。申し訳ない
さっき飲んだワイン 1 杯のせいだけではなかったようで安心した
4 次元押し出しの投影関数としてモーションブラーを何度かいじったことはあるが、実際の文脈であるビデオやテクスチャでは、キャッシュを伴うハードウェアサンプリングに比べて非実用的な方法になる。それでもこの記事を見ると、「あと一回だけやってみようかな」という気になる
リアルタイム比較デモがすごい。そこまで追っている間は頭では「理解した」と感じていたが、モーションブラーのオン/オフを直接切り替えられるようになると、違いが本当に明確になった
motion blur all the way down を見たら、なぜか ひも理論、原子、宇宙がどう作られたのかまで考えてしまう
もちろん、深く入れば入るほど、どんどん奇妙になっていく