Michael Abrashブログ③「ジャダー問題の解決」救出版

OculusRift - Michael Abrashブログ②「ジャダー」救出版 - Qiita
http://qiita.com/shiftsphere/items/c2f0c1a842b519e8dfde
の続きです。

#Michael Abrashブログ③「ジャダー問題の解決」 |VRバカ一代

http://www.vrbaka.com/main/reference/michael-abrash-blog-3/

Yoi
米国Valve社Michael Abrash氏によるVR関連ブログ第三弾。
いよいよVR表示の本質を理解するためのMICHAEL ABRASHブログシリーズの最終回です。ここま
で読むと、現時点でOculusRift DK1の抱える問題、それをどう解決しようとしているか、いくつかのキー
ワードを含めて理解が進むと思います。
##Down the VR rabbit hole: Fixing Judder
〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜＊〜
ここ数年、僕は幸いにも多くの素晴らしい人たちと出合い、一緒に仕事をする機会を与えられた。そして単に興味を共有するだけでなくそれ以上のことをやってくることができた。
しかしそれでもまだ達成していないことがある。僕はまだコンパイラを書いていない。３Dゲームを自分の手でゼロから作ったこともないし、携帯電話で何か面白いことをやってみたこともない。
僕は、Gates氏やNewell氏と仕事をしたこともあるし、Bentley氏、Akeley氏やNeal Stephenson氏にもあったことがある。でもKnuth氏、Brin氏やMiyamoto氏にあったことはない。残念ながらIain Banks氏には二度と出会うことはない。
そして僕はもう２０年も誰かが私の関わっているプロジェクトについて明確に説明した本の登場を待っている。それは「これぞまさしく！」とうなってしまうような本であり、８０歳になった時、あぁ、この本のおかげで未来を変えることができたんだと懐古できるような本だ。
残念ながらまだそのような本は存在しない。
これまで僕が成し遂げてきたこと 、それを４冊の本にまとめてきたことを考えれば、みんなは既にそうした本もあるのではと思うかもしれない。しかし、Tracy Kidderクラスのライターはそうそういるものではない。
４冊とも素晴らしい出来だし、内容もしっかりしている。しかし、いくつかの理由でまだまだ十分ではないのだ。
まず、僕の記述には間違いがたくさんあり、内容的に漏れているところも多い。いつかそれらを修正したいと思うが、例えばLaura Fryer。 Seamus Blackley氏にとって、超有能で、なくてはならない不可欠な人物、あるいは彼女なしに最初のXBoxは出荷は成功しなかったろうと言わしめる人物でさえ、Openingthe Xboxの中に登場しない。
これは珍しいことではない。ハイテクに関する歴史作家に与えられたページ数は限られていて、誰を登場させるか、どんな物語に注目したいかを選択しなければならない。しかし過去の体験に基づくならば、Lauraが登場しないのは、XBoxに関して語るべき多くの歴史を無視したことと同じだ。
そういう意味では４つの本はすべて問題がある。これらを読んでもプロジェクトが確かに世の中を変えたんだという実感が伝わってこない。これは大きな損失だ。なぜならWindows NTもQuakeも素晴らしい経験だったし、自分が平凡な仕事や思い通りにならないプロジェクトの中にいると、いつも懐かしいと思うからだ。
うれしいことに今僕が関わっているプロジェクト、VRが時代を変えるだろうことにますます自信を持ってきた。比較的価格が安いHMDのプロトタイプを試してみてこの考えは最近ますます強く確信するようになった。
このプロトタイプは多分今までで一番出来のいいVRハードであり、ソフトさえあれば、広いアプリケーションに対して十分にVRを推進させることが可能そうな出来ばえだった。
実にエキサイティングな時だ。誰かが、この興奮を正確に伝える教科書とともに、VRを世に発展させてくれること願う。VRに関してまだ何も分かっていないと言っているわけではない。
まだ多くのことをやらなければならないということだ。例えば、入力デバイス、光学やソフトウェアは言うに及ばず。もちろん、最も大きな問題が残っている。VRディスプレイだ。
これまで、色順次方式でフルパーシスタンスなディスプレイがもたらす知覚的な問題について２つのポストで説明してきた。今回はそれらをどうやって解決するのか、また解決することで次にどんな新しい問題が発生するか議論してみたい。
もし、まだ議論の準備が出来ていないならば、先にいく前に、まず過去のポスト（こことここ）を読んでもらいたい。
###〜ジャダーを軽減させる簡単な方法
前回、HMDを装着したとき眼球の相対的な運動によってジャダーと呼ばれる、ぶれとストロボ現象が組合わさった視覚効果が発生し、映像品質を著しく損なわせることを学んだ。ジャダーを軽減させる最も簡単な方法はディスプレイのフレームレートをあげることである。
下の図はHMDを使用しているとき、仮想イメージを眼球が追跡している状態をモデル化したいつもの時空間ダイヤグラムである。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-001.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/40cee5a3-e41a-5d91-5160-bd9e71b38af9.jpeg)


