風景の全てを光のデータとして表現する方法


前回までの記事で、裸眼3Dが目指している先にあるもの、として、視点数無限大の3Dディスプレイ、というものを考えてきた。
それは、空間中を伝播する光のデータを丸ごと記録して、それを再生する事のできる3Dディスプレイで、もし実現できれば自然の風景を見ているのとまったく同じ体験を、ディスプレイを通してできるようになる。光線の全てが再現されているので、両眼の視差はもちろん、目の網膜上でも視差が再現され、見る人がディスプレイ上だけでなく、その手前や奥にも自由に目の焦点をあわせることができ、そこにきちんと像が見える。これぞ究極の3Dディスプレイ。

ここでは、これまでさらっと述べてきた、「空間中を伝播する光のデータ」というのがどういうものかをちょっと説明してみる。

風景とは何か?

さて、やりたいのは自然の風景を見るのとまったく同じことをディスプレイ上で再現してやるために、まずその風景のデータを記録する事。どうやったら実現できるか考えるために、そもそも風景って何だ?というところから考えてみる。
たとえば、窓越しに山の風景をみているとき。このとき、山に当たった光が反射して、窓を通って自分の目に飛び込んできている。窓を通って入ってきた光を目で受け止めることで、その光の色が認識できて、それが山の風景として認識される。ようするに、窓から入ってきた光こそが山の風景なんだ、と考える事ができる。
で、山の風景は今自分が立ってる位置だけから見えるわけじゃなくて、ちょっと立ち位置を変えても窓越しに見る事ができる。そこからの山の見え方はもとの場所とはちょっと違った見え方になる(視差があるということ)。また、自分が見る方向を変えた場合も、また違った見え方の風景が見える。
こんな感じで、位置を変えたり向きを変えたりするとそれにあわせて風景も変わるわけで、これら全部ひっくるめて山の風景だ、といえる。その風景全てが光として窓を通ってきている。だからこれを全部記録しようと思ったら、窓を通ってきた光を全て、ひとつ残らず記録してやればいいわけだ。

風景全てをデータにするには?

じゃあ、窓越しの山の風景の全てをデータとして記録するにはどうすればいいか?
ふつう風景をデータとして記録する場合はカメラを使って画像データを取得する。ただし、この場合記録されるのは窓を通って入ってきた光のうち、カメラを置いた位置から見えるぶんの光だけ。カメラの位置を変えたら見える風景が少し変わるので、それも全て取得してやりたい。そこで、カメラの位置を変えながら、位置ごとに画像データを記録していく。そうすると、窓を通ってきた光のうち、全ての位置でのデータを記録できる。さらに、カメラがどっちを向いていたか?も考える。カメラを向けた方向によって違う風景が見えるわけだから、それも含めてやらないといけない。
こうやって、カメラの位置と方向を少しずつ変えながら画像データをどんどん記録していくと、最終的に窓越しの風景の全てをデータとして記録する事ができる。

データをどうやって記述する?

これで一応、風景すべてのデータが取得できそうな感じになったけども、このままだとただの大量の画像データなので、これを整理する事を考える。
風景全てのデータはようするに、位置と方向をパラメータとして持っている画像データだ。位置がx,y,zの3次元で、方向がθ、φの2次元なので、計5次元のデータとして表せる。
ここで、光の色はその光が進む方向においては一定だということにすると、位置の3次元のうちz座標をどこかに固定して省くことができて、結局x、y、θ、φの4次元データになる。で、z座標を窓に固定して、窓の平面上にx,y座標をとるようにする。
さらに、取得した画像のそれぞれの画素は、それぞれ違った方向から飛んできた光を受け取ったものなので、画素ごとにθ、φが決まってる。わざわざカメラをいろんな方向に向けなくても、正面だけ向けておけば、いろんな方向のデータが取得できている事になる。
こう整理して考えると、窓の平面上の座標(x,y)の位置にカメラを置いて画像データを取得すると、座標(x,y)を通る光のうちカメラの画角できまる方向θ、φのデータが取得できる事になる。ということはつまり、窓の平面上にカメラを置いて、ちょっとずつ位置を変えながら画像を取得していけば、窓越しの風景の全てをデータとして記録できる、ということ。言い変えると、窓を通ってくる光の全てを取得できる、ということ。
これがようするに「空間中を伝播する光のデータ」となる。裸眼3Dの目指す未来 - あんだあどらいぶでちらっと書いたLight Fieldというやつは、基本的にはこの考え方にのっとって、空間中の光をデータとして記述するものだ。

そのデータどうやって使うの?

こんな感じで、風景の全てのデータを、窓を通過してくる光のデータで記録できる。取得したx、y、θ、φの4次元データをもとに視点数無限大の裸眼3Dディスプレイに表示してやると、自然の風景を見ているのとまったく同じ状態をディスプレイ上に再現できる、というわけ。

ちなみに、この4次元データの使い道は3Dディスプレイだけじゃない。例えば4次元のうちxとyを固定してデータを取り出せば、座標(x,y)の位置にカメラを置いたときのデータを普通の2次元画像として取り出せる。さらにθとφの範囲を広げたり狭めたりすれば、カメラのレンズを広角にしたりズームにしたり、という操作を再現できる。また、この4次元データを入力としてレンズの光学特性(絞りやら焦点距離やら)をシミュレートしてやれば、被写界深度がどのくらいだとか、どこに焦点をあわせただとか、そういうことまで再現して画像データとして取り出すことも可能だ。こちらでやっているのはようするにそういうことだ。
さらにさらに、3次元空間中の任意の場所にカメラを置いて撮影する事を考えるとき、そのカメラのレンズに入ってくる光と4次元データの幾何学的な関係を計算してやれば、窓の平面上以外にカメラを置いたときの画像も取り出すことができる。空間中の任意の位置から任意の方向を任意のレンズ越しに撮影した画像データを自由自在に取り出すことができる。カメラ2台分のデータを取り出せば、メガネ式3Dディスプレイ用のデータだって取り出せる。こういうのをイメージベースドレンダリングと言ったりして、現在よくある3Dモデルを作ってレイトレースでレンダリングする3DCGに代わるものと、一部では期待されている。

まとめ

「空間中を伝播する光のデータ」がどうやって表現されているかを説明してみた。それは、カメラを使って画像をたくさん取得して、4次元データとして整理したものだ。4次元データから必要なものを取り出してくれば、好きな位置、方向、レンズの画像データを自由自在に取り出せる。現在、徐々に実現されつつある、非常におもしろい技術である。




Light Field Sampling (Synthesis Lectures on Image, Video, and Multimedia Processing)
Zha Cheng Tsuhan Chen
Morgan and Claypool Publishers
売り上げランキング: 390766