説明

グラフィックスプロセッサおよび描画処理方法

【課題】一つのシーンを複数の視点から見た場合の描画処理を効率良く行うことは難しい。
【解決手段】グラフィックスプロセッサ100は、頂点シェーダ10とラスタライザ20を含む。頂点シェーダ10は、ワールド座標系で表現された3次元空間内のオブジェクトの座標情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合のプリミティブの頂点情報を生成する。ラスタライザ20は、頂点情報にもとづいてプリミティブをラスタライズしてピクセルを生成する際、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明はグラフィックスプロセッサおよび描画処理方法に関する。
【背景技術】
【0002】
3次元コンピュータグラフィックスでは、一般的に3次元空間のオブジェクトを多数のポリゴンにより表現するポリゴンモデルが利用される。ポリゴンモデルの描画処理において、光源、視点位置、視線方向、物体表面の反射率などを考慮してポリゴン表面に陰影をつけるシェーディングが行われる。また、写実性の高い画像を生成するために、ポリゴンモデルの表面にテクスチャ画像を貼り付けるテクスチャマッピングが行われる。
【0003】
また、金属やガラスなどの表面には周囲のオブジェクトが映り込むが、このような映り込みを描画する場合も、環境マッピングにより周囲の環境を金属などのオブジェクトの表面にマッピングする方法が取られる。
【発明の開示】
【発明が解決しようとする課題】
【0004】
周囲の風景が静止している場合は、周囲の風景をテクスチャとして金属などのオブジェクトの表面にマッピングするだけでよいが、周囲にあるオブジェクトが動く場合は、周囲の風景をいったん描画してテクスチャとして用意してからでなければ環境マッピングを行うことができない。たとえば、環境マッピングの一例としてキューブマップを使用する場合、視線方向を上下、左右、前後に変えて、周囲にあるオブジェクトの座標系をワールド座標系からビュー座標系に変換して、6方向にカメラを向けた場合の描画を行い、その描画結果をテクスチャとして利用して、金属などのオブジェクトの表面にキューブマッピングすることで、映り込みを表現する。
【0005】
しかしながら、このように視線方向を6方向に変えて描画する場合、ワールド座標系に配置されている周囲のオブジェクトのポリゴン情報を6回繰り返し入力して、頂点シェーダ、ラスタライザ、フラグメントシェーダによる一連の描画処理をすることになる。同一シーン内の周囲にあるオブジェクトを視線方向を変えて描画しているだけであるのに、オブジェクトのポリゴン情報の読み込みを繰り返したり、周囲のオブジェクトに貼り付けるテクスチャの読み込みを繰り返すのは効率が悪い。
【0006】
本発明はこうした課題に鑑みてなされたものであり、その目的は、視点位置および視線方向の少なくとも一方を異ならせてオブジェクトを描画するときの処理効率を上げるための描画処理技術を提供することにある。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明のある態様のグラフィックスプロセッサは、ワールド座標系で表現された3次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成する頂点シェーダと、前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するラスタライザとを含む。
【0008】
前記ラスタライザにより生成されたピクセルに対してラスタ演算を実行してフレームバッファにピクセルデータを書き込むラスタ演算部をさらに含んでもよい。前記フレームバッファは、異なる視点毎に設けられており、前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込んでもよい。
【0009】
オブジェクトの表面にテクスチャをマッピングするフラグメントシェーダをさらに含んでもよい。前記頂点シェーダは、表面に周囲環境の映り込みのあるオブジェクトを描画するために、周囲環境内の他のオブジェクトのポリゴン情報の入力を受けて、視線方向が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へ周囲環境内の他のオブジェクトの座標を変換することにより、周囲環境内の他のオブジェクトを異なる視点から見た場合における当該周囲環境内の他のオブジェクトを構成するプリミティブの頂点情報を生成してもよい。前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことにより、異なる視線方向毎に周囲環境のテクスチャを生成してもよい。前記フラグメントシェーダは、前記周囲環境のテクスチャを当該映り込みのあるオブジェクトの表面にマッピングしてもよい。
【0010】
本発明の別の態様は、描画処理方法である。この方法は、グラフィックスプロセッサによる描画処理方法であって、ワールド座標系で表現された3次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとを含む。
【0011】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0012】
本発明によれば、オブジェクトの描画処理の効率化を図ることができる。
【発明を実施するための最良の形態】
【0013】
本発明の実施の形態の描画処理技術の概要を説明する。視点位置および視線方向の少なくとも一方を異ならせて、同じシーンにおける3次元仮想空間に配置されたオブジェクトを描画する。共通のワールド座標系でポリゴンの座標情報が与えられたオブジェクトの描画処理は、グラフィックスプロセッサの前段の頂点のジオメトリ処理においては視点位置や視線方向に依存するが、後段のピクセルカラーを決定するピクセル処理や使用するテクスチャは視点位置や視線方向に依存しないことが多い。また、ピクセル処理が視点位置や視線方向に依存する場合でも、視点位置や視線方向を異ならせる度にオブジェクトのポリゴン情報を読み直す必要はなく、同一のポリゴンの頂点に対して、異なるシェーダコードを実行すればよい。
【0014】
そこで、本実施の形態では、ワールド座標系のオブジェクトのポリゴン情報をグラフィックスプロセッサに1回投入するだけで、視点位置および視線方向の少なくとも一方が異なる描画処理を同時に行う。そのために、視点位置や視線方向に依存する処理については、異なる視点位置や視線方向に応じた処理を行うことができる構成が特別に用意され、視点位置や視線方向に関係なく進められる処理については、従来の構成をそのまま使う。
【0015】
図1は、実施の形態に係る描画処理装置の構成図である。描画処理装置は、描画対象となるオブジェクトの3次元モデル情報にもとづいて2次元画面に表示するための描画データを生成するレンダリング処理を行う。
【0016】
メインプロセッサ200は、メインメモリ300からオブジェクトのポリゴンモデル情報を読み出し、オブジェクトの動きをシミュレーションしてオブジェクトの位置を更新し、グラフィックスプロセッサ100にオブジェクトのポリゴン情報を与える。
【0017】
グラフィックスプロセッサ100は、ホストインタフェース(I/F)70を介してメインプロセッサ200からオブジェクトのポリゴン情報を取得し、頂点シェーダ10に入力する。
【0018】
頂点シェーダ10は、メインプロセッサ200から受け取ったオブジェクトのポリゴン情報をもとに、オブジェクトを構成する1つ以上のプリミティブの頂点座標とパラメータを含むストリームを生成する。プリミティブは、3次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位である。
【0019】
ラスタライザ20は、セットアップ部22、コースラスタ部24、Zカリング部26、およびファインラスタ部28を含む。
【0020】
セットアップ部22は、プリミティブのストリームをデジタル微分解析器(Digital Differential Analyzer;DDA)により処理するための各種パラメータのセットアップを行う。具体的には、プリミティブを含む空間を区切るバウンディングボックスの設定や、エッジ係数などDDA処理の各種パラメータの設定を行う。
【0021】
プリミティブは一例として三角形の形状であり、DDAは、3次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、ラスタライン毎に量子化されたピクセルに変換する。DDAにより、プリミティブがピクセル展開され、各ピクセルについて、RGB3原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すZ値、テクスチャ属性を参照するためのパラメータ座標であるUV座標値などを含むピクセル情報が算出される。
【0022】
コースラスタ部24は、セットアップ部22による設定にもとづいて、頂点シェーダ10から取得されたプリミティブの頂点データをDDA処理し、プリミティブをタイルに変換する。ここで、タイルは、ピクセルの矩形集合であり、たとえば、縦横8ピクセルの合計64ピクセルの集合である。コースラスタ部24により、プリミティブはタイルという粗い単位でラスタライズされる。
【0023】
一般に、プリミティブの表面積が大きいほど、そのプリミティブをピクセル化した場合のピクセル数が増える。また、プリミティブが視点から近い位置にあって、プリミティブを高い詳細度レベルで描画する必要がある場合は、プリミティブから生成されるピクセル数は増える。頂点シェーダ10においては、頂点データでプリミティブが表されているため、データ量は少ないが、DDAによりピクセル化処理した後は、ピクセル数が増大し、データ量が増える。
【0024】
そこで、コースラスタ部24によりいったん粗い単位でラスタライズしておき、後段のZカリング部26において、すでに処理済みのピクセルの奥行き方向の位置を示すZ値(デプス(depth)値とも呼ばれる)と比較して、タイルのカリングを行い、カリングされたタイルは後段のファインラスタ部28には渡さないようにする。これにより、既に描画されたプリミティブの背後にあるため、視点から見えないタイルについてはファインラスタ部28による細かい単位でのラスタライズ処理や、フラグメントシェーダ40による描画処理を省略し、処理効率を高めることができる。
【0025】
ファインラスタ部28は、コースラスタ部24によってラスタライズされたタイルの内、Zカリング部26によりZカリングされなかったタイル、言い換えればZカリングテストを合格したタイルを取得し、ピクセルに変換する。ファインラスタ部28により、プリミティブは最小のピクセル単位で細かくラスタライズされる。ファインラスタ部28は、こうしてプリミティブをラスタライズして得られるピクセルをフラグメントシェーダ40に与える。
【0026】
フラグメントシェーダ40は、プリミティブをピクセル単位に分割して得られるフラグメントに対して描画処理を行う。フラグメントシェーダ40は、ラスタライザ20により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値とデプス値を算出する。さらに、テクスチャマッピングを行う場合は、テクスチャのカラー値を合成して最終的なピクセルのカラー値を算出する。
【0027】
ラスタ演算ブロック50は、フラグメントに対してブレンディング、アルファテスト、デプステストを実行し、最終的なピクセルのカラー値を求め、レンダリングの結果をローカルメモリ60に設けられたカラーバッファ64にピクセルデータを書き込む。また、ラスタ演算ブロック50は、各ピクセルのZ値をデプスバッファ62に格納するとともに、Zカリング部26に各ピクセルのZ値を供給する。
【0028】
カラーバッファ64は、ピクセルデータをスクリーン座標に対応づけて格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。カラーバッファ64に記憶されたピクセルデータは、表示装置に出力されて表示される。
【0029】
次に、図2の描画処理手順を示すフローチャートを参照しながら、本実施の形態に特有の構成と動作を説明する。
【0030】
頂点シェーダ10は、ワールド座標系からビュー座標系へ変換するビューイング変換行列にしたがって3次元空間内のオブジェクトの座標を変換することにより、オブジェクトを所定の視点から見た場合におけるオブジェクトのプリミティブの頂点情報を生成する。
【0031】
ここで、「視点から見る」とは、特定の視点位置から特定の視線方向にオブジェクトを見ることを言う。このように、本明細書で「視点」というとき、単に視点の位置を指すだけでなく、視線の方向の意味も含めていることに留意する。ビュー座標系は、視点位置から視線方向にオブジェクトを見たときの座標系であり、視点位置および視線方向を決めることにより、一意に定義される。ビュー座標系は、一般に、視点位置を原点に定め、視線方向をZ軸にとって奥行き方向にZ座標値がプラスになるように定義される。ビューイング変換行列は、ワールド座標系をビュー座標系に変換する座標変換行列である。
【0032】
視点位置の座標を(x0,y0,z0)、注視位置(視点から見ている位置)の座標を(x1,y1,z1)とすると、視線方向を示すベクトル(Dx,Dy,Dz)は、Dx=x1−x0、Dy=y1−y0、Dz=z1−z0により求められる。
【0033】
ワールド座標系における点(x,y,z)をビュー座標系における点(x’,y’,z’)に座標変換するためのビューイング変換行列Wは次のようにして求められる。ワールド座標系XYZについて、Y軸の周りに角度αだけ回転させ、X軸の周りに角度βだけ回転させるとする。このとき次式が成り立つ。
【数1】