一方、下の図は実世界の物体を目が追跡して見ている時の状態である。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-002.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/b0f02971-4611-7dee-b5b6-493f9166da78.jpeg)


どちらの場合もディスプレイに対して目と物体は移動しているが、目と物体の相対的な位置移動はない。
もし、HMDのフレームレートを２倍にすると以下のようになる。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-003.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/15d07109-a306-7e3d-7ab6-0303e8a1e795.jpeg)

見ての通り、フレームレートを上げていくことによってHMDでの状態が実世界のそれに近づくことがわかる。もし、フレームレートが無限になれば、実世界の図と同じになるのである。
残念ながら、無限大のフレームレートはあり得ない。しかし６０Hzから無限大のどこかで目が現実と仮想の区別がつかなくなるポイントがあるに違いない。それがどこにあるかが問題だ。
その質問に答えられるものはいない。それはシーンによっても異なるだろうし、解像度、視野角、ディスプレイの種類、眼球の運動速度や体質によっても異なるだろう。
しかし確からしいことは１００Hzではまだまだ十分ではない。２００Hzになればずっとよくなるだろうがそれでも十分ではないだろう。１０８０ｐで視野角９０度の場合、おそらく３００〜１０００Hzくらいのフレームレートでないと十分とは言えないだろう。
高解像度になればなるほど高いフレームレートが要求される。１０００Hzくらいあれば、実世界におけるそれとほぼ同じ状態で人間の視覚システムが仮想世界を認識し始めるため、シミュレーション酔いを含むHMD問題の多くは解決するだろう。
最大の問題は、そんな高いフレームレートをもつ装置など見たこともないし、存在することを期待もしない。
それほど高いフレームレートを持つ装置を作る技術がどこにもない以上、そのようなディスプレイを開発しようと考えることもそこに表示するシーンデータを作ろうとすることも全く意味を持たない。
もし、そういうしたシーンを高フレームレート用に構築できたとしても、シーンは極端に単純化しなけれなならないだろうし、高フレームレートによって高い映像品質が保証されたとしても、全くもって魅力的なシーンにはならないだろう。
ジャダーがなくなることは素晴らしいことだが、２００５レベルのグラフィックではあまり価値がない。（決して２００５レベルの画像がVRで楽しむレベルでないとは言わない。実際、Half Life 2では十分なレベルだった。
しかし明らかにPCやコンソール用グラフィックに比べて質は低く、VR用には１０８０ｐ以上の解像度が求められるだろう。そうなると求められる品質で１０００Hzなど全くあり得ない話になってしまう。）
従って、ジャダーやその他の問題を解決するためには、フレームレートを上げることは、将来、技術的に可能となるまでは、選択肢から外れる。プランBの出番だ。
これは完全な解決方法ではない。しかし現実的ではある。しかしこの話をはじめる前に、まずは” パーシスタンス（Persistance）”について触れておこうと思う。
###〜パーシスタンス（Persistance）
ジャダーとは「パーシスタンス」、すなわち次のフレームが描画されるまでの間、それぞれのピクセルが同じ位置、同じ色で発光している状態を維持すること、によって発現する現象である。
”フルパーシスタンス”とはそのフレームが表示されている間、ずっとピクセルが発光していることを表す。これは多くのOLEDあるいはLCDディスプレイに当てはまる状態である。
下図は、目が正面を見ているまま仮想イメージが眼球に対し移動しているときのフルパーシスタンスの時空間ダイヤグラムである。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-004.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/13bf62bc-42e7-48f7-8ee5-661df4af5e9c.jpeg)

