ホログラムの世界

Team:夏の思い出はカシオレ

ホログラムとは?


「3Dホログラムスマホスクリーン」のような映像投影装は3Dホログラムと呼ばれることが多くなっている。厳密には立体映像ではないため、ホログラムと呼ぶのは正しくなく、あたかも空中に映像が浮いて見えることから、疑似ホログラムまたは空中投影と呼ばれることもある。その現象は、ハーフミラーの性質が起こす。
ハーフミラーは、光を通過する性質と反射する性質の両方を持ち合わせている。擬似ホログラムは背景の様子を透過し、スマートフォンの画像を反射し、観察者に重ねて見せている。
その結果、観察者はあたかも画像がハーフミラーの位置に浮いているように見えるわけである。


ホログラムの具体例


<ライブやコンサートの再現>
海外の有名アーティストのライブを3Dで撮影することで、日本でもそのライブを上映したり、亡くなったアーティストのコンサートを再現することに活用されている。

<プロモーション広告>
渋谷・新宿などにある大きなディスプレイ広告にも使われている。今までの2Dディスプレイ広告では見る角度を変えると平面間があったが、3Dホログラムの場合、どの角度からでもはっきりと映像を見ることができるようになった。


ホログラムの原理


3Dホログラムの原理を簡単にいうと、透過するフィルムや幕、ガラスなどに反射させ、映像を映し、立体的にみせる技術である。
その現象は、ハーフミラーの性質が起こす。ハーフミラーは、光を通過する性質と反射する性質の両方を持ち合わせている。擬似ホログラムは背景の様子を透過し、スマートフォンの画像を反射し、観察者に重ねて見せている。
その結果、観察者はあたかも画像がハーフミラーの位置に浮いているように見える。
以下の図は、2Dホログラムの説明である。(図の背景は無視するものとする。)


図1 2Dホログラム


3Dホログラムはどの角度から見ても、立体的に見える必要があるため、3Dにするには、図2のように透明な反射フィルムを360°に増やすことが必要がある。よって、3Dホログラムは、透明なフィルムを4枚くっつけて、360°覆える形にしたものである。


図2 台形のハーフミラーを4枚くっつけて作られた3Dホログラム


CGの原理


映像作成する上でプログラムを作成したが、元となる原理を以下で紹介する。


変換式
3次元空間内の立体あるいは曲面をコンピュータの画面上に描くためには、3次元空間を2次元平面であるコンピュータ画面に写す変換式をまず用意しなければならない。この変換式は、描こうとする立体あるいは曲面を2次元平面にどんな方法で表現するかその表現法によって定まるが、3次元空間を最も自然にコンピュータ画面に正射影して表現する方法をとる。 3次元空間に直角座標を定めると空間内の点にはその座標(x,y,z)が対応する。また、この3次元空間内の平面であるコンピュータ画面には2次元の直角座標を定めることができる。
この画面上の点の座標を表すのに (u, v) を用いることにする。
3次元空間内の点P(x,y,z) をコンピュータ画面 (これをαと名付ける) に正射影することは,、点Pからαに垂線を下ろしたときのαとの交点Q(u, v) をPに対応させることになる (図3.1 参照)。したがって、ベクトルPQはαに直交する。3次元空間の原点(0,0,0) が αにのっていれば、αはa*x+b*y + c*z = 0。(*は積を表し、 a,b,c は a*a + b* b + c*c = 1 をみたす定数である)と表される。すなわち、α の点(x,y,z) は上式をみたすことになる。したがって、αと直交するベクトルは(a,b,c) と (-a, -b, - c) であるから、ベクトルPQはこのいずれか一方の正数倍となる。そのベクトルが(-a, -b, - c) であるとすると、視線の方向を (-a, - b, -c) と定めて無限の彼方から点Pを見てαに写るPの像Qを対応させることが正射影であると言うことができる。



そこで,視線の方向ベクトル (-a,-b,-c) の逆方向ベクトル (a,b,c)を極座標を使って表すと以下の式になる。 (図3.2 参照) \[ (sin(\theta)*cos(\varphi),sin(\theta)*sin(\varphi),cos(\theta)) \]


今後、この sin (θ),cos (θ) をそれぞれ ST, CT と書き、また sin(φ), cos (φ)をそれぞれ SP, CP と書くことにする (S は sine の頭文字、C は cosine の頭文字、T は theta の頭文字、P は phi の頭文字)。 さらに、積ST * SP,ST*CP, CT * SP, CT * CP をそれぞれ STSP, STCP, CTSP, CTCP とする。 したがって今後は、視線の逆方向ベクトルを \[ (STCP,STCP,CT \tag{1}) \] と表す。
このとき、描こうとする立体あるいは曲面をコンピュータ画面に正射影する場合の変換式は \[ \begin{eqnarray} \left\{ \begin{array}{l} u = -SP*x+CP*y \\ v = -CTCP*x - CTSP*y +ST*z \end{array} \right. \end{eqnarray} \tag{2} \] である。行列式を使って変換(2)を \[ \begin{bmatrix} u\\ v \end{bmatrix} = \begin{bmatrix} -SP & CP & 0\\ -CTSP & -CTSP & ST \end{bmatrix} \begin{bmatrix} x\\ y\\ z \end{bmatrix} \tag{3} \] と表すこともできるが、この変換はいわゆる線形変換であり、3次元空間(x,y,z) 内の直線を (u, v) 平面上の直線に写す。


描くべき立体あるいは曲面上の点P(x,y,z)は変換(2)によってコンピュータ 画面上の 点Q(u,v) に写るから、この点Qをコンピュータ画面上にマークすれば点Pを描いたことになる。ここでは、描こうとする曲面上にいくつかの曲線Γ(ガンマ)を描くことによって描こうとする曲面を表現している。この曲線Γを描くことは、変換(2)によるΓの像をコンピュータ画面上に描くことになる。一方、曲線Γ上の点を順次線分で結んで得られる折れ線でもってΓを近似的に描くことにする場合この折れ線の変換(2)による像 (これも折れ線)をコンピュータ画面上に描いて曲線Γを表現することになる。


プログラミング言語
前節の変換(2) で決定される折れ線をコンピュータ画面に描くために、 その折れ線を描くようコンピュータに命令しなければならない。そのために、命令文の集まりであるプログラムを作成してコンピュータにその命令を実行させる。