第36回 コンピュータの並列処理とバス幅の増大前田真一の最新実装技術あれこれ塾(2/3 ページ)

» 2015年06月03日 10時00分 公開
[前田真一MONOist]

2.3Dグラフィックスの演算

 ここで、3Dグラフィックスの理論について考えてみます。なお、参考資料、および説明の図としては、参考文献(記事末)から引用しました。

 グラフィックスの基本はフレームワーク演算とレンダリングです。フレームワークというのは物体の外形を多くの直線で近似した図形です(図2)。

図2:簡単な図形(円すい)のフレームワーク

 人間など、複雑な形状ではこの直線の数は必然的に多くなります(図3)。

図3:人形のフレームワーク

 レンダリングはフレームワーク画像の線と線の間を補完して、詳細なグラフィックを作成すると同時に光線や影の影響を考慮して、表面色を塗ることです。図形の基本を決めるのはフレームワークとなります。直線は始点と終点の2つの点の座標で表せます。フレームワークによるグラフィックス演算は各点の座標計算を行うことになります。3Dグラフィックスですから、各点の座標は(X、Y、Z)の3次元座標で定義されます。

 ここで、座標の時間変化による移動演算を説明します。

 移動前の座標を(x、y、z)、移動後の座標を(X、Y、Z)とします。

 図形の平行移動(図4

図4:図形の移動

 (x、y、z)⇒(X、Y、Z)

 X=x+L

 Y=y+M

 X=z+N

 拡大、縮小(S倍)(図5

図5:図形の拡大・縮小

 X=xxS

 Y=yxS

 X=zxS

 次にある点を中心に、図形が回転する場合には、回転の中心からの局座標で表します。

 x平面、y平面、z平面を基準として、θ1がθ2だけ平面回転について考えます。例えば、z平面を固定した(x、y)平面では、移動前の点P1(x、y)の座標は局座標で

 x=rcos(θ1)、y=rsin(θ1)

で表現できます。この時、P1がθ2回転したP2(X、Y)の座標は

 X=rcos(θ1+θ2)、Y=rsin(θ1+θ2)

で表せます(図6)。

図6:局座標

 この時、

 r=√x2+y2、θ1=tan−1(y/x)

 X=xcos(θ2)−ysin(θ2)

 Y=xsin(θ2)+ycos(θ2)

の関係があります。

 これを、x軸、y軸、z軸に拡張すれば、フル3次元の回転となります。

 P1(x、y、z)がθ回転した座標P2(X、Y、Z)は、

 x軸回転では、

  X=x

  Y=ycos(θ)−zsin(θ)

  Z=ysin(θ)+zcos(θ)

 y軸回転では

  X=xcos(θ)+zsin(θ)

  Y=y

  Z=−xsin(θ)+zcos(θ)

 z軸回転では

  X=xcos(θ)−ysin(θ)

  Y=xsin(θ)+ycos(θ)

  Z=z

となります。

 同じように透視図も簡単な式で演算できます。z方向の座標 (0、0、1/r)を消点とする1点透視図は

 X=x/(rz+1)、Y=y/(rz+1)、Z=z/(Rz+1)

 で表されます(図7)。

図7:透視図

 レンダリングについても、実は簡単な演算で処理できます。

 光源の方向によって表面の明るさと影を作画しますが、これも簡単な計算で実現できます(図8)。

図8:光源と影

 難しそうな3次元グラフィックスも実はこのような非常に簡単な計算で実現できるのです。

 しかし、3Dグラフィックスの問題点は実は、計算すべきデータの量に問題があります。物体をできるだけリアルに表現しようとすれば、ワイヤフレームのワイヤの数を多くする必要があります。物体の質感をリアルに表現しようとすれば、レンダリングを細分化して施す必要があります。究極は、ディスプレーの分解能だけの画素(ピクセル)に対して、おのおのレンダリング計算を行います。

 このように非常に簡単な演算を膨大なデータに対して行うためには、1つの高機能CPUで処理するよりも機能は小さくても多くのプロセッサで並列処理した方が効率的です。

 この構想で設計された代表的LSIにはSONY、IBM、東芝がPS3のために開発したCellがあります(図9)。

図9:Cell Broadband Engine(from IBM)

 Cellは64ビットのPPE(Power Processor Element)と呼ばれるCPUと8個のSPE(Synergistic Processor Element)と呼ばれるコプロセッサからなっています。このSPEは1度に4つの演算を行い、32のグラフィック演算を並列処理できます。このCellは当時の一般的CPUに比べ、10倍以上のグラフィック処理能力があったため、並列グラフィック処理が注目されました。しかし、この多くのコプロセッサは同時処理的に多くのメモリとデータの授受を行う必要があります。このため、多くのメモリを搭載し、多くのバスで、データを転送する必要があります。これが、PS4やXbox Oneが256ビットものメモリバスを持っている理由です。もちろんコプロセッサだけではシステムにはならず、高機能なメインCPUがコプロセッサをコントロールする必要があります。

 カーレースのゲームを例に考えます。メインCPUはコンソールからの入力で次に車が取る位置と角度を計算し、コンピュータがコントロールしている他の車との位置関係を計算し、車から見える周囲の景色を計算します。そしてその情報がグラフィックコントローラーへ伝えられ、画面が表示されます。

Copyright © ITmedia, Inc. All Rights Reserved.