(57)【要約】【課題】視点から見えないオブジェクトを効率良くカリングするのは難しい。【解決手段】グラフィックスプロセッサ１００は、ラスタライザ２０とフラグメントシェーダ４０を含む。ラスタライザ２０は、描画対象のオブジェクトを構成するプリミティブをラスタライズしてピクセル単位に分解されたフラグメントを生成する。フラグメントシェーダ４０は、ラスタライザ２０により生成されたフラグメントに対して演算処理を行う。ラスタライザ２０のＺカリング部２６は、プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定し、カリングされたプリミティブの識別情報をオブジェクトを生成するメインプロセッサ２００に通知する。【選択図】図１
2008282170.tif 000002
【特許請求の範囲】
【請求項１】
メインプロセッサとグラフィックスプロセッサを含む描画処理装置であって、
前記メインプロセッサは、描画対象のオブジェクトを生成して前記グラフィックスプロセッサに供給する機能を有し、
前記グラフィックスプロセッサは、
前記オブジェクトを構成するプリミティブをピクセル単位に分解したフラグメントを生成するラスタライザと、
前記ラスタライザにより生成されたフラグメントに対して演算処理を行うフラグメントシェーダとを含み、
前記ラスタライザは、
プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定し、カリングされたプリミティブの識別情報を前記メインプロセッサに通知するＺカリング部を含むことを特徴とする描画処理装置。
【請求項２】
前記メインプロセッサは、
前記Ｚカリング部から現フレームにおいてカリングされたプリミティブの識別情報を取得し、現フレームにおいてカリングされたプリミティブから構成されるオブジェクトは、次のフレームの描画の際、前記グラフィックスプロセッサに供給しないように制御する機能を有することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記メインプロセッサは、
前記Ｚカリング部から現フレームにおいてカリングされたプリミティブの識別情報を取得し、現フレームにおいてカリングされたプリミティブから構成されるオブジェクトについては、動き計算を簡略化する機能を有することを特徴とする請求項１に記載の描画処理装置。
【請求項４】
前記オブジェクトは、複数のパーティクルの集合体における個々のパーティクルであることを特徴とする請求項１から３のいずれかに記載の描画処理装置。
【請求項５】
描画対象のオブジェクトを構成するプリミティブをラスタライズしてピクセル単位に分解されたフラグメントを生成するラスタライザと、
前記ラスタライザにより生成されたフラグメントに対して演算処理を行うフラグメントシェーダとを含み、
前記ラスタライザは、
プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定し、カリングされたプリミティブの識別情報を前記オブジェクトを生成するプロセッサに通知するＺカリング部を含むことを特徴とするグラフィックスプロセッサ。
【請求項６】
グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得するステップと、
現フレームにおいてＺカリングすべきと判定されたプリミティブから構成されるオブジェクトは、次のフレームの描画の際、前記グラフィックスプロセッサに供給しないように制御するステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項７】
グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得するステップと、
現フレームにおいてＺカリングすべきプリミティブから構成されるオブジェクトについては、次のフレームにおける位置を決定する計算を簡略化するステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項８】
グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得し、現フレームにおいてＺカリングすべきと判定されたプリミティブから構成されるオブジェクトは、次のフレームの描画の際、前記グラフィックスプロセッサに供給しないように制御することを特徴とする描画処理方法。
【請求項９】
グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得し、現フレームにおいてＺカリングすべきプリミティブから構成されるオブジェクトについては、動き計算を簡略化することを特徴とする描画処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はグラフィックスプロセッサ、描画処理装置および描画処理方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスにおいて３次元オブジェクトを描画する際、他のオブジェクトに隠れて見えない面を消去する隠面消去処理がなされる。代表的な隠面消去処理の一つにＺバッファ法がある。Ｚバッファ法では、画面のピクセル毎に奥行き情報であるＺ値を格納したＺバッファから各ピクセルのＺ値を取り出し、その後処理するピクセルがこのＺ値より手前であれば描画し、後方であれば描画処理をキャンセルすることで隠面消去処理を行う。
【０００３】
ピクセル処理に入る前のフラグメント生成の段階において、隠れて見えないフラグメントを除外する早期Ｚカリング（Early Z Culling）や、解像度の異なるＺバッファを階層的に積み上げた階層的Ｚバッファを用いたＺカリング（「階層的Ｚカリング」（Hierarchical Z Culling）と呼ばれる）により、隠面消去処理の効率化が図られる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
オブジェクトの形状が複雑になり、頂点数が増えると、頂点属性を生成するための処理負荷が増大し、頂点シェーダが処理のボトルネックとなる。早期Ｚカリングは、頂点シェーダで座標変換された後、ラスタライズの段階で実行されるため、頂点シェーダの処理負荷を減らすことにはならない。そこで、グラフィックスプロセッサにオブジェクトのポリゴン情報を投入する前のもっと早い段階で、オブジェクトのカリングを行い、頂点の処理を省略する技術が必要となる。
【０００５】
グラフィックスプロセッサにオブジェクトを投入するよりも前の段階で、オブジェクトをカリングする従来の方法として、オクルージョンカリングがある。オクルージョンカリングでは、オブジェクト間の前後関係を判定し、あるオブジェクトが他のオブジェクトの背後に完全に隠れる場合は、そのオブジェクトを描画対象から外す。これには、ラスタライズ処理の前に、あるオブジェクトがスクリーン座標上で他のオブジェクトによって完全に隠蔽されるかどうかを検出する計算処理が必要となり、最近の３次元グラフィックスのように描画対象となるオブジェクトの数が莫大になり、オブジェクト間の前後関係が複雑になってくると、オクルージョンカリングの判定処理は困難になってくる。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、描画対象にすべきオブジェクトを適切に選び、描画処理を効率良く実行するための描画処理技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様の描画処理装置は、メインプロセッサとグラフィックスプロセッサを含む描画処理装置であって、前記メインプロセッサは、描画対象のオブジェクトを生成して前記グラフィックスプロセッサに供給する機能を有する。前記グラフィックスプロセッサは、前記オブジェクトを構成するプリミティブをピクセル単位に分解したフラグメントを生成するラスタライザと、前記ラスタライザにより生成されたフラグメントに対して演算処理を行うフラグメントシェーダとを含む。前記ラスタライザは、プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定し、カリングされたプリミティブの識別情報を前記メインプロセッサに通知するＺカリング部を含む。
【０００８】
前記オブジェクトは、複数のパーティクルの集合体における個々のパーティクルであってもよい。
【０００９】
本発明の別の態様は、グラフィックスプロセッサである。このグラフィックスプロセッサは、描画対象のオブジェクトを構成するプリミティブをラスタライズしてピクセル単位に分解されたフラグメントを生成するラスタライザと、前記ラスタライザにより生成されたフラグメントに対して演算処理を行うフラグメントシェーダとを含む。前記ラスタライザは、プリミティブをラスタライズして得られるピクセルのＺ値と、Ｚバッファに格納された対応するピクセルのＺ値とを比較するデプステストにより、当該プリミティブを後段の処理に渡さずにカリングするかどうかを判定し、カリングされたプリミティブの識別情報を前記オブジェクトを生成するプロセッサに通知するＺカリング部を含む。
【００１０】
本発明のさらに別の態様は、描画処理方法である。この方法は、グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得し、現フレームにおいてＺカリングすべきと判定されたプリミティブから構成されるオブジェクトは、次のフレームの描画の際、前記グラフィックスプロセッサに供給しないように制御する。
【００１１】
本発明のさらに別の態様もまた、描画処理方法である。この方法は、グラフィックスプロセッサから現フレームにおいてＺカリングすべきと判定されたプリミティブの識別情報を取得し、現フレームにおいてＺカリングすべきプリミティブから構成されるオブジェクトについては、動き計算を簡略化する。
【００１２】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１３】
本発明によれば、オブジェクトの描画処理の効率化を図ることができる。
【発明を実施するための最良の形態】
【００１４】
本発明の実施の形態の描画処理技術の概要を説明する。オブジェクトを描画処理に投入する前の早い段階でオクルージョンカリングするために、グラフィックスプロセッサでＺカリングテストに不合格であったプリミティブ、すなわち現フレームでは他のオブジェクトに隠れて見えないと判定されてカリングされたプリミティブの情報を取得する。現フレームにおいてＺカリングされたプリミティブのみからなるオブジェクトは次のフレームでも他のオブジェクトに隠れて見えない可能性が高いため、描画処理に投入しないように制御する。現フレームにおいてＺカリングされたプリミティブのみからなるオブジェクトであって、次のフレームの描画処理に投入されないオブジェクトを「非描画オブジェクト」という。
【００１５】
一つ前のフレームの描画の際のＺカリングの情報であっても、その情報を信頼してその後のフレームでも非描画オブジェクトはカリングされるものと仮定して、最初から描画処理に投入しないことで描画処理の負荷を軽減することができる。厳密には次のフレームで非描画オブジェクトが他のオブジェクトの背後から現れて見えるようになることもありうるが、１フレーム分の遅れが問題にならない場合はこれでも十分である。
【００１６】
非描画オブジェクトは、次のフレームでは表示されないが、静止しているわけではないので、オブジェクトの位置を動かす計算は必要である。オブジェクトの動きが複雑である場合、多数のオブジェクトの動きをリアルタイムで計算することは処理負荷が高い。そこで、非描画オブジェクトの動き計算は適宜簡略化して近似的な位置を求めるようにする。
【００１７】
他のオブジェクトによって見えないオブジェクトについては、その動きを簡略化計算により求めておき、そのオブジェクトが見えるようになった時点で厳密な動き計算に切り替える。これにより、厳密な動きをシミュレーションしているわけではないが、見た目はあたかも動き計算を実行しているかのような視覚効果を得ることができる。このような簡略化計算の技術は、ゲームなど正確な動きシミュレーションは必要ではないが、多数のオブジェクトをリアルタイムで計算して、表示させるアプリケーションには有効である。
【００１８】
図１は、実施の形態に係る描画処理装置の構成図である。描画処理装置は、描画対象となるオブジェクトの３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理を行う。
【００１９】
メインプロセッサ２００は、メインメモリ３００からオブジェクトのポリゴンモデル情報を読み出し、オブジェクトの動きをシミュレーションしてオブジェクトの位置を更新し、グラフィックスプロセッサ１００にオブジェクトのポリゴン情報を与える。
【００２０】
グラフィックスプロセッサ１００は、ホストインタフェース（Ｉ／Ｆ）７０を介してメインプロセッサ２００からオブジェクトのポリゴン情報を取得し、頂点シェーダ１０に入力する。
【００２１】
頂点シェーダ１０は、メインプロセッサ２００から受け取ったオブジェクトのポリゴン情報をもとに、オブジェクトを構成する１つ以上のプリミティブの頂点座標とパラメータを含むストリームを生成する。プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位である。
【００２２】
ラスタライザ２０は、セットアップ部２２、コースラスタ部２４、Ｚカリング部２６、およびファインラスタ部２８を含む。
【００２３】
セットアップ部２２は、プリミティブのストリームをデジタル微分解析器（Digital Differential Analyzer；ＤＤＡ）により処理するための各種パラメータのセットアップを行う。具体的には、プリミティブを含む空間を区切るバウンディングボックスの設定や、エッジ係数などＤＤＡ処理の各種パラメータの設定を行う。
【００２４】
プリミティブは一例として三角形の形状であり、ＤＤＡは、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、ラスタライン毎に量子化されたピクセルに変換する。ＤＤＡにより、プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２５】
コースラスタ部２４は、セットアップ部２２による設定にもとづいて、頂点シェーダ１０から取得されたプリミティブの頂点データをＤＤＡ処理し、プリミティブをタイルに変換する。ここで、タイルは、ピクセルの矩形集合であり、たとえば、縦横８ピクセルの合計６４ピクセルの集合である。コースラスタ部２４により、プリミティブはタイルという粗い単位でラスタライズされる。
【００２６】
一般に、プリミティブの表面積が大きいほど、そのプリミティブをピクセル化した場合のピクセル数が増える。また、プリミティブが視点から近い位置にあって、プリミティブを高い詳細度レベルで描画する必要がある場合は、プリミティブから生成されるピクセル数は増える。頂点シェーダ１０においては、頂点データでプリミティブが表されているため、データ量は少ないが、ＤＤＡによりピクセル化処理した後は、ピクセル数が増大し、データ量が増える。
【００２７】
そこで、コースラスタ部２４によりいったん粗い単位でラスタライズしておき、後段のＺカリング部２６において、すでに処理済みのピクセルの奥行き方向の位置を示すＺ値（デプス（depth）値とも呼ばれる）と比較して、タイルのカリングを行い、カリングされたタイルは後段のファインラスタ部２８には渡さないようにする。これにより、既に描画されたプリミティブの背後にあるため、視点から見えないタイルについてはファインラスタ部２８による細かい単位でのラスタライズ処理や、フラグメントシェーダ４０による描画処理を省略し、処理効率を高めることができる。
【００２８】
ファインラスタ部２８は、コースラスタ部２４によってラスタライズされたタイルの内、Ｚカリング部２６によりＺカリングされなかったタイル、言い換えればＺカリングテストを合格したタイルを取得し、ピクセルに変換する。ファインラスタ部２８により、プリミティブは最小のピクセル単位で細かくラスタライズされる。ファインラスタ部２８は、こうしてプリミティブをラスタライズして得られるピクセルをフラグメントシェーダ４０に与える。
【００２９】
フラグメントシェーダ４０は、プリミティブをピクセル単位に分割して得られるフラグメントに対して描画処理を行う。フラグメントシェーダ４０は、ラスタライザ２０により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値とデプス値を算出する。さらに、テクスチャマッピングを行う場合は、テクスチャのカラー値を合成して最終的なピクセルのカラー値を算出する。
【００３０】
ラスタ演算ブロック５０は、フラグメントに対してブレンディング、アルファテスト、デプステストを実行し、最終的なピクセルのカラー値を求め、レンダリングの結果をローカルメモリ６０に設けられたカラーバッファ６４にピクセルデータを書き込む。また、ラスタ演算ブロック５０は、各ピクセルのＺ値をデプスバッファ６２に格納するとともに、Ｚカリング部２６に各ピクセルのＺ値を供給する。
【００３１】
カラーバッファ６４は、ピクセルデータをスクリーン座標に対応づけて格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。カラーバッファ６４に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００３２】
図２は、Ｚカリング部２６の構成図である。Ｚカリング部２６は、カリング判定部３０、Ｚカリングメモリ３２、プリミティブカリングロジック３４、およびプリミティブカリングメモリ３６を含む。
【００３３】
カリング判定部３０は、コースラスタ部２４からプリミティブをラスタライズして得られたタイルを取得し、タイル単位でＺカリング判定を行う。Ｚカリングメモリ３２には、ラスタ演算ブロック５０がデプスバッファ６２に書き込む描画処理後のピクセルのＺ値がフィードバックされ、既に格納されたＺ値が更新される。Ｚカリングメモリ３２は、タイル単位でＺ値を格納した縮小Ｚバッファであり、各タイルの代表Ｚ値が格納される。タイルの代表Ｚ値は、タイル内のピクセルの最大のＺ値（最も遠くにあるピクセルのＺ値）である。ここで、Ｚ値は視点位置は０であり、視点から遠くなるほど大きくなる。
【００３４】
タイルの代表Ｚ値Ｚｆａｒは、デプスバッファ６２に保持された描画処理後のピクセルのＺ値をタイル単位で見た場合にタイル内で最も遠くにあるピクセルのＺ値である。カリング判定部３０は、ラスタライズされたタイルの各ピクセルのＺ値の内、最小のＺ値Ｚｍｉｎ（すなわち、タイル内で最も手前にあるＺ値）が、Ｚカリングメモリ３２に保持されたタイルの代表Ｚ値Ｚｆａｒよりも大きい場合、そのタイルは既に描画されたプリミティブの背後にあって表示されないから、カリングする。
【００３５】
カリング判定部３０は、このＺカリング判定に合格した（Ｚカリングされない）タイルをファインラスタ部２８に渡し、Ｚカリング判定に不合格であった（Ｚカリングされた）タイルはファインラスタ部２８に渡さない。
【００３６】
プリミティブカリングロジック３４は、プリミティブを構成する１つ以上のタイルがすべてＺカリングされたかどうかを判定する論理回路を備え、すべてのタイルがＺカリングされた場合は、プリミティブカリングメモリ３６に１を、そうでない場合は０を書き込む。プリミティブを構成するすべてのタイルがＺカリングされたプリミティブを「Ｚカリングされたプリミティブ」と呼ぶ。Ｚカリングされたプリミティブは、現フレームにおいて、他のオブジェクトの背後にあって表示されないプリミティブである。
【００３７】
プリミティブカリングメモリ３６は、プリミティブの識別情報に対応づけてそのプリミティブがＺカリングされたものであるかどうかを示す１ビットの情報（Ｚカリングされた場合は１、そうでない場合は０）を記憶する。Ｚカリング部２６は、プリミティブカリングメモリ３６を参照して、Ｚカリングされたプリミティブ（ビットが１であるプリミティブ）の識別情報をホストＩ／Ｆ７０を介してメインプロセッサ２００に通知する。
【００３８】
図３は、メインプロセッサ２００の機能構成図である。同図は機能に着目したブロック図を描いており、これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現することができる。
【００３９】
メインプロセッサ２００には、オブジェクトカリングロジック２１０、物理シミュレーション部２２０、オブジェクト供給部２４０の各機能が実現される。オブジェクトカリングロジック２１０は、Ｚカリングされたプリミティブの識別情報を取得して、オブジェクトを構成するすべてのプリミティブが現フレームでＺカリングされたものであるかどうかを判定する論理回路である。
【００４０】
オブジェクトを構成するすべてのプリミティブが現フレームでＺカリングされたものである場合、そのオブジェクトを「非描画オブジェクト」という。非描画オブジェクトは、現フレームにおいて、他のオブジェクトの背後にあって表示されないオブジェクトであるが、そのオブジェクトは、次のフレームでも同様に他のオブジェクトの背後にあって表示されない可能性が高い。オブジェクトカリングロジック２１０は非描画オブジェクトの識別情報を物理シミュレーション部２２０に与える。
【００４１】
物理シミュレーション部２２０は、メインメモリ３００からオブジェクトのポリゴン情報を取得し、運動方程式などの計算モデルにしたがってオブジェクトを動作させ、オブジェクトの位置を更新する。
【００４２】
物理シミュレーション部２２０は、簡略計算部２３０と通常計算部２３２を含む。オブジェクトカリングロジック２１０により非描画オブジェクトであると判定されたオブジェクトは簡略計算部２３０によって動きが計算され、それ以外のオブジェクトは通常計算部２３２によって動きが計算される。
【００４３】
通常計算部２３２は、運動方程式などの計算モデルにしたがってオブジェクトの加速度および／または速度を計算し、得られた加速度および／または速度をもとに、次のフレームにおけるオブジェクトの位置を求め、オブジェクトの新しい位置をメインメモリ３００に書き込む。
【００４４】
簡略計算部２３０は、通常計算部２３２の行う計算を簡略化して、次のフレームにおけるオブジェクトの近似位置を求める。具体的には、通常計算部２３２の計算モデルが等加速度運動である場合、簡略計算部２３０は計算モデルを等速運動で代用して計算を簡略化する。
【００４５】
非描画オブジェクトについては、簡略計算部２３０によって簡略化された計算モデルにしたがって、オブジェクトの位置が近似的に算出され、更新されるが、表示はされない。将来、そのオブジェクトが表示されるようになったとき、オブジェクトは近似的に更新された位置から表示が開始される。
【００４６】
オブジェクト供給部２４０は、通常計算部２３２により位置が更新されたオブジェクトをホストＩ／Ｆ７０を介してグラフィックスプロセッサ１００に描画処理のために投入する。オブジェクト供給部２４０は、簡略計算部２３０によって近似位置が算出された非描画オブジェクトについては、グラフィックスプロセッサ１００に投入しない。
【００４７】
図４は、上記の構成のメインプロセッサ２００による処理手順を示すフローチャートである。オブジェクトカリングロジック２１０は、グラフィックスプロセッサ１００のＺカリング部２６から、現フレームにおいてＺカリングされたプリミティブの識別情報を取得する（Ｓ１０）。
【００４８】
オブジェクトカリングロジック２１０は、オブジェクトを構成するすべてのプリミティブが現フレームでＺカリングされたものであるかどうかを判定し（Ｓ１２）、オブジェクトを構成する１以上のプリミティブの内、Ｚカリングされてないものが一つでもあれば（Ｓ１２のＮ）、通常計算部２３２が、オブジェクトの動きを通常通り、正確に計算し、次のフレームにおけるオブジェクトの位置を更新する（Ｓ１４）。そして、オブジェクト供給部２４０は、位置が更新されたオブジェクトを次のフレームの描画のためにグラフィックスプロセッサ１００に投入する（Ｓ１６）。ステップＳ１６の後、処理手順はステップＳ２０に進む。
【００４９】
ステップＳ１２において、オブジェクトを構成するプリミティブがすべてＺカリングされていた場合（Ｓ１２のＹ）、簡略計算部２３０が、オブジェクトの動きの計算を簡略化し、次のフレームにおけるオブジェクトの近似位置を求める（Ｓ１８）。こうして簡略化計算により位置が更新されたオブジェクトはグラフィックスプロセッサ１００に投入されることはない。ステップＳ１８の後、処理手順はステップＳ２０に進む。
【００５０】
ステップＳ２０において、現フレームが最終フレームである場合（Ｓ２０のＹ）、処理手順を終了し、まだ最終フレームではない場合（Ｓ２０のＮ）、ステップＳ１０に戻り、次のフレームについて処理を続ける。
【００５１】
図５および図６を参照して、本実施の形態の描画処理装置による描画処理の一例を説明する。
【００５２】
図５は、オブジェクト４３０、雨粒４００ａ、４００ｂ、４１０、および雲４２０の描画処理例を示す。雲４２０の一部はオブジェクト４３０の背後に隠れており、中央の雨粒４１０も背後に隠れている。
【００５３】
雨粒４００ａ、４００ｂ、４１０は、スプライトと呼ばれる２次元矩形のプリミティブであり、スプライトに雨粒のテクスチャがマッピングすることで描画される。炎や雪、雨のような微小な粒子（パーティクル）の集合体（粒子系）は、１つのパーティクルに１つスプライトを割り当て、スプライト毎に細かい動きを求め、スプライトにテクスチャを貼り付けることで描画される。スプライトは通常、１つのプリミティブである。粒子系については非常に多くのパーティクルを描画することになるが、個々のパーティクルの細かい動きはユーザに注目されることがないから、全体として、おおよそ正しい動きになっていれば十分である。
【００５４】
雲４２０は、複数のパーティクルの集合により表現されるオブジェクトである。同図のように雲４２０は、パーティクル４２２ａ〜４２２ｄと、オブジェクト４３０の背後に隠れるパーティクル４２４ａ、４２４ｂとを含み、パーティクルの集合体で表現される。各パーティクルにはテクスチャがマッピングされる。
【００５５】
一般的な粒子系の動きは、流体力学などの運動方程式を解いて、各パーティクルの位置を更新することで決定される。
（１）まず、時刻ｔ＝０におけるパーティクルの初期位置ｐ（０）、初期速度ｖ（０）を定める。
（２）次に、所定の計算モデルｆ（Ｆ，ｖ，ｔ，…）に従って、現フレーム（時刻ｔ）の加速度ａ（ｔ）を求める。
ａ（ｔ）＝ｆ（Ｆ，ｖ，ｔ，…）
（３）現フレーム（時刻ｔ）における加速度ａ（ｔ）を用いて、次のフレーム（時刻ｔ＋ｄｔ）における速度ｖ（ｔ＋ｄｔ）を求める。
ｖ（ｔ＋ｄｔ）＝ｖ（ｔ）＋ａ（ｔ）＊ｄｔ
（４）現フレーム（時刻ｔ）における速度ｖ（ｔ）を用いて、次のフレーム（時刻ｔ＋ｄｔ）におけるパーティクルの位置ｐ（ｔ＋ｄｔ）を求める。
ｐ（ｔ＋ｄｔ）＝ｐ（ｔ）＋ｖ（ｔ）＊ｄｔ
（５）（２）に戻って繰り返す。
【００５６】
上記の計算手順にでは（２）の計算モデルにしたがって加速度の計算処理が最も重たい。複雑な運動モデルにするほど、粒子系の動きの正確さが増すが、運動モデルにしたがった加速度や速度の計算量が増える。
【００５７】
雨粒４００ａ、４００ｂ、４１０や、雲４２０を構成する各パーティクルは、他のオブジェクトに隠れることなく視点から見えている間は、通常計算部２３２によって流体力学などの運動方程式を正確にシミュレーションして動きを求める。オブジェクト４３０の背後に隠れる雨粒４１０や雲４２０の一部のパーティクル４２４ａ、４２４ｂについては、表示されない間は正確な動きをシミュレーションする必要はなくなるが、オブジェクト４３０の背後から現れたときには表示を開始する必要がある。そこで、オブジェクト４３０の背後に隠れ始めたパーティクルについては、簡略計算部２３０が近似的に動きを求める。たとえば、流体力学の方程式を解く代わりに、等速度直線運動にしたがって位置を更新するだけにする。
【００５８】
簡略化計算の方法としては、加速度や速度を前のフレームにおける加速度や速度の値をそのまま使ってもよい。また、重力の影響を受けるオブジェクトであれば、重力に影響される部分だけを更新してもよい。加速度や速度に定数を使うことで計算を簡略化してもよい。
【００５９】
現フレームでＺカリングされたパーティクル（図５の例では、パーティクル４１０、４２４ａ、４２４ｂ）は、次のフレームでも表示されない可能性が高く、また、仮に本当は表示される場合でも、パーティクルの集合体である粒子系においてはいくつかのパーティクルが表示されなくても全く問題にはならない。現フレームでＺカリングされたパーティクルは次のフレームで描画処理に投入されないように制御することで、頂点シェーダ１０の頂点属性の生成処理や、フラグメントシェーダ４０による描画処理の負荷を軽減することができる。
【００６０】
グラフィックスプロセッサ１００のＺカリング部２６によるＺカリング判定はプリミティブ単位であるから、多くのプリミティブからなるオブジェクトのカリングには有効に働かないこともある。しかし、図５の例のように、１つのオブジェクトが１つのプリミティブ（１つのスプライト）で構成される場合は、プリミティブのカリング判定がそのままオブジェクトのカリング判定に使えるため、Ｚカリング判定の情報をメインプロセッサ２００にフィードバックすれば、オブジェクトを早期に効率良くカリングすることができる。
【００６１】
また、Ｚカリング判定は一つ前のフレームにおける状況であるため、Ｚカリング判定の情報を用いてオブジェクトをオクルージョンカリングすると、時間的にずれが生じるので厳密さを欠く。しかしながら、多数のパーティクルからなる粒子系では、個々のパーティクルの動きは問題にならず、全体的な動きが正しければよいため、１フレーム分のずれは問題にならない。
【００６２】
さらに、オクルージョンカリングされたパーティクルについては、描画処理を行わないものの、簡略化計算により位置を更新するため、再び表示されるようになったとき、動きがおかしくならず、連続性がある程度保証される。
【００６３】
図６は、オブジェクト４３０および自動車４４０ａ〜４４０ｃの描画処理例を示す。自動車４４０ａ〜４４０ｃは、オブジェクト４３０の背後にある道を走行する。オブジェクト４３０の背後にはないときは、自動車４４０ａ、４４０ｃは、通常計算部２３２により等加速度運動モデルにしたがって位置が更新されるが、オブジェクト４３０の背後に隠れて見えなくなると、自動車４４０ｂは、簡略計算部２３０により等速度運動で代用され、位置が更新される。
【００６４】
自動車４４０ａ〜４４０ｃは、複数のプリミティブで構成されているオブジェクトであるため、すべてのプリミティブが現フレームでＺカリングされる場合に、非描画オブジェクトと判定され、次のフレームの描画処理には投入されない。
【００６５】
以上述べたように、本実施の形態によれば、グラフィックスプロセッサにおける早期Ｚカリングの情報を、オブジェクトを生成するメインプロセッサにフィードバックさせ、他のオブジェクトの背後に隠れるオブジェクトをグラフィックスプロセッサに投入する前にカリングすることができる。オブジェクトがパーティクルのような一つのプリミティブで表現される場合、一つ前のフレームにおけるカリング情報でオブジェクトをオクルージョンカリングしても描画品質には大きな影響を与えないというメリットがある。
【００６６】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６７】
上記の実施の形態では、現フレームでＺカリング判定されたプリミティブから構成されるオブジェクトについては、動き計算を簡略化して近似位置を求めた上で、そのオブジェクトは次のフレームの描画の際、グラフィックスプロセッサに投入しないようにした。変形例として、現フレームでＺカリング判定されたプリミティブから構成されるオブジェクトは、動きを簡略化計算した上で、次のフレームの描画の際、グラフィックスプロセッサに投入してもよい。次のフレームでそのオブジェクトが視点から見えるようになることもありうるため、グラフィックスプロセッサの処理性能が十分に高い場合はそれでもかまわない。簡略化計算の技術は、メインプロセッサの処理性能に限界がある場合に有効である。
【００６８】
また、現フレームでＺカリング判定されたプリミティブから構成されるオブジェクトについては、動き計算を簡略化せずに、通常の計算を行って正確な位置を求める一方で、次のフレームの描画の際、当該オブジェクトをグラフィックスプロセッサに投入しないように制御してもよい。たとえば、メインプロセッサがマルチプロセッサシステムなどで構成され、高い処理性能をもつ場合、計算を簡略化しなくてもよいからである。オブジェクトをグラフィックスプロセッサに投入する前に早期にカリングする技術は、グラフィックスプロセッサの処理性能に限界がある場合に有効である。
【図面の簡単な説明】
【００６９】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１のＺカリング部の構成図である。
【図３】図１のメインプロセッサの機能構成図である。
【図４】図３の構成のメインプロセッサによる処理手順を示すフローチャートである。
【図５】図１の描画処理装置による描画処理の一例を説明する図である。
【図６】図１の描画処理装置による描画処理の別の例を説明する図である。
【符号の説明】
【００７０】
１０  頂点シェーダ、  ２０  ラスタライザ、  ２２  セットアップ部、  ２４  コースラスタ部、  ２６  Ｚカリング部、  ２８  ファインラスタ部、  ３０  カリング判定部、  ３２  Ｚカリングメモリ、  ３４  プリミティブカリングロジック、  ３６  プリミティブカリングメモリ、  ４０  フラグメントシェーダ、  ５０  ラスタ演算ブロック、  ６０  ローカルメモリ、  ６２  デプスバッファ、  ６４  カラーバッファ、  ７０  ホストＩ／Ｆ、  １００  グラフィックスプロセッサ、  ２００  メインプロセッサ、  ２１０  オブジェクトカリングロジック、  ２２０  物理シミュレーション部、  ２３０  簡略計算部、  ２３２  通常計算部、  ２４０  オブジェクト供給部、  ３００  メインメモリ。
【図１】
2008282170.tif 000003
【図２】
2008282170.tif 000004
【図３】
2008282170.tif 000005
【図４】
2008282170.tif 000006
【図５】
2008282170.tif 000007
【図６】
2008282170.tif 000008