”ハーフパーシスタンス”とはフレームが表示される期間の半分だけピクセルが発光している状態を示す。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-005.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/4e07b7d5-2856-cdb7-0ca2-adfab5551538.jpeg)

”ゼロパーシスタンス”の状態が下図だ。ピクセルは各フレーム描画時、ほんの一瞬しか発光しない。しかし光の強度は高く、発光時間が短い時間であっても十分目に認識できる。走査レーザーディスプレイは基本的にゼロパーシスタンスである。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-006.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/93f53008-3838-defd-d9f1-6a5dd75dc7f1.jpeg)

上のそれぞれの図は眼球が仮想イメージに対して移動していない状態を表す。これはジャダーをおこす条件ではない。ジャダーを起こすのは眼球がディスプレイに対して移動している時である。下図は、フルパーシスタンスで眼球が動いている状態を示す。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-007.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/785a1c15-d596-51c7-7c64-82c512c399e4.jpeg)

図が示す通り、眼球がディスプレイに対して相対的に移動すると、各ピクセルが発光している期間、その光が網膜上を移動するため、「ぶれ」というジャダーを構成する一つの現象が起こる。
ぶれの度合いは、網膜にどれだけの時間光が入射したか、その絶対時間で決定される。もし、１０００Hzのフレームレートであれば、フルパーシスタンスは１ｍｓである。これはジャダー現象を排除するに十分短い時間だ。
しかし、このフレームレートは現実的ではないため、我々は２番目の解決方法を考えなければならない。
すなわち、「低パーシスタンス」である。
下図はゼロパーシスタンスディスプレイ上を眼球が動いている状態を示す。

