2009年9月23日

ゲームカレッジの授業紹介「ゲームプログラム」

ゲームカレッジの授業紹介「ゲームプログラム」

プログラム専攻2年生の授業「ゲームプログラム」では後期も引き続き、リアルタイム3DCGの実装を中心に、ゲーム作りに必要なプログラミングについて学んでいます。

今回の授業はピクセルシェーダを使ったシェーディング(※)の実習です。

コンピュータやゲーム機の画面は30万〜200万程度のピクセル(画素)からなっていますが、最新のゲーム機ではピクセルシェーダの機能を用いて、そのピクセル一つ一つに高度な処理を施せるようになっています。

今回の授業はその技術の実習です。

※シェーディング・・・3DCGにおいてポリゴンなどの明るさを計算で求めて陰影付けを行う方法、一般的には光線の方向と面の向きから明るさを求めます。

 

ノーマルマップ

下の図2を見てください。立体的に見えますが、実は図1の画像を加工して立体に見せかけているだけなんです。

border=0border=0
図1.準備した画像図2.表示結果

これはノーマルマップと呼ばれる手法で、テクスチャマッピングの技術を応用して、画面上のピクセル(画素)毎に明るさを計算する方法です。図1のテクスチャ画像上の、各ピクセルの RGB各成分を、そのピクセル位置の面の向きを示す法線ベクトルの(x,y,z)と見なして、ピクセル毎にライティングを行っています。

ポリゴン数を増やさずに、細かい凹凸を表現できるため、市販のゲームでも活用されています。

 

ピクセルシェーダによるシェーディング

一般にポリゴンで構成された3DCGは、滑らかな曲面を表現することはあまり得意ではありません。たとえば、下の図3のポリゴンモデルは、球を表現しようとしたものですが、多面体で表現されているため、球らしく見えません。

border=0border=0
図3.フラットシェーディング図4.グーローシェーディング

ゲーム機ではこの問題を解決する為、10年以上前から、グーローシェーディングという技術を使って、滑らかな曲線を近似するようにしていました。
グーローシェーディングとは、たとえば四角形の面があった時、その四角形の4個の頂点それぞれに別々の明るさを算出して、その平面上の各画素の明るさが滑らかにつながるように補間させる手法です。

図3のポリゴンモデルをグーローシェーディングを使って表示した結果が上の図4です。

グーローシェーディングは曲面をキレイに見せかけることができますが、照明が極端に強いような場合、図6のようにポリゴンの境目が角張って見えてしまうことがあります。

border=0border=0
図5.グーローシェーディング図6.不自然なライティング

 

ピクセルシェーダによるフォンシェーディング

border=0border=0
図7.フォンシェーディング図8.ピクセルシェーダによる曲面の近似

ピクセルシェーダを用いると、図5のようにポリゴン上の各ピクセルの明るさを頂点の明るさから補間して求めるのではなく、図7のように頂点部分で面が向いている方向から、各ピクセルの向いている方向を求めて明るさを算出できます。

こうすると、図8のようにだいぶ不自然さが解消されます。

この手法を「フォンシェーディング」と呼びます。

 

卒業までに

最終学年の後期となり、学生生活も残り少なくなってきました。
最大限学習を進められるよう、みんながんばっています。



ad131210 at 00:00│ Comments(0)TrackBack(0)