【0034】
視点位置から注視位置を見たときの回転行列Rは、次式で与えられる。
【数2】

【0035】
視点位置を原点とするための平行移動行列Tは、次式で与えられる。
【数3】

【0036】
Z軸を奥に向かってプラスになる方向に取り直すために、Z座標の符号を変えるためのスケーリング行列Sは、次式で与えられる。
【数4】

【0037】
ビューイング変換行列Wは、回転行列R、平行移動行列T、スケーリング行列Sの積として、W=TRSで与えられ、ビュー座標系における点(x’,y’,z’)は、
(x’,y’,z’,1)=(x,y,z,1)W
で計算される。
【0038】
本実施の形態では、あるシーンにおけるワールド座標系で表現された3次元空間内のオブジェクトの座標情報の入力を受けて、視点位置(x0,y0,z0)および視線方向(Dx,Dy,Dz)の少なくとも一方が異なる複数のビューイング変換行列Wを設定し(S10)、各ビューイング変換行列Wにしたがってオブジェクトの座標をビュー座標系に変換し、オブジェクトを異なる視点から見た場合のオブジェクトのプリミティブの頂点情報を生成する(S12)。
【0039】
頂点シェーダ10によって生成されたプリミティブには、いずれの視点から見た場合のものであるかを示す視点識別子が付与される(S14)。視点位置は座標(x0,y0,z0)で与えられ、視線方向はベクトル(Dx,Dy,Dz)で与えられる。ベクトル(Dx,Dy,Dz)は、2つの回転角α、βを与えることで決まるから、視線方向は回転角の組み合わせ(α,β)で与えてもよい。異なる視点位置(x0,y0,z0)と視線方向(α,β)の組み合わせにインデックスが付けられテーブルに格納される。このインデックスが視点識別子である。
【0040】
ラスタライザ20は、頂点シェーダ10から視点識別子付きのプリミティブの入力を受けて、プリミティブをラスタライズしてピクセルを生成する(S16)が、その際、各ピクセルには、どの視点(すなわち視点位置および視線方向)から見た場合のプリミティブから生成されたものであるかを識別可能にするため、この視点識別子を付ける(S18)。ラスタライズ段階で視点識別子を付けるのは、コースラスタ部24の役割である。コースラスタ部24は、プリミティブをタイルに変換する段階でタイル内のピクセルにこの視点識別子を付ける。
【0041】
ラスタライザ20内では、セットアップ部22、コースラスタ部24、およびファインラスタ部28は、視点の違いに関係なく、ラスタライズ処理を進めることができる。一方、Zカリング部26は、視点によって奥行き方向の値が異なるから、視点毎に異なるZカリング処理をする必要がある。そこで、Zカリング部26には異なる視点毎にZカリングメモリが設けられ、Zカリング部26は、ラスタライズされたピクセルのZ値と、そのピクセルに付与された視点識別子に対応するZカリングメモリに格納されたピクセルのZ値とを比較することでZカリング判定を行う(S20)。
【0042】
フラグメントシェーダ40は、視点の違いに関係なく、光源計算、テクスチャなどのピクセルの演算処理を実行することができる。あるいは、フラグメントシェーダ40は、視点識別子に依存して異なる処理をしてもよい。プログラマブルシェーダの場合、if−thenルールにより、視点識別子の条件によって、異なるピクセル処理を行うようにプログラムを書くことは自由である。
【0043】
ラスタ演算ブロック50は、視点に依存しないラスタ演算処理、たとえばアルファテストやステンシルテストを行う(S22)。デプステストは、視点によって奥行き方向の値が異なるから、視点毎に行う必要がある。そこで、ラスタ演算ブロック50のデプスラスタ演算部は、異なる視点毎に設けられたデプスバッファを用いて、ラスタライズされたピクセルのZ値と、そのピクセルに付与された視点識別子に対応するデプスバッファに格納された対応するピクセルのZ値とを比較することでデプステストを行う(S24)。
【0044】
ラスタ演算ブロック50は、ピクセルのカラー値を求めてカラーバッファ64に書き込む際、視点毎に分けて書き込む必要がある。そのため、カラーバッファ64は、異なる視点識別子毎に設けられており、ラスタ演算ブロック50は、各ピクセルに付与された視点識別子を参照し、ピクセルのカラー値を視点識別子に対応するカラーバッファ64に書き込む(S26)。
【0045】
以下、図3〜図5を参照して、異なる視点毎に処理を行うための頂点シェーダ10、Zカリング部26、およびラスタ演算ブロック50の構成を説明する。ここでは、説明の便宜のため、4つの視点A〜Dから見た場合の描画処理を同時に実行する構成を説明するが、視点の数はこれに限られない。
【0046】
図3は、頂点シェーダ10の構成図である。頂点シェーダ10は、頂点プロセッサ12と頂点演算部14を含む。頂点プロセッサ12は、オブジェクトの座標をローカル座標系からワールド座標系へ変換する処理、オブジェクトを構成するプリミティブの頂点属性を生成する処理、光源に関する処理など、視点の違いには関係しない共通の頂点処理を実行する。
【0047】
頂点演算部14は、複数の頂点パイプ16a〜16hを含み、頂点計算をパイプライン処理する。複数の頂点パイプ16a〜16hに対して、異なるインストラクションを与えれば、異なる頂点計算を実行することができる。そこで、オブジェクトを異なる視点から見た場合のプリミティブの頂点情報を生成するために、これらの頂点パイプ16a〜16hに対して、異なるインストラクション18a〜18dを与える。ここで、頂点パイプ16a〜16hが同期することで、一度のポリゴン情報の読み込みで複数の視点から見た場合のプリミティブの頂点情報を同時に生成することができる。
【0048】
ここでは、4つの視点A〜Dから見た場合のプリミティブの頂点情報を生成するため、視点Aに対応するインストラクションA(符号18a)を第1、第2頂点パイプ(符号16a、16b)に与え、視点Bに対応するインストラクションB(符号18b)を第3、第4頂点パイプ(符号16c、16d)に与え、視点Cに対応するインストラクションC(符号18c)を第5、第6頂点パイプ(符号16e、16f)に与え、視点Dに対応するインストラクションD(符号18d)を第7、第8頂点パイプ(符号16g、16h)に与える。
【0049】
一例として、視点位置が同じで視点方向だけを異ならせてプリミティブの頂点情報を生成する場合は、上述のビューイング変換行列において、視点方向を示すベクトル(Dx、Dy、Dz)を変更すればよい。それは、上述のビューイング変換行列において、Y軸方向の回転角αとX軸方向の回転角βの2つのパラメータを変更することである。したがって、視点A〜Dに対応するインストラクションA〜Dとして、回転角α、βが異なるビューイング変換行列にもとづいた座標変換を実行するための命令コードを与えればよい。これにより、各頂点パイプ16a〜16hは、頂点プロセッサ12から与えられる同一のオブジェクトのワールド座標系における座標情報から、異なる視点から見た場合のプリミティブの頂点情報を計算することができる。
【0050】
このように、異なる視点に対応するインストラクションA〜Dとして、視点毎のカメラセッティングや、各視線方向に応じた視錐台(ビューフラスタム;view frustum)を設定するためのコマンド列やパラメータを与える。
【0051】
各頂点パイプ16a〜16hは、インストラクションA〜Dにしたがった頂点処理の後、各カメラセッティングに応じたカリングやクリッピングなどの処理を行い、生成されたプリミティブの頂点情報にどの視点から見たものであるかを示す視点識別子を付与した上で、プリミティブの頂点情報をラスタライザ20に与える。
【0052】
頂点シェーダ10から入力された視点識別子付きのプリミティブは、ラスタライザ20のセットアップ部22に入力され、ラスタライズに必要なパラメータが設定され、さらにコースラスタ部24に入力され、タイル単位でラスタライズされる。コースラスタ部24において、プリミティブがタイル単位でラスタライズされたとき、タイル内の各ピクセルには視点識別子が付与される。コースラスタ部24により各ピクセルに視点識別子が付与されたタイルはZカリング部26に入力される。
【0053】
図4は、ラスタライザ20のZカリング部26の構成図である。Zカリング部26は、識別子分配部34、カリング判定部30a〜30d、およびZカリングメモリ32a〜32dを含む。カリング判定部30a〜30dとZカリングメモリ32a〜32dは、異なる視点毎に設けられる。識別子分配部34は、コースラスタ部24からプリミティブをラスタライズして得られたタイルを取得し、タイルの視点識別子を参照して、タイルを対応する視点識別子のカリング判定部30a〜30dに分配する。
【0054】
まず、視点の違いは無視して、カリング判定部30a〜30dとZカリングメモリ32a〜32dの構成と動作を説明する。以下、視点の違いを無視して説明するときは、符号a〜dを省略する。
【0055】
各カリング判定部30は、与えられたタイルに対して、タイル単位でZカリング判定を行う。各Zカリングメモリ32には、ラスタ演算ブロック50がデプスバッファ62に書き込む描画処理後のピクセルのZ値がフィードバックされ、既に格納されたZ値が更新される。Zカリングメモリ32は、タイル単位でZ値を格納した縮小Zバッファであり、各タイルの代表Z値が格納される。タイルの代表Z値は、タイル内のピクセルの最大のZ値(最も遠くにあるピクセルのZ値)である。ここで、Z値は視点位置は0であり、視点から遠くなるほど大きくなる。
【0056】
タイルの代表Z値Zfarは、デプスバッファ62に保持された描画処理後のピクセルのZ値をタイル単位で見た場合にタイル内で最も遠くにあるピクセルのZ値である。カリング判定部30は、ラスタライズされたタイルの各ピクセルのZ値の内、最小のZ値Zmin(すなわち、タイル内で最も手前にあるZ値)が、Zカリングメモリ32に保持されたタイルの代表Z値Zfarよりも大きい場合、そのタイルは既に描画されたプリミティブの背後にあって表示されないから、カリングする。
【0057】
カリング判定部30は、このZカリング判定に合格した(Zカリングされない)タイルをファインラスタ部28に渡し、Zカリング判定に不合格であった(Zカリングされた)タイルはファインラスタ部28に渡さない。
【0058】
次に、カリング判定部30とZカリングメモリ32の視点に依存する構成を説明する。4つのカリング判定部30a、30b、30c、30d、および4つのZカリングメモリ32a、32b、32c、32dが、それぞれ4視点A、B、C、Dに対応して設けられる。Zカリングメモリ32a、32b、32c、32dには、それぞれ視点A、B、C、Dに対応して設けられたデプスバッファA、B、C、Dから描画処理後のピクセルのZ値がフィードバックされ、視点A、B、C、Dから見た場合のプリミティブのタイルのZ値が更新される。視点A、B、C、Dに対応するカリング判定部30a、30b、30c、30dは、それぞれZカリングメモリ32a、32b、32c、32dを参照して、視点A、B、C、DのタイルについてZカリング判定を行う。
【0059】
図5は、ラスタ演算ブロック50とローカルメモリ60の構成を説明する図である。ラスタ演算ブロック50は、予備ラスタ演算部(PreROP)52、デプスラスタ演算部(ZROP)54a〜54d、カラーラスタ演算部(CROP)56、およびアドレス生成器58を含む。予備ラスタ演算部52とカラーラスタ演算部56は、視点の違いに関係なく処理を進めることができるため、1つしか設けられないが、デプスラスタ演算部54a〜54dは、視点によって奥行き方向の値が異なるため、視点毎に設けられる。ここでは、4視点A〜Dに対応して4つのデプスラスタ演算部54a〜54dが設けられる。
【0060】
ローカルメモリ60は、4視点A〜Dに応じて4つに領域が分けられたカラーバッファ64(カラーバッファA〜D)と、同じく4視点A〜Dに応じて4つに領域が分けられたデプスバッファ62(デプスバッファA〜D)を含む。
【0061】
予備ラスタ演算部52は、アルファテスト、ステンシルテストなどの演算を行う。予備ラスタ演算部52で処理されたピクセルは、ピクセルに付与された視点識別子に応じて、視点毎に設けられたデプスラスタ演算部54a〜54dに割り振られる。
【0062】
各デプスラスタ演算部54a〜54dは、各視点A〜Dに対応したデプスバッファA〜Dから描画処理後の対応ピクセルのZ値を読み出すために、ラスタライズされたピクセルの視点識別子を付与したリード(Read)命令をアドレス生成器58に与える。アドレス生成器58は、リード命令に付与された視点識別子に応じて、ローカルメモリ60のデプスバッファA〜Dのいずれかを参照するために視点識別子に応じたオフセットによるアドレス変換を行い、視点識別子に対応するデプスバッファA〜Dから対応ピクセルのZ値を読み出して、各デプスラスタ演算部54a〜54dに与える。
【0063】
各デプスラスタ演算部54a〜54dは、デプスバッファA〜Dから読み出された対応ピクセルのZ値と、ラスタライズされたピクセルのZ値とを比較し、ラスタライズされたピクセルの方が手前にあれば、カラーラスタ演算部56にピクセルを渡す。また、各デプスラスタ演算部54a〜54dは、早期Zカリング(Early Z Culling)に必要となるZ値の情報をZカリング部26の対応する視点のZカリングメモリ32a〜32dに供給する。
【0064】
カラーラスタ演算部56は、ピクセルのカラー値を求め、各視点A〜Dに対応したカラーバッファA〜Dにピクセルのカラー値を書き込むために、ピクセルの視点識別子を付与したライト(Write)命令をアドレス生成器58に与える。アドレス生成器58は、ライト命令に付与された視点識別子に応じて、ローカルメモリ60のカラーバッファA〜Dのいずれかを参照するために視点識別子に応じたオフセットによるアドレス変換を行い、視点識別子に対応するカラーバッファA〜Dにピクセルのカラー値を書き込む。
【0065】
図6および図7を参照して、本実施の形態の描画処理装置による描画処理の一例を説明する。
【0066】
図6は、一つのシーン内に配置されたオブジェクトを示す。池400の周りに、家410a、木410b、410c、410d、ブランコ410e、ベンチ410fがある。池400の水面に周囲のオブジェクト410a〜410fが映り込んだ様子を描画するために、グラフィックスプロセッサ100は上述の構成を用いて、周囲のオブジェクト410a〜410fのポリゴン情報の入力を一回だけ受けて、4つの異なる視線方向A〜Dを設定したビューイング変換行列のもとで4視線方向から見た周囲のオブジェクトの描画処理を一度に行う。各視線方向A〜Dから見た描画結果は、テクスチャとしてローカルメモリ60のカラーバッファA〜Dに書き込まれる。その後、フラグメントシェーダ40は、テクスチャマッピングにより、各視線方向A〜Dの描画結果のテクスチャを池400の水面にマッピングする。
【0067】
図7は、図6と同一の環境であるが、中央に自動車430がある。自動車430のボディ表面には周囲の環境が映り込む。自動車430を囲むキューブ440を想定し、グラフィックスプロセッサ100は、共通のワールド座標系で与えられた周囲のオブジェクト410a〜410fのポリゴン情報に対して、キューブ440の各面の方向に視線方向を変えながらビュー座標系に変換し、各視線方向から見た場合の周囲のオブジェクト410a〜410fの描画結果をテクスチャとしてローカルメモリ60のカラーバッファ64に書き込む。この場合、カラーバッファ64は6面分必要であり、6視線方向分の頂点演算部14、Zカリング部26、デプスラスタ演算部54の構成が必要になる。キューブマップの6方向のテクスチャが得られると、次にフラグメントシェーダ40は、キューブマッピングの手法により、自動車430のボディ表面にキューブのテクスチャを貼り付ける。
【0068】
図6および図7のように映り込みを表現する別の例として、たとえば、車のドアミラーやバックミラーに映っている像を描画する場合がある。グラフィックスプロセッサ100は、同一シーンの周囲のオブジェクトのポリゴン情報の入力を受けて、車の前方を見る視線方向の描画と、車のドアミラーやバックミラーに映るべき後方を見る視線方向の描画とを同時に行うことができる。また、さらに別の例として、オブジェクト同士が互いに表面に映り込む場合などがある。この場合、同じオブジェクト群のポリゴン情報に対して、第1オブジェクトから第2オブジェクトを見る視線方向からの描画と、それとは反対に、第2オブジェクトから第1オブジェクトを見る視線方向からの描画とが同時になされる。
【0069】
また、本実施の形態の描画処理技術は、映り込み以外に、同一シーン内のオブジェクトに対して異なる視点からの描画処理を実行したい場合に適用することができる。たとえば、対戦型ゲームにおいて、自分の視点から見た周囲の状況と、相手の視点から見た周囲の状況を同時に描画して、2画面表示する場合にも適用することができる。また、仮想世界をユーザの疑似キャラクターが探索する場合、各ユーザから見た仮想世界の様子を同時の描画する場合にも適用することができる。
【0070】
レイトレーシングでは、光線を追跡してお互いの映り込みを正確に描画する際、同一のオブジェクトのポリゴン情報に対して何度も演算を繰り返すが、本実施の形態の描画処理技術は、レイトレーシングでこのように描画演算を繰り返す場合にも適用することができる。
【0071】
また、図6および図7の例では、視点位置を同じにして、視線方向だけを変えたが、本実施の形態は、視線方向は変えずに視点位置を異ならせて描画する場合にも適用することができる。そのような例として、視線方向を同じにして、視点位置をオブジェクトに近づけた場合と、視点位置をオブジェクトから遠ざけた場合の両方のカメラセッティングを行い、オブジェクトを近くから見た場合の画像と、オブジェクトを遠くから見た場合の画像を同時に生成するようにしてもよい。もちろん、視点位置と視線方向を両方とも異ならせたカメラセッティングのもとで描画を行ってもよい。
【0072】
以上述べたように、本実施の形態によれば、複数の異なるビューイング変換行列を設定して同一シーンのオブジェクトを一度に異なる視点位置または視線方向から描画してバッファに書き込むマルチレンダーターゲット(MRT;Multi-Render Target)のレンダリングシステムを提供することができる。これにより、あたかも一つのシーンを描画しているかのように、異なる視点位置または視線方向から見た描画結果を一度に生成することができる。
【0073】
通常、同じオブジェクトに対して視点位置や視線方向を変えて描画するには、異なる視点位置または視線方向の度にオブジェクトのポリゴン情報を入力して、頂点処理、ラスタライズ処理、シェーディング処理を繰り返すマルチパスレンダリングが必要になるが、本実施の形態では、これを1パスで実行することができ、処理効率が良い。
【0074】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0075】
上記の実施の形態では、視点毎に異なる演算が必要な処理では視点の数に応じた並列演算の構成を用意したが、視点の数と、並列演算の構成数は一致しなくてもよく、視点の数の方が並列演算の構成数より多い場合は、並列演算の構成を何度か繰り返して用いることで代用することができる。また、並列演算の構成が全くなくても、単一の構成において同一の入力データに対してパラメータを変えて演算を何度か繰り返すことで同様の目的を達成することができる。
【0076】
上記の実施の形態では、グラフィックスプロセッサ100の頂点シェーダ10、ラスタライザ20、フラグメントシェーダ40、およびラスタ演算ブロック50が描画処理を行ったが、グラフィックスプロセッサ100を用いないで、メインプロセッサ200がすべての描画処理を実行してもよい。特にメインプロセッサ200がマルチプロセッサシステムである場合、その十分な処理性能を用いて描画処理をソフトウエアで実行することができる。その場合、グラフィックスプロセッサ100の頂点シェーダ10、ラスタライザ20、フラグメントシェーダ40、およびラスタ演算ブロック50の各構成は、メインプロセッサ200で実行されるプログラムモジュールの機能として提供される。
【図面の簡単な説明】
【0077】
【図1】実施の形態に係る描画処理装置の構成図である。
【図2】図1の描画処理装置による描画処理手順を示すフローチャートである。
【図3】図1の頂点シェーダの構成図である。
【図4】図1のラスタライザのZカリング部の構成図である。
【図5】図1のラスタ演算ブロックとローカルメモリの構成を説明する図である。
【図6】本実施の形態の描画処理装置による描画処理の一例を説明する図である。
【図7】本実施の形態の描画処理装置による描画処理の別の例を説明する図である。
【符号の説明】
【0078】
10 頂点シェーダ、 12 頂点プロセッサ、 14 頂点演算部、 16 頂点パイプ、 18 インストラクション、 20 ラスタライザ、 22 セットアップ部、 24 コースラスタ部、 26 Zカリング部、 28 ファインラスタ部、 30 カリング判定部、 32 Zカリングメモリ、 34 識別子分配部、 40 フラグメントシェーダ、 50 ラスタ演算ブロック、 52 予備ラスタ演算部、 54 デプスラスタ演算部、 56 カラーラスタ演算部、 58 アドレス生成器、 60 ローカルメモリ、 62 デプスバッファ、 64 カラーバッファ、 70 ホストI/F、 100 グラフィックスプロセッサ、 200 メインプロセッサ、 300 メインメモリ。