![Michael Abrashブログ③「ジャダー問題の解決」 _ VRバカ一代-008.jpg](https://qiita-image-store.s3.amazonaws.com/0/71326/fd0435fa-ee9c-514e-d5db-f8911141020f.jpeg)


この場合はピクセルが発光している間、ディスプレイの移動はほとんどない。
なぜならピクセルの発光時間が極めて短いからである。すなわち、ゼロパーシスタンス（現実的には、”十分に低い”パーシスタンス、例えば１０８０ｐの解像度で９０度の視野角の場合、約２ｍｓ）こそがジャダー現象のぶれのパートを解決するのである。
実験的なプロトタイプではローパーシスタンスなHMDでは頭や眼球が移動していてもくっきりとした画像を維持することが実証できている。
一つの問題を解決すると、別の問題を引き起こすものだ。この低パーシスタンスも例外ではない。
###〜低パーシスタンスの弊害
前回の投稿でストロボ現象について言及した。この、複数のイメージを同時に認識してしまう状態は、仮想イメージが、その条件はコンテンツに大きく依存するが、大体角度にして５〜１０分以上フレーム間で移動した場合に発生する。
フレームレートが６０Hzの場合、眼球がイメージに対して相対的に５度／秒で移動しているとすると、角度にして５分イメージがフレーム間で移動するとストロボ現象が起こる。
１０度／秒で目が移動していると１０分の移動で現象が起こる。頭は普通の動作でも１００度／秒くらいで回転してしまうので、HMDではいとも簡単にストロボ現象が発生してしまうことは想像に難くないだろう。
（だから、フレームレートの高速化は有意なのだ。パーシステンスが短くなると同時にフレーム間の時間も短くなり、結果として仮想イメージの移動も短くなるからである）
ぶれ現象は多くの場合ストロボ現象を隠す効果がある。逆にぶれ現象がなくなると、これまで隠れていたストロボ現象が表面化してしまうことになる。つまりローパーシスタンスディスプレイではストロボ現象が強調されてしまうというわけだ。
しかし、低パーシスタンス時のストロボ現象はそれほど深刻な問題ではない。なぜなら、上の図でも明らかなように、そのイメージがなんであれ、それを目が追いかけている状態では、ピクセルはフレームが変わっても同じ場所に入射するからである。
（もちろんこれは、目の追跡が完璧であり、フレームレートも一定であることが前提である。追跡エラーやフレームレートの変化は直ちに光子の入射位置のぶれをおこし、結果としてストロボ現象が発現するだろう。）
また、その仮想イメージは、今、脳が注目している対象であり、従ってそのイメージは網膜の一番解像度の高い場所に結像し、知覚システムは優先的にこれを認識処理するため、逆に言えば、その他のシーン情報についてはあまり注意深く認識しないため、低パーシスタンス時のストロボ現象は思ったほど気にならないだろう。
例えば、低パーシスタンスディスプレイで左から右へ移動している車を目で追いかけているとしよう。
車のイメージは鮮明でクリア。ストロボ現象もないだろう。
一方その他のシーンオブジェクトにはストロボ現象が起こっているはずだ。なぜなら目はこれらを構成するピクセルに対しては移動しているからだ。しかしこれらは、フレームレートや眼球の運動速度、背景や目の特性によってはそれほど気にならないかもしれない。
（これは人によって全く異なる。例えば僕は人よりもストロボ現象に対して敏感なようだ。）
ロケットのような高速移動する物体を追いかけようとすれば全く他のことは気にならないかもしれない
し、隠れている敵を捜そうと周りをじっくり見回しているとストロボ現象が見えてしまうかもしれない。
しかしこれらは現時点ではすべて仮説であり、なんの検証もなされてはいない。
もし、低パーシスタンスにおけるストロボ現象が問題になるならば、その明確な問題解決方法は高フレームレートである。ただ問題解決に必要なフレームレートは現在技術的に可能なフレームレートの遥か上にあるため、近い将来を含め、フレームレートの高速化は選択肢に入れることはできない。
代用として、すべてのシーンにモーションブラーをかけてレンダリングし、フレーム毎の画面イメージがなるべく連続して見えるようにイメージ周波数を低くする方法はある。
しかし、この方法によってストロボ問題が解決したしたとしても、いくつかの大きな問題が別に発生する。

>１）まず、余分なレンダリング計算を必要とする、
２）次にすべての仮想オブジェクトに対して目に対する相対的な移動を計算しなければならない、
３）さらに眼球のトラッキングをしなければならない。

これらの計算コストを考えるとそれほどの価値があるか少々考えものである。
###〜さらに深かみへ
ストロボ現象は低パーシスタンスの副作用としては比較的容易に予想できる結果である。この論文のおかげで、なにかプロトタイプを作るまでもなく、この現象の出現を予測できる。
（とはいえ、ストロボ現象に関しては、ぶれ現象に比べそれほど研究がされているわけではない。）
同時に、低パーシスタンスにおける動体認識についての問題も予測できる。つまり、低パーシスタンスにおいて仮想イメージから放射される短い、明るい光子による刺激は、動体認識においては、実物を見ている時のそれと必ずしも同じ効果を生まないのである。
我々はシミュレータ酔い、運動予測、反応速度などの分野でこの問題の関わりを予測しているが、動体認識に関する問題は予想以上に深く、そのメカニズムはストロボ現象以上にわかっていない。
もし緑色の細い縦線を低パーシスタンスディスプレイで左右に激しく動かしながらみるとストロボ現象がはっきりと見える。上で述べたようにストロボ現象に関してはよくわかっていない。
しかし、いくつかの因子がこの現象に関わっているように見える。
最初の因子は低パーシスタンスにおけるサッカード（急速眼球運動）時の視覚抑制。急速に眼球が動いているとき、視覚抑制が起こり、目は盲目状態になっていることは広く知られている。
実際には目はサッカード中もあらゆる情報を収集しているが、網膜に写るイメージはぶれていて、はっきりとしたイメージは収集できない。そしてあるしきい値を超えると、ぶれたイメージを認識しないように抑制が働く。
しかし低パーシスタンスな状況下では視覚抑制が働かない。それは多分、サッカード中であっても網膜に結像するイメージが低パーシスタンスではぶれないので視覚抑制が働かないからであろう。
サッカード時の眼球の速度（数百度／秒）では視覚抑制が働かない限り、まさにストロボ現象が起こる条件である。
次の因子として考えられるのは、脳と目がつねに参照空間情報を必要としていることだ。この情報をもとに網膜に結像した信号を脳は翻訳し空間的に認識するのである。
視覚システムは眼球がサッカードをし始めるとき、目がどこからサッカードするか、どこへサッカードするか空間情報のスナップショットを記録するようである。
そして眼球が運動している間は網膜が受け取った情報を抑制するため、その間の参照情報は必要としない。しかし上述のように低パーシスタンスな状況下では視覚抑制が働かない。
この場合、眼球は２つの参照位置の間にあるのでどちらの参照情報も正確でない。眼球のおおよその位置とサッカード前後の参照情報を脳が組み合わせて空間認識処理をしていることは確認されている。
しかし処理結果は通常より精度が低いため、イメージは異なった位置に配置される。すなわち間違った位置として認識されるのだ。
この２つの因子によってサッカード起因のストロボ現象を引き起こしている可能性がある。垂直ラインのストロボ現象は確かに興味深い現象であるが（少なくともHMD開発者にとって！）比較的わかりやすい事象ではある。
しかし、視覚システムが無意識下で情報処理をする仕組みには何層ものレイヤが存在し、上述のメカニズムは比較的低レベルの処理であると考えられている。ハイレベルの処理層にははるかに複雑で説明の難しい現象が含まれている。
以前、僕は単純な２人対戦用VRゲームのプロトタイプを作ったことがある。仮想空間のある部屋の壁、天井、床にはありがちなテキスチャを貼ったが、それ以外はほとんど何も手を加えなかった。
するとAaron Nichollsは、部屋をもっとTron風にしたらいいに違いないとアドバイスしてくれたのでテキスチャを緑のラインで描かれたグリッド風のものに置き換えることにした。
それを僕はRiftで試してみると、頭をゆっくり動かしている限り悪くはない出来だったが、ぶれとストロボ現象が顕著に現れた。ぶれに隠れて普通Riftではストロボは滅多に現れないが、細い緑のラインが完璧にストロボ現象を起こしていた。
ジャダーのない状態ではどう見えるのか確かめたくて、今度はそのゲームを低パーシスタンスのプロトタイプ装置で走らせてみた。
結果は全く予想外だった。
ほとんどのパートでそれは素晴らしい出来だった。互いのプレーヤも壁のグリッドも安定してクリアに見えた。Atman Binstockが壁際に立ち、壁と床のコーナーを見ようと視線を下げ、次に間髪おかずに壁の真ん中に視線を移した。すると部屋全体が大きくずれて見えたというのだ。
頭の中で仮想空間の中の大体の場所を覚えてから同じことを繰り返したが、実際に動いたという事実はなかった。しかし試した誰もがしばらくの間、まぎれもなく世界が動いたという感覚を訴えた。最初、我々は光学的な問題と考えた。
しかしAaronはパーシスタンスが犯人に違いないと疑った。事実、フルパーシスタンスの状態でテストするとこの感覚は消えたのである。その後のテストで我々は実空間の中でもストロボライトを使って同じ効果を再現することに成功した。
このタイプの現象は「視覚の不安定現象」と呼ばれているが、これには複数以上のメカニズムが含まれていて、まだ原因の解明には至っていない。ただ、可能性のある説明ならいくつか並べることはできる。
例えば、先ほど述べたような位置情報の認識ミスによって仮想世界が動いて見えたのかもしれない。そしてもし世界が動いて見えたのなら何かしらのきっかけで運動を認識したはずである。
サッカードが終了すると、この不思議な感覚を残してすべては元の通り正しい位置に戻る。あるいは、過去の視覚抑制時に取得したイメージを使って、実際の運動なしに勝手に運動している感覚を作り出してしまったのか。
すべてもっともらしく聞こえるが、なぜ、同じことが垂直のラインでは起こらないのか説明することはできない。
確かに視覚の不安定現象を引き起こすには、十分な視覚情報から脳内に世界の３次元モデルを構築する必要がある。それはすなわちこうした現象がこれまで我々が見てきた現象よりはるかに高いレベルの、まだ我々が十分に理解できていない高度な３次元空間処理を無意識レベルでの行っていることを意味するのかもしれない。
どうしたらこの現象を抑えられるのだろうか？
１０００Hzのフレームレートはここでも役に立つだろう。前述した、モーションブラーによるごまかしも有効に違いない。モーションブラーが視覚抑制を作動させられれば現象を抑えることは可能だ。
コンテンツを作る時に高周波成分をさけるという方法も考えられる。これをうまく制御する方法ははっきりわからないが、確かなことは、低パーシスタンスのHMDでHalf Life 2をプレイしても、この視覚の不安定現象は起きにくいのだ。
視覚の不安定現象がどれほど大きな問題になるのか正直わからない。
なぜなら普通のゲームコンテンツでこの現象が起こることはほとんどないからだ。低パーシスタンスによって引き起こされるであろうあらゆるモーション検知の問題についても同じだ。
もし現象が起こったとしても、眼と脳がそれに適応できるかもしれない。しかしこの適応は、特に無意識下では完全ではないだろう。
その不完全さが疲労や酔いを引き起こす可能性を否定できない。その適応が完全であったとしても、新しい眼鏡をかける時と同じように、その適応自体が不快感を伴う可能性もある。
これから一つ一つの現象を解明するため多くの研究開発が必要になるだろう。それ故に僕は、VRは今後数１０年改良を続けるだろうと思うのだ。
どちらにせよ、視覚の不安定現象は、HMDにおける視覚システムの作用がいかに複雑でまだあまりわかっていないか、一つの問題解決が新しい問題を生むという難しさを示すいい例である。
最初に我々は３つの色コンポネントが「カラーフリンジ」を引き起こす原理について議論した。
３色を同時に発光させるとで問題を解決することも学んだ。次に「ジャダー」が画質を低下させることを見た。ジャダーは低パーシスタンスによって解決されることを知ったが、今度は「視覚の不安定現象」の登場だ。この問題を解決するのは、１０００Hzのフレームレートを使わなくても解決できるかもしれない。
しかしまたそのことが新しい運動検知に関する問題を引き起こすのだろう。幸運なことに、どんどん穴の奥に入っていき、新たな問題が登場しても、問題の大きさ自体は小さくなる傾向を示している。
ただ、同時に問題はどんどん複雑で難しくなっている。
ここで一旦議論を止めよう。願わくばもっと多くのページで問題や問題解決について議論したいところだが、とりあえずHMDというものがこれまでのディスプレイと全く違う世界であることが理解できればいいと思う。
いつか、Tracy Kidderのような人物が、どのようにして大衆向けVR時代が始まったのか、などという本を出版してくれることを願うが、まだまだ先のことだろう。
ただ僕はこの３回の投稿で、この先数十年を根本から変えてしまうかもしれない新しい技術について、少しでもみんなの理解に役に立てたのなら幸いだ。
ま、短く言えば、辛いけど面白い。ワクワクするが地獄のよう！

www.vrbaka.com/main/reference/michael-abrash-blog-3/

----------
以上です。
どうでしょうか。o(^-^)oワクワクしますね！！
目に入ってくる光の様子の挿絵は、GIFアニメにしたらより分かりやすくなりそうです！
１０００Hzのフレームレートは…10年後くらいには実験機レベルで作れるでしょうか…体験してみたいです。