JP2004126676A - 画像処理装置およびその方法 - Google Patents
画像処理装置およびその方法 Download PDFInfo
- Publication number
- JP2004126676A JP2004126676A JP2002286043A JP2002286043A JP2004126676A JP 2004126676 A JP2004126676 A JP 2004126676A JP 2002286043 A JP2002286043 A JP 2002286043A JP 2002286043 A JP2002286043 A JP 2002286043A JP 2004126676 A JP2004126676 A JP 2004126676A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- image processing
- attribute
- fragment
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Generation (AREA)
Abstract
【課題】描画パイプラインを用いた描画処理と、画面に対して行う画像処理とのプログラムを統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能な画像処理装置およびその方法を提供する。
【解決手段】描画処理と画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置10において、変数は頂点単位、フラグメント単位またはピクセル単位の属性を持ち、シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。
【選択図】 図8
【解決手段】描画処理と画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置10において、変数は頂点単位、フラグメント単位またはピクセル単位の属性を持ち、シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。
【選択図】 図8
Description
【0001】
【発明の属する技術分野】
本発明は、3次元コンピュータグラフィックスを実現するための画像処理装置およびその方法に関するものである。
【0002】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス(CG)」技術が盛んに研究・開発され、さらに実用化されている。
【0003】
たとえば、3次元グラフィックスは、3次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで3次元的な2次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【0004】
3次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【0005】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する3次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【0006】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル(pixel)を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
【0007】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくDDA(Digital Differential Analyzer)と呼ばれる線形補間手法を用いて実行される。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【0008】
図1は、従来のリアルタイム3次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図、図2は、図1の画像処理装置の画像処理動作を示すフローチャートである。
【0009】
この画像処理装置10は、図1に示すように、頂点単位処理部11、ラスタライズ部12、フラグメント単位処理部13、およびメモリ部14を有している。
【0010】
以下、図1の画像処理装置10における描画処理について、各構成要素の機能と併せて図2のフローチャートに関連付けて説明する。
【0011】
頂点単位処理部11は、頂点情報VIを入力し、これに頂点単位の処理を行い、この結果を信号S11としてラスタライズ部12に出力する(ステップST1)。
ラスタライズ部12は、処理後の頂点情報S11を入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果を信号S12としてフラグメント単位処理部13に出力する(ステップST2)。
フラグメント単位処理部13は、フラグメント情報S12を入力し、これにフラグメント単位の処理を行い、この結果を信号S13としてメモリ部14に出力する(ステップST3)。
メモリ部14は、処理後のフラグメント情報S13を入力し、これに必要なテストや演算を加えた結果を保持する(ステップST4)。
最終的にシーンに含まれる全プリミティブの描画が完了したならば終了する。
一方、描画が完了していないならばステップSTlから繰り返す(ステップST5)。
【0012】
典型的な3次元コンピュータグラフィックスにおいては、ステップST1の頂点単位処理には座標変換や色計算などの処理が含まれる。また、ステップST3のフラグメント単位処理にはテクスチャマッピングなどの処理が含まれる。また、ステップST4の描画処理にはアルファブレンドやデプステストなどの処理が含まれる。
【0013】
上記の処理はいずれもパイプライン的な構成を用いることにより高スループットを実現することが可能であり、リアルタイムコンピュータグラフィックスに適している。以下ではこれらを描画パイプラインと呼ぶ場合もある。
【0014】
一方、近年の3次元コンピュータグラフィックスにおいては、描画パイプライン以外の画像処理を用いることにより画質を改善する方法が提案されている。
また、これらの処理を固定的な演算回路で構成するのではなく、プログラム可能とすることにより、より高度な色計算を可能にする画像処理装置も現れてきている。
【0015】
上記のようなプログラムは、シェーダプログラムと呼ぶ場合もあり、その記述方法はいくつか提案されている。
【0016】
典型的には、頂点単位およびフラグメント単位の処理が存在する。Kekoa(非特許文献1)は、いずれの単位で処理を行うかを、変数の属性として与える方法を提案した。図3にこの概要を模式的に示す図である。
【0017】
図3に示すように、変数は、頂点単位あるいはフラグメント単位の属性を持つ。シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
Kekoaは実際には別の種類(プリミティブ単位)の属性も考えたが、以下の説明では関係がないため省略する。
【0018】
図4は、サンプルのシェーダプログラムを擬似コードで記述した図である。
以下行、番号に沿って説明を行う。
【0019】
第1行目は、sample1という名前の処理関数を指定している。
第2行目は、頂点単位のベクトルNが入力として与えられることを指定している。
第3行目は、頂点単位のベクトルLが入力として与えられることを指定している。
第4行目は、フラグメント単位のテクスチャ座標Uvが入力として与えられることを示している。
第5行目は、フラグメント単位の色情報Coutが出力として与えられることを示している。
第8行目は、一時的に利用する頂点単位の色情報Cdを宣言している。
第9行目は、一時的に利用するフラグメント単位の色情報Ctを宣言している,
第10行目は、CdをNとLの内積によって与えることを示している。ここに現れるすべての変数は頂点単拉であるので、これらの計算は頂点単位に行われる。
第11行目は、Uvをテクスチャ座標としてテクスチャを引き、その値をCtに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第12行目は、色情報CdとCtを乗じて、その結果をCoutとすることを示している。CtおよびCoutはフラグメント単位であり、Cdは頂点単位である。したがって、乗算を行う前に、Cdは暗黙のうちにラスタライズされて、フラグメント単位とされる。
【0020】
図5は、上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【0021】
頂点単位処理部11は、ベクトルN,Lを入力し、この内積を色情報Cdに代入しラスタライズ部12に出力する(ステップST11)。
ラスタライズ部12は、色情報Cd、テクスチャ座標Uvを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部13に出力する(ステップST12)。
フラグメント単位処理部13は、テクスチャ座標Uvを入力し、これをもとにテクスチャを引き、その値をCtに格納する。その後、色情報CdとCtを乗じてCoutとし、メモリ14に出力する(ステップST13)。
メモリ部14は、Coutを入力し、これに必要なテストや演算を加えた結果を保持する(ステップST14)。
シーン全体を描画完了完了したならば終了し、完了していないならばステップST11からの処理を繰り返す(ステップST15)。
【0022】
一方、近年のコンピュータグラフィックスでは、上記のような処理に加え、画面全体にフィルタをかけるなどの処理を行う場合が増えてきている。
たとえば、アンチエイリアスを簡易に実現するため、画面全体に簡単なフィルタをかける場合がある。あるいは、デプスオブフィールド(Depth Of
Field)を簡易に実現する方法や、毛皮の描画の一質を改善する方法がある。
【0023】
図6は、従来のリアルタイム3次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図、図7は、図6の画像処理装置の画像処理動作を示すフローチャートである。
【0024】
この画像処理装置10Aは、図1の構成要素である頂点単位処理部11、ラスタライズ部12、フラグメント単位処理部13、およびメモリ部14に加えて、画像処理部15を有している。
また、図7のフローチャートにおいては、図2のステップST1〜ST5の処理に加えて、画像処理部15における画像処理のためのステップST6が追加されている。
基本的には、画像処理装置10Aにおいては、シーン全体の描画が完了した後の各ピクセルに、画像処理を施すものである。
以下では、このように画面のある領域の各ピクセルに行う処理を、画像処理と記述することとする。
【0025】
【非特許文献1】
Kekoa, P., A Real−Time Procedural Shadeing System for ProgrammableGraphics Hardware, SIGGRAPH 2001, pp. 159−170
【0026】
【発明が解決しようとする課題】
以上述べたような、描画パイプラインを用いた描画処理に加え、画像処理を行う場合、以下のような不利益がある。
シェーダプログラムとして画像処理を記述する方法が提案されていない。従来は、頂点単位処理やフラグメント単位処理とは別の種類(場合によってはまったく別の)プログラムとして記述されてきた。
本来、画像処理であろうと、描画パイプラインを用いた描画処理であろうと、最終的にはピクセルの色情報を決定することが目的である。
したがって、統一的に記述できる方法があるとプログラムが見やすくなるが、このような方法は提案されていない。そのため、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することができない。
【0027】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、描画パイプラインを用いた描画処理と、画面に対して行う画像処理とのプログラムを統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能な画像処理装置およびその方法を提供することにある。
【0028】
【課題を解決するための手段】
上記目的を達成するため、本発明の第1の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う処理手段を有する。
【0029】
本発明の第2の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理方法であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う。
【0030】
本発明では、上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する。
【0031】
本発明では、上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う。
【0032】
本発明では、上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。
【0033】
本発明によれば、たとえば変数の属性がピクセル単位である場合、この処理を画面のある領域に対して画像処理として実行すると解釈し、処理手段が画面のある領域に対する画像処理を行う。
また、たとえばシェーダプログラムの最中に、変数の属性がピクセル単位以外から、ピクセル単位に変化した場合、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行する。
【0034】
【発明の実施の形態】
図8は、本発明に係る画像処理装置の一実施形態を示すブロック図である。
【0035】
本画像処理装置20は、図8に示すように、シーン作成部21、頂点単位処理部22、ラスタライズ部23、フラグメント単位処理部24、メモリ部25、および画像処理部26を有している。
【0036】
シーン作成部21は、三角形のプリミティブの頂点情報を頂点単位処理部22に供給する。
また、シーン作成部21は、シーンの切れ目を下位ブロックに通知する手段を保持し、シーンの切れ目毎にこれを通知するものとする。
【0037】
頂点単位処理部22は、各頂点情報が与えられる度に頂点単位プログラムを実行する。
また、シーン作成部21から頂点単位処理部22に情報を渡すためのポートをsv0〜sv5として示している。また、頂点単位処理部22で計算された結果を、ラスタライズ部23に供給するためのポートはvr0〜vr5として示している。
また、頂点単位処理部22は、内部にレジスタVRを有する。
【0038】
ラスタライズ部23は、頂点単位処理部22からポートvr0〜vr5を通して供給された情報と、直接シーン作成部21からポートsr0〜sr2を通して供給された情報をラスタライズし、その結果をフラグメント単位処理部24にポートrf0〜rf5を通して供給する。
【0039】
フラグメント単位処理部24は、各フラグメント単位の情報が与えられる度に、フラグメント単位プログラムを実行し、その結果coutをメモリ部25に対して出力する。
また、フラグメント単位処理部24は、テクスチャ座標stqをメモリ部25に与えることにより、テクスチャデータCdをメモリ部25から読み出すことが可能である。
また、フラグメント単位処理部24は、内部にレジスタFRを有する。
【0040】
メモリ部25は、複数の種類のバッファ、たとえばフレームバッファ、テクスチャバッファ、中間値保持用バッファ、デプスバッファなどを保持し、これらはバッファIDをもとに指定することが可能とする。
【0041】
画像処理部26は、メモリ部25から読み出したデータd0をもとに画像処理プログラムを実行し、その結果d1をメモリ部25に出力する。
【0042】
図9は、本実施形態において、プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【0043】
図9に示すように、変数は、頂点単位、フラグメント単位あるいはピクセル単位の属性を持つ。
シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
続いて、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈する。換言すれば、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行すると解釈する。
【0044】
図10は、本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
以下行番号に沿って説明を行う。
【0045】
第1行目は、sample2という名前の処理関数を指定している。
第2行目は、頂点単位のベクトルNが入力として与えられることを指定している。
第3行目は、頂点単位のベクトルLが入力として与えられることを指定している。
第4行目は、フラグメント単位のテクスチャ座標Uvが入力として与えられることを示している。
第5行目は、画像処理単位の色情報Coutが出力として与えられることを示している。
第8行目は、一時的に利用する頂点単位の色情報Cdを宣言している。
第9行目は、一時的に利用するフラグメント単位の色情報Ctを宣言している。
第10行目は、一時的に利用するピクセル単位の色情報Cpを宣言している。
第11行目は、CdをNとLの内積によって与えることを示している。ここに現れるすべての変数は頂点単位であるので、これらの計算は頂点単位に行われる。
第12行目は、Uvをテクスチャ座標としてテクスチャを引き、その値をCtに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第13行目は、CdとCLを乗じて、その結果をCpとすることを示している。Ctはフラグメント単位であり、Cdは頂点単位である。したがって、乗算を行う前に、Cdは暗黙のうらにラスタライズされて、フラグメント単位とされる。一方、Cpはピクセル単位であるため、乗算された結果(フラグメント単位)とは異なる属性である。したがって、ここでシーン全体を描画完了させる必要がある。
第14行目は、Cpにフィルタ処理を行い、その結果をCoutとすることを示している。Cp,Coutともにピクセル単位であるため、シーン全体を描画し終わった後、各ピクセルに対してフィルタ処理を行うことを示している。
【0046】
図11は、画像処理装置20において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
以下このフローチャートについて説明する。
【0047】
頂点単位処理部22は、ベクトルN,Lを入力し、この内積を色情報Cdに代入しラスタライズ部23に出力する(ステップST21)。
ラスタライズ部23は、色情報Cd、テクスチャ座標Uvを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部24に出力する(ステップST22)。
フラグメント単位処理部24は、テクスチャ座標Uvを入力し、これをもとにテクスチャを引き、その値をCtに格納する。その後、色情報CdとCtを乗じてCoutとし、メモリ部25に出力する(ステップST23)。
メモリ部25は、Coutを入力し、これに必要なテストや演算を加えた結果を保持する(ステップST24)。
シーン全体を描画完了したならば終了し、完了していないならばステップST21からの処理を繰り返す(ステップST25)。
画像処理部26は、シーン全体についてフィルタ処理を行う(ステップST26)。
【0048】
図10で記述したシェーダプログラムの例は図12のような構造をとっている。
以下、シェーダプログラムがこのような構造をとっている場合を例にとり、どのように図8のようなシステムに処理を割り当てるかを説明する。
【0049】
図12に示したようなプログラムは、基本的に以下のような手順でシステムに割り当てられる。
(1)入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
(2)変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
(3)処理内容を、対応するブロックのプログラムとして設定する。
【0050】
以下、図10に示したシェーダプログラムをもとに、図8のシステムにプログラムを割り当てる手順を示す。
【0051】
(1)入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
前述したように、第2行目は、入力ベクトルNは頂点単位であることを示している。
頂点単位であるため、頂点単位処理部22への入力ポートsv0〜sv2(Nは3次元ベクトルであるため3ポートを用いる)に割り当てる。
第3行目は、入力ベクトルLは頂点単位であることを示している。第2行目と同様に、頂点単位処理部22への入力ポートsv3〜sv5に割り当てる。
第4行目は、入力テクスチャ座標s,t,qはフラグメント単位であることを示している。フラグメント単位であるため、フラグメント単位処理部24への入力ポートrf0〜rf2にs,t,qをそれぞれ対応させる。同時に、頂点単位のs,t,qの値はsr0〜sr2と対応づけを行う。ラスタライズ部23は、sr0〜sr2の内容をラスタライズして、rf0〜rf2に出力するように設定される。
第5行目は、出力色Coutはピクセル単位であることを示している。ピクセル単位であるため、これはメモリ部25に画面と同サイズのバッファを設ける。以下ではこれをバッファ0とする。
【0052】
(2)変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
第8行目は、頂点単位の内部変数Cdが宣言されている。頂点単位であるため、頂点単位処理部22の内部レジスタVR0〜VR2に割り当てる。
第9行目は、フラグメント単位の内部変数Ctが宣言されている。フラグメント単位であるため、フラグメント単位処理部24の内部レジスタFR0〜FR2に割り当てる。
第10行目は、ピクセル単位の内部変数Cpが宣言されている。ピクセル単位であるため、メモリ部25に画面と同サイズのバッファを設ける。以下ではこれをバッファ1とする。
【0053】
(3)処理内容を、対応するブロックのプログラムとして設定する。
第11行目は、NとLの内積をとり、その結果をCdに格納することを示している。入出力全てが頂点単位であるため、以下のようなプログラムを頂点単位処理部22に格納する。
【0054】
・ VR3 ← sv0*sv3
・ VR4 ← svl*sv4+VR3
・ VR5 ← sv2*sv5+VR4
・ VR0,VRl,VR2 ← VR5
【0055】
これはsv0〜sv2(ベクトルN)とsv3〜sv5(ベクトルL)の内積をレジスタVR0〜VR2に格納するというものである。
【0056】
第12行目は、フラグメント単位のテクスチャ座標stqをもとにテクスチャデータを引き、結果をフラグメント単位変数Ctに格納することを示している。入出力全てがフラグメント単位であるため、以下のようなプログラムをフラグメント単位処理部24に格納する。
【0057】
・ FR0,1,2 ← TEX(rf0,rf1,rf2)
【0058】
これはrf0〜rf2(stq)をもとにテクスチャを引き、その結果(td)をレジスタFR0〜FR2に格納するというものである。
【0059】
第13行目は、フラグメント単位変数Ctと頂点単位変数Cdを乗算して、その結果をピクセル単位変数Cpに格納することを示している。入力がフラグメント単位と頂点単位なので、これらを同じ単位にあわせる必要がある。したがって、頂点単位変数Cdをラスタライズしてフラグメント単位とする。
すなわち、レジスタVR0〜VR2の内容をラスタライズ部23にポートvr0〜vr2を通して出力するようにする。
【0060】
・ vr0,vrl,vr2 ← VR0,VR1,VR2
【0061】
同時にラスタライズ部23はポートvr0〜vr2の内容をラスタライズして、その結果をポートrf3〜rf5を通してフラグメント単位処理部24に出力するように設定する。
【0062】
フラグメント単位処理部24には、Cdのラスタライズ後の値(rf3〜rf5)と、Ct(FR0〜FR2)を乗じてCpに格納するための以下のプログラムを設定する。
【0063】
・ バッファ1 ← rf3*FR0,rf4*FR1,rf5*FR2
【0064】
Cpはピクセル単位変数であり、入力はピクセル単位変数でないため、バッファ1には全てのシーンを描画が完了される必要がある。そのため、画像処理部26には、シーンの描画が全て完了することを待つための以下のプログラムを設定する。
【0065】
・ WAIT シーン描画完了
【0066】
これはシーン描画完了が、シーン作成部21から通知されるまで、画像処理を行わないことを示す。
【0067】
第14行目は、ピクセル単位変数Cpにフィルタを行い、その結果をピクセル単位出力変数Coutに出力することを示している。入出力ともにピクセル単位であるため、画像処理部26に以下のプログラムを設定する。
【0068】
・ バッファ0 ← FILT(バッファ1)
【0069】
これはバッファ1全体に対して、フィルタ処理を行った結果を、バッファ0に格納するというものである。
【0070】
以上のように、本実施形態によれば、変数に頂点単位/フラグメント単位/ピクセル単位という属性を設けることにより、コンパイラはプログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【0071】
【発明の効果】
以上説明したように、本発明によれば、ピクセル単位という属性を与えることができ、指定された属性に従って描画パイプラインを用いた描画処理と、画面に対して行う画像処理とを、統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【図面の簡単な説明】
【図1】従来のリアルタイム3次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図である。
【図2】図1の画像処理装置の画像処理動作を示すフローチャートである。
【図3】プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【図4】サンプルのシェーダプログラムを擬似コードで記述した図である。
【図5】図4のサンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図6】従来のリアルタイム3次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図である。
【図7】図6の画像処理装置の画像処理動作を示すフローチャートである。
【図8】本発明に係る画像処理装置の一実施形態を示すブロック図である。
【図9】本実施形態において、プログラム実行時の変数属性に変化に対する概要を示すための模式図である。
【図10】本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
【図11】本実施形態に係る画像処理装置において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図12】図10で記述したシェーダプログラムの構造例を示す図である。
【符号の説明】
20…画像処理装置、21…シーン作成部、22…頂点単位処理部、23…ラスタライズ部、24…フラグメント単位処理部、25…メモリ部、26…画像処理部。
【発明の属する技術分野】
本発明は、3次元コンピュータグラフィックスを実現するための画像処理装置およびその方法に関するものである。
【0002】
【従来の技術】
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス(CG)」技術が盛んに研究・開発され、さらに実用化されている。
【0003】
たとえば、3次元グラフィックスは、3次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで3次元的な2次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
【0004】
3次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
【0005】
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する3次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
【0006】
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル(pixel)を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
【0007】
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくDDA(Digital Differential Analyzer)と呼ばれる線形補間手法を用いて実行される。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
【0008】
図1は、従来のリアルタイム3次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図、図2は、図1の画像処理装置の画像処理動作を示すフローチャートである。
【0009】
この画像処理装置10は、図1に示すように、頂点単位処理部11、ラスタライズ部12、フラグメント単位処理部13、およびメモリ部14を有している。
【0010】
以下、図1の画像処理装置10における描画処理について、各構成要素の機能と併せて図2のフローチャートに関連付けて説明する。
【0011】
頂点単位処理部11は、頂点情報VIを入力し、これに頂点単位の処理を行い、この結果を信号S11としてラスタライズ部12に出力する(ステップST1)。
ラスタライズ部12は、処理後の頂点情報S11を入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果を信号S12としてフラグメント単位処理部13に出力する(ステップST2)。
フラグメント単位処理部13は、フラグメント情報S12を入力し、これにフラグメント単位の処理を行い、この結果を信号S13としてメモリ部14に出力する(ステップST3)。
メモリ部14は、処理後のフラグメント情報S13を入力し、これに必要なテストや演算を加えた結果を保持する(ステップST4)。
最終的にシーンに含まれる全プリミティブの描画が完了したならば終了する。
一方、描画が完了していないならばステップSTlから繰り返す(ステップST5)。
【0012】
典型的な3次元コンピュータグラフィックスにおいては、ステップST1の頂点単位処理には座標変換や色計算などの処理が含まれる。また、ステップST3のフラグメント単位処理にはテクスチャマッピングなどの処理が含まれる。また、ステップST4の描画処理にはアルファブレンドやデプステストなどの処理が含まれる。
【0013】
上記の処理はいずれもパイプライン的な構成を用いることにより高スループットを実現することが可能であり、リアルタイムコンピュータグラフィックスに適している。以下ではこれらを描画パイプラインと呼ぶ場合もある。
【0014】
一方、近年の3次元コンピュータグラフィックスにおいては、描画パイプライン以外の画像処理を用いることにより画質を改善する方法が提案されている。
また、これらの処理を固定的な演算回路で構成するのではなく、プログラム可能とすることにより、より高度な色計算を可能にする画像処理装置も現れてきている。
【0015】
上記のようなプログラムは、シェーダプログラムと呼ぶ場合もあり、その記述方法はいくつか提案されている。
【0016】
典型的には、頂点単位およびフラグメント単位の処理が存在する。Kekoa(非特許文献1)は、いずれの単位で処理を行うかを、変数の属性として与える方法を提案した。図3にこの概要を模式的に示す図である。
【0017】
図3に示すように、変数は、頂点単位あるいはフラグメント単位の属性を持つ。シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
Kekoaは実際には別の種類(プリミティブ単位)の属性も考えたが、以下の説明では関係がないため省略する。
【0018】
図4は、サンプルのシェーダプログラムを擬似コードで記述した図である。
以下行、番号に沿って説明を行う。
【0019】
第1行目は、sample1という名前の処理関数を指定している。
第2行目は、頂点単位のベクトルNが入力として与えられることを指定している。
第3行目は、頂点単位のベクトルLが入力として与えられることを指定している。
第4行目は、フラグメント単位のテクスチャ座標Uvが入力として与えられることを示している。
第5行目は、フラグメント単位の色情報Coutが出力として与えられることを示している。
第8行目は、一時的に利用する頂点単位の色情報Cdを宣言している。
第9行目は、一時的に利用するフラグメント単位の色情報Ctを宣言している,
第10行目は、CdをNとLの内積によって与えることを示している。ここに現れるすべての変数は頂点単拉であるので、これらの計算は頂点単位に行われる。
第11行目は、Uvをテクスチャ座標としてテクスチャを引き、その値をCtに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第12行目は、色情報CdとCtを乗じて、その結果をCoutとすることを示している。CtおよびCoutはフラグメント単位であり、Cdは頂点単位である。したがって、乗算を行う前に、Cdは暗黙のうちにラスタライズされて、フラグメント単位とされる。
【0020】
図5は、上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【0021】
頂点単位処理部11は、ベクトルN,Lを入力し、この内積を色情報Cdに代入しラスタライズ部12に出力する(ステップST11)。
ラスタライズ部12は、色情報Cd、テクスチャ座標Uvを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部13に出力する(ステップST12)。
フラグメント単位処理部13は、テクスチャ座標Uvを入力し、これをもとにテクスチャを引き、その値をCtに格納する。その後、色情報CdとCtを乗じてCoutとし、メモリ14に出力する(ステップST13)。
メモリ部14は、Coutを入力し、これに必要なテストや演算を加えた結果を保持する(ステップST14)。
シーン全体を描画完了完了したならば終了し、完了していないならばステップST11からの処理を繰り返す(ステップST15)。
【0022】
一方、近年のコンピュータグラフィックスでは、上記のような処理に加え、画面全体にフィルタをかけるなどの処理を行う場合が増えてきている。
たとえば、アンチエイリアスを簡易に実現するため、画面全体に簡単なフィルタをかける場合がある。あるいは、デプスオブフィールド(Depth Of
Field)を簡易に実現する方法や、毛皮の描画の一質を改善する方法がある。
【0023】
図6は、従来のリアルタイム3次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図、図7は、図6の画像処理装置の画像処理動作を示すフローチャートである。
【0024】
この画像処理装置10Aは、図1の構成要素である頂点単位処理部11、ラスタライズ部12、フラグメント単位処理部13、およびメモリ部14に加えて、画像処理部15を有している。
また、図7のフローチャートにおいては、図2のステップST1〜ST5の処理に加えて、画像処理部15における画像処理のためのステップST6が追加されている。
基本的には、画像処理装置10Aにおいては、シーン全体の描画が完了した後の各ピクセルに、画像処理を施すものである。
以下では、このように画面のある領域の各ピクセルに行う処理を、画像処理と記述することとする。
【0025】
【非特許文献1】
Kekoa, P., A Real−Time Procedural Shadeing System for ProgrammableGraphics Hardware, SIGGRAPH 2001, pp. 159−170
【0026】
【発明が解決しようとする課題】
以上述べたような、描画パイプラインを用いた描画処理に加え、画像処理を行う場合、以下のような不利益がある。
シェーダプログラムとして画像処理を記述する方法が提案されていない。従来は、頂点単位処理やフラグメント単位処理とは別の種類(場合によってはまったく別の)プログラムとして記述されてきた。
本来、画像処理であろうと、描画パイプラインを用いた描画処理であろうと、最終的にはピクセルの色情報を決定することが目的である。
したがって、統一的に記述できる方法があるとプログラムが見やすくなるが、このような方法は提案されていない。そのため、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することができない。
【0027】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、描画パイプラインを用いた描画処理と、画面に対して行う画像処理とのプログラムを統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能な画像処理装置およびその方法を提供することにある。
【0028】
【課題を解決するための手段】
上記目的を達成するため、本発明の第1の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う処理手段を有する。
【0029】
本発明の第2の観点は、オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理方法であって、上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う。
【0030】
本発明では、上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する。
【0031】
本発明では、上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う。
【0032】
本発明では、上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う。
【0033】
本発明によれば、たとえば変数の属性がピクセル単位である場合、この処理を画面のある領域に対して画像処理として実行すると解釈し、処理手段が画面のある領域に対する画像処理を行う。
また、たとえばシェーダプログラムの最中に、変数の属性がピクセル単位以外から、ピクセル単位に変化した場合、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行する。
【0034】
【発明の実施の形態】
図8は、本発明に係る画像処理装置の一実施形態を示すブロック図である。
【0035】
本画像処理装置20は、図8に示すように、シーン作成部21、頂点単位処理部22、ラスタライズ部23、フラグメント単位処理部24、メモリ部25、および画像処理部26を有している。
【0036】
シーン作成部21は、三角形のプリミティブの頂点情報を頂点単位処理部22に供給する。
また、シーン作成部21は、シーンの切れ目を下位ブロックに通知する手段を保持し、シーンの切れ目毎にこれを通知するものとする。
【0037】
頂点単位処理部22は、各頂点情報が与えられる度に頂点単位プログラムを実行する。
また、シーン作成部21から頂点単位処理部22に情報を渡すためのポートをsv0〜sv5として示している。また、頂点単位処理部22で計算された結果を、ラスタライズ部23に供給するためのポートはvr0〜vr5として示している。
また、頂点単位処理部22は、内部にレジスタVRを有する。
【0038】
ラスタライズ部23は、頂点単位処理部22からポートvr0〜vr5を通して供給された情報と、直接シーン作成部21からポートsr0〜sr2を通して供給された情報をラスタライズし、その結果をフラグメント単位処理部24にポートrf0〜rf5を通して供給する。
【0039】
フラグメント単位処理部24は、各フラグメント単位の情報が与えられる度に、フラグメント単位プログラムを実行し、その結果coutをメモリ部25に対して出力する。
また、フラグメント単位処理部24は、テクスチャ座標stqをメモリ部25に与えることにより、テクスチャデータCdをメモリ部25から読み出すことが可能である。
また、フラグメント単位処理部24は、内部にレジスタFRを有する。
【0040】
メモリ部25は、複数の種類のバッファ、たとえばフレームバッファ、テクスチャバッファ、中間値保持用バッファ、デプスバッファなどを保持し、これらはバッファIDをもとに指定することが可能とする。
【0041】
画像処理部26は、メモリ部25から読み出したデータd0をもとに画像処理プログラムを実行し、その結果d1をメモリ部25に出力する。
【0042】
図9は、本実施形態において、プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【0043】
図9に示すように、変数は、頂点単位、フラグメント単位あるいはピクセル単位の属性を持つ。
シェーダプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理が暗黙のうちに導入される。
続いて、属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈する。換言すれば、シーンのすべての情報を描画し終わってから、画面のある領域に対して画像処理として実行すると解釈する。
【0044】
図10は、本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
以下行番号に沿って説明を行う。
【0045】
第1行目は、sample2という名前の処理関数を指定している。
第2行目は、頂点単位のベクトルNが入力として与えられることを指定している。
第3行目は、頂点単位のベクトルLが入力として与えられることを指定している。
第4行目は、フラグメント単位のテクスチャ座標Uvが入力として与えられることを示している。
第5行目は、画像処理単位の色情報Coutが出力として与えられることを示している。
第8行目は、一時的に利用する頂点単位の色情報Cdを宣言している。
第9行目は、一時的に利用するフラグメント単位の色情報Ctを宣言している。
第10行目は、一時的に利用するピクセル単位の色情報Cpを宣言している。
第11行目は、CdをNとLの内積によって与えることを示している。ここに現れるすべての変数は頂点単位であるので、これらの計算は頂点単位に行われる。
第12行目は、Uvをテクスチャ座標としてテクスチャを引き、その値をCtに格納することを示している。ここに現れるすべての変数はフラグメント単位であるので、これらの計算はフラグメント単位に行われる。
第13行目は、CdとCLを乗じて、その結果をCpとすることを示している。Ctはフラグメント単位であり、Cdは頂点単位である。したがって、乗算を行う前に、Cdは暗黙のうらにラスタライズされて、フラグメント単位とされる。一方、Cpはピクセル単位であるため、乗算された結果(フラグメント単位)とは異なる属性である。したがって、ここでシーン全体を描画完了させる必要がある。
第14行目は、Cpにフィルタ処理を行い、その結果をCoutとすることを示している。Cp,Coutともにピクセル単位であるため、シーン全体を描画し終わった後、各ピクセルに対してフィルタ処理を行うことを示している。
【0046】
図11は、画像処理装置20において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
以下このフローチャートについて説明する。
【0047】
頂点単位処理部22は、ベクトルN,Lを入力し、この内積を色情報Cdに代入しラスタライズ部23に出力する(ステップST21)。
ラスタライズ部23は、色情報Cd、テクスチャ座標Uvを入力し、これを補間することによりフラグメント単位の情報へと変換し、この結果をフラグメント単位処理部24に出力する(ステップST22)。
フラグメント単位処理部24は、テクスチャ座標Uvを入力し、これをもとにテクスチャを引き、その値をCtに格納する。その後、色情報CdとCtを乗じてCoutとし、メモリ部25に出力する(ステップST23)。
メモリ部25は、Coutを入力し、これに必要なテストや演算を加えた結果を保持する(ステップST24)。
シーン全体を描画完了したならば終了し、完了していないならばステップST21からの処理を繰り返す(ステップST25)。
画像処理部26は、シーン全体についてフィルタ処理を行う(ステップST26)。
【0048】
図10で記述したシェーダプログラムの例は図12のような構造をとっている。
以下、シェーダプログラムがこのような構造をとっている場合を例にとり、どのように図8のようなシステムに処理を割り当てるかを説明する。
【0049】
図12に示したようなプログラムは、基本的に以下のような手順でシステムに割り当てられる。
(1)入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
(2)変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
(3)処理内容を、対応するブロックのプログラムとして設定する。
【0050】
以下、図10に示したシェーダプログラムをもとに、図8のシステムにプログラムを割り当てる手順を示す。
【0051】
(1)入出力定義された変数を、対応するブロックの入出力ポート、あるいはバッファに割り当てる。
前述したように、第2行目は、入力ベクトルNは頂点単位であることを示している。
頂点単位であるため、頂点単位処理部22への入力ポートsv0〜sv2(Nは3次元ベクトルであるため3ポートを用いる)に割り当てる。
第3行目は、入力ベクトルLは頂点単位であることを示している。第2行目と同様に、頂点単位処理部22への入力ポートsv3〜sv5に割り当てる。
第4行目は、入力テクスチャ座標s,t,qはフラグメント単位であることを示している。フラグメント単位であるため、フラグメント単位処理部24への入力ポートrf0〜rf2にs,t,qをそれぞれ対応させる。同時に、頂点単位のs,t,qの値はsr0〜sr2と対応づけを行う。ラスタライズ部23は、sr0〜sr2の内容をラスタライズして、rf0〜rf2に出力するように設定される。
第5行目は、出力色Coutはピクセル単位であることを示している。ピクセル単位であるため、これはメモリ部25に画面と同サイズのバッファを設ける。以下ではこれをバッファ0とする。
【0052】
(2)変数宣言された変数を、対応するブロックの内部レジスタあるいはバッファに割り当てる。
第8行目は、頂点単位の内部変数Cdが宣言されている。頂点単位であるため、頂点単位処理部22の内部レジスタVR0〜VR2に割り当てる。
第9行目は、フラグメント単位の内部変数Ctが宣言されている。フラグメント単位であるため、フラグメント単位処理部24の内部レジスタFR0〜FR2に割り当てる。
第10行目は、ピクセル単位の内部変数Cpが宣言されている。ピクセル単位であるため、メモリ部25に画面と同サイズのバッファを設ける。以下ではこれをバッファ1とする。
【0053】
(3)処理内容を、対応するブロックのプログラムとして設定する。
第11行目は、NとLの内積をとり、その結果をCdに格納することを示している。入出力全てが頂点単位であるため、以下のようなプログラムを頂点単位処理部22に格納する。
【0054】
・ VR3 ← sv0*sv3
・ VR4 ← svl*sv4+VR3
・ VR5 ← sv2*sv5+VR4
・ VR0,VRl,VR2 ← VR5
【0055】
これはsv0〜sv2(ベクトルN)とsv3〜sv5(ベクトルL)の内積をレジスタVR0〜VR2に格納するというものである。
【0056】
第12行目は、フラグメント単位のテクスチャ座標stqをもとにテクスチャデータを引き、結果をフラグメント単位変数Ctに格納することを示している。入出力全てがフラグメント単位であるため、以下のようなプログラムをフラグメント単位処理部24に格納する。
【0057】
・ FR0,1,2 ← TEX(rf0,rf1,rf2)
【0058】
これはrf0〜rf2(stq)をもとにテクスチャを引き、その結果(td)をレジスタFR0〜FR2に格納するというものである。
【0059】
第13行目は、フラグメント単位変数Ctと頂点単位変数Cdを乗算して、その結果をピクセル単位変数Cpに格納することを示している。入力がフラグメント単位と頂点単位なので、これらを同じ単位にあわせる必要がある。したがって、頂点単位変数Cdをラスタライズしてフラグメント単位とする。
すなわち、レジスタVR0〜VR2の内容をラスタライズ部23にポートvr0〜vr2を通して出力するようにする。
【0060】
・ vr0,vrl,vr2 ← VR0,VR1,VR2
【0061】
同時にラスタライズ部23はポートvr0〜vr2の内容をラスタライズして、その結果をポートrf3〜rf5を通してフラグメント単位処理部24に出力するように設定する。
【0062】
フラグメント単位処理部24には、Cdのラスタライズ後の値(rf3〜rf5)と、Ct(FR0〜FR2)を乗じてCpに格納するための以下のプログラムを設定する。
【0063】
・ バッファ1 ← rf3*FR0,rf4*FR1,rf5*FR2
【0064】
Cpはピクセル単位変数であり、入力はピクセル単位変数でないため、バッファ1には全てのシーンを描画が完了される必要がある。そのため、画像処理部26には、シーンの描画が全て完了することを待つための以下のプログラムを設定する。
【0065】
・ WAIT シーン描画完了
【0066】
これはシーン描画完了が、シーン作成部21から通知されるまで、画像処理を行わないことを示す。
【0067】
第14行目は、ピクセル単位変数Cpにフィルタを行い、その結果をピクセル単位出力変数Coutに出力することを示している。入出力ともにピクセル単位であるため、画像処理部26に以下のプログラムを設定する。
【0068】
・ バッファ0 ← FILT(バッファ1)
【0069】
これはバッファ1全体に対して、フィルタ処理を行った結果を、バッファ0に格納するというものである。
【0070】
以上のように、本実施形態によれば、変数に頂点単位/フラグメント単位/ピクセル単位という属性を設けることにより、コンパイラはプログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【0071】
【発明の効果】
以上説明したように、本発明によれば、ピクセル単位という属性を与えることができ、指定された属性に従って描画パイプラインを用いた描画処理と、画面に対して行う画像処理とを、統一的に記述することができ、プログラムを実行するために適切なブロックを選択し、そのブロックに対してプログラムを設定することが可能となる。
【図面の簡単な説明】
【図1】従来のリアルタイム3次元コンピュータグラフィックスの分野における画像処理装置の構成例を示すブロック図である。
【図2】図1の画像処理装置の画像処理動作を示すフローチャートである。
【図3】プログラム実行時の変数属性の変化に対する概要を示すための模式図である。
【図4】サンプルのシェーダプログラムを擬似コードで記述した図である。
【図5】図4のサンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図6】従来のリアルタイム3次元コンピュータグラフィックスの分野における描画パイプライン以外の画像処理を用いることにより画質を改善する方法を採用した画像処理装置の構成例を示すブロック図である。
【図7】図6の画像処理装置の画像処理動作を示すフローチャートである。
【図8】本発明に係る画像処理装置の一実施形態を示すブロック図である。
【図9】本実施形態において、プログラム実行時の変数属性に変化に対する概要を示すための模式図である。
【図10】本実施形態を説明するためのサンプルのシェーダプログラムを擬似コードで記述した図である。
【図11】本実施形態に係る画像処理装置において上記サンプルのシェーダプログラムを実行する様子をフローチャートとして示したものである。
【図12】図10で記述したシェーダプログラムの構造例を示す図である。
【符号の説明】
20…画像処理装置、21…シーン作成部、22…頂点単位処理部、23…ラスタライズ部、24…フラグメント単位処理部、25…メモリ部、26…画像処理部。
Claims (8)
- オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理装置であって、
上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う処理手段
を有する画像処理装置。 - 上記処理手段は、上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する
請求項1記載の画像処理装置。 - 上記処理手段は、上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う
請求項1記載の画像処理装置。 - 上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、
上記処理手段は、所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、
属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う
請求項1記載の画像処理装置。 - オブジェクトを描画する処理と、画面の特定領域を一括して処理する画像処理とを変数の属性に応じて行う画像処理方法であって、
上記変数にピクセル単位であるという属性が指定されると、画面の特定領域を一括して処理する画像処理を行う
画像処理方法。 - 上記変数の属性がピクセル単位である場合には、上記変数に対する演算は、画面の特定領域を一括して処理する種類の演算であるとして処理する
請求項5記載の画像処理方法。 - 上記変数の属性がピクセル単位以外から、ピクセル単位へと変化した場合、シーン全体を描画完了する必要があると解釈して、シーン全ての描画処理が終了してから画面の特定領域を一括して処理する画像処理を行う
請求項5記載の画像処理方法。 - 上記変数は、頂点単位、フラグメント単位またはピクセル単位の属性を持ち、
所定のプログラムの途中で、属性が頂点単位からフラグメント単位に変化したならば、その途中にはラスタライズの処理を導入し、
属性がフラグメント単位からピクセル単位へと変化したならば、その途中ではシーン全体を描画完了する必要があると解釈し、シーンのすべての情報を描画し終わってから、画面の特定領域を一括して処理する画像処理を行う
請求項5記載の画像処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002286043A JP2004126676A (ja) | 2002-09-30 | 2002-09-30 | 画像処理装置およびその方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002286043A JP2004126676A (ja) | 2002-09-30 | 2002-09-30 | 画像処理装置およびその方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004126676A true JP2004126676A (ja) | 2004-04-22 |
Family
ID=32279198
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002286043A Pending JP2004126676A (ja) | 2002-09-30 | 2002-09-30 | 画像処理装置およびその方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004126676A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8189007B2 (en) | 2007-01-17 | 2012-05-29 | Samsung Electronics Co., Ltd. | Graphics engine and method of distributing pixel data |
-
2002
- 2002-09-30 JP JP2002286043A patent/JP2004126676A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8189007B2 (en) | 2007-01-17 | 2012-05-29 | Samsung Electronics Co., Ltd. | Graphics engine and method of distributing pixel data |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4549392B2 (ja) | 頂点及びフラグメントプログラムの最適化されたチェイニング | |
US8730253B2 (en) | Decomposing cubic Bezier segments for tessellation-free stencil filling | |
US9177351B2 (en) | Multi-primitive graphics rendering pipeline | |
JP5232358B2 (ja) | アウトラインフォントのレンダリング | |
CN106408635B (zh) | 图形处理系统及其操作方法、以及计算机可读存储介质 | |
US8269770B1 (en) | Tessellation of trimmed parametric surfaces by walking the surface | |
US20130127858A1 (en) | Interception of Graphics API Calls for Optimization of Rendering | |
JP2005100177A (ja) | 画像処理装置およびその方法 | |
JP2001052194A (ja) | 曲面の再構成 | |
US11741653B2 (en) | Overlapping visibility and render passes for same frame | |
JP2005100176A (ja) | 画像処理装置およびその方法 | |
US7808512B1 (en) | Bounding region accumulation for graphics rendering | |
JP2023510164A (ja) | ハイブリッドビニング | |
CN107949867A (zh) | 用于渲染数据的方法、计算机程序产品、显示单元和车辆 | |
JP2957511B2 (ja) | グラフィック処理装置 | |
JP7100624B2 (ja) | 優先プリミティブバッチのビニング及びソートを用いたハイブリッドレンダリング | |
CN101216932A (zh) | 图形处理装置、单元与执行三角形配置、属性配置的方法 | |
JP2006517705A (ja) | コンピュータグラフィックスシステム及びコンピュータグラフィクイメージのレンダリング方法 | |
JP3892016B2 (ja) | 画像処理装置および画像処理方法 | |
US7088368B1 (en) | Methods and systems for rendering computer graphics | |
US10062140B2 (en) | Graphics processing systems | |
JP2004126676A (ja) | 画像処理装置およびその方法 | |
JP2008299642A (ja) | 図形描画装置 | |
JP3052839B2 (ja) | 画像処理装置及びその処理方法 | |
US7002601B1 (en) | Method and apparatus for rendering a quadrangle primitive |