【特許請求の範囲】
【請求項1】
ワールド座標系で表現された3次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成する頂点シェーダと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するラスタライザとを含むことを特徴とするグラフィックスプロセッサ。
【請求項2】
前記ラスタライザにより生成されたピクセルに対してラスタ演算を実行してフレームバッファにピクセルデータを書き込むラスタ演算部をさらに含み、
前記フレームバッファは、異なる視点毎に設けられており、
前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことを特徴とする請求項1に記載のグラフィックスプロセッサ。
【請求項3】
前記ラスタ演算部は、ラスタライズされたピクセルのZ値と、Zバッファに格納された対応するピクセルのZ値とを比較するデプステストにより、当該ピクセルをフレームバッファに書き込むかどうかを判定するデプス演算部を含み、
前記Zバッファは、異なる視点毎に設けられており、
前記デプス演算部は、ラスタライズされたピクセルのZ値と、そのピクセルに付与された前記視点識別子に対応する視点のZバッファに格納された対応するピクセルのZ値とを比較するデプステストを行うことを特徴とする請求項2に記載のグラフィックスプロセッサ。
【請求項4】
前記ラスタライザは、プリミティブをラスタライズして得られるピクセルのZ値と、Zカリングメモリに格納された対応するピクセルのZ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定するZカリング部を含み、
前記Zカリングメモリは、異なる視点毎に設けられており、
前記Zカリング部は、ラスタライズされたピクセルのZ値と、そのピクセルに付与された前記視点識別子に対応する視点のZカリングメモリに格納されたピクセルのZ値とを比較するデプステストを行うことを特徴とする請求項1から3のいずれかに記載のグラフィックスプロセッサ。
【請求項5】
オブジェクトの表面にテクスチャをマッピングするフラグメントシェーダをさらに含み、
前記頂点シェーダは、表面に周囲環境の映り込みのあるオブジェクトを描画するために、周囲環境内の他のオブジェクトのポリゴン情報の入力を受けて、視線方向が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へ周囲環境内の他のオブジェクトの座標を変換することにより、周囲環境内の他のオブジェクトを異なる視点から見た場合における当該周囲環境内の他のオブジェクトを構成するプリミティブの頂点情報を生成し、
前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことにより、異なる視線方向毎に周囲環境のテクスチャを生成し、
前記フラグメントシェーダは、前記周囲環境のテクスチャを当該映り込みのあるオブジェクトの表面にマッピングすることを特徴とする請求項2に記載のグラフィックスプロセッサ。
【請求項6】
グラフィックスプロセッサによる描画処理方法であって、
ワールド座標系で表現された3次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、
ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとを含むことを特徴とする描画処理方法。
【請求項7】
ワールド座標系で表現された3次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、
ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとをコンピュータに実行させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate