3Dテレビへの出力


年度末にSONY BRAVIAの3Dテレビが届きました.超高次元可視化とその対話的操作についての研究に関連して用意したテレビです.現在,研究中の超高次元可視化では社会ネットワークを元にした点と線から構成されたような関係性,あるいは表のような多次元データを対象としています.このようなデータを超高次元空間に配置するのですが,どの程度の高次元かというと,ぼくらが暮している三次元空間に対して,大きな場合は5,000次元くらいを扱っています.もちろん,人間は三次元空間しか視認できないので,それを直接観察することはできません.そこで,これを三次元空間に映した影のようなものを見せているわけです.

何を言っているかわかりませんね.細かい理屈は抜きに雰囲気を知りたい人はこのビデオ集を眺めて下さい.ビデオを見て,もっと詳しく学びたくなった方は論文を送りますのでリクエストをお願いします.

要するに,ぼくらが提案している可視化技術では複雑なデータを超高次元に配置したものを,三次元に投影しつつ観察するのですが,普通のディスプレイでは二次元の映像しか出せません.本当は超高次元をそのまま観察したいのですが,そのアイデアが天から降ってくるのは先のことになりそうなので,ほんの少しでも超高次元の世界に近づきたいと思って三次元テレビに出力したかったのです.

三次元テレビに出力するには立体視可能な形式の画像をテレビに出力する必要があります.民生品の3Dテレビがあるんだから,手にはいればなんとかなるだろうと思っていたのですが,情報が少なくてちょっと苦労しました.

映像を出力するには,大きくわけて二通りあるようです.

  1. 三次元映像に対応したグラフィクスカードを用いる.お金持ちのコースです.

    Nvidia は Quadro というグラフィクスカードのシリーズを出しています.民生品ではないので,やたらに高くて,最高級品は50万円くらします.テレビよりも高いです.Quad バッファリングという技術を採用しているために高価なのです.CG映像を滑らかに描画するために一般的にダブルバッファリングという技術が利用されますが,立体視の場合,左右一対の目のために独立した絵を作る必要があるために,ダブルバッファリングのさらに倍のQuadバッファリングが必要になるのです.

    仮にQuadroシリーズを購入したとしても,ぼくらには二つの障害が残ります.まず,QuadroはMicrosoft DirectX (Direct3D)には対応するのですが,ぼくらの開発基盤として利用しているOpenGLに対応していないのです.(なんで,業界標準に対応しない!)

    もうひとつの障害は,Quadroの出力がDisplay portは持っているものの,HDMIに対応していない点です.もしかしたら,変換ケーブルとか使ってなんとかなるのかもしれませんが,ぼくとしてはそんなリスクを負いたくありません.

  2. 普通のグラフィクスカードを用いてなんちゃって三次元映像を出力する.貧乏人のコースです.

    3Dテレビにはいくつかの3Dモードがあって,ちょっと特殊だけど普通の画像を送ると,それを3D画像と解釈して立体表示をしてくれます.ぼくが今回利用した左右分割方式では,テレビの全画面を用いた大きな画像を左右に二分割し,左側に左目の画像を,右側には逆の右目の画像を提示するのです.

以下がこのために用意した画像です.左右でよく似ているけれども,微妙に異なるのがわかりますか?器用な人は裸眼立体視できるので試してみて下さい.

立体視のために用意した画像

さて,3Dテレビを左右分割方式の3Dモードに設定すると,それぞれの画像は横方向に二倍に引き伸ばされて重ねて表示されます.

3Dモードで表示されたトーラス

これはなんじゃと思うかもしれませんが,3Dテレビに表示された画面を3Dメガネをつけて眺めると立体的に見えるのです.

普通の画面出力をしていた OpenGL のプログラムを立体視用に修正するのは簡単でした.元々,ひとつ設定していなかった視点を左右両眼に対応した二つとして扱い,左の視点から見た画像を画面の左側に描画し,別の視点から見た画像を画面の右側に描画するだけです.たとえば,こんな感じ

ということで,貧乏コースの場合,必要な機材は3Dテレビくらいです.お手軽に立体映像を作ることができます.この方法の難点は,画像が横方向に二倍に拡大されてしまうので,ちゃんと対応しないと横に太った絵になってしまうことに加え,この拡大操作のためにテレビの画面解像度の半分の画像しか表示できません.

どちらの問題もきちんと3D信号を出してやれば対応可能なはずです.少し試行錯誤した限りでは,うまくいっていません.