知覚メカニズムと網膜投影

この記事は[Akatsuki Advent Calendar 2018](https://adventar.org/calendars/2990#list-2018-12-09)の11日目の記事です．

# はじめに
初めまして．

いきなりですが，皆さんは何をしている時が一番楽しいと感じますか？ゲームとか映画とか音楽とか，人それぞれあると思いますが，基本的には五感で何かを感じる時でしょう．人は何かしら周りから情報を得続け，生きていることを実感したり，喜んだり悲しんだりします．

この記事では五感の**視覚**に焦点を当て，網膜投影や網膜走査の話をしようと思います．
ただ，ここらへんの話はどこまででも深く突っ込めてしまうので，完結にわかりやすく書いていきます．
前提知識となるようなもの全てを説明していくと論文になってしまうので，文中に**キーワードを太字**で記述していきます．わからない場合はこのキーワードを調べて見てください(人や状況によって表現の仕方が変わって来るので，似た単語で調べても大丈夫です)．

**※わかりやすく説明するために端折っている/少し嘘をついている部分(ミクロ・マクロな視点による解釈の違いなど)があるのでご注意ください．本気で勉強したい人は論文を漁って見るといいと思います．**

# 目のメカニズム
　人が周りから得る情報の8割が視覚から得る情報らしいです．要するに，生きている意味の8割は視覚情報です(暴論)．綺麗な写真に見惚れたり，リアリティのあるCGを追求したり，NPRなグラフィックのゲームを作ったりしているので，あながち間違ってはいないんじゃないかなぁと思います．逆に言えば，人の視覚のメカニズムを完璧に把握し，ディスプレイやその他情報提示デバイスに置き換えることができれば，人の生活の8割を変えていけるということになります．夢のある話ですよね．しかし近い将来，とんでもない視覚情報提示デバイスが開発され，人の目に映る全てのものが，より便利に，より綺麗に，よりはっきりと見える世界が来るんじゃないかなと思っています．

では，人はどうやって物体を知覚しているかご存知でしょうか？
「環境光が物体に反射した拡散光が目に入射して知覚している」とかよく聞くと思いますが，なんのこっちゃですよね．僕もそうです．

**「目に入射する開散光~平行光が作る像を知覚している」**っていう表現の方がわかりやすいので，こちらを軸に説明していきます．

### 私たちが見ているのは1枚の画像

人が見ている世界は結像した**像**の集まりです．像は空間上の1点で結像するため，**極座標系**の点みたいなイメージです．私たちはこの無数の像を1枚の画像として知覚しています．ややこしい話ですが，像自体は3次元空間上に存在していますが，私たちが最終的に見ているのは2次元画像です．3DCGに詳しい方ならわかると思いますが，要するに**透視投影変換**されたということです．

### じゃあ奥行きはどうやって知覚しているの？

1枚の画像だけでは奥行きを知覚することはできません(単純に平面だからです)．でも私たちは奥行きがわかりますよね？「手前の木より奥の方に山がある」などですね．これは**視差式立体視・運動立体視・単眼立体視**といった効果から奥行きを知覚しています．
視差式立体視は，両目それぞれで異なる画像を見ることで立体的に画像を知覚するメカニズムです．クロスワードパズルの本とかによくあるのはこれですね．ちなみにHMDも同じ方法を用いて奥行きを表現しています．
運動立体視は，対象物体または視点が動くことで物体の形状が変化・移動し，その変化量や移動量によって奥行きを知覚するメカニズムです．例えば電車に乗って窓から景色を見ている時，対象物体は動かず，視点が移動していることになります．この時，手前にある家は速い速度で移動しているにも関わらず，奥にある高いビルなどはゆっくり動いています．これによって奥行きを知覚しているわけです．
この中でも単眼立体視は少し複雑です(全部複雑ではあるんですが…)．単眼立体視は瞳の焦点の絞り具合から奥行きを知覚します．片目で近くに焦点を当てようとした感覚と，遠くに焦点を当てようとした感覚の違いから奥行きを知覚しています．3次元空間上に無数に配置された像のうち，視点から一定の距離にある像へ焦点を絞っているため，視点から異なる距離にある像の全ては距離に応じてボケていきます．

人は上記3つのメカニズムを無意識に使いこなし，1枚の画像から奥行きを知覚して立体的に物体を見ています．
(ちなみに1枚の画像でも経験則から奥行きを判断する場合もあります．トリックアートがすごいのは，この経験則とメカニズムを逆手にとっているからです．)

ここからは単眼立体視をメインに記述していきます．
理由としては，他2つの立体視よりも像のメカニズムと密接に関係しているからです．
像が何なのか，どうやって像を見ているのかが理解できれば，視覚情報関係の一番低いレイヤーを理解できるということになります．一番低いレイヤーが理解できれば，あとは上へ持ってくだけです！

### 瞳と像
目のメカニズムは単眼立体視のメカニズムに似ています．
自分が見たい焦点位置にある像が，網膜上で結像するように瞳孔を調節して物体を知覚します．また，**像を綺麗に知覚するためには網膜上で像が結像**する必要があります．
![スクリーンショット 2018-12-10 12.39.15.png](https://qiita-image-store.s3.amazonaws.com/0/324781/401c924b-c1c7-8f1f-2cc5-2ec8ee00d3bf.png)
上の図は焦点位置とその像から射出される光線がどのようになっているのかを示したものです．
- 図上部は焦点位置が瞳に近いときの結像の様子です．瞳の領域いっぱいに光線が入射し，網膜上で像が結像しています．このとき光線は**開散光**です．
- 図下部は焦点位置が瞳から遠い時の結像の様子です．図上部と同様に瞳に光線が入射しますが，焦点位置が無限に遠い場合はほぼ**平行光**となります．
上記から，目のメカニズムは**「目に入射する開散光~平行光が作る像を知覚している」**ということになります．

焦点位置に無い像はどのように見えるかについてですが，当然ですがボケます．瞳の焦点に合っていない距離に存在する像は，瞳を通って結像することなく(または手前で結像して)網膜に入射します．
![スクリーンショット 2018-12-10 12.28.22.png](https://qiita-image-store.s3.amazonaws.com/0/324781/6754a675-a186-602f-1285-af0e7280b48e.png)
上の図は，像の位置と焦点位置による見え方について示したものです．
- 図上部は焦点位置より遠い位置の像が網膜上にどのように入射するのかを表した図です．瞳に入射した光線は網膜で結像することなくボケの領域となってしまいます．
- 図下部は焦点位置より近い位置の像が網膜上にどのように入射するのかを表した図です．瞳に入射した光線は網膜の手前で結像し，もう一度開散光になってボケの領域となってしまいます．

上記2つの図からわかる通り，**開散光〜平行光は瞳によって収束光へ変換されて網膜上で結像**します．したがって，収束光自体を瞳に入射させるとより収束する光となってしまうため，網膜の手前で結像してボケてしまいます．開散光〜平行光は知覚できますが，収束光が知覚できないのはこのためです．

### 上記メカニズムを用いた視覚情報提示デバイス
#### ディスプレイ
このメカニズムを用いたデバイスは多々ありますが，一番メジャーなのはディスプレイでしょう．ディスプレイは，1つ1つのピクセルから色情報を持って開散光が射出されます．ディスプレイは平面なので，ディスプレイに焦点を合わせればディスプレイが提示する画像を知覚することができます．上記2つの図の「焦点位置」をディスプレイに置き換えればわかりやすいかと思います．スマホもHMDもディスプレイなので，知覚メカニズムは同じです(HMDはこれに加えて視差式/運動立体視ができます)．ディスプレイ単体では奥行きもなく(平面であり)動かないため，経験則以外で奥行きを感じることはできません．ようするに，単眼立体視はできません(ディスプレイは平面なので，それぞれのピクセルまでの焦点距離がほぼ同じだからです)．
#### プロジェクタ
また，他にメジャーな視覚情報提示デバイスとして**プロジェクタ**が挙げられます．プロジェクタの動作原理は非常に特殊で，完璧に理解するのは難しいと思います(投影方式の話ではなく，なぜ画像が見えるのかの話です)．**プロジェクタ自体は収束光を投影**しています．さきほど言いましたが，人の目は開散光〜平行光までしか知覚できません．ではなぜ収束光を投影するプロジェクタの画像を知覚できるのでしょうか？答えはスクリーンです．スクリーンに投影された収束光は表面で拡散反射し，開散光となって観察者の瞳に入射します．これによって，収束光→開散光の変換がなされ，人の目で見ることができるようになります．なぜ収束光をわざわざ射出するのか？という点についてですが，理由は様々はありますが，わかりやすいものの1つとして挙げられるのは「画像のピクセル情報を保つため」です．収束光はスクリーン上の1点で結像し，そのまま開散光となるため，とある1点のピクセル情報は欠落することなく，且つそこから射出された開散光を瞳に入射させることができればどの位置にいる観察者もほぼ同じ画像を見ることができるわけです．プロジェクタはかなり高度なことをやっていて，光学技術の結晶といえるデバイスでしょう．

# 網膜投影
ここまでわかれば，網膜投影が一体何なのかが簡単にわかると思います．一言でいうと，
**「見せたい画像を開散光〜平行光に変換して瞳に射出する」**
ということです．いったいどうやって！？というのはさておき，やっていることは非常に単純なんです．それは目のメカニズムの低いレイヤーがなんとなく分かってきているからです．ただ，ここから上のレイヤーへ上げていき，具体的なデバイスに落とし込むことが非常に難しいです(研究っていうのはそういうものです)(プロジェクタとかね！)．

### 見せたい画像と開散光〜平行光に変換する素子について
いったいどうやって！？と思っている人を放置するわけにはいかないので，HOWについて少〜しだけ記述します．動作原理等を全て書くと，100ページくらいの論文になってしまいます．

#### 再帰性反射
私は再帰性反射と大親友になれるくらいの学部生・院生生活を送っていました(笑)．
再帰性反射とは，道路標識や自転車の反射板のように，**光線を光源方向へ返す**性質のことをいいます．この性質を持つ素子を再帰性反射材(Retroreflector)といいます．なぜこいつを使うと見せたい画像を開散光〜平行光に変換できるのでしょうか？
![スクリーンショット 2018-12-10 13.55.08.png](https://qiita-image-store.s3.amazonaws.com/0/324781/df1a12e2-073e-39db-befc-714535242aee.png)
上の図は再帰性反射材の動作について示したものです．読んで字のごとく，光線を光源方向へ返しています．超シンプルですね！しかしこいつは無限の可能性を秘めています…！

ここで一度平面鏡(ただの平面の鏡です)の動作原理について説明します．
![スクリーンショット 2018-12-10 14.27.34.png](https://qiita-image-store.s3.amazonaws.com/0/324781/da869fe8-6880-e086-eb08-20b74c2c2c7c.png)
上の図は鏡に入射する収束光と開散光について示したものです．図の左部が収束光，図の右部が開散光です．**鏡は入射光を入射角と同じ角度で射出**します．したがって，収束光は収束光のまま射出(鏡で折り返されて結像)し，開散光は開散光のまま射出(鏡で折り返されてもされなくても結像しない)します．

しかし，再帰性反射材はどうでしょうか．
![スクリーンショット 2018-12-10 14.36.17.png](https://qiita-image-store.s3.amazonaws.com/0/324781/0a9144dc-c463-5e57-49cf-1910ea9eb6cf.png)
上の図は，平面鏡のときの動作図と同じように左部が収束光を入射させたとき，右部が開散光を入射させたときです．平面鏡の時とは異なる反射の仕方をしていますね．収束光→開散光に，開散光→収束光に変換しています．すごい！

上記から，**再帰性反射材はプロジェクタのスクリーンのように，収束光を開散光に変換することができる**ようになりました．これによって，**再帰性反射材＋プロジェクタ**で同じような動作を得ることができます．
しかしながら，「ん…待てよ…これじゃただのスクリーンと同じじゃないか！」と思われていると思います．
再帰性反射材とスクリーンの大きな違いは，拡散反射するかしないかの違いです．スクリーンはただの壁なので，もちろん拡散反射します(収束光は飛び散りますが，拡散反射光の中には開散光も含まれます)．しかし，再帰性反射材は光線を光源方向へ全て返すので，拡散反射しません．綺麗な開散光として射出します．これによって，観察者はとある一点でしか像をみることができません．要するに，スクリーン＋プロジェクタのように皆でわいわい見ることはできません．ではなぜ再帰性反射材＋プロジェクタをわざわざ説明したのかというと，**光線束**の量が違うからです．スクリーンでは，入射光が拡散反射して使わなくなった反射光が大量に生成されてしまいますが，再帰性反射材の反射光は全て光源方向へ変えるため，設置したプロジェクタの瞳の位置に光線束が全て戻ってきます．したがって，プロジェクタの瞳をそのまま直接覗き込むレベルで明るい画像を得ることができます．
これらによる利点は，プロジェクタを小型にすることができる，ということです．従来のプロジェクタの光線束は数千ルーメンほどありますが，直接目に入れる光線束は1ルーメンでも明るすぎるくらいです(出力は1/10000で十分ということになります)．
ここまでをまとめると，再帰性反射材が透過率を持ち，プロジェクタを省電力かつ小型にできれば，ARに使える小型のHMDができるということになります．

以上から，人の目で見ることができるような開散光を生成し，画像を知覚させることができるメカニズムのことを**網膜投影**といいます．再帰性反射材をそのまま使うと観察瞳をプロジェクタの瞳とまったく同じ位置に置かなければならないので，通常は半透過鏡で折り返したり，**再帰透過**という超すごい技術を利用したりします(再帰透過は本当にすごい光学系なので是非調べてみてください)．

# 網膜走査
網膜走査は網膜投影より上のレイヤーなので，網膜投影がわかればすぐに理解できると思います．
**網膜走査は平行光(レーザー)を用いた網膜投影**です．レーザーは結像しない代わりに非常に細く，狭まったり広がったりしないので，網膜に入射させることができれば小さい1点として知覚することができ，像を見てる感覚とほとんど同じになります(メカニズムは全然違うよ！)．

動作原理は非常に単純で，瞳の中心部分に平行光を全て通し，網膜上に直接画像を描きます．瞳の中心1点を通る平行光は収束光/開散光のどちらにも変換されず，平行光のまま射出されます．**マクスウェル視**とほとんど同じなので，興味のある方は調べて見ると面白いと思います．

# まとめ
- 人の目は平行光〜開散光が作る像を知覚することができます．
- これを利用した視覚情報提示デバイスとして，ディスプレイやプロジェクタが挙げられます．
- プロジェクタは非常に高度な光学系を用いたデバイスです．
- 網膜投影は再帰性反射とプロジェクタを組み合わせたメカニズムです．
- 網膜走査は平行光で網膜上に直接画像を描くメカニズムです．

# さいごに
この記事をここまで読んでいただき，ありがとうございます．
今回は目のメカニズムから，それを利用した網膜投影・網膜走査について触れました．
正直かなり端折っていたり，わかりやすく説明するために嘘っぽいことを書いています．
この辺の光学について詳しく知りたい方は，Retroreflector, Retrotransmitter, Maxwellian-view optical systemなどで調べてみると幸せになれると思います．

個人的に，知覚メカニズムを全て配慮したレイトレーシングとかやってみたいなぁと思ったりしてます(笑)．
ボケも全て完全に再現できるし，視線追跡や瞳孔検出ができれば，単眼立体視をディスプレイでできるかもしれないですね．