(57)【要約】【課題】描画パイプラインを用いた描画処理と、画面に対して行う画像処理とのプログラムを統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能な画像処理装置およびその方法を提供する。【解決手段】描画処理と画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置１０において、変数は頂点単位、フラグメント単位またはピクセル単位の属性を持ち、シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。【選択図】　　　図８
2004126676.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置であって、
上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う処理手段
を有する画像処理装置。
【請求項２】
上記処理手段は、上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する
請求項１記載の画像処理装置。
【請求項３】
上記処理手段は、上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う
請求項１記載の画像処理装置。
【請求項４】
上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、
上記処理手段は、所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、
属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う
請求項１記載の画像処理装置。
【請求項５】
オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理方法であって、
上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う
画像処理方法。
【請求項６】
上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する
請求項５記載の画像処理方法。
【請求項７】
上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う
請求項５記載の画像処理方法。
【請求項８】
上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、
所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、
属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う
請求項５記載の画像処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、３次元コンピュータグラフィックスを実現するための画像処理装置およびその方法に関するものである。
【０００２】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス（ＣＧ）」技術が盛んに研究・開発され、さらに実用化されている。
【０００３】
たとえば、３次元グラフィックスは、３次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで３次元的な２次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのＣＡＤ／ＣＡＭ、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【０００４】
３次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【０００５】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する３次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【０００６】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル（ｐｉｘｅｌ）を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるＲＧＢ形式などで表される色（描画色）データ、奥行き方向の距離を表すｚ値などがある。
また、最近の高精細な３次元グラフィックス処理では、遠近感を醸し出すためのｆ（ｆｏｇ：霧）や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャｔ（ｔｅｘｔｕｒｅ）なども、画像パラメータの１つとして含まれている。
【０００７】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくＤＤＡ（Ｄｉｇｉｔａｌ　Ｄｉｆｆｅｒｅｎｔｉａｌ　Ａｎａｌｙｚｅｒ）と呼ばれる線形補間手法を用いて実行される。
ＤＤＡプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向（Ｘ方向）の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【０００８】
図１は、従来のリアルタイム３次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図、図２は、図１の画像処理装置の画像処理動作を示すフローチャートである。
【０００９】
この画像処理装置１０は、図１に示すように、頂点単位処理部１１、ラスタライズ部１２、フラグメント単位処理部１３、およびメモリ部１４を有している。
【００１０】
以下、図１の画像処理装置１０における描画処理について、各構成要素の機能と併せて図２のフローチャートに関連付けて説明する。
【００１１】
頂点単位処理部１１は、頂点情報ＶＩを入力し、これに頂点単位の処理を行い、この結果を信号Ｓ１１としてラスタライズ部１２に出力する（ステップＳＴ１）。
ラスタライズ部１２は、処理後の頂点情報Ｓ１１を入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果を信号Ｓ１２としてフラグメント単位処理部１３に出力する（ステップＳＴ２）。
フラグメント単位処理部１３は、フラグメント情報Ｓ１２を入力し、これにフラグメント単位の処理を行い、この結果を信号Ｓ１３としてメモリ部１４に出力する（ステップＳＴ３）。
メモリ部１４は、処理後のフラグメント情報Ｓ１３を入力し、これに必要なテストや演算を加えた結果を保持する（ステップＳＴ４）。
最終的にシーンに含まれる全プリミティブの描画が完了したならば終了する。
一方、描画が完了していないならばステップＳＴｌから繰り返す（ステップＳＴ５）。
【００１２】
典型的な３次元コンピュータグラフィックスにおいては、ステップＳＴ１の頂点単位処理には座標変換や色計算などの処理が含まれる。また、ステップＳＴ３のフラグメント単位処理にはテクスチャマッピングなどの処理が含まれる。また、ステップＳＴ４の描画処理にはアルファブレンドやデプステストなどの処理が含まれる。
【００１３】
上記の処理はいずれもパイプライン的な構成を用いることにより高スループットを実現することが可能であり、リアルタイムコンピュータグラフィックスに適している。以下ではこれらを描画パイプラインと呼ぶ場合もある。
【００１４】
一方、近年の３次元コンピュータグラフィックスにおいては、描画パイプライン以外の画像処理を用いることにより画質を改善する方法が提案されている。
また、これらの処理を固定的な演算回路で構成するのではなく、プログラム可能とすることにより、より高度な色計算を可能にする画像処理装置も現れてきている。
【００１５】
上記のようなプログラムは、シェーダプログラムと呼ぶ場合もあり、その記述方法はいくつか提案されている。
【００１６】
典型的には、頂点単位およびフラグメント単位の処理が存在する。Ｋｅｋｏａ（非特許文献１）は、いずれの単位で処理を行うかを、変数の属性として与える方法を提案した。図３にこの概要を模式的に示す図である。
【００１７】
図３に示すように、変数は、頂点単位あるいはフラグメント単位の属性を持つ。シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
Ｋｅｋｏａは実際には別の種類（プリミティブ単位）の属性も考えたが、以下の説明では関係がないため省略する。
【００１８】
図４は、サンプルのシェーダプログラムを擬似コードで記述した図である。
以下行、番号に沿って説明を行う。
【００１９】
第１行目は、ｓａｍｐｌｅ１という名前の処理関数を指定している。
第２行目は、頂点単位のベクトルＮが入力として与えられることを指定している。
第３行目は、頂点単位のベクトルＬが入力として与えられることを指定している。
第４行目は、フラグメント単位のテクスチャ座標Ｕｖが入力として与えられることを示している。
第５行目は、フラグメント単位の色情報Ｃｏｕｔが出力として与えられることを示している。
第８行目は、一時的に利用する頂点単位の色情報Ｃｄを宣言している。
第９行目は、一時的に利用するフラグメント単位の色情報Ｃｔを宣言している，
第１０行目は、ＣｄをＮとＬの内積によって与えることを示している。ここに現れるすべての変数は頂点単拉であるので、これらの計算は頂点単位に行われる。
第１１行目は、Ｕｖをテクスチャ座標としてテクスチャを引き、その値をＣｔに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第１２行目は、色情報ＣｄとＣｔを乗じて、その結果をＣｏｕｔとすることを示している。ＣｔおよびＣｏｕｔはフラグメント単位であり、Ｃｄは頂点単位である。したがって、乗算を行う前に、Ｃｄは暗黙のうちにラスタライズされて、フラグメント単位とされる。
【００２０】
図５は、上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【００２１】
頂点単位処理部１１は、ベクトルＮ，Ｌを入力し、この内積を色情報Ｃｄに代入しラスタライズ部１２に出力する（ステップＳＴ１１）。
ラスタライズ部１２は、色情報Ｃｄ、テクスチャ座標Ｕｖを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部１３に出力する（ステップＳＴ１２）。
フラグメント単位処理部１３は、テクスチャ座標Ｕｖを入力し、これをもとにテクスチャを引き、その値をＣｔに格納する。その後、色情報ＣｄとＣｔを乗じてＣｏｕｔとし、メモリ１４に出力する（ステップＳＴ１３）。
メモリ部１４は、Ｃｏｕｔを入力し、これに必要なテストや演算を加えた結果を保持する（ステップＳＴ１４）。
シーン全体を描画完了完了したならば終了し、完了していないならばステップＳＴ１１からの処理を繰り返す（ステップＳＴ１５）。
【００２２】
一方、近年のコンピュータグラフィックスでは、上記のような処理に加え、画面全体にフィルタをかけるなどの処理を行う場合が増えてきている。
たとえば、アンチエイリアスを簡易に実現するため、画面全体に簡単なフィルタをかける場合がある。あるいは、デプスオブフィールド（Ｄｅｐｔｈ　Ｏｆ
Ｆｉｅｌｄ）を簡易に実現する方法や、毛皮の描画の一質を改善する方法がある。
【００２３】
図６は、従来のリアルタイム３次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図、図７は、図６の画像処理装置の画像処理動作を示すフローチャートである。
【００２４】
この画像処理装置１０Ａは、図１の構成要素である頂点単位処理部１１、ラスタライズ部１２、フラグメント単位処理部１３、およびメモリ部１４に加えて、画像処理部１５を有している。
また、図７のフローチャートにおいては、図２のステップＳＴ１〜ＳＴ５の処理に加えて、画像処理部１５における画像処理のためのステップＳＴ６が追加されている。
基本的には、画像処理装置１０Ａにおいては、シーン全体の描画が完了した後の各ピクセルに、画像処理を施すものである。
以下では、このように画面のある領域の各ピクセルに行う処理を、画像処理と記述することとする。
【００２５】
【非特許文献１】
Ｋｅｋｏａ，　Ｐ．，　Ａ　Ｒｅａｌ−Ｔｉｍｅ　Ｐｒｏｃｅｄｕｒａｌ　Ｓｈａｄｅｉｎｇ　Ｓｙｓｔｅｍ　ｆｏｒ　ＰｒｏｇｒａｍｍａｂｌｅＧｒａｐｈｉｃｓ　Ｈａｒｄｗａｒｅ，　ＳＩＧＧＲＡＰＨ　２００１，　ｐｐ．　１５９−１７０
【００２６】
【発明が解決しようとする課題】
以上述べたような、描画パイプラインを用いた描画処理に加え、画像処理を行う場合、以下のような不利益がある。
シェーダプログラムとして画像処理を記述する方法が提案されていない。従来は、頂点単位処理やフラグメント単位処理とは別の種類（場合によってはまったく別の）プログラムとして記述されてきた。
本来、画像処理であろうと、描画パイプラインを用いた描画処理であろうと、最終的にはピクセルの色情報を決定することが目的である。
したがって、統一的に記述できる方法があるとプログラムが見やすくなるが、このような方法は提案されていない。そのため、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することができない。
【００２７】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、描画パイプラインを用いた描画処理と、画面に対して行う画像処理とのプログラムを統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能な画像処理装置およびその方法を提供することにある。
【００２８】
【課題を解決するための手段】
上記目的を達成するため、本発明の第１の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う処理手段を有する。
【００２９】
本発明の第２の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理方法であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う。
【００３０】
本発明では、上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する。
【００３１】
本発明では、上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う。
【００３２】
本発明では、上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。
【００３３】
本発明によれば、たとえば変数の属性がピクセル単位である場合、この処理を画面のある領域に対して画像処理として実行すると解釈し、処理手段が画面のある領域に対する画像処理を行う。
また、たとえばシェーダプログラムの最中に、変数の属性がピクセル単位以外から、ピクセル単位に変化した場合、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行する。
【００３４】
【発明の実施の形態】
図８は、本発明に係る画像処理装置の一実施形態を示すブロック図である。
【００３５】
本画像処理装置２０は、図８に示すように、シーン作成部２１、頂点単位処理部２２、ラスタライズ部２３、フラグメント単位処理部２４、メモリ部２５、および画像処理部２６を有している。
【００３６】
シーン作成部２１は、三角形のプリミティブの頂点情報を頂点単位処理部２２に供給する。
また、シーン作成部２１は、シーンの切れ目を下位ブロックに通知する手段を保持し、シーンの切れ目毎にこれを通知するものとする。
【００３７】
頂点単位処理部２２は、各頂点情報が与えられる度に頂点単位プログラムを実行する。
また、シーン作成部２１から頂点単位処理部２２に情報を渡すためのポートをｓｖ０〜ｓｖ５として示している。また、頂点単位処理部２２で計算された結果を、ラスタライズ部２３に供給するためのポートはｖｒ０〜ｖｒ５として示している。
また、頂点単位処理部２２は、内部にレジスタＶＲを有する。
【００３８】
ラスタライズ部２３は、頂点単位処理部２２からポートｖｒ０〜ｖｒ５を通して供給された情報と、直接シーン作成部２１からポートｓｒ０〜ｓｒ２を通して供給された情報をラスタライズし、その結果をフラグメント単位処理部２４にポートｒｆ０〜ｒｆ５を通して供給する。
【００３９】
フラグメント単位処理部２４は、各フラグメント単位の情報が与えられる度に、フラグメント単位プログラムを実行し、その結果ｃｏｕｔをメモリ部２５に対して出力する。
また、フラグメント単位処理部２４は、テクスチャ座標ｓｔｑをメモリ部２５に与えることにより、テクスチャデータＣｄをメモリ部２５から読み出すことが可能である。
また、フラグメント単位処理部２４は、内部にレジスタＦＲを有する。
【００４０】
メモリ部２５は、複数の種類のバッファ、たとえばフレームバッファ、テクスチャバッファ、中間値保持用バッファ、デプスバッファなどを保持し、これらはバッファＩＤをもとに指定することが可能とする。
【００４１】
画像処理部２６は、メモリ部２５から読み出したデータｄ０をもとに画像処理プログラムを実行し、その結果ｄ１をメモリ部２５に出力する。
【００４２】
図９は、本実施形態において、プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【００４３】
図９に示すように、変数は、頂点単位、フラグメント単位あるいはピクセル単位の属性を持つ。
シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
続いて、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈する。換言すれば、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行すると解釈する。
【００４４】
図１０は、本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
以下行番号に沿って説明を行う。
【００４５】
第１行目は、ｓａｍｐｌｅ２という名前の処理関数を指定している。
第２行目は、頂点単位のベクトルＮが入力として与えられることを指定している。
第３行目は、頂点単位のベクトルＬが入力として与えられることを指定している。
第４行目は、フラグメント単位のテクスチャ座標Ｕｖが入力として与えられることを示している。
第５行目は、画像処理単位の色情報Ｃｏｕｔが出力として与えられることを示している。
第８行目は、一時的に利用する頂点単位の色情報Ｃｄを宣言している。
第９行目は、一時的に利用するフラグメント単位の色情報Ｃｔを宣言している。
第１０行目は、一時的に利用するピクセル単位の色情報Ｃｐを宣言している。
第１１行目は、ＣｄをＮとＬの内積によって与えることを示している。ここに現れるすべての変数は頂点単位であるので、これらの計算は頂点単位に行われる。
第１２行目は、Ｕｖをテクスチャ座標としてテクスチャを引き、その値をＣｔに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第１３行目は、ＣｄとＣＬを乗じて、その結果をＣｐとすることを示している。Ｃｔはフラグメント単位であり、Ｃｄは頂点単位である。したがって、乗算を行う前に、Ｃｄは暗黙のうらにラスタライズされて、フラグメント単位とされる。一方、Ｃｐはピクセル単位であるため、乗算された結果（フラグメント単位）とは異なる属性である。したがって、ここでシーン全体を描画完了させる必要がある。
第１４行目は、Ｃｐにフィルタ処理を行い、その結果をＣｏｕｔとすることを示している。Ｃｐ，Ｃｏｕｔともにピクセル単位であるため、シーン全体を描画し終わった後、各ピクセルに対してフィルタ処理を行うことを示している。
【００４６】
図１１は、画像処理装置２０において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
以下このフローチャートについて説明する。
【００４７】
頂点単位処理部２２は、ベクトルＮ，Ｌを入力し、この内積を色情報Ｃｄに代入しラスタライズ部２３に出力する（ステップＳＴ２１）。
ラスタライズ部２３は、色情報Ｃｄ、テクスチャ座標Ｕｖを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部２４に出力する（ステップＳＴ２２）。
フラグメント単位処理部２４は、テクスチャ座標Ｕｖを入力し、これをもとにテクスチャを引き、その値をＣｔに格納する。その後、色情報ＣｄとＣｔを乗じてＣｏｕｔとし、メモリ部２５に出力する（ステップＳＴ２３）。
メモリ部２５は、Ｃｏｕｔを入力し、これに必要なテストや演算を加えた結果を保持する（ステップＳＴ２４）。
シーン全体を描画完了したならば終了し、完了していないならばステップＳＴ２１からの処理を繰り返す（ステップＳＴ２５）。
画像処理部２６は、シーン全体についてフィルタ処理を行う（ステップＳＴ２６）。
【００４８】
図１０で記述したシェーダプログラムの例は図１２のような構造をとっている。
以下、シェーダプログラムがこのような構造をとっている場合を例にとり、どのように図８のようなシステムに処理を割り当てるかを説明する。
【００４９】
図１２に示したようなプログラムは、基本的に以下のような手順でシステムに割り当てられる。
（１）入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
（２）変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
（３）処理内容を、対応するブロックのプログラムとして設定する。
【００５０】
以下、図１０に示したシェーダプログラムをもとに、図８のシステムにプログラムを割り当てる手順を示す。
【００５１】
（１）入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
前述したように、第２行目は、入力ベクトルＮは頂点単位であることを示している。
頂点単位であるため、頂点単位処理部２２への入力ポートｓｖ０〜ｓｖ２（Ｎは３次元ベクトルであるため３ポートを用いる）に割り当てる。
第３行目は、入力ベクトルＬは頂点単位であることを示している。第２行目と同様に、頂点単位処理部２２への入力ポートｓｖ３〜ｓｖ５に割り当てる。
第４行目は、入力テクスチャ座標ｓ，ｔ，ｑはフラグメント単位であることを示している。フラグメント単位であるため、フラグメント単位処理部２４への入力ポートｒｆ０〜ｒｆ２にｓ，ｔ，ｑをそれぞれ対応させる。同時に、頂点単位のｓ，ｔ，ｑの値はｓｒ０〜ｓｒ２と対応づけを行う。ラスタライズ部２３は、ｓｒ０〜ｓｒ２の内容をラスタライズして、ｒｆ０〜ｒｆ２に出力するように設定される。
第５行目は、出力色Ｃｏｕｔはピクセル単位であることを示している。ピクセル単位であるため、これはメモリ部２５に画面と同サイズのバッファを設ける。以下ではこれをバッファ０とする。
【００５２】
（２）変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
第８行目は、頂点単位の内部変数Ｃｄが宣言されている。頂点単位であるため、頂点単位処理部２２の内部レジスタＶＲ０〜ＶＲ２に割り当てる。
第９行目は、フラグメント単位の内部変数Ｃｔが宣言されている。フラグメント単位であるため、フラグメント単位処理部２４の内部レジスタＦＲ０〜ＦＲ２に割り当てる。
第１０行目は、ピクセル単位の内部変数Ｃｐが宣言されている。ピクセル単位であるため、メモリ部２５に画面と同サイズのバッファを設ける。以下ではこれをバッファ１とする。
【００５３】
（３）処理内容を、対応するブロックのプログラムとして設定する。
第１１行目は、ＮとＬの内積をとり、その結果をＣｄに格納することを示している。入出力全てが頂点単位であるため、以下のようなプログラムを頂点単位処理部２２に格納する。
【００５４】
・　ＶＲ３　←　ｓｖ０＊ｓｖ３
・　ＶＲ４　←　ｓｖｌ＊ｓｖ４＋ＶＲ３
・　ＶＲ５　←　ｓｖ２＊ｓｖ５＋ＶＲ４
・　ＶＲ０，ＶＲｌ，ＶＲ２　←　ＶＲ５
【００５５】
これはｓｖ０〜ｓｖ２（ベクトルＮ）とｓｖ３〜ｓｖ５（ベクトルＬ）の内積をレジスタＶＲ０〜ＶＲ２に格納するというものである。
【００５６】
第１２行目は、フラグメント単位のテクスチャ座標ｓｔｑをもとにテクスチャデータを引き、結果をフラグメント単位変数Ｃｔに格納することを示している。入出力全てがフラグメント単位であるため、以下のようなプログラムをフラグメント単位処理部２４に格納する。
【００５７】
・　ＦＲ０，１，２　←　ＴＥＸ（ｒｆ０，ｒｆ１，ｒｆ２）
【００５８】
これはｒｆ０〜ｒｆ２（ｓｔｑ）をもとにテクスチャを引き、その結果（ｔｄ）をレジスタＦＲ０〜ＦＲ２に格納するというものである。
【００５９】
第１３行目は、フラグメント単位変数Ｃｔと頂点単位変数Ｃｄを乗算して、その結果をピクセル単位変数Ｃｐに格納することを示している。入力がフラグメント単位と頂点単位なので、これらを同じ単位にあわせる必要がある。したがって、頂点単位変数Ｃｄをラスタライズしてフラグメント単位とする。
すなわち、レジスタＶＲ０〜ＶＲ２の内容をラスタライズ部２３にポートｖｒ０〜ｖｒ２を通して出力するようにする。
【００６０】
・　ｖｒ０，ｖｒｌ，ｖｒ２　←　ＶＲ０，ＶＲ１，ＶＲ２
【００６１】
同時にラスタライズ部２３はポートｖｒ０〜ｖｒ２の内容をラスタライズして、その結果をポートｒｆ３〜ｒｆ５を通してフラグメント単位処理部２４に出力するように設定する。
【００６２】
フラグメント単位処理部２４には、Ｃｄのラスタライズ後の値（ｒｆ３〜ｒｆ５）と、Ｃｔ（ＦＲ０〜ＦＲ２）を乗じてＣｐに格納するための以下のプログラムを設定する。
【００６３】
・　バッファ１　←　ｒｆ３＊ＦＲ０，ｒｆ４＊ＦＲ１，ｒｆ５＊ＦＲ２
【００６４】
Ｃｐはピクセル単位変数であり、入力はピクセル単位変数でないため、バッファ１には全てのシーンを描画が完了される必要がある。そのため、画像処理部２６には、シーンの描画が全て完了することを待つための以下のプログラムを設定する。
【００６５】
・　ＷＡＩＴ　シーン描画完了
【００６６】
これはシーン描画完了が、シーン作成部２１から通知されるまで、画像処理を行わないことを示す。
【００６７】
第１４行目は、ピクセル単位変数Ｃｐにフィルタを行い、その結果をピクセル単位出力変数Ｃｏｕｔに出力することを示している。入出力ともにピクセル単位であるため、画像処理部２６に以下のプログラムを設定する。
【００６８】
・　バッファ０　←　ＦＩＬＴ（バッファ１）
【００６９】
これはバッファ１全体に対して、フィルタ処理を行った結果を、バッファ０に格納するというものである。
【００７０】
以上のように、本実施形態によれば、変数に頂点単位／フラグメント単位／ピクセル単位という属性を設けることにより、コンパイラはプログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【００７１】
【発明の効果】
以上説明したように、本発明によれば、ピクセル単位という属性を与えることができ、指定された属性に従って描画パイプラインを用いた描画処理と、画面に対して行う画像処理とを、統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【図面の簡単な説明】
【図１】従来のリアルタイム３次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図である。
【図２】図１の画像処理装置の画像処理動作を示すフローチャートである。
【図３】プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【図４】サンプルのシェーダプログラムを擬似コードで記述した図である。
【図５】図４のサンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図６】従来のリアルタイム３次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図である。
【図７】図６の画像処理装置の画像処理動作を示すフローチャートである。
【図８】本発明に係る画像処理装置の一実施形態を示すブロック図である。
【図９】本実施形態において、プログラム実行時の変数属性に変化に対する概要を示すための模式図である。
【図１０】本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
【図１１】本実施形態に係る画像処理装置において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図１２】図１０で記述したシェーダプログラムの構造例を示す図である。
【符号の説明】
２０…画像処理装置、２１…シーン作成部、２２…頂点単位処理部、２３…ラスタライズ部、２４…フラグメント単位処理部、２５…メモリ部、２６…画像処理部。
【図１】
2004126676.tif 000003
【図２】
2004126676.tif 000004
【図３】
2004126676.tif 000005
【図４】
2004126676.tif 000006
【図５】
2004126676.tif 000007
【図６】
2004126676.tif 000008
【図７】
2004126676.tif 000009
【図８】
2004126676.tif 000010
【図９】
2004126676.tif 000011
【図１０】
2004126676.tif 000012
【図１１】
2004126676.tif 000013
【図１２】
2004126676.tif 000014