(57)【要約】【課題】一つのシーンを複数の視点から見た場合の描画処理を効率良く行うことは難しい。【解決手段】グラフィックスプロセッサ１００は、頂点シェーダ１０とラスタライザ２０を含む。頂点シェーダ１０は、ワールド座標系で表現された３次元空間内のオブジェクトの座標情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合のプリミティブの頂点情報を生成する。ラスタライザ２０は、頂点情報にもとづいてプリミティブをラスタライズしてピクセルを生成する際、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与する。【選択図】図１
2008282171.tif 000002
【特許請求の範囲】
【請求項１】
ワールド座標系で表現された３次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成する頂点シェーダと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するラスタライザとを含むことを特徴とするグラフィックスプロセッサ。
【請求項２】
前記ラスタライザにより生成されたピクセルに対してラスタ演算を実行してフレームバッファにピクセルデータを書き込むラスタ演算部をさらに含み、
前記フレームバッファは、異なる視点毎に設けられており、
前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことを特徴とする請求項１に記載のグラフィックスプロセッサ。
【請求項３】
前記ラスタ演算部は、ラスタライズされたピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該ピクセルをフレームバッファに書き込むかどうかを判定するデプス演算部を含み、
前記Ｚバッファは、異なる視点毎に設けられており、
前記デプス演算部は、ラスタライズされたピクセルのＺ値と、そのピクセルに付与された前記視点識別子に対応する視点のＺバッファに格納された対応するピクセルのＺ値とを比較するデプステストを行うことを特徴とする請求項２に記載のグラフィックスプロセッサ。
【請求項４】
前記ラスタライザは、プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚカリングメモリに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定するＺカリング部を含み、
前記Ｚカリングメモリは、異なる視点毎に設けられており、
前記Ｚカリング部は、ラスタライズされたピクセルのＺ値と、そのピクセルに付与された前記視点識別子に対応する視点のＺカリングメモリに格納されたピクセルのＺ値とを比較するデプステストを行うことを特徴とする請求項１から３のいずれかに記載のグラフィックスプロセッサ。
【請求項５】
オブジェクトの表面にテクスチャをマッピングするフラグメントシェーダをさらに含み、
前記頂点シェーダは、表面に周囲環境の映り込みのあるオブジェクトを描画するために、周囲環境内の他のオブジェクトのポリゴン情報の入力を受けて、視線方向が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へ周囲環境内の他のオブジェクトの座標を変換することにより、周囲環境内の他のオブジェクトを異なる視点から見た場合における当該周囲環境内の他のオブジェクトを構成するプリミティブの頂点情報を生成し、
前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことにより、異なる視線方向毎に周囲環境のテクスチャを生成し、
前記フラグメントシェーダは、前記周囲環境のテクスチャを当該映り込みのあるオブジェクトの表面にマッピングすることを特徴とする請求項２に記載のグラフィックスプロセッサ。
【請求項６】
グラフィックスプロセッサによる描画処理方法であって、
ワールド座標系で表現された３次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、
ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとを含むことを特徴とする描画処理方法。
【請求項７】
ワールド座標系で表現された３次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、
前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、
ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はグラフィックスプロセッサおよび描画処理方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスでは、一般的に３次元空間のオブジェクトを多数のポリゴンにより表現するポリゴンモデルが利用される。ポリゴンモデルの描画処理において、光源、視点位置、視線方向、物体表面の反射率などを考慮してポリゴン表面に陰影をつけるシェーディングが行われる。また、写実性の高い画像を生成するために、ポリゴンモデルの表面にテクスチャ画像を貼り付けるテクスチャマッピングが行われる。
【０００３】
また、金属やガラスなどの表面には周囲のオブジェクトが映り込むが、このような映り込みを描画する場合も、環境マッピングにより周囲の環境を金属などのオブジェクトの表面にマッピングする方法が取られる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
周囲の風景が静止している場合は、周囲の風景をテクスチャとして金属などのオブジェクトの表面にマッピングするだけでよいが、周囲にあるオブジェクトが動く場合は、周囲の風景をいったん描画してテクスチャとして用意してからでなければ環境マッピングを行うことができない。たとえば、環境マッピングの一例としてキューブマップを使用する場合、視線方向を上下、左右、前後に変えて、周囲にあるオブジェクトの座標系をワールド座標系からビュー座標系に変換して、６方向にカメラを向けた場合の描画を行い、その描画結果をテクスチャとして利用して、金属などのオブジェクトの表面にキューブマッピングすることで、映り込みを表現する。
【０００５】
しかしながら、このように視線方向を６方向に変えて描画する場合、ワールド座標系に配置されている周囲のオブジェクトのポリゴン情報を６回繰り返し入力して、頂点シェーダ、ラスタライザ、フラグメントシェーダによる一連の描画処理をすることになる。同一シーン内の周囲にあるオブジェクトを視線方向を変えて描画しているだけであるのに、オブジェクトのポリゴン情報の読み込みを繰り返したり、周囲のオブジェクトに貼り付けるテクスチャの読み込みを繰り返すのは効率が悪い。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、視点位置および視線方向の少なくとも一方を異ならせてオブジェクトを描画するときの処理効率を上げるための描画処理技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様のグラフィックスプロセッサは、ワールド座標系で表現された３次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成する頂点シェーダと、前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するラスタライザとを含む。
【０００８】
前記ラスタライザにより生成されたピクセルに対してラスタ演算を実行してフレームバッファにピクセルデータを書き込むラスタ演算部をさらに含んでもよい。前記フレームバッファは、異なる視点毎に設けられており、前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込んでもよい。
【０００９】
オブジェクトの表面にテクスチャをマッピングするフラグメントシェーダをさらに含んでもよい。前記頂点シェーダは、表面に周囲環境の映り込みのあるオブジェクトを描画するために、周囲環境内の他のオブジェクトのポリゴン情報の入力を受けて、視線方向が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へ周囲環境内の他のオブジェクトの座標を変換することにより、周囲環境内の他のオブジェクトを異なる視点から見た場合における当該周囲環境内の他のオブジェクトを構成するプリミティブの頂点情報を生成してもよい。前記ラスタ演算部は、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むことにより、異なる視線方向毎に周囲環境のテクスチャを生成してもよい。前記フラグメントシェーダは、前記周囲環境のテクスチャを当該映り込みのあるオブジェクトの表面にマッピングしてもよい。
【００１０】
本発明の別の態様は、描画処理方法である。この方法は、グラフィックスプロセッサによる描画処理方法であって、ワールド座標系で表現された３次元空間内のオブジェクトのポリゴン情報の入力を受けて、視点位置および視線方向の少なくとも一方が異なるビューイング変換行列にしたがってワールド座標系からビュー座標系へオブジェクトの座標を変換することにより、オブジェクトを異なる視点から見た場合における当該オブジェクトを構成するプリミティブの頂点情報を生成するステップと、前記頂点情報にもとづいて前記プリミティブをラスタライズしてピクセルを生成し、そのピクセルがいずれの視点から見た場合のプリミティブから生成されたものであるかを識別する視点識別子をピクセルに付与するステップと、ラスタライズされたピクセルのカラー値を求め、各ピクセルに付与された前記視点識別子を参照し、ピクセルデータを前記視点識別子に対応する視点のフレームバッファに書き込むステップとを含む。
【００１１】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１２】
本発明によれば、オブジェクトの描画処理の効率化を図ることができる。
【発明を実施するための最良の形態】
【００１３】
本発明の実施の形態の描画処理技術の概要を説明する。視点位置および視線方向の少なくとも一方を異ならせて、同じシーンにおける３次元仮想空間に配置されたオブジェクトを描画する。共通のワールド座標系でポリゴンの座標情報が与えられたオブジェクトの描画処理は、グラフィックスプロセッサの前段の頂点のジオメトリ処理においては視点位置や視線方向に依存するが、後段のピクセルカラーを決定するピクセル処理や使用するテクスチャは視点位置や視線方向に依存しないことが多い。また、ピクセル処理が視点位置や視線方向に依存する場合でも、視点位置や視線方向を異ならせる度にオブジェクトのポリゴン情報を読み直す必要はなく、同一のポリゴンの頂点に対して、異なるシェーダコードを実行すればよい。
【００１４】
そこで、本実施の形態では、ワールド座標系のオブジェクトのポリゴン情報をグラフィックスプロセッサに１回投入するだけで、視点位置および視線方向の少なくとも一方が異なる描画処理を同時に行う。そのために、視点位置や視線方向に依存する処理については、異なる視点位置や視線方向に応じた処理を行うことができる構成が特別に用意され、視点位置や視線方向に関係なく進められる処理については、従来の構成をそのまま使う。
【００１５】
図１は、実施の形態に係る描画処理装置の構成図である。描画処理装置は、描画対象となるオブジェクトの３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理を行う。
【００１６】
メインプロセッサ２００は、メインメモリ３００からオブジェクトのポリゴンモデル情報を読み出し、オブジェクトの動きをシミュレーションしてオブジェクトの位置を更新し、グラフィックスプロセッサ１００にオブジェクトのポリゴン情報を与える。
【００１７】
グラフィックスプロセッサ１００は、ホストインタフェース（Ｉ／Ｆ）７０を介してメインプロセッサ２００からオブジェクトのポリゴン情報を取得し、頂点シェーダ１０に入力する。
【００１８】
頂点シェーダ１０は、メインプロセッサ２００から受け取ったオブジェクトのポリゴン情報をもとに、オブジェクトを構成する１つ以上のプリミティブの頂点座標とパラメータを含むストリームを生成する。プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位である。
【００１９】
ラスタライザ２０は、セットアップ部２２、コースラスタ部２４、Ｚカリング部２６、およびファインラスタ部２８を含む。
【００２０】
セットアップ部２２は、プリミティブのストリームをデジタル微分解析器（Digital Differential Analyzer；ＤＤＡ）により処理するための各種パラメータのセットアップを行う。具体的には、プリミティブを含む空間を区切るバウンディングボックスの設定や、エッジ係数などＤＤＡ処理の各種パラメータの設定を行う。
【００２１】
プリミティブは一例として三角形の形状であり、ＤＤＡは、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、ラスタライン毎に量子化されたピクセルに変換する。ＤＤＡにより、プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２２】
コースラスタ部２４は、セットアップ部２２による設定にもとづいて、頂点シェーダ１０から取得されたプリミティブの頂点データをＤＤＡ処理し、プリミティブをタイルに変換する。ここで、タイルは、ピクセルの矩形集合であり、たとえば、縦横８ピクセルの合計６４ピクセルの集合である。コースラスタ部２４により、プリミティブはタイルという粗い単位でラスタライズされる。
【００２３】
一般に、プリミティブの表面積が大きいほど、そのプリミティブをピクセル化した場合のピクセル数が増える。また、プリミティブが視点から近い位置にあって、プリミティブを高い詳細度レベルで描画する必要がある場合は、プリミティブから生成されるピクセル数は増える。頂点シェーダ１０においては、頂点データでプリミティブが表されているため、データ量は少ないが、ＤＤＡによりピクセル化処理した後は、ピクセル数が増大し、データ量が増える。
【００２４】
そこで、コースラスタ部２４によりいったん粗い単位でラスタライズしておき、後段のＺカリング部２６において、すでに処理済みのピクセルの奥行き方向の位置を示すＺ値（デプス（depth）値とも呼ばれる）と比較して、タイルのカリングを行い、カリングされたタイルは後段のファインラスタ部２８には渡さないようにする。これにより、既に描画されたプリミティブの背後にあるため、視点から見えないタイルについてはファインラスタ部２８による細かい単位でのラスタライズ処理や、フラグメントシェーダ４０による描画処理を省略し、処理効率を高めることができる。
【００２５】
ファインラスタ部２８は、コースラスタ部２４によってラスタライズされたタイルの内、Ｚカリング部２６によりＺカリングされなかったタイル、言い換えればＺカリングテストを合格したタイルを取得し、ピクセルに変換する。ファインラスタ部２８により、プリミティブは最小のピクセル単位で細かくラスタライズされる。ファインラスタ部２８は、こうしてプリミティブをラスタライズして得られるピクセルをフラグメントシェーダ４０に与える。
【００２６】
フラグメントシェーダ４０は、プリミティブをピクセル単位に分割して得られるフラグメントに対して描画処理を行う。フラグメントシェーダ４０は、ラスタライザ２０により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値とデプス値を算出する。さらに、テクスチャマッピングを行う場合は、テクスチャのカラー値を合成して最終的なピクセルのカラー値を算出する。
【００２７】
ラスタ演算ブロック５０は、フラグメントに対してブレンディング、アルファテスト、デプステストを実行し、最終的なピクセルのカラー値を求め、レンダリングの結果をローカルメモリ６０に設けられたカラーバッファ６４にピクセルデータを書き込む。また、ラスタ演算ブロック５０は、各ピクセルのＺ値をデプスバッファ６２に格納するとともに、Ｚカリング部２６に各ピクセルのＺ値を供給する。
【００２８】
カラーバッファ６４は、ピクセルデータをスクリーン座標に対応づけて格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。カラーバッファ６４に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００２９】
次に、図２の描画処理手順を示すフローチャートを参照しながら、本実施の形態に特有の構成と動作を説明する。
【００３０】
頂点シェーダ１０は、ワールド座標系からビュー座標系へ変換するビューイング変換行列にしたがって３次元空間内のオブジェクトの座標を変換することにより、オブジェクトを所定の視点から見た場合におけるオブジェクトのプリミティブの頂点情報を生成する。
【００３１】
ここで、「視点から見る」とは、特定の視点位置から特定の視線方向にオブジェクトを見ることを言う。このように、本明細書で「視点」というとき、単に視点の位置を指すだけでなく、視線の方向の意味も含めていることに留意する。ビュー座標系は、視点位置から視線方向にオブジェクトを見たときの座標系であり、視点位置および視線方向を決めることにより、一意に定義される。ビュー座標系は、一般に、視点位置を原点に定め、視線方向をＺ軸にとって奥行き方向にＺ座標値がプラスになるように定義される。ビューイング変換行列は、ワールド座標系をビュー座標系に変換する座標変換行列である。
【００３２】
視点位置の座標を（ｘ０，ｙ０，ｚ０）、注視位置（視点から見ている位置）の座標を（ｘ１，ｙ１，ｚ１）とすると、視線方向を示すベクトル（Ｄｘ，Ｄｙ，Ｄｚ）は、Ｄｘ＝ｘ１−ｘ０、Ｄｙ＝ｙ１−ｙ０、Ｄｚ＝ｚ１−ｚ０により求められる。
【００３３】
ワールド座標系における点（ｘ，ｙ，ｚ）をビュー座標系における点（ｘ’，ｙ’，ｚ’）に座標変換するためのビューイング変換行列Ｗは次のようにして求められる。ワールド座標系ＸＹＺについて、Ｙ軸の周りに角度αだけ回転させ、Ｘ軸の周りに角度βだけ回転させるとする。このとき次式が成り立つ。
【数１】
2008282171.tif 000003
【００３４】
視点位置から注視位置を見たときの回転行列Ｒは、次式で与えられる。
【数２】
2008282171.tif 000004
【００３５】
視点位置を原点とするための平行移動行列Ｔは、次式で与えられる。
【数３】
2008282171.tif 000005
【００３６】
Ｚ軸を奥に向かってプラスになる方向に取り直すために、Ｚ座標の符号を変えるためのスケーリング行列Ｓは、次式で与えられる。
【数４】
2008282171.tif 000006
【００３７】
ビューイング変換行列Ｗは、回転行列Ｒ、平行移動行列Ｔ、スケーリング行列Ｓの積として、Ｗ＝ＴＲＳで与えられ、ビュー座標系における点（ｘ’，ｙ’，ｚ’）は、
（ｘ’，ｙ’，ｚ’，１）＝（ｘ，ｙ，ｚ，１）Ｗ
で計算される。
【００３８】
本実施の形態では、あるシーンにおけるワールド座標系で表現された３次元空間内のオブジェクトの座標情報の入力を受けて、視点位置（ｘ０，ｙ０，ｚ０）および視線方向（Ｄｘ，Ｄｙ，Ｄｚ）の少なくとも一方が異なる複数のビューイング変換行列Ｗを設定し（Ｓ１０）、各ビューイング変換行列Ｗにしたがってオブジェクトの座標をビュー座標系に変換し、オブジェクトを異なる視点から見た場合のオブジェクトのプリミティブの頂点情報を生成する（Ｓ１２）。
【００３９】
頂点シェーダ１０によって生成されたプリミティブには、いずれの視点から見た場合のものであるかを示す視点識別子が付与される（Ｓ１４）。視点位置は座標（ｘ０，ｙ０，ｚ０）で与えられ、視線方向はベクトル（Ｄｘ，Ｄｙ，Ｄｚ）で与えられる。ベクトル（Ｄｘ，Ｄｙ，Ｄｚ）は、２つの回転角α、βを与えることで決まるから、視線方向は回転角の組み合わせ（α，β）で与えてもよい。異なる視点位置（ｘ０，ｙ０，ｚ０）と視線方向（α，β）の組み合わせにインデックスが付けられテーブルに格納される。このインデックスが視点識別子である。
【００４０】
ラスタライザ２０は、頂点シェーダ１０から視点識別子付きのプリミティブの入力を受けて、プリミティブをラスタライズしてピクセルを生成する（Ｓ１６）が、その際、各ピクセルには、どの視点（すなわち視点位置および視線方向）から見た場合のプリミティブから生成されたものであるかを識別可能にするため、この視点識別子を付ける（Ｓ１８）。ラスタライズ段階で視点識別子を付けるのは、コースラスタ部２４の役割である。コースラスタ部２４は、プリミティブをタイルに変換する段階でタイル内のピクセルにこの視点識別子を付ける。
【００４１】
ラスタライザ２０内では、セットアップ部２２、コースラスタ部２４、およびファインラスタ部２８は、視点の違いに関係なく、ラスタライズ処理を進めることができる。一方、Ｚカリング部２６は、視点によって奥行き方向の値が異なるから、視点毎に異なるＺカリング処理をする必要がある。そこで、Ｚカリング部２６には異なる視点毎にＺカリングメモリが設けられ、Ｚカリング部２６は、ラスタライズされたピクセルのＺ値と、そのピクセルに付与された視点識別子に対応するＺカリングメモリに格納されたピクセルのＺ値とを比較することでＺカリング判定を行う（Ｓ２０）。
【００４２】
フラグメントシェーダ４０は、視点の違いに関係なく、光源計算、テクスチャなどのピクセルの演算処理を実行することができる。あるいは、フラグメントシェーダ４０は、視点識別子に依存して異なる処理をしてもよい。プログラマブルシェーダの場合、ｉｆ−ｔｈｅｎルールにより、視点識別子の条件によって、異なるピクセル処理を行うようにプログラムを書くことは自由である。
【００４３】
ラスタ演算ブロック５０は、視点に依存しないラスタ演算処理、たとえばアルファテストやステンシルテストを行う（Ｓ２２）。デプステストは、視点によって奥行き方向の値が異なるから、視点毎に行う必要がある。そこで、ラスタ演算ブロック５０のデプスラスタ演算部は、異なる視点毎に設けられたデプスバッファを用いて、ラスタライズされたピクセルのＺ値と、そのピクセルに付与された視点識別子に対応するデプスバッファに格納された対応するピクセルのＺ値とを比較することでデプステストを行う（Ｓ２４）。
【００４４】
ラスタ演算ブロック５０は、ピクセルのカラー値を求めてカラーバッファ６４に書き込む際、視点毎に分けて書き込む必要がある。そのため、カラーバッファ６４は、異なる視点識別子毎に設けられており、ラスタ演算ブロック５０は、各ピクセルに付与された視点識別子を参照し、ピクセルのカラー値を視点識別子に対応するカラーバッファ６４に書き込む（Ｓ２６）。
【００４５】
以下、図３〜図５を参照して、異なる視点毎に処理を行うための頂点シェーダ１０、Ｚカリング部２６、およびラスタ演算ブロック５０の構成を説明する。ここでは、説明の便宜のため、４つの視点Ａ〜Ｄから見た場合の描画処理を同時に実行する構成を説明するが、視点の数はこれに限られない。
【００４６】
図３は、頂点シェーダ１０の構成図である。頂点シェーダ１０は、頂点プロセッサ１２と頂点演算部１４を含む。頂点プロセッサ１２は、オブジェクトの座標をローカル座標系からワールド座標系へ変換する処理、オブジェクトを構成するプリミティブの頂点属性を生成する処理、光源に関する処理など、視点の違いには関係しない共通の頂点処理を実行する。
【００４７】
頂点演算部１４は、複数の頂点パイプ１６ａ〜１６ｈを含み、頂点計算をパイプライン処理する。複数の頂点パイプ１６ａ〜１６ｈに対して、異なるインストラクションを与えれば、異なる頂点計算を実行することができる。そこで、オブジェクトを異なる視点から見た場合のプリミティブの頂点情報を生成するために、これらの頂点パイプ１６ａ〜１６ｈに対して、異なるインストラクション１８ａ〜１８ｄを与える。ここで、頂点パイプ１６ａ〜１６ｈが同期することで、一度のポリゴン情報の読み込みで複数の視点から見た場合のプリミティブの頂点情報を同時に生成することができる。
【００４８】
ここでは、４つの視点Ａ〜Ｄから見た場合のプリミティブの頂点情報を生成するため、視点Ａに対応するインストラクションＡ（符号１８ａ）を第１、第２頂点パイプ（符号１６ａ、１６ｂ）に与え、視点Ｂに対応するインストラクションＢ（符号１８ｂ）を第３、第４頂点パイプ（符号１６ｃ、１６ｄ）に与え、視点Ｃに対応するインストラクションＣ（符号１８ｃ）を第５、第６頂点パイプ（符号１６ｅ、１６ｆ）に与え、視点Ｄに対応するインストラクションＤ（符号１８ｄ）を第７、第８頂点パイプ（符号１６ｇ、１６ｈ）に与える。
【００４９】
一例として、視点位置が同じで視点方向だけを異ならせてプリミティブの頂点情報を生成する場合は、上述のビューイング変換行列において、視点方向を示すベクトル（Ｄｘ、Ｄｙ、Ｄｚ）を変更すればよい。それは、上述のビューイング変換行列において、Ｙ軸方向の回転角αとＸ軸方向の回転角βの２つのパラメータを変更することである。したがって、視点Ａ〜Ｄに対応するインストラクションＡ〜Ｄとして、回転角α、βが異なるビューイング変換行列にもとづいた座標変換を実行するための命令コードを与えればよい。これにより、各頂点パイプ１６ａ〜１６ｈは、頂点プロセッサ１２から与えられる同一のオブジェクトのワールド座標系における座標情報から、異なる視点から見た場合のプリミティブの頂点情報を計算することができる。
【００５０】
このように、異なる視点に対応するインストラクションＡ〜Ｄとして、視点毎のカメラセッティングや、各視線方向に応じた視錐台（ビューフラスタム;view frustum）を設定するためのコマンド列やパラメータを与える。
【００５１】
各頂点パイプ１６ａ〜１６ｈは、インストラクションＡ〜Ｄにしたがった頂点処理の後、各カメラセッティングに応じたカリングやクリッピングなどの処理を行い、生成されたプリミティブの頂点情報にどの視点から見たものであるかを示す視点識別子を付与した上で、プリミティブの頂点情報をラスタライザ２０に与える。
【００５２】
頂点シェーダ１０から入力された視点識別子付きのプリミティブは、ラスタライザ２０のセットアップ部２２に入力され、ラスタライズに必要なパラメータが設定され、さらにコースラスタ部２４に入力され、タイル単位でラスタライズされる。コースラスタ部２４において、プリミティブがタイル単位でラスタライズされたとき、タイル内の各ピクセルには視点識別子が付与される。コースラスタ部２４により各ピクセルに視点識別子が付与されたタイルはＺカリング部２６に入力される。
【００５３】
図４は、ラスタライザ２０のＺカリング部２６の構成図である。Ｚカリング部２６は、識別子分配部３４、カリング判定部３０ａ〜３０ｄ、およびＺカリングメモリ３２ａ〜３２ｄを含む。カリング判定部３０ａ〜３０ｄとＺカリングメモリ３２ａ〜３２ｄは、異なる視点毎に設けられる。識別子分配部３４は、コースラスタ部２４からプリミティブをラスタライズして得られたタイルを取得し、タイルの視点識別子を参照して、タイルを対応する視点識別子のカリング判定部３０ａ〜３０ｄに分配する。
【００５４】
まず、視点の違いは無視して、カリング判定部３０ａ〜３０ｄとＺカリングメモリ３２ａ〜３２ｄの構成と動作を説明する。以下、視点の違いを無視して説明するときは、符号ａ〜ｄを省略する。
【００５５】
各カリング判定部３０は、与えられたタイルに対して、タイル単位でＺカリング判定を行う。各Ｚカリングメモリ３２には、ラスタ演算ブロック５０がデプスバッファ６２に書き込む描画処理後のピクセルのＺ値がフィードバックされ、既に格納されたＺ値が更新される。Ｚカリングメモリ３２は、タイル単位でＺ値を格納した縮小Ｚバッファであり、各タイルの代表Ｚ値が格納される。タイルの代表Ｚ値は、タイル内のピクセルの最大のＺ値（最も遠くにあるピクセルのＺ値）である。ここで、Ｚ値は視点位置は０であり、視点から遠くなるほど大きくなる。
【００５６】
タイルの代表Ｚ値Ｚｆａｒは、デプスバッファ６２に保持された描画処理後のピクセルのＺ値をタイル単位で見た場合にタイル内で最も遠くにあるピクセルのＺ値である。カリング判定部３０は、ラスタライズされたタイルの各ピクセルのＺ値の内、最小のＺ値Ｚｍｉｎ（すなわち、タイル内で最も手前にあるＺ値）が、Ｚカリングメモリ３２に保持されたタイルの代表Ｚ値Ｚｆａｒよりも大きい場合、そのタイルは既に描画されたプリミティブの背後にあって表示されないから、カリングする。
【００５７】
カリング判定部３０は、このＺカリング判定に合格した（Ｚカリングされない）タイルをファインラスタ部２８に渡し、Ｚカリング判定に不合格であった（Ｚカリングされた）タイルはファインラスタ部２８に渡さない。
【００５８】
次に、カリング判定部３０とＺカリングメモリ３２の視点に依存する構成を説明する。４つのカリング判定部３０ａ、３０ｂ、３０ｃ、３０ｄ、および４つのＺカリングメモリ３２ａ、３２ｂ、３２ｃ、３２ｄが、それぞれ４視点Ａ、Ｂ、Ｃ、Ｄに対応して設けられる。Ｚカリングメモリ３２ａ、３２ｂ、３２ｃ、３２ｄには、それぞれ視点Ａ、Ｂ、Ｃ、Ｄに対応して設けられたデプスバッファＡ、Ｂ、Ｃ、Ｄから描画処理後のピクセルのＺ値がフィードバックされ、視点Ａ、Ｂ、Ｃ、Ｄから見た場合のプリミティブのタイルのＺ値が更新される。視点Ａ、Ｂ、Ｃ、Ｄに対応するカリング判定部３０ａ、３０ｂ、３０ｃ、３０ｄは、それぞれＺカリングメモリ３２ａ、３２ｂ、３２ｃ、３２ｄを参照して、視点Ａ、Ｂ、Ｃ、ＤのタイルについてＺカリング判定を行う。
【００５９】
図５は、ラスタ演算ブロック５０とローカルメモリ６０の構成を説明する図である。ラスタ演算ブロック５０は、予備ラスタ演算部（ＰｒｅＲＯＰ）５２、デプスラスタ演算部（ＺＲＯＰ）５４ａ〜５４ｄ、カラーラスタ演算部（ＣＲＯＰ）５６、およびアドレス生成器５８を含む。予備ラスタ演算部５２とカラーラスタ演算部５６は、視点の違いに関係なく処理を進めることができるため、１つしか設けられないが、デプスラスタ演算部５４ａ〜５４ｄは、視点によって奥行き方向の値が異なるため、視点毎に設けられる。ここでは、４視点Ａ〜Ｄに対応して４つのデプスラスタ演算部５４ａ〜５４ｄが設けられる。
【００６０】
ローカルメモリ６０は、４視点Ａ〜Ｄに応じて４つに領域が分けられたカラーバッファ６４（カラーバッファＡ〜Ｄ）と、同じく４視点Ａ〜Ｄに応じて４つに領域が分けられたデプスバッファ６２（デプスバッファＡ〜Ｄ）を含む。
【００６１】
予備ラスタ演算部５２は、アルファテスト、ステンシルテストなどの演算を行う。予備ラスタ演算部５２で処理されたピクセルは、ピクセルに付与された視点識別子に応じて、視点毎に設けられたデプスラスタ演算部５４ａ〜５４ｄに割り振られる。
【００６２】
各デプスラスタ演算部５４ａ〜５４ｄは、各視点Ａ〜Ｄに対応したデプスバッファＡ〜Ｄから描画処理後の対応ピクセルのＺ値を読み出すために、ラスタライズされたピクセルの視点識別子を付与したリード（Read）命令をアドレス生成器５８に与える。アドレス生成器５８は、リード命令に付与された視点識別子に応じて、ローカルメモリ６０のデプスバッファＡ〜Ｄのいずれかを参照するために視点識別子に応じたオフセットによるアドレス変換を行い、視点識別子に対応するデプスバッファＡ〜Ｄから対応ピクセルのＺ値を読み出して、各デプスラスタ演算部５４ａ〜５４ｄに与える。
【００６３】
各デプスラスタ演算部５４ａ〜５４ｄは、デプスバッファＡ〜Ｄから読み出された対応ピクセルのＺ値と、ラスタライズされたピクセルのＺ値とを比較し、ラスタライズされたピクセルの方が手前にあれば、カラーラスタ演算部５６にピクセルを渡す。また、各デプスラスタ演算部５４ａ〜５４ｄは、早期Ｚカリング（Early Z Culling）に必要となるＺ値の情報をＺカリング部２６の対応する視点のＺカリングメモリ３２ａ〜３２ｄに供給する。
【００６４】
カラーラスタ演算部５６は、ピクセルのカラー値を求め、各視点Ａ〜Ｄに対応したカラーバッファＡ〜Ｄにピクセルのカラー値を書き込むために、ピクセルの視点識別子を付与したライト（Write）命令をアドレス生成器５８に与える。アドレス生成器５８は、ライト命令に付与された視点識別子に応じて、ローカルメモリ６０のカラーバッファＡ〜Ｄのいずれかを参照するために視点識別子に応じたオフセットによるアドレス変換を行い、視点識別子に対応するカラーバッファＡ〜Ｄにピクセルのカラー値を書き込む。
【００６５】
図６および図７を参照して、本実施の形態の描画処理装置による描画処理の一例を説明する。
【００６６】
図６は、一つのシーン内に配置されたオブジェクトを示す。池４００の周りに、家４１０ａ、木４１０ｂ、４１０ｃ、４１０ｄ、ブランコ４１０ｅ、ベンチ４１０ｆがある。池４００の水面に周囲のオブジェクト４１０ａ〜４１０ｆが映り込んだ様子を描画するために、グラフィックスプロセッサ１００は上述の構成を用いて、周囲のオブジェクト４１０ａ〜４１０ｆのポリゴン情報の入力を一回だけ受けて、４つの異なる視線方向Ａ〜Ｄを設定したビューイング変換行列のもとで４視線方向から見た周囲のオブジェクトの描画処理を一度に行う。各視線方向Ａ〜Ｄから見た描画結果は、テクスチャとしてローカルメモリ６０のカラーバッファＡ〜Ｄに書き込まれる。その後、フラグメントシェーダ４０は、テクスチャマッピングにより、各視線方向Ａ〜Ｄの描画結果のテクスチャを池４００の水面にマッピングする。
【００６７】
図７は、図６と同一の環境であるが、中央に自動車４３０がある。自動車４３０のボディ表面には周囲の環境が映り込む。自動車４３０を囲むキューブ４４０を想定し、グラフィックスプロセッサ１００は、共通のワールド座標系で与えられた周囲のオブジェクト４１０ａ〜４１０ｆのポリゴン情報に対して、キューブ４４０の各面の方向に視線方向を変えながらビュー座標系に変換し、各視線方向から見た場合の周囲のオブジェクト４１０ａ〜４１０ｆの描画結果をテクスチャとしてローカルメモリ６０のカラーバッファ６４に書き込む。この場合、カラーバッファ６４は６面分必要であり、６視線方向分の頂点演算部１４、Ｚカリング部２６、デプスラスタ演算部５４の構成が必要になる。キューブマップの６方向のテクスチャが得られると、次にフラグメントシェーダ４０は、キューブマッピングの手法により、自動車４３０のボディ表面にキューブのテクスチャを貼り付ける。
【００６８】
図６および図７のように映り込みを表現する別の例として、たとえば、車のドアミラーやバックミラーに映っている像を描画する場合がある。グラフィックスプロセッサ１００は、同一シーンの周囲のオブジェクトのポリゴン情報の入力を受けて、車の前方を見る視線方向の描画と、車のドアミラーやバックミラーに映るべき後方を見る視線方向の描画とを同時に行うことができる。また、さらに別の例として、オブジェクト同士が互いに表面に映り込む場合などがある。この場合、同じオブジェクト群のポリゴン情報に対して、第１オブジェクトから第２オブジェクトを見る視線方向からの描画と、それとは反対に、第２オブジェクトから第１オブジェクトを見る視線方向からの描画とが同時になされる。
【００６９】
また、本実施の形態の描画処理技術は、映り込み以外に、同一シーン内のオブジェクトに対して異なる視点からの描画処理を実行したい場合に適用することができる。たとえば、対戦型ゲームにおいて、自分の視点から見た周囲の状況と、相手の視点から見た周囲の状況を同時に描画して、２画面表示する場合にも適用することができる。また、仮想世界をユーザの疑似キャラクターが探索する場合、各ユーザから見た仮想世界の様子を同時の描画する場合にも適用することができる。
【００７０】
レイトレーシングでは、光線を追跡してお互いの映り込みを正確に描画する際、同一のオブジェクトのポリゴン情報に対して何度も演算を繰り返すが、本実施の形態の描画処理技術は、レイトレーシングでこのように描画演算を繰り返す場合にも適用することができる。
【００７１】
また、図６および図７の例では、視点位置を同じにして、視線方向だけを変えたが、本実施の形態は、視線方向は変えずに視点位置を異ならせて描画する場合にも適用することができる。そのような例として、視線方向を同じにして、視点位置をオブジェクトに近づけた場合と、視点位置をオブジェクトから遠ざけた場合の両方のカメラセッティングを行い、オブジェクトを近くから見た場合の画像と、オブジェクトを遠くから見た場合の画像を同時に生成するようにしてもよい。もちろん、視点位置と視線方向を両方とも異ならせたカメラセッティングのもとで描画を行ってもよい。
【００７２】
以上述べたように、本実施の形態によれば、複数の異なるビューイング変換行列を設定して同一シーンのオブジェクトを一度に異なる視点位置または視線方向から描画してバッファに書き込むマルチレンダーターゲット（ＭＲＴ；Multi-Render Target）のレンダリングシステムを提供することができる。これにより、あたかも一つのシーンを描画しているかのように、異なる視点位置または視線方向から見た描画結果を一度に生成することができる。
【００７３】
通常、同じオブジェクトに対して視点位置や視線方向を変えて描画するには、異なる視点位置または視線方向の度にオブジェクトのポリゴン情報を入力して、頂点処理、ラスタライズ処理、シェーディング処理を繰り返すマルチパスレンダリングが必要になるが、本実施の形態では、これを１パスで実行することができ、処理効率が良い。
【００７４】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７５】
上記の実施の形態では、視点毎に異なる演算が必要な処理では視点の数に応じた並列演算の構成を用意したが、視点の数と、並列演算の構成数は一致しなくてもよく、視点の数の方が並列演算の構成数より多い場合は、並列演算の構成を何度か繰り返して用いることで代用することができる。また、並列演算の構成が全くなくても、単一の構成において同一の入力データに対してパラメータを変えて演算を何度か繰り返すことで同様の目的を達成することができる。
【００７６】
上記の実施の形態では、グラフィックスプロセッサ１００の頂点シェーダ１０、ラスタライザ２０、フラグメントシェーダ４０、およびラスタ演算ブロック５０が描画処理を行ったが、グラフィックスプロセッサ１００を用いないで、メインプロセッサ２００がすべての描画処理を実行してもよい。特にメインプロセッサ２００がマルチプロセッサシステムである場合、その十分な処理性能を用いて描画処理をソフトウエアで実行することができる。その場合、グラフィックスプロセッサ１００の頂点シェーダ１０、ラスタライザ２０、フラグメントシェーダ４０、およびラスタ演算ブロック５０の各構成は、メインプロセッサ２００で実行されるプログラムモジュールの機能として提供される。
【図面の簡単な説明】
【００７７】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１の描画処理装置による描画処理手順を示すフローチャートである。
【図３】図１の頂点シェーダの構成図である。
【図４】図１のラスタライザのＺカリング部の構成図である。
【図５】図１のラスタ演算ブロックとローカルメモリの構成を説明する図である。
【図６】本実施の形態の描画処理装置による描画処理の一例を説明する図である。
【図７】本実施の形態の描画処理装置による描画処理の別の例を説明する図である。
【符号の説明】
【００７８】
１０  頂点シェーダ、  １２  頂点プロセッサ、  １４  頂点演算部、  １６  頂点パイプ、  １８  インストラクション、  ２０  ラスタライザ、  ２２  セットアップ部、  ２４  コースラスタ部、  ２６  Ｚカリング部、  ２８  ファインラスタ部、  ３０  カリング判定部、  ３２  Ｚカリングメモリ、  ３４  識別子分配部、  ４０  フラグメントシェーダ、  ５０  ラスタ演算ブロック、  ５２  予備ラスタ演算部、  ５４  デプスラスタ演算部、  ５６  カラーラスタ演算部、  ５８  アドレス生成器、  ６０  ローカルメモリ、  ６２  デプスバッファ、  ６４  カラーバッファ、  ７０  ホストＩ／Ｆ、  １００  グラフィックスプロセッサ、  ２００  メインプロセッサ、  ３００  メインメモリ。
【図１】
2008282171.tif 000007
【図２】
2008282171.tif 000008
【図３】
2008282171.tif 000009
【図４】
2008282171.tif 000010
【図５】
2008282171.tif 000011
【図６】
2008282171.tif 000012
【図７】
2008282171.tif 000013