JP2005100177A - 画像処理装置およびその方法 - Google Patents
画像処理装置およびその方法 Download PDFInfo
- Publication number
- JP2005100177A JP2005100177A JP2003334203A JP2003334203A JP2005100177A JP 2005100177 A JP2005100177 A JP 2005100177A JP 2003334203 A JP2003334203 A JP 2003334203A JP 2003334203 A JP2003334203 A JP 2003334203A JP 2005100177 A JP2005100177 A JP 2005100177A
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- edge
- memory
- information
- normal vector
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/503—Blending, e.g. for anti-aliasing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/12—Indexing scheme for image data processing or generation, in general involving antialiasing
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
【課題】少ないメモリで、描画順序の影響を受けず、描画速度の低下を招くことなく、正確なアンチエイリアス処理を実現できる画像処理装置およびその方法を提供する。
【解決手段】エッジ情報を描画後の画像からエッジ情報を得、アンチエイリアスのために必要な処理内容を決定し、決定した処理を行うアンチエイリアス処理系200を有する。描画時に得られたzバッファの情報と各ピクセルにおける法線ベクトルの情報のどちらか、あるいはその両方の情報をスキャンし、あるいはzバッファの情報から復元された法線ベクトルの情報を使い、状態を保持するステートマシーンとエッジの連続を測るカウンタを規定し、各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきかを決定し、決定された値を使ってブレンド処理を行い、ピクセル値が更新されるところまで、スキャンの間に逐次行う。
【選択図】 図12
【解決手段】エッジ情報を描画後の画像からエッジ情報を得、アンチエイリアスのために必要な処理内容を決定し、決定した処理を行うアンチエイリアス処理系200を有する。描画時に得られたzバッファの情報と各ピクセルにおける法線ベクトルの情報のどちらか、あるいはその両方の情報をスキャンし、あるいはzバッファの情報から復元された法線ベクトルの情報を使い、状態を保持するステートマシーンとエッジの連続を測るカウンタを規定し、各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきかを決定し、決定された値を使ってブレンド処理を行い、ピクセル値が更新されるところまで、スキャンの間に逐次行う。
【選択図】 図12
Description
本発明は、モデルを単位図形の組み合わせによって表現し、スクリーン座標系の描画対象領域内に、ピクセルデータを発生してメモリに対してレンダリング処理を行い、画像を生成する場合に、エッジ情報を生成してアンチエイリアス処理を行う画像処理装置およびその方法に関するものである。
昨今のコンピュータシステムにおける演算速度の向上や描画機能の強化とも相俟って、コンピュータ資源を用いて図形や画像の作成や処理を行う「コンピュータ・グラフィックス(CG)」技術が盛んに研究・開発され、さらに実用化されている。
たとえば、3次元グラフィックスは、3次元オブジェクトが所定の光源によって照らされたときの光学現象を数学モデルで表現して、このモデルに基づいてオブジェクト表面に陰影や濃淡を付けたり、さらには模様を貼り付けたりして、よりリアルで3次元的な2次元高精細画像を生成するものである。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
このようなコンピュータ・グラフィックスは、科学、工学、製造などの開発分野でのCAD/CAM、その他の各種応用分野においてますます盛んに利用されるようになってきている。
3次元グラフィックスは、一般には、フロントエンドとして位置づけられる「ジオメトリ・サブシステム」と、バックエンドとして位置づけられる「ラスタ・サブシステム」とにより構成される。
ジオメトリ・サブシステムとは、ディスプレイ・スクリーン上に表示する3次元オブジェクトの位置や姿勢などの幾何学的な演算処理を行う過程のことである。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
ジオメトリ・サブシステムでは、一般にオブジェクトは多数のポリゴンの集合体として扱われ、ポリゴン単位で、「座標変換」、「クリッピング」、「光源計算」などの幾何学的な演算処理が行われる。
一方、ラスタ・サブシステムは、オブジェクトを構成する各ピクセル(pixel)を塗りつぶす過程のことである。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
ラスタライズ処理は、たとえばポリゴンの頂点毎に求められた画像パラメータを基にして、ポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間することによって実現される。
ここで言う画像パラメータには、いわゆるRGB形式などで表される色(描画色)データ、奥行き方向の距離を表すz値などがある。
また、最近の高精細な3次元グラフィックス処理では、遠近感を醸し出すためのf(fog:霧)や、物体表面の素材感や模様を表現してリアリティを与えるテクスチャt(texture)なども、画像パラメータの1つとして含まれている。
ここで、ポリゴンの頂点情報からポリゴン内部のピクセルを発生する処理では、よくDDA(Digital Differential Analyzer)と呼ばれる線形補間手法を用いて実行される。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
DDAプロセスでは、頂点情報からポリゴンの辺方向へのデータの傾きを求め、この傾きを用いて辺上のデータを算出した後、続いてラスタ走査方向(X方向)の傾きを算出し、この傾きから求めたパラメータの変化分を走査の開始点のパラメータ値に加えていくことで、内部のピクセルを発生していく。
そして、3次元コンピュータグラフィックスでは、各ピクセルに対応する色を決定するときに、各ピクセルの色の計算をし、この計算した色の値を、当該ピクセルに対応するディスプレイバッファ(フレームバッファ)のアドレスに書き込むレンダリング(Rendering)処理を行う。
このようなコンピュータグラフィクス処理により生成した画像は、直線、多角形エッジ、色の境界等が不連続であるエイリシアング効果が発生することから、視覚的な解像度を高めるためにアンチエイリアスなどの画像処理を行う。アンチエイリアス処理を行うには、エッジ情報の抽出が必要となる。
従来、エッジの抽出方法としては、生成した映像からフィルタリングだけでエッジを抽出する方法や、ポリゴンをアウトラインで書いてエッジを出す方法等がある。
また、アンチエイリアスの手法としては、スーパーサンプリング(Super Sampling)法や、ピクセル毎にカバレージ(coverage)を出す方法等がある。
また、アンチエイリアスの手法としては、スーパーサンプリング(Super Sampling)法や、ピクセル毎にカバレージ(coverage)を出す方法等がある。
ところが、フィルタリングだけでエッジを抽出する方法は、3次元コンピュータグラフィックスの画像であるという利点、すなわち画像生成時に有用なデータが発生する等を利用していないために、ある程度のエッジ情報は得られるが、アンチエイリアス処理に利用できるほど正確なエッジ情報を取り出すことができない。
ポリゴンをアウトラインで書いてエッジを出す方法では、ポリゴン単位で、その周辺のエッジをすべて書き出すので、本来必要な描画ピクセルの他に、その周りのピクセルのレ
ンダリングが必要である。その部分で、描画速度の低下を招く。また、せっかくレンダリングされたポリゴンのエッジの大半は描画オブジェクトのエッジではなく、また、他のポリゴンで上書きされるなどして、無駄になっている。
ンダリングが必要である。その部分で、描画速度の低下を招く。また、せっかくレンダリングされたポリゴンのエッジの大半は描画オブジェクトのエッジではなく、また、他のポリゴンで上書きされるなどして、無駄になっている。
また、アンチエイリアシングの手法としてのスーパーサンプリングの方法は、大量の点に描画して、後でローパスフィルタ(LPF)をかけるという方法であり、この方法では、サンプル数を増やせばそれだけクオリティは向上するが、その分莫大なメモリが必要となる。また、サンプル数を増やすと、その数だけレンダリングする必要があり、描画速度にも重大な低下を引き起こす。
また、ピクセル毎にカバレージを出す方法は、スーパーサンプリングの手法に比べて必要となるメモリは少ないが、描画順序の影響が大きく、ポリゴンの描画順序が悪いと正確なアンチエイリアス処理ができないため、Zソートの手法が必要となる。また、Zソート
を行ったとしても、いつまでも背景が残るなどの問題がある。たとえばトライアングルファン(Triangle Fan)の中心では、そのような問題が発生する。
を行ったとしても、いつまでも背景が残るなどの問題がある。たとえばトライアングルファン(Triangle Fan)の中心では、そのような問題が発生する。
本発明の第1の目的は、本来必要な描画ピクセルの他に回りのピクセルのレンダリングが不要で、描画速度の低下を招くことなく、アンチエイリアス処理に利用できるほど正確なエッジ情報を取り出すことができる画像処理装置およびその方法を提供することにある。
本発明の第2の目的は、少ないメモリで、描画順序の影響を受けず、描画速度の低下を招くことなく、正確なアンチエイリアス処理を実現できる画像処理装置およびその方法を提供することにある。
上記目的を達成するため、本発明の第1の観点は、スクリーン座標系の描画対象領域内に、ピクセルデータを発生してメモリに対してレンダリング処理を行い、上記メモリに描画された画像を生成する場合に、エッジ情報を生成してアンチエイリアス処理を行う画像処理装置であって、上記メモリに描画される所定のピクセルデータに基づいて上記エッジ情報を抽出するエッジ情報抽出手段と、上記エッジ情報抽出手段で得られたエッジ情報に基づいてアンチエイリアスのために必要な処理内容を決定し、決定した処理を行うアンチエイリアス処理手段とを有する。
好適には、上記アンチエイリアス処理手段は、各エッジ上のピクセルに対してブレンドのための隣接するピクセルと、ブレンドする割合とを決定し、上記決定したピクセルおよび値に基づいてブレンド処理を行う。
好適には、上記アンチエイリアス処理手段は、上記エッジ情報から処理中のピクセルがどのような形のパターンのどの位置にいるのかを示す第1の手段と、エイリアスパターンの開始点からエッジが逆転する変節点までの長さ、上記変節点からエイリアスパターンが終了するまでの長さをそれぞれ測定する第2の手段とを含み、上記第1の手段と第2の手段の情報に基づいてブレンド対象のピクセルの位置と当該ブレンドの係数を計算する。
好適には、上記メモリに描画されるピクセルデータには奥行き情報を含み、上記エッジ情報抽出手段は、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンした結果得られた奥行き情報の2階微分値を求め、当該2階微分値に基づいてエッジ情報を抽出する。
好適には、上記メモリへの描画時に生成されるデータにピクセル毎の法線ベクトルを含み、上記メモリには法線ベクトルが格納される法線ベクトルバッファが形成され、上記エッジ情報抽出手段は、上記法線ベクトルバッファに格納された上記ピクセル毎の法線ベクトルをスキャンした結果得られた法線ベクトルに基づいてエッジ情報を抽出する。
好適には、上記メモリに描画されるピクセルデータには奥行き情報を含み、上記エッジ情報抽出手段は、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンした結果得られた奥行き情報とスクリーン座標からピクセル毎の法線ベクトルを復元し、復元した法線ベクトルに基づいてエッジ情報を抽出する。
好適には、上記エッジ情報抽出手段は、注目するライン近傍の複数のラインのエッジ情報を抽出する。
本発明の第2の観点は、スクリーン座標系の描画対象領域内に、ピクセルデータを発生してメモリに対してレンダリング処理を行い、上記メモリに描画された画像を生成する場合に、エッジ情報を生成してアンチエイリアス処理を行う画像処理方法であって、
上記メモリに描画される所定のピクセルデータに基づいて上記エッジ情報を抽出する第1ステップと、上記第1ステップで得られたエッジ情報に基づいてアンチエイリアスのために必要な処理内容を決定し、決定した処理を行う第2ステップとを有する。
上記メモリに描画される所定のピクセルデータに基づいて上記エッジ情報を抽出する第1ステップと、上記第1ステップで得られたエッジ情報に基づいてアンチエイリアスのために必要な処理内容を決定し、決定した処理を行う第2ステップとを有する。
本発明によれば、たとえばエッジ情報抽出手段により奥行き情報のメモリに対する描画終了後に、奥行き情報バッファがスキャンされ、スキャンして得られた奥行き情報の2階微分値を求められる。
そして、設定されたしきい値と求めた2階微分値との比較によりエッジであるか否かの評価が行われる。
すなわち、本発明によれば、通常の3次元コンピュータグラフィックス描画時に本来必要であり、描画されたときには情報として残っているにもかかわらず従来はその後使われなかった情報、たとえば奥行き(z)バッファの情報を利用してたとえば描画後にエッジ情報を抽出する。
また、本発明によれば、通常の3次元コンピュータグラフィックス描画では残らない情報、たとえば、ピクセルごとの法線ベクトルの情報等を取っておいて、後段で使う、または、後段のエッジ抽出のために必要な情報を描画時に作り出して残しておく。
そして、アンチエイリアス処理手段において、各エッジ上のピクセルに対してそれぞれ、どの方向の隣接するピクセルのピクセル値と、ブレンドする割合が決定され、決定した値に基づくブレンド処理が行われる。
そして、設定されたしきい値と求めた2階微分値との比較によりエッジであるか否かの評価が行われる。
すなわち、本発明によれば、通常の3次元コンピュータグラフィックス描画時に本来必要であり、描画されたときには情報として残っているにもかかわらず従来はその後使われなかった情報、たとえば奥行き(z)バッファの情報を利用してたとえば描画後にエッジ情報を抽出する。
また、本発明によれば、通常の3次元コンピュータグラフィックス描画では残らない情報、たとえば、ピクセルごとの法線ベクトルの情報等を取っておいて、後段で使う、または、後段のエッジ抽出のために必要な情報を描画時に作り出して残しておく。
そして、アンチエイリアス処理手段において、各エッジ上のピクセルに対してそれぞれ、どの方向の隣接するピクセルのピクセル値と、ブレンドする割合が決定され、決定した値に基づくブレンド処理が行われる。
本発明によれば、本来必要な描画ピクセルの他に回りのピクセルのレンダリングが不要で、描画速度の低下を招くことなく、アンチエイリアス処理に利用できるほど正確なエッジ情報を取り出すことができる。
また、少ないメモリで、描画順序の影響を受けず、描画速度の低下を招くことなく、正確なアンチエイリアス処理を実現できる利点がある。
また、少ないメモリで、描画順序の影響を受けず、描画速度の低下を招くことなく、正確なアンチエイリアス処理を実現できる利点がある。
以下、本実施形態においては、パーソナルコンピュータなどに適用される、任意の3次元物体モデルに対する所望の3次元画像をCRT(Cathode Ray Tube)などのディスプレイ上に高速に表示する3次元コンピュータグラフィックスシステムについて説明する。
図1は、本発明に係る画像処理装置としての3次元コンピュータグラフィックスシステム10のシステム構成図である。
3次元コンピュータグラフィックスシステム10は、立体モデルを単位図形である三角形(ポリゴン)の組み合わせとして表現し、このポリゴンを描画することで表示画面の各画素の色を決定し、ディスプレイに表示するポリゴンレンダリング処理を行うシステムである。
また、3次元コンピュータグラフィックスシステム10では、平面上の位置を表現する(x,y)座標の他に、奥行きを表すz座標を用いて3次元物体を表し、この(x,y,z)の3つの座標で3次元空間の任意の一点を特定する。
また、3次元コンピュータグラフィックスシステム10では、平面上の位置を表現する(x,y)座標の他に、奥行きを表すz座標を用いて3次元物体を表し、この(x,y,z)の3つの座標で3次元空間の任意の一点を特定する。
また、3次元コンピュータグラフィックスシステム10は、コンピュータグラフィクスで生成した画像に対してアンチエイリアスなどの画像処理を行う。この場合において、通常の画像を処理する場合には利用できない、有用な情報がコンピュータグラフィクス(CG)画像の生成過程において多数発生する。本実施形態においては、それら有用な情報を再利用あるいは加工して、画像内のオブジェクトの境界や方向が急峻に変化する表面を示すエッジ情報を正確に取り出す方法を示す。
本実施形態においては、2種類の方法を示す。詳細については後述する。
第1番目の方法は、通常の3次元コンピュータグラフィックス描画時に本来必要であり、描画されたときには情報として残っているにもかかわらず従来はその後使われなかった情報、たとえばzバッファの情報を利用して描画後にエッジ情報を抽出する方法である。zバッファの情報は色情報とともに3次元コンピュータグラフィックスでは描画されるものであるが、従来は色情報は後段に流されて使われるがz情報(z値)は、その後使われることなく捨てられていた。本実施形態においては、そのzバッファの情報を後段において再利用する。
第2番目の方法は、通常の3次元コンピュータグラフィックス描画では残らない情報、たとえば、ピクセルごとの法線ベクトルの情報や、ポリゴンの傾きの情報を取っておいて、後段で使う方法、または、後段のエッジ抽出のために必要な情報を描画時に作り出して残しておくという方法である。この方法は後段の処理に対して、やるべきことを示す、という意味で、「命令」または「operation code」「オペコード」をレンダリングしておく、と解釈することもできる。これらの情報は3次元コンピュータグラフィックス独特の情報である。描画時に持っている情報を、後段の画像処理で使えるようにうまく加工して後段へ流す手法であるとも言える。
本実施形態においては、2種類の方法を示す。詳細については後述する。
第1番目の方法は、通常の3次元コンピュータグラフィックス描画時に本来必要であり、描画されたときには情報として残っているにもかかわらず従来はその後使われなかった情報、たとえばzバッファの情報を利用して描画後にエッジ情報を抽出する方法である。zバッファの情報は色情報とともに3次元コンピュータグラフィックスでは描画されるものであるが、従来は色情報は後段に流されて使われるがz情報(z値)は、その後使われることなく捨てられていた。本実施形態においては、そのzバッファの情報を後段において再利用する。
第2番目の方法は、通常の3次元コンピュータグラフィックス描画では残らない情報、たとえば、ピクセルごとの法線ベクトルの情報や、ポリゴンの傾きの情報を取っておいて、後段で使う方法、または、後段のエッジ抽出のために必要な情報を描画時に作り出して残しておくという方法である。この方法は後段の処理に対して、やるべきことを示す、という意味で、「命令」または「operation code」「オペコード」をレンダリングしておく、と解釈することもできる。これらの情報は3次元コンピュータグラフィックス独特の情報である。描画時に持っている情報を、後段の画像処理で使えるようにうまく加工して後段へ流す手法であるとも言える。
zバッファを使う方法では、ピクセル単位で、その2階微分を計算してエッジ抽出に使う。
法線ベクトルを使う方法では、ピクセル単位に、隣り合うピクセル同士の法線ベクトルの内積を計算して、その大きさからエッジであるかどうかを判断する。
さらに、zバッファの情報だけから、ピクセルのスクリーン座標を使って法線ベクトルの情報を各ピクセルで復元して使う方法も採用可能である。
さらに、この手法で見つけたエッジ部分だけにスーパーサンプリングなどの手法を用いる方法も採用可能である。
法線ベクトルを使う方法では、ピクセル単位に、隣り合うピクセル同士の法線ベクトルの内積を計算して、その大きさからエッジであるかどうかを判断する。
さらに、zバッファの情報だけから、ピクセルのスクリーン座標を使って法線ベクトルの情報を各ピクセルで復元して使う方法も採用可能である。
さらに、この手法で見つけたエッジ部分だけにスーパーサンプリングなどの手法を用いる方法も採用可能である。
また、3次元コンピュータグラフィックスシステム10は、アンチエイリアス処理を行
う場合、一般に用いられている手法とは異なり、描画時に各ピクセルのカバレージを計算、格納することは行わない。マルチサンプリング、スーパーサンプリングのような手法も使わない。
すなわち、3次元コンピュータグラフィックスシステム10は、コンピュータグラフィックス画像の生成終了後の後処理としてアンチエイリアス処理を行う。
コンピュータグラフィックス画像生成の終了後に後処理としてエッジを抽出し、そのエッジ情報を利用してアンチエイリアス処理を行う。
エッジ情報からエッジのパターンを割り出し、そのパターンに合わせてピクセルに対して処理を行う。本実施形態においては、書き込まれた(打ち込まれた)ピクセルの周りのピクセルに対してブレンド処理を行うだけでなく、オブジェクトと背景の両方に対して対称的にブレンド処理を行う。カバレージで言うと100%として書き込まれた(打ち込まれた)ピクセルもブレンド処理を受けることがある。
パターン抽出時には、ステートマシーン(StateMachine)とカウンタを用いて、直線的に長いエッジに対応できる。
エッジのパターンとしては、アンチエイリアス処理が必要なパターンだけを扱う。エッジが重なったパターンも扱う。
本実施形態では、zバッファなどの情報をピクセル単位でスキャンしながら、同時にアンチエイリアス処理も進行させていく、という実装方法も示す。
う場合、一般に用いられている手法とは異なり、描画時に各ピクセルのカバレージを計算、格納することは行わない。マルチサンプリング、スーパーサンプリングのような手法も使わない。
すなわち、3次元コンピュータグラフィックスシステム10は、コンピュータグラフィックス画像の生成終了後の後処理としてアンチエイリアス処理を行う。
コンピュータグラフィックス画像生成の終了後に後処理としてエッジを抽出し、そのエッジ情報を利用してアンチエイリアス処理を行う。
エッジ情報からエッジのパターンを割り出し、そのパターンに合わせてピクセルに対して処理を行う。本実施形態においては、書き込まれた(打ち込まれた)ピクセルの周りのピクセルに対してブレンド処理を行うだけでなく、オブジェクトと背景の両方に対して対称的にブレンド処理を行う。カバレージで言うと100%として書き込まれた(打ち込まれた)ピクセルもブレンド処理を受けることがある。
パターン抽出時には、ステートマシーン(StateMachine)とカウンタを用いて、直線的に長いエッジに対応できる。
エッジのパターンとしては、アンチエイリアス処理が必要なパターンだけを扱う。エッジが重なったパターンも扱う。
本実施形態では、zバッファなどの情報をピクセル単位でスキャンしながら、同時にアンチエイリアス処理も進行させていく、という実装方法も示す。
必要な処理は以下のとおりである。
1)スクリーン座標でのx方向、y方向それぞれに関するエッジ情報を描画後の画像から復元する。
2)得られたエッジ情報から、アンチエイリアス(anti-aliasing)のために必要な処
理内容を決定する。
3)決定された処理を行う。
1)スクリーン座標でのx方向、y方向それぞれに関するエッジ情報を描画後の画像から復元する。
2)得られたエッジ情報から、アンチエイリアス(anti-aliasing)のために必要な処
理内容を決定する。
3)決定された処理を行う。
本実施形態では、描画時に得られたzバッファの情報と各ピクセルにおける法線ベクトルの情報のどちらか、あるいはその両方の情報をスキャンすることにより、あるいはzバッファの情報から復元された法線ベクトルの情報を使ってアンチエイリアス処理を各ピクセルに施して行くという手法を採用する。
各スキャンにおいて、状態を保持する第1の手段としてのステートマシーンとエッジの連続を測る第2の手段としてのカウンタを規定する。その2つの素子により各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきかを決定する。そして、決定された値を使ってブレンド処理が行われ、ピクセル値が更新されるところまでが、上記スキャンの間に逐次行われる。
この方法によれば、アンチエイリアス処理の目的で増加すべきメモリ量は少なくてすみ、描画時にパフォーマンスを下げるような処理は追加されない。
各スキャンにおいて、状態を保持する第1の手段としてのステートマシーンとエッジの連続を測る第2の手段としてのカウンタを規定する。その2つの素子により各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきかを決定する。そして、決定された値を使ってブレンド処理が行われ、ピクセル値が更新されるところまでが、上記スキャンの間に逐次行われる。
この方法によれば、アンチエイリアス処理の目的で増加すべきメモリ量は少なくてすみ、描画時にパフォーマンスを下げるような処理は追加されない。
以下、上記のように構成される3次元コンピュータグラフィックスシステム10の各部の具体的な構成および機能について順を追って説明する。
図1に示すように、3次元コンピュータグラフィックスシステム10は、メインプロセッサ11、メインメモリ12、I/Oインタフェース回路13、およびレンダリング回路14が、メインバス15を介して接続され、レンダリング回路14とCRTコントロール回路16とが接続されている。なお、図1においては、レンダリング回路14の外部にCRTコントロール回路16を設けているが、レンダリング回路14内に設ける構成等も採用可能である。
これらの構成要素のうち、レンダリング回路14または/およびCRTコントロール回路16が本発明のエッジ情報抽出手段、およびアンチエイリアス処理手段を構成する。
以下、各構成要素の機能について説明する。
これらの構成要素のうち、レンダリング回路14または/およびCRTコントロール回路16が本発明のエッジ情報抽出手段、およびアンチエイリアス処理手段を構成する。
以下、各構成要素の機能について説明する。
メインプロセッサ11は、たとえば、アプリケーションの進行状況などに応じて、メインメモリ12から必要なグラフィックデータを読み出し、このグラフィックデータに対して、座標変換、クリッピング(Clipping)処理、ライティング(Lighting)処理などのジオメトリ(Geometry)処理などを行い、ポリゴンレンダリングデータを生成する。
メインプロセッサ11は、ポリゴンレンダリングデータS11を、メインバス15を介してレンダリング回路14に出力する。
メインプロセッサ11は、ポリゴンレンダリングデータS11を、メインバス15を介してレンダリング回路14に出力する。
I/Oインタフェース回路13は、必要に応じて、外部から動きの制御情報またはポリゴンレンダリングデータなどを入力し、これをメインバス15を介してレンダリング回路14に出力する。
レンダリング回路14に入力されるポリゴンレンダリングデータは、ポリゴンの各3頂点の(x,y,z,R,G,B,α,s,t,q)のデータを含んでいる。
ここで、(x,y,z)データは、ポリゴンの頂点の3次元座標を示し、(R,G,B)データは、それぞれ当該3次元座標における赤、緑、青の輝度値を示している。
また、αはブレンド値(係数)を示している。
(s,t,q)データのうち、(s,t)は、対応するテクスチャの同次座標を示しており、qは同次項を示している。ここで、「s/q」および「t/q」に、それぞれテクスチャサイズUSIZEおよびVSIZEを乗じて、実際のテクスチャ座標データ(u,v)が得られる。
レンダリング回路14のグラフィックスメモリ(具体的には後記するテクスチャバッファ)に記憶されたテクスチャデータへのアクセスは、テクスチャ座標データ(u,v)を用いて行われる。
すなわち、ポリゴンレンダリングデータは、三角形の各頂点の物理座標値と、それぞれの頂点の色とテクスチャデータである。
ここで、(x,y,z)データは、ポリゴンの頂点の3次元座標を示し、(R,G,B)データは、それぞれ当該3次元座標における赤、緑、青の輝度値を示している。
また、αはブレンド値(係数)を示している。
(s,t,q)データのうち、(s,t)は、対応するテクスチャの同次座標を示しており、qは同次項を示している。ここで、「s/q」および「t/q」に、それぞれテクスチャサイズUSIZEおよびVSIZEを乗じて、実際のテクスチャ座標データ(u,v)が得られる。
レンダリング回路14のグラフィックスメモリ(具体的には後記するテクスチャバッファ)に記憶されたテクスチャデータへのアクセスは、テクスチャ座標データ(u,v)を用いて行われる。
すなわち、ポリゴンレンダリングデータは、三角形の各頂点の物理座標値と、それぞれの頂点の色とテクスチャデータである。
レンダリング回路14は、図1に示すように、線形補間演算のための初期設定演算ブロックとしてのDDA(Digital Differential Analyzer) セットアップ回路141、線形補間処理ブロックとしてのトライアングルDDA回路142、テクスチャエンジン回路143、メモリインタフェース(I/F)回路144、およびたとえばDRAMからなるグラフィックスメモリ145を有している。そして、テクスチャエンジン回路143、およびメモリインタフェース(I/F)回路144により処理回路が構成される。
DDAセットアップ回路141は、後段のトライアングルDDA回路142において物理座標系上の三角形の各頂点の値を線形補間して、三角形の内部の各画素の色と深さ情報を求めるに先立ち、ポリゴンレンダリングデータS11が示す(z,R,G,B,α,s,t,q)データについて、三角形の辺と水平方向の差分などを求めるセットアップ演算を行う。
このセットアップ演算は、具体的には、開始点の値と終点の値と、開始点と終点との距離を用いて、単位長さ移動した場合における、求めようとしている値の変分を算出する。
DDAセットアップ回路141は、算出した変分データを含むプリミティブに関する情報としてのセットアップデータS141をトライアングルDDA回路142に出力する。
三角形の各頂点データは、たとえばx,y座標が16ビット、z座標が24ビット、RGBカラー値が各12ビット(=8+4)、s,t,qテクスチャ座標は各32ビット浮動少数値(IEEEフォーマット)等で構成される。
このセットアップ演算は、具体的には、開始点の値と終点の値と、開始点と終点との距離を用いて、単位長さ移動した場合における、求めようとしている値の変分を算出する。
DDAセットアップ回路141は、算出した変分データを含むプリミティブに関する情報としてのセットアップデータS141をトライアングルDDA回路142に出力する。
三角形の各頂点データは、たとえばx,y座標が16ビット、z座標が24ビット、RGBカラー値が各12ビット(=8+4)、s,t,qテクスチャ座標は各32ビット浮動少数値(IEEEフォーマット)等で構成される。
トライアングルDDA回路142は、DDAセットアップ回路141から入力した変分データを含むプリミティブに関する情報としてのセットアップデータS141を基に、三角形内部の各画素における線形補間された(z,R,G,B,α,s,t,q)データを算出する。
トライアングルDDA回路142は、各画素の(x,y)データと、当該(x,y)座標における(z,R,G,B,α,s,t,q)データとを、DDAデータ(補間データ)S142としてテクスチャエンジン回路143に出力する。
トライアングルDDA回路142は、各画素の(x,y)データと、当該(x,y)座標における(z,R,G,B,α,s,t,q)データとを、DDAデータ(補間データ)S142としてテクスチャエンジン回路143に出力する。
すなわち、トライアングルDDA回路142は、ポリゴンの頂点毎に求められた画像パラメータに基づいてポリゴン内部に含まれるすべてのピクセルの画像パラメータを補間するラスタライズ処理(ラスタライゼーション:Rasterization)を行う。
具体的には、トライアングルDDA回路142は、各種データ(z,テクスチャ座標、カラーなど)をラスタライズする。
具体的には、トライアングルDDA回路142は、各種データ(z,テクスチャ座標、カラーなど)をラスタライズする。
テクスチャエンジン回路143は、「s/q」および「t/q」の算出処理、テクスチャ座標データ(u,v)の算出処理、グラフィックスメモリ145からの(R,G,B)データの読み出し処理等をパイプライン方式で行う。
なお、テクスチャエンジン回路143は、たとえば所定の矩形内に位置する複数(たとえば4あるいは8)画素についての処理を同時に並行して行う。
なお、テクスチャエンジン回路143は、たとえば所定の矩形内に位置する複数(たとえば4あるいは8)画素についての処理を同時に並行して行う。
テクスチャエンジン回路143は、DDAデータS142が示す(s,t,q)データについて、sデータをqデータで除算する演算と、tデータをqデータで除算する演算とを行う。
テクスチャエンジン回路143には、たとえば図示しない除算回路が並列処理する画素数分だけ(たとえば8個)設けられており、8画素についての除算「s/q」および「t/q」が同時に行われる。また、8画素のうち代表点からの補間演算処理を行うように実装することも可能である。
テクスチャエンジン回路143には、たとえば図示しない除算回路が並列処理する画素数分だけ(たとえば8個)設けられており、8画素についての除算「s/q」および「t/q」が同時に行われる。また、8画素のうち代表点からの補間演算処理を行うように実装することも可能である。
また、テクスチャエンジン回路143は、除算結果である「s/q」および「t/q」に、それぞれテクスチャサイズUSIZEおよびVSIZEを乗じて、テクスチャ座標データ(u,v)を生成する。
また、テクスチャエンジン回路143は、メモリI/F回路144を介して、グラフィックスメモリ145に、生成したテクスチャ座標データ(u,v)を含む読み出し要求を出力し、メモリI/F回路144を介して、グラフィックスメモリ145に含まれるテクスチャバッファに記憶されているテクスチャデータを読み出すことで、(s,t)データに対応したテクスチャアドレスに記憶された(R,G,B)データを得る。
テクスチャエンジン回路143は、読み出した(R,G,B)データの(R,G,B)データと、前段のトライアングルDDA回路142からのDDAデータS142に含まれる(R,G,B)データとを、それぞれ掛け合わせるなどして、画素データを生成する。
テクスチャエンジン回路143は、この画素データを最終的に画素のカラー値としてメモリI/F回路144に出力する。
また、テクスチャエンジン回路143は、メモリI/F回路144を介して、グラフィックスメモリ145に、生成したテクスチャ座標データ(u,v)を含む読み出し要求を出力し、メモリI/F回路144を介して、グラフィックスメモリ145に含まれるテクスチャバッファに記憶されているテクスチャデータを読み出すことで、(s,t)データに対応したテクスチャアドレスに記憶された(R,G,B)データを得る。
テクスチャエンジン回路143は、読み出した(R,G,B)データの(R,G,B)データと、前段のトライアングルDDA回路142からのDDAデータS142に含まれる(R,G,B)データとを、それぞれ掛け合わせるなどして、画素データを生成する。
テクスチャエンジン回路143は、この画素データを最終的に画素のカラー値としてメモリI/F回路144に出力する。
なお、グラフィックスメモリ145に含まれるテクスチャバッファには、MIPMAP(複数解像度テクスチャ)などの複数の縮小率に対応したテクスチャデータが記憶されている。ここで、何れの縮小率のテクスチャデータを用いるかは、所定のアルゴリズムを用いて、前記三角形単位で決定される。
テクスチャエンジン回路143は、フルカラー方式の場合には、テクスチャバッファから読み出した(R,G,B)データを直接用いる。
一方、テクスチャエンジン回路143は、インデックスカラー方式の場合には、あらかじめ作成しておいたカラーインデックステーブルのデータを、テクスチャカラールックアップテーブル(CLUT)バッファより内蔵するSRAM等で構成した一時保管バッファに転送しておいて、このカラールックアップテーブルを用いて、テクスチャバッファから読み出したカラーインデックスに対応する(R,G,B)データを得る。
たとえばカラールックアップテーブルがSRAMで構成された場合、カラーインデックスをSRAMのアドレスに入力すると、その出力には実際の(R,G,B)データが出てくるといった使い方となる。
一方、テクスチャエンジン回路143は、インデックスカラー方式の場合には、あらかじめ作成しておいたカラーインデックステーブルのデータを、テクスチャカラールックアップテーブル(CLUT)バッファより内蔵するSRAM等で構成した一時保管バッファに転送しておいて、このカラールックアップテーブルを用いて、テクスチャバッファから読み出したカラーインデックスに対応する(R,G,B)データを得る。
たとえばカラールックアップテーブルがSRAMで構成された場合、カラーインデックスをSRAMのアドレスに入力すると、その出力には実際の(R,G,B)データが出てくるといった使い方となる。
また、テクスチャエンジン回路143は、前述したエッジ情報抽出の第2の方法を実現スルために、通常の3次元コンピュータグラフィックス描画では残らない情報、たとえば、ピクセルごとの法線ベクトルの情報や、ポリゴンの傾きの情報をグラフィックスメモリ145に格納するように構成することも可能である。
メモリI/F回路144は、テクスチャエンジン回路143から入力した画素データS145に対応するzデータと、グラフィックスメモリ145に含まれるzバッファに記憶されているzデータとの比較を行い、入力した画素データによって描画される画像が、前回、グラフィックスメモリ145(ディスプレイバッファ)に書き込まれた画像より、手前(視点側)に位置するか否かを判断し、手前に位置する場合には、画像データに対応するzデータでzバッファに記憶されたzデータを更新する。
また、メモリI/F回路144は、(R,G,B)データをグラフィックスメモリ145(ディスプレイバッファ)に書き込む。
また、メモリI/F回路144は、(R,G,B)データをグラフィックスメモリ145(ディスプレイバッファ)に書き込む。
さらに、メモリI/F回路144は、今から描画しようとしている画素におけるテクスチャアドレスに対応したテクスチャデータを格納しているグラフィックメモリ145のメモリブロックをそのテクスチャアドレスより算出し、そのメモリブロックにのみ読み出し要求を出すことにより、テクスチャデータを読み出す。
この場合、該当するテクスチャデータを保持していないメモリブロックにおいては、テクスチャデータの読み出しのためのアクセスが行われないため、描画により多くのアクセス時間を提供することが可能となっている。
この場合、該当するテクスチャデータを保持していないメモリブロックにおいては、テクスチャデータの読み出しのためのアクセスが行われないため、描画により多くのアクセス時間を提供することが可能となっている。
メモリI/F回路144は、描画においても同様に、今から描画しようとしている画素アドレスに対応する画素データを格納しているグラフィックスメモリ145のメモリブロックに対して、該当アドレスから画素データをモディファイ書き込みをするために読み出し、モディファイ後同じアドレスへ書き戻す。
隠れ面処理を行なう場合には、やはり同じように今から描画しようとしている画素アドレスに対応する奥行きデータを格納しているメモリブロックに対して、該当アドレスから奥行きデータをモディファイ書き込みするため読み出し、必要ならばモディファイ後同じアドレスへ書き戻す。
隠れ面処理を行なう場合には、やはり同じように今から描画しようとしている画素アドレスに対応する奥行きデータを格納しているメモリブロックに対して、該当アドレスから奥行きデータをモディファイ書き込みするため読み出し、必要ならばモディファイ後同じアドレスへ書き戻す。
また、メモリI/F回路144は、テクスチャエンジン回路143からグラフィックスメモリ145に対する、生成されたテクスチャ座標データ(u,v)を含む読み出し要求を受けた場合には、グラフィックスメモリ145に記憶された(R,G,B)データを読み出す。
また、メモリI/F回路144は、CRTコントロール回路16から表示データを読み出す要求を受けた場合には、この要求に応じて、グラフィックメモリ145(ディスプレイバッファ)から一定の固まり、たとえば8画素あるいは16画素単位で表示データを読み出す。
メモリI/F回路144は、CRTコントロール回路16から、たとえばz値を使ったエッジ情報復元のためにz値の読み出し要求を受けた場合には、この要求に応じて、グラフィックメモリ145(zバッファ)をx方向(横方向),y方向(縦方向)にスキャンしてz値を読み出す。
また、メモリI/F回路144は、CRTコントロール回路16から、たとえば法線ベクトルを使ったエッジ情報復元のために法線ベクトルの読み出し要求を受けた場合には、この要求に応じて、グラフィックメモリ145をスキャンして法線ベクトル情報を読み出す。
また、メモリI/F回路144は、CRTコントロール回路16から表示データを読み出す要求を受けた場合には、この要求に応じて、グラフィックメモリ145(ディスプレイバッファ)から一定の固まり、たとえば8画素あるいは16画素単位で表示データを読み出す。
メモリI/F回路144は、CRTコントロール回路16から、たとえばz値を使ったエッジ情報復元のためにz値の読み出し要求を受けた場合には、この要求に応じて、グラフィックメモリ145(zバッファ)をx方向(横方向),y方向(縦方向)にスキャンしてz値を読み出す。
また、メモリI/F回路144は、CRTコントロール回路16から、たとえば法線ベクトルを使ったエッジ情報復元のために法線ベクトルの読み出し要求を受けた場合には、この要求に応じて、グラフィックメモリ145をスキャンして法線ベクトル情報を読み出す。
メモリI/F回路144は、グラフィックスメモリ145へのアクセス(書き込みまたは読み出し)を行うが、書き込み経路と読み出し経路とが別経路として構成されている。
すなわち、書き込みの場合には書き込みアドレスと書き込みデータが書き込み系回路で処理されてグラフィックスメモリ145に書き込み、読み出しの場合には読み出し系回路で処理されてグラフィックスメモリ145から読み出す。
そして、メモリI/F回路144は、所定のインターリーブ方式のアドレッシングに基づいてグラフィックスメモリ145へのアクセスを、たとえば16画素単位で行う。
すなわち、書き込みの場合には書き込みアドレスと書き込みデータが書き込み系回路で処理されてグラフィックスメモリ145に書き込み、読み出しの場合には読み出し系回路で処理されてグラフィックスメモリ145から読み出す。
そして、メモリI/F回路144は、所定のインターリーブ方式のアドレッシングに基づいてグラフィックスメモリ145へのアクセスを、たとえば16画素単位で行う。
このようなメモリとのデータのやりとりにおいては、それまでの処理を複数並行処理することで、描画性能を向上させることができる。
特に、トライアングルDDA部分とテクスチャエンジン部分を並列実効形式で、同じ回路を設ける(空間並列)か、または、パイプラインを細かく挿入する(時間並列)ことで、複数画素の同時算出を行っている。
グラフィックスメモリ145のメモリブロックは表示領域において隣接した部分は、後述するように異なるメモリブロックとなるように配置してあるので、三角形のような平面を描画する場合には面で同時に処理できることになるため、それぞれのメモリブロックの動作確率は非常に高くなっている。
特に、トライアングルDDA部分とテクスチャエンジン部分を並列実効形式で、同じ回路を設ける(空間並列)か、または、パイプラインを細かく挿入する(時間並列)ことで、複数画素の同時算出を行っている。
グラフィックスメモリ145のメモリブロックは表示領域において隣接した部分は、後述するように異なるメモリブロックとなるように配置してあるので、三角形のような平面を描画する場合には面で同時に処理できることになるため、それぞれのメモリブロックの動作確率は非常に高くなっている。
グラフィックスメモリ145は、基本的には、テクスチャバッファ、ディスプレイバッファ、zバッファおよびテクスチャCLUT(Color Look Up Table) バッファとして機能する。
また、グラフィックスメモリ145は、CRTコントロール回路16が、法線ベクトルを使ったエッジ情報復元を行うように構成されている場合には、テクスチャバッファ、ディスプレイバッファ、zバッファおよびテクスチャCLUT(Color Look Up Table) バッファとして機能に加えて、法線ベクトルを格納する法線バッファとしても機能する。
また、グラフィックスメモリ145は、同一機能を有する複数、たとえば4個のモジュールに分割されている。
また、グラフィックスメモリ145は、CRTコントロール回路16が、法線ベクトルを使ったエッジ情報復元を行うように構成されている場合には、テクスチャバッファ、ディスプレイバッファ、zバッファおよびテクスチャCLUT(Color Look Up Table) バッファとして機能に加えて、法線ベクトルを格納する法線バッファとしても機能する。
また、グラフィックスメモリ145は、同一機能を有する複数、たとえば4個のモジュールに分割されている。
また、グラフィックスメモリ145には、より多くのテクスチャデータを格納するために、インデックスカラーにおけるインデックスと、そのためのカラールックアップテーブル値が、テクスチャCLUTバッファに格納されている。
インデックスおよびカラールックアップテーブル値は、上述したように、テクスチャ処理に使われる。
すなわち、通常はR,G,Bそれぞれ8ビットの合計24ビットでテクスチャ要素を表現するが、それではデータ量が膨らむため、あらかじめ選んでおいたたとえば256色等の中から一つの色を選んで、そのデータをテクスチャ処理に使う。このことで256色であればそれぞれのテクスチャ要素は8ビットで表現できることになる。インデックスから実際のカラーへの変換テーブルは必要になるが、テクスチャの解像度が高くなるほど、よりコンパクトなテクスチャデータとすることが可能となる。
これにより、テクスチャデータの圧縮が可能となり、内蔵メモリの効率良い利用が可能となる。
インデックスおよびカラールックアップテーブル値は、上述したように、テクスチャ処理に使われる。
すなわち、通常はR,G,Bそれぞれ8ビットの合計24ビットでテクスチャ要素を表現するが、それではデータ量が膨らむため、あらかじめ選んでおいたたとえば256色等の中から一つの色を選んで、そのデータをテクスチャ処理に使う。このことで256色であればそれぞれのテクスチャ要素は8ビットで表現できることになる。インデックスから実際のカラーへの変換テーブルは必要になるが、テクスチャの解像度が高くなるほど、よりコンパクトなテクスチャデータとすることが可能となる。
これにより、テクスチャデータの圧縮が可能となり、内蔵メモリの効率良い利用が可能となる。
さらに、グラフィックスメモリ145には、描画と同時並行的に隠れ面処理を行うため、描画しようとしている物体の奥行き情報が格納されている。
なお、表示データと奥行きデータおよびテクスチャデータの格納方法としては、たとえばメモリブロックの所定の位置、たとえば先頭から連続して表示データが格納され、次に奥行きデータが格納され、残りの空いた領域に、テクスチャの種類毎に連続したアドレス空間でテクスチャデータが格納される。
なお、表示データと奥行きデータおよびテクスチャデータの格納方法としては、たとえばメモリブロックの所定の位置、たとえば先頭から連続して表示データが格納され、次に奥行きデータが格納され、残りの空いた領域に、テクスチャの種類毎に連続したアドレス空間でテクスチャデータが格納される。
以上のように、DDAセットアップ回路141、トライアングルDDA回路142、テクスチャエンジン回路143、メモリI/F回路144等における所定処理を経て、最終的なメモリアクセスがピクセル(Pixel;Picture Cell Element) という描画画素単位になる。
CRTコントロール回路16は、与えられた水平および垂直同期信号に同期して、図示しないCRTに表示する表示アドレスを発生し、グラフィックスメモリ145に含まれるディスプレイバッファから表示データを読み出す要求をメモリI/F回路144に出力する。
この要求に応じて、メモリI/F回路144は、グラフィックスメモリ145(ディスプレイバッファ)から一定の固まりで表示データを読み出す。
CRTコントロール回路16は、グラフィックスメモリ145から読み出した表示データを記憶するたとえばFIFO回路を内蔵し、一定の時間間隔で、RGBのインデックス値を発生する。
CRTコントロール回路16は、各インデックス値に対応するR,G,Bデータを記憶しており、発生したRGBのインデックス値に対応するデジタル形式のR,G,Bデータを、図示しないD/Aコンバータ(Digital/Analog Converter)に転送し、アナログ形式のR,G,Bデータを生成する。
CRTコントロール回路16は、この生成されたR,G,Bデータを図示しないCRTに出力する。
CRTコントロール回路16は、以上のようにコンピュータグラフィックス処理により生成した画像に対してアンチエイリアスなどの画像処理を行う。
この要求に応じて、メモリI/F回路144は、グラフィックスメモリ145(ディスプレイバッファ)から一定の固まりで表示データを読み出す。
CRTコントロール回路16は、グラフィックスメモリ145から読み出した表示データを記憶するたとえばFIFO回路を内蔵し、一定の時間間隔で、RGBのインデックス値を発生する。
CRTコントロール回路16は、各インデックス値に対応するR,G,Bデータを記憶しており、発生したRGBのインデックス値に対応するデジタル形式のR,G,Bデータを、図示しないD/Aコンバータ(Digital/Analog Converter)に転送し、アナログ形式のR,G,Bデータを生成する。
CRTコントロール回路16は、この生成されたR,G,Bデータを図示しないCRTに出力する。
CRTコントロール回路16は、以上のようにコンピュータグラフィックス処理により生成した画像に対してアンチエイリアスなどの画像処理を行う。
以下、本実施形態におけるアンチエイリアス処理を行うためのエッジ情報生成処理、および生成したエッジ情報に基づく具体的なアンチエイリアス処理について、図面に関連付けて説明する。
まず、エッジ抽出のための情報生成処理について説明する。
本実施形態において、エッジ抽出のための情報生成方法としては、前述したように、zバッファの情報であるz値を再利用する第1の方法と、ピクセルごとの法線ベクトルの情報を用いる第2の方法を採用される。
本実施形態において、エッジ抽出のための情報生成方法としては、前述したように、zバッファの情報であるz値を再利用する第1の方法と、ピクセルごとの法線ベクトルの情報を用いる第2の方法を採用される。
zバッファの情報を利用するエッジ抽出方法
3次元コンピュータグラフィックスの描画時にz値は本来計算されてグラフィックスメモリ145に書き込まれる。ここでは、z値そのものを使うのではなく、z値の2階微分が必要となる。
図2(A)および(B)に示すように、z値の2階微分値は非常に有益な情報であり、その値が、適当なしきい値からはずれる点がエッジであるとみなすことができる。2次元画像から画像認識により算出するz値ではなく、3次元コンピュータグラフィックス描画時には正確なzの値がわかっているので、zの2階微分値から検出するエッジ情報の精度は極めて高いものとなる。ここで得られたエッジは多くの場合、描画されたオブジェクトと背景との境界である。
3次元コンピュータグラフィックスの描画時にz値は本来計算されてグラフィックスメモリ145に書き込まれる。ここでは、z値そのものを使うのではなく、z値の2階微分が必要となる。
図2(A)および(B)に示すように、z値の2階微分値は非常に有益な情報であり、その値が、適当なしきい値からはずれる点がエッジであるとみなすことができる。2次元画像から画像認識により算出するz値ではなく、3次元コンピュータグラフィックス描画時には正確なzの値がわかっているので、zの2階微分値から検出するエッジ情報の精度は極めて高いものとなる。ここで得られたエッジは多くの場合、描画されたオブジェクトと背景との境界である。
図2(A)において、エッジを挟んだ2点では、図中矢印<2>で示す2階微分の結果(方向)が同一オブジェクト内あるいは背景における図中矢印<1>,<3>で示す結果(方向)と大きく違っている。同様に、図2(B)において、エッジを挟んだ2点では、図中矢印<3>で示す2階微分の結果(方向)が同一オブジェクト内あるいは背景における図中矢印<1>,<2>,<4>,<5>で示す結果(方向)と大きく違っている。
zの2階微分値を得る方法としては、描画終了後にzバッファをスキャンして計算する方法と、描画時に、ピクセル値の書き込み(打ち込み)と同じタイミングでzの2階微分値を更新していく方法を採用することができる。
メモリを節約する必要があるときは、好適には、前者の方法を使って、CRTコントロール回路16の要求に従ってzのスキャンと同時に必要な処理を終わらせる方法をとることが望ましい。
後段の処理を軽くする必要があれば、後者の方法により、zの2階微分値の計算を描画とともに終わらせておくことができる。
メモリを節約する必要があるときは、好適には、前者の方法を使って、CRTコントロール回路16の要求に従ってzのスキャンと同時に必要な処理を終わらせる方法をとることが望ましい。
後段の処理を軽くする必要があれば、後者の方法により、zの2階微分値の計算を描画とともに終わらせておくことができる。
ここで、描画とともにzの2階微分値の計算を終わらせる方法を説明する。この場合、CRTコントロール回路16ではなく、メモリI/F回路144あるいはテクスチャエンジン回路143により、描画とともにzの2階微分値の計算を行うことになる。CRTコントロール回路16は、メモリI/F回路144を通して生成画像に関する2階微分値を読み出し、アンチエイリアス処理を行う。
本来あるzバッファの他にzの2階微分値のバッファを用意して0に初期化しておく。描画時に、あるピクセルのz値が更新される度に、そのピクセルのz値が2階微分に影響する周囲のピクセルにおける2階微分値を更新する。
そのプロセスにより、描画終了時にはzの2階微分値のバッファもできあがる。
本来あるzバッファの他にzの2階微分値のバッファを用意して0に初期化しておく。描画時に、あるピクセルのz値が更新される度に、そのピクセルのz値が2階微分に影響する周囲のピクセルにおける2階微分値を更新する。
そのプロセスにより、描画終了時にはzの2階微分値のバッファもできあがる。
スクリーン座標をx,yとし、各ピクセルにおけるz値をz(x,y)とすると、2階微分値の分布としては、次の2つの分布を各ピクセルについて必要になる。
(数1)
d2z/dx2( x, y ) = z( x+1, y ) + z( x-1, y ) − 2 * z( x, y )
d2z/dy2( x, y ) = z( x, y+1 ) + z( x, y-1 ) − 2 * z( x, y )
…(1)
d2z/dx2( x, y ) = z( x+1, y ) + z( x-1, y ) − 2 * z( x, y )
d2z/dy2( x, y ) = z( x, y+1 ) + z( x, y-1 ) − 2 * z( x, y )
…(1)
描画時、あるx,yのアドレスのz値が更新されるとしたら、( x-1, y ), (x+1, y),
(x, y-1), (x, y+1), (x, y)のアドレスのzの2階微分値が更新される。
(x, y-1), (x, y+1), (x, y)のアドレスのzの2階微分値が更新される。
たとえば、更新前の2階微分値を下記のようであると仮定する。
(数2)
d2z/dx20_ 0( x, y ) = z0( x+1, y ) + z0( x-1, y )− 2 * z0( x, y )
…(2)
d2z/dx20_ 0( x, y ) = z0( x+1, y ) + z0( x-1, y )− 2 * z0( x, y )
…(2)
ここで、たとえば( x-1, y )のz値がz1に更新されるとすると、更新後の2階微分値は次のようになる。
(数3)
d2z/dx21_ 1( x, y ) = z0( x+1, y ) + z1( x+1, y )− 2 * z0( x, y )
…(3)
d2z/dx21_ 1( x, y ) = z0( x+1, y ) + z1( x+1, y )− 2 * z0( x, y )
…(3)
このとき、2階微分値を更新するには、次式のような計算を行えばよい。
(数4)
d2z/dx2 _ 1− d2z/dx2_0 = z1( x-1, y )− z0( x-1, y )
…(4)
d2z/dx2 _ 1− d2z/dx2_0 = z1( x-1, y )− z0( x-1, y )
…(4)
d2z/dx20_の値を読み出して、上記差分を加算して書き戻すというリードモディファイライト(read_modify_write)の手続きで更新していくことができる。
なお、zの2階微分値をアンチエイリアス(anatialiasing)などの処理に使うときは
、x,yそれぞれの方向の値のどちらかを使用する方法でも両方の情報を独立に使用する方法も採用可能である。
なお、zの2階微分値をアンチエイリアス(anatialiasing)などの処理に使うときは
、x,yそれぞれの方向の値のどちらかを使用する方法でも両方の情報を独立に使用する方法も採用可能である。
次に、zの2階微分値を得る方法として、描画終了後にzバッファをスキャンして計算し、エッジ情報を生成していく方法について説明する。
図3(A)〜(C)は、zの2階微分値を得る方法として、描画終了後にzバッファをスキャンして計算し、エッジ情報を生成していく方法について説明するための図である。
図3(A)〜(C)に示すように zバッファをスキャンする場合、横方向(x方向)のスキャンと縦方向(y方向)のスキャンのどちらもエッジ情報を復元するには有効であるが、アンチエイリアス処理においては縦、横の両方向のスキャンを併用することも有効である。
スキャン時、各ピクセルにおいて行うことは下記に示すようなフィルタリングである。
図3(A)〜(C)に示すように zバッファをスキャンする場合、横方向(x方向)のスキャンと縦方向(y方向)のスキャンのどちらもエッジ情報を復元するには有効であるが、アンチエイリアス処理においては縦、横の両方向のスキャンを併用することも有効である。
スキャン時、各ピクセルにおいて行うことは下記に示すようなフィルタリングである。
(数5)
d2z = 4*z( x, y ) − z( x, y-1 )− z( x, y+1 )− z( x-1, y )−z( x+1, y )
d2zdx = 2*z( x, y ) − z( x-1, y )− z( x+1, y )
d2zdy = 2*z( x, y ) − z( x, y-1 )− z( x, y+1 )
…(5)
d2z = 4*z( x, y ) − z( x, y-1 )− z( x, y+1 )− z( x-1, y )−z( x+1, y )
d2zdx = 2*z( x, y ) − z( x-1, y )− z( x+1, y )
d2zdy = 2*z( x, y ) − z( x, y-1 )− z( x, y+1 )
…(5)
式5に示した係数で上下左右と中心ピクセルを加算して値を求める方法があるが、その他に、上下と中心ピクセルで縦方向の値、左右と中心ピクセルで横方向の値の2つの値を分けて求めることも可能である。この方法は後のアンチエイリアス処理において有効な方法である。
横方向(x方向)と縦方向(y方向)のフィルタリング値(zの2階微分値)を別々に計算する方法では、2つの値〔d2dx ( x, y ) 〕および〔dz2dy ( x, y )〕がスキャン時に各ピクセルについて求められる。それぞれの値に対してしきい値Zthを用いた次の評価、すなわち、絶対値がしきい値Zthより大きいかが評価される。
(数6)
abs ( dz2dx(x,y) ) > zth
abs ( dz2dy(x,y) ) > zth
…(6)
なお、Zthは調整可能なしきい値である。
abs ( dz2dx(x,y) ) > zth
abs ( dz2dy(x,y) ) > zth
…(6)
なお、Zthは調整可能なしきい値である。
上記評価式(6)が真ならば、その方向でのエッジであり、そうでなければその方向ではエッジではないということになる。
たとえばzの2階微分(スクリーン座標ピクセル間1としたときのx,yにおける値)を、式7のようであるとする。
たとえばzの2階微分(スクリーン座標ピクセル間1としたときのx,yにおける値)を、式7のようであるとする。
(数7)
x方向d2zdx = z(x+1,y) + z(x-1,y) - 2*z(x,y)
y方向d2zdy = z(x,y+1) + z(x,y-1) - 2*z(x,y)
しきい値Zth …(7)
x方向d2zdx = z(x+1,y) + z(x-1,y) - 2*z(x,y)
y方向d2zdy = z(x,y+1) + z(x,y-1) - 2*z(x,y)
しきい値Zth …(7)
この場合、d2zdx > zth のときx方向に不連続であり、y方向に伸びるエッジであると評価する。
d2zdy > zth のときy方向に不連続であり、x方向に伸びるエッジであると評価する。
上記のことが、zバッファに対する1回のスキャンで各ピクセルについて処理できる。
また、あるピクセルに対してx方向とy方向、独立に、それぞれエッジであるかどうかを判定するのは、アンチエイリアスにとって有効な手段である。
d2zdy > zth のときy方向に不連続であり、x方向に伸びるエッジであると評価する。
上記のことが、zバッファに対する1回のスキャンで各ピクセルについて処理できる。
また、あるピクセルに対してx方向とy方向、独立に、それぞれエッジであるかどうかを判定するのは、アンチエイリアスにとって有効な手段である。
次に、エッジ抽出に法線ベクトルを使う方法について説明する。
ピクセルごとの法線ベクトルの情報を利用するエッジ抽出方法
法線ベクトルは描画時に生成されるが、これは通常グラフィックスメモリ145に格納されないで、使われたあとは捨てられる。これを、各ピクセルごとにグラフィックスメモリ145に蓄積しておけば、後段でエッジ抽出のために使うことができる。抽出方法は後述する。
法線ベクトルは描画時に生成されるが、これは通常グラフィックスメモリ145に格納されないで、使われたあとは捨てられる。これを、各ピクセルごとにグラフィックスメモリ145に蓄積しておけば、後段でエッジ抽出のために使うことができる。抽出方法は後述する。
一方、法線ベクトルを蓄積しておくためにはメモリが必要なので、その分のメモリを節約するために法線ベクトルをメモリに格納せずに、描画後に、スクリーン座標とzバッファのz値から法線ベクトルを復元する方法を使うことができる。
具体的な手法としては、図4および下記式8に示すように、各ピクセルにおいて、スクリーン座標のx,Y座標値とzバッファのz値で3次元座標を作り、当該ピクセルの上または下のピクセルと右または左のピクセルと、当該ピクセルの3点の3元座標を使ってベクトルの外積を計算すれば、それは法線ベクトルとなる。
具体的な手法としては、図4および下記式8に示すように、各ピクセルにおいて、スクリーン座標のx,Y座標値とzバッファのz値で3次元座標を作り、当該ピクセルの上または下のピクセルと右または左のピクセルと、当該ピクセルの3点の3元座標を使ってベクトルの外積を計算すれば、それは法線ベクトルとなる。
(数8)
(nx0, ny0,nz0) = ( (x2,y2,z2)− (x0,y0,z0) × ( (x1,y1,z1) − (x0,y0,z0) )
nx0 = (y2-y0)*(z1-z0) − (z2-z0)*(y1-y0)
ny0 = (z2-z0)*(x1-x0) − (x2-x0)*(z1-z0)
nz0 = (x2-x0)*(y1-y0) − (y2-y0)*(x1-x0)
…(8)
(nx0, ny0,nz0) = ( (x2,y2,z2)− (x0,y0,z0) × ( (x1,y1,z1) − (x0,y0,z0) )
nx0 = (y2-y0)*(z1-z0) − (z2-z0)*(y1-y0)
ny0 = (z2-z0)*(x1-x0) − (x2-x0)*(z1-z0)
nz0 = (x2-x0)*(y1-y0) − (y2-y0)*(x1-x0)
…(8)
すなわち、zバッファの値から法線を復元する方法においては、zバッファの値zと、zバッファのアドレス(x,y)の3つのパラメータが形成する3次元空間における、ある1
点から他の2点へのベクトルの外積を正規化したものを法線ベクトルとする。
一例を示すと、zバッファのアドレスをx,yの2次元に展開したとき、ピクセル間のx,yそれぞれの方向の距離を1とすると次のようになる。
点から他の2点へのベクトルの外積を正規化したものを法線ベクトルとする。
一例を示すと、zバッファのアドレスをx,yの2次元に展開したとき、ピクセル間のx,yそれぞれの方向の距離を1とすると次のようになる。
(数9)
nx = z(x+1, y) - z(x,y)
ny = z(x, y+1) - z(x,y)
nz = -1
…(9)
nx = z(x+1, y) - z(x,y)
ny = z(x, y+1) - z(x,y)
nz = -1
…(9)
このように、法線ベクトルを使ったエッジ情報復元のためには、描画時に各ピクセルの法線ベクトルの成分をバッファに格納しておくか、または、zバッファの情報とスクリーン座標から法線ベクトルを復元する必要がある。
法線ベクトルを格納しておくとしたら、フォンシェーディングのために線形補間された法線ベクトルの値を格納しておけば精度は上がるが、法線ベクトルを補間しない描画のときにはポリゴンの平均値を各ピクセルにおける値として格納しておいてもよい。
また、3成分全てを格納する必要はなく、ベクトルの大きさが1であることを法線ベクトルの条件とすれば、2成分と残り1成分の符号だけを格納しておけば後で演算により3成分を取り出すこともできる。
法線ベクトルを格納しておくとしたら、フォンシェーディングのために線形補間された法線ベクトルの値を格納しておけば精度は上がるが、法線ベクトルを補間しない描画のときにはポリゴンの平均値を各ピクセルにおける値として格納しておいてもよい。
また、3成分全てを格納する必要はなく、ベクトルの大きさが1であることを法線ベクトルの条件とすれば、2成分と残り1成分の符号だけを格納しておけば後で演算により3成分を取り出すこともできる。
図5(A)〜(D)に、法線ベクトルの情報からエッジ情報を取り出す方法を示す。
図に示すように、横方向(x方向)、縦方向(y方向)のどちらか、またはその両方のスキャンにより情報を取り出す。法線ベクトルバッファがあるときは、この法線ベクトルバッファをスキャンする。
法線ベクトルを復元するときは、zバッファをスキャンして、法線ベクトルを復元しながらエッジ判定を行う。スキャン中に各ピクセルにおいて行うことは、図および下記式9に示したとおり、中心ピクセルの法線ベクトルと上下左右の各ピクセルの法線ベクトルとの内積を取ることである。
図に示すように、横方向(x方向)、縦方向(y方向)のどちらか、またはその両方のスキャンにより情報を取り出す。法線ベクトルバッファがあるときは、この法線ベクトルバッファをスキャンする。
法線ベクトルを復元するときは、zバッファをスキャンして、法線ベクトルを復元しながらエッジ判定を行う。スキャン中に各ピクセルにおいて行うことは、図および下記式9に示したとおり、中心ピクセルの法線ベクトルと上下左右の各ピクセルの法線ベクトルとの内積を取ることである。
(数10)
Px0 = N(x,y)・ N(x-1,y)
Px1 = N(x,y)・ N(x+1,y)
Py0 = N(x,y)・ N(x,y-1)
Py1 = N(x,y)・ N(x,y+1)
…(10)
Px0 = N(x,y)・ N(x-1,y)
Px1 = N(x,y)・ N(x+1,y)
Py0 = N(x,y)・ N(x,y-1)
Py1 = N(x,y)・ N(x,y+1)
…(10)
上記内積に対して、それぞれ以下の評価を行う。
(数11)
11-1. Abs( px0 ) < ( 1.0_ nth )
11-2. Abs( px1 ) < ( 1.0_ nth )
11-3. Abs( py0 ) < ( 1.0_ nth )
11-4. Abs( py1 ) < ( 1.0_ nth )
11-1. Abs( px0 ) < ( 1.0_ nth )
11-2. Abs( px1 ) < ( 1.0_ nth )
11-3. Abs( py0 ) < ( 1.0_ nth )
11-4. Abs( py1 ) < ( 1.0_ nth )
ここでnthは、調整可能なしきい値である。上記式11−1または11−2が真であっ
たならば、当該ピクセルはx方向に関してエッジであると結論される。上記式11−3または11−4が真であったならば、当該ピクセルはy方向に関してエッジであると結論される。
すなわち、x,y両方向にそれぞれ隣り合うピクセル同士の法線ベクトルの内積を計算し、その内積の値が1.0からしきい値の範囲内であれば、エッジでないと判定され、しきい値の範囲を逸脱したらエッジであると判定される。
たならば、当該ピクセルはx方向に関してエッジであると結論される。上記式11−3または11−4が真であったならば、当該ピクセルはy方向に関してエッジであると結論される。
すなわち、x,y両方向にそれぞれ隣り合うピクセル同士の法線ベクトルの内積を計算し、その内積の値が1.0からしきい値の範囲内であれば、エッジでないと判定され、しきい値の範囲を逸脱したらエッジであると判定される。
たとえば、x方向において次の条件を満足するとき、当該ピクセルの左(xが小さくなる方向)に、y方向へ伸びるエッジが存在する、と判定される。
(数12)
nx(x-1,y)*nx(x,y) + ny(x-1,y)*ny(x,y) + nz(x-1,y)*nz(x,y) < nth
…(12)
nx(x-1,y)*nx(x,y) + ny(x-1,y)*ny(x,y) + nz(x-1,y)*nz(x,y) < nth
…(12)
次の条件を満足するとき、当該ピクセルの右(xが大きくなる方向)に、y方向へ伸びる
エッジが存在する、と判定される。
エッジが存在する、と判定される。
(数13)
nx(x+1,y)*nx(x,y) + ny(x+1,y)*ny(x,y) + nz(x+1,y)*nz(x,y) < nth
…(13)
nx(x+1,y)*nx(x,y) + ny(x+1,y)*ny(x,y) + nz(x+1,y)*nz(x,y) < nth
…(13)
次の条件を満足するとき、当該ピクセルの上(yが小さくなる方向)に、x方向へ伸びるエッジが存在する、と判定される。
(数14)
nx(x,y-1)*nx(x,y) + ny(x,y-1)*ny(x,y) + nz(x,y-1)*nz(x,y) < nth
…(14)
nx(x,y-1)*nx(x,y) + ny(x,y-1)*ny(x,y) + nz(x,y-1)*nz(x,y) < nth
…(14)
次の条件を満足するとき、当該ピクセルの下(yが大きくなる方向)に、x方向へ伸びるエッジが存在する、と判定される。
(数15)
nx(x,y+1)*nx(x,y) + ny(x,y+1)*ny(x,y) + nz(x,y+1)*nz(x,y) < nth
…(15)
nx(x,y+1)*nx(x,y) + ny(x,y+1)*ny(x,y) + nz(x,y+1)*nz(x,y) < nth
…(15)
上記評価まで、1回のスキャンで各ピクセルに対して処理することができる。x,y方向それぞれに対して独立にエッジの有無を調べることも、縦方向、横方向のスキャンを両方行うことも、この後の処理としてアンチエイリアス処理を行うときに、有用な情報となる。
上記したように得られたエッジかどうかという情報に、当該ピクセルの、左右どちらか、あるいは上下どちらにエッジがあるか、という情報を付け加える。したがって、情報としては、エッジの有る無しを示す1ビット情報に加えて、どちら側にエッジがあるかということを示す1ビット情報が必要であり、最低2ビットの情報を生成する。
本実施形態では、上記したようにスクリーン座標でのx方向、y方向それぞれに関するエッジ情報を描画後の画像から所定の情報を復元し、得られたエッジ情報から、アンチエイリアス(anti-aliasing)のために必要な処理内容を決定し、決定した処理を行う。
本実施形態では、描画時に得られたzバッファの情報と各ピクセルにおける法線ベクトルの情報のどちらか、あるいはその両方の情報をスキャンすることにより、あるいはzバッファの情報から復元された法線ベクトルの情報を使ってアンチエイリアス処理を各ピクセルに施して行く。
たとえば各スキャンにおいて、状態を保持するステートマシーンとエッジの連続を測るカウンタを規定する。その2つの素子により各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきか、決定する。そして、決定された値を使ってブレンド処理が行われ、ピクセル値が更新されるところまでが、上記スキャンの間に逐次行われる。
この方法によれば、アンチエイリアス処理の目的で増加すべきメモリ量は少なくてすみ、描画時にパフォーマンスを下げるような処理は追加されない。
たとえば各スキャンにおいて、状態を保持するステートマシーンとエッジの連続を測るカウンタを規定する。その2つの素子により各エッジ上のピクセルに対して、それぞれ、どの方向のとなりのピクセルのピクセル値と、どれくらいの割合でブレンドすべきか、決定する。そして、決定された値を使ってブレンド処理が行われ、ピクセル値が更新されるところまでが、上記スキャンの間に逐次行われる。
この方法によれば、アンチエイリアス処理の目的で増加すべきメモリ量は少なくてすみ、描画時にパフォーマンスを下げるような処理は追加されない。
以下、この処理のアルゴリズムと実装形態について説明する。
アルゴリズム
エイリアスとなるエッジの最も一般的な形は、図6(A),(C)に示すようなパターンである。このようなパターンのエッジに対して、図6(B),(D)に示すようにブレンド処理を行う。
具体的には、図7に示すように、エッジを挟むピクセル同士が互いにブレンドされる。この場合、1ピクセルの辺の長さを1.0としたときの図中、台形の面積がブレンド係数となる。
エイリアスとなるエッジの最も一般的な形は、図6(A),(C)に示すようなパターンである。このようなパターンのエッジに対して、図6(B),(D)に示すようにブレンド処理を行う。
具体的には、図7に示すように、エッジを挟むピクセル同士が互いにブレンドされる。この場合、1ピクセルの辺の長さを1.0としたときの図中、台形の面積がブレンド係数となる。
図7の場合を例として、ピクセル値をそれぞれ、A0,A1,A2,B0,B1,B2としたとき、それぞれのピクセル値がどのように変わるかを下記に示す。ここでは、ピクセルに対応するブレンド係数はa0,a1,a2,b0,b1,b2とする。
(数16)
A0 -> A0 * ( 1− a0 ) + B0 * a0
B0 -> B0 * ( 1− b0 ) + A0 * b0
a0 = 3.0 * 0.5 * 0.5 * ( 1− 2*2/(3*3) )
b0 = 3.0 * 0.5 * 0.5 * ( 1*1/(3*3) )
A1 -> A1 * ( 1− a1 ) + B1 * a1
B1 -> B1 * ( 1− b1 ) + A1 * b1
a1 = 3.0 * 0.5 * 0.5 * 2*2/(3*3) * ( 1− 1*1/(2*2) )
b1 = 3.0 * 0.5 * 0.5 * 2*2/(3*3) * ( 1− 1*1/(2*2) )
A2 -> A2 * ( 1− a2 ) + B2 * a2
B2 -> B2 * ( 1− b2 ) + A2 * b2
a2 = 3.0 * 0.5 * 0.5 * ( 1*1/(3*3) )
b2 = 3.0 * 0.5 * 0.5 * ( 1− 2*2/(3*3) )
…(16)
A0 -> A0 * ( 1− a0 ) + B0 * a0
B0 -> B0 * ( 1− b0 ) + A0 * b0
a0 = 3.0 * 0.5 * 0.5 * ( 1− 2*2/(3*3) )
b0 = 3.0 * 0.5 * 0.5 * ( 1*1/(3*3) )
A1 -> A1 * ( 1− a1 ) + B1 * a1
B1 -> B1 * ( 1− b1 ) + A1 * b1
a1 = 3.0 * 0.5 * 0.5 * 2*2/(3*3) * ( 1− 1*1/(2*2) )
b1 = 3.0 * 0.5 * 0.5 * 2*2/(3*3) * ( 1− 1*1/(2*2) )
A2 -> A2 * ( 1− a2 ) + B2 * a2
B2 -> B2 * ( 1− b2 ) + A2 * b2
a2 = 3.0 * 0.5 * 0.5 * ( 1*1/(3*3) )
b2 = 3.0 * 0.5 * 0.5 * ( 1− 2*2/(3*3) )
…(16)
上記係数を使うと水平または垂直に近いエッジにおいてもエイリアスの形が完全に取り払われる。
上記処理を行うためにはエッジのパターン(エイリアスパターン)を見つけだす必要がある。基本的には、図8に示すようなエッジのパターンを縦方向、横方向、それぞれ独立に見つけだす処理となる。
この目的のためにはマスクを定義してパターンマッチングを行ってもよいが、以下に示す方法を採用することができる。以下に示す方法とパターンマッチングを組み合わせてもよい。
この目的のためにはマスクを定義してパターンマッチングを行ってもよいが、以下に示す方法を採用することができる。以下に示す方法とパターンマッチングを組み合わせてもよい。
ある1ラインに注目すると、そのラインをどちらかの端点からスキャンしていくことになる。スキャンの途中で、ラインと垂直な方向でエッジとなるピクセルが見つかることがある。
たとえば、x方向にスキャンしている場合ではy方向にエッジとなるピクセルである。y方向スキャンのときはx方向にエッジとなるピクセルのことである。x(y)方向にエッジというのは、その方向で、zの2階微分値や法線ベクトルの方向などが急峻に変化するということである。
そのようなピクセルが見つかったときには、当該ラインの上のラインまたは下のラインのピクセルにもライン方向と垂直方向にエッジとなるピクセルが見つかる確率が極めて高い。
さらに、スキャンを進めると、当該ラインで垂直方向にエッジであるピクセルが何個か続き、上下どちらかのピクセルでも垂直方向にエッジであるピクセルが続く。ある時点で、当該ラインのピクセルは垂直方向にエッジであることは続いている状態で、上下のラインで、垂直方向にエッジであるラインが上下逆転する。そして、また何個かそのような状態が続いた後、当該ラインにおいて、垂直方向のエッジのピクセルがなくなる。これが1つのエイリアスパターンの見つけ方である。
当該ラインで垂直方向にエッジであるピクセルは、上下どちらか、垂直方向にエッジとなっているピクセルとブレンドされて書き戻されることになる。
たとえば、x方向にスキャンしている場合ではy方向にエッジとなるピクセルである。y方向スキャンのときはx方向にエッジとなるピクセルのことである。x(y)方向にエッジというのは、その方向で、zの2階微分値や法線ベクトルの方向などが急峻に変化するということである。
そのようなピクセルが見つかったときには、当該ラインの上のラインまたは下のラインのピクセルにもライン方向と垂直方向にエッジとなるピクセルが見つかる確率が極めて高い。
さらに、スキャンを進めると、当該ラインで垂直方向にエッジであるピクセルが何個か続き、上下どちらかのピクセルでも垂直方向にエッジであるピクセルが続く。ある時点で、当該ラインのピクセルは垂直方向にエッジであることは続いている状態で、上下のラインで、垂直方向にエッジであるラインが上下逆転する。そして、また何個かそのような状態が続いた後、当該ラインにおいて、垂直方向のエッジのピクセルがなくなる。これが1つのエイリアスパターンの見つけ方である。
当該ラインで垂直方向にエッジであるピクセルは、上下どちらか、垂直方向にエッジとなっているピクセルとブレンドされて書き戻されることになる。
本実施形態においては、このようなパターンを見つけだすときには、各ラインのスキャンにおいて、たとえばステートマシンとカウンタを使う。
ステートマシンは、処理中のピクセルが、どのような形のパターンのどの位置にいるのかを示し、カウンタはエイリアスパターンの開始点から変節点(上下のエッジが逆転するところ)までの長さ、変節点からエイリアスパターンが終了するまでの長さを、それぞれ測定する。
これにより、各ピクセルに対して、どれだけの長さのエイリアスパターンのどの位置にあるのか示すことができ、ブレンドする相手のピクセルの位置と、ブレンドの係数を計算することができる。
ステートマシンは、処理中のピクセルが、どのような形のパターンのどの位置にいるのかを示し、カウンタはエイリアスパターンの開始点から変節点(上下のエッジが逆転するところ)までの長さ、変節点からエイリアスパターンが終了するまでの長さを、それぞれ測定する。
これにより、各ピクセルに対して、どれだけの長さのエイリアスパターンのどの位置にあるのか示すことができ、ブレンドする相手のピクセルの位置と、ブレンドの係数を計算することができる。
本方法では、どれだけの種類のパターンを認識できるかが処理のクオリティに効いてくる。特に、2つ以上のエッジが重なったり近接したりするときに適切な処理を見いだす必要がある。
そのため、本実施形態では、ラインスキャンのときに当該ラインの他に上下に複数のラインのエッジ情報も取得する。たとえば図9に示すような重なったエッジや図10および図11に示すような近接したエッジのパターンを見つけて適切に処理するには、上下少なくとも2ラインずつの合計5ラインの情報を同時に見る必要がある。
そのため、本実施形態では、ラインスキャンのときに当該ラインの他に上下に複数のラインのエッジ情報も取得する。たとえば図9に示すような重なったエッジや図10および図11に示すような近接したエッジのパターンを見つけて適切に処理するには、上下少なくとも2ラインずつの合計5ラインの情報を同時に見る必要がある。
図12は、以上説明したエッジ情報生成とアンチエイリアスを実現する具体的な実装形態を概念的に示す図である。
このアンチエイリアス処理系200は、図12に示すように、zバッファ201、法線ベクトルバッファ202、zバッファ201を横(x方向)スキャンしたz値を2階微分する第1の2階微分回路203、横(x方向)スキャンした法線ベクトルの内積をとる第1の内積計算回路204、2階微分回路203と内積計算回路204の結果に基づいてエッジ判定を行う第1のエッジ判定回路205、第1のエッジ判定回路205の判定結果に基づき処理中のピクセルがどのような形のパターンのどの位置にいるのかを示す第1のステートマシン206、エイリアスパターンの開始点から変節点(上下のエッジが逆転するところ)までの長さ、変節点からエイリアスパターンが終了するまでの長さをそれぞれ測定する第1のカウンタ207、zバッファ201を縦(y方向)スキャンしたz値を2階微分する第2の2階微分回路208、縦(y方向)スキャンした法線ベクトルの内積をとる第2の内積計算回路209、2階微分回路208と内積計算回路209の結果に基づいてエッジ判定を行う第2のエッジ判定回路210、第2のエッジ判定回路210の判定結果に基づき処理中のピクセルがどのような形のパターンのどの位置にいるのかを示す第2のステートマシン211、エイリアスパターンの開始点から変節点(上下のエッジが逆転するところ)までの長さ、変節点からエイリアスパターンが終了するまでの長さをそれぞれ測定する第2のカウンタ212、完成したコンピュータグラフィックス(CG)画像を格納するディスプレイバッファ213、アンチエイリアス処理後の画像を格納するディスプレイバッファ214、およびフラグレジスタ215を含む。
図12のアンチエイリアス処理系200は、前提として、以下のものが存在する状態から処理を始めることを仮定する。
1.描画が完成した3次元コンピュータグラフィックス画像、
2.描画とともに完成したzバッファ201、
3.描画とともに完成した法線ベクトルバッファ202。
1.描画が完成した3次元コンピュータグラフィックス画像、
2.描画とともに完成したzバッファ201、
3.描画とともに完成した法線ベクトルバッファ202。
上記バッファというのは、各ピクセルごとに持つデータのメモリのことである。zバッファ201は、前述したように、描画の副生成物でり、本来ならば、描画終了とともに捨てられる情報である。本実施形態では、それを再利用する。
法線ベクトルバッファ202に関しては、zッファ201とスクリーン座標から計算して法線ベクトルを復元することができるので、その処理を入れる場合は、法線ベクトルバッファは必要ではない。
法線ベクトルバッファ202に関しては、zッファ201とスクリーン座標から計算して法線ベクトルを復元することができるので、その処理を入れる場合は、法線ベクトルバッファは必要ではない。
図12のアンチエイリアス処理系200においては、縦スキャンと横スキャンを、同時並列的に行う。それぞれのスキャンとともに処理も進行させる。
それぞれのスキャンで、z値の2階微分を第1および第2の2階微分回路203,208で求め、隣あうピクセル同士の法線ベクトルの内積を第1および第2の内積計算回路204,209で計算する。
そして、第1および第2のエッジ判定回路205,210において、第1および第2の2階微分回路203,208、並びに第1および第2の内積計算回路204,209の結果に基づいてx方向とy方向それぞれについて当該ピクセルがエッジであるかどうかを判定し、判定結果をステートマシーン206,211に送る。
ステートマシーン206,211は、処理中のピクセルが、どのようなパターンのエッジの、どの部分なのかを判断し、そのエッジの情報を保持する。そして、カウンタ207,212において、エッジの長さを測る。
1つのエッジのパターンが、そのライン内で終了すると、ステートマシーン206,211、カウンタ207,212はクリアされ、そのラインの後ろのピクセルに遡ってブレンド係数の計算、ブレンドする相手のピクセルの決定などを行い、それぞれのピクセルに対してブレンド処理を行い、処理後の画像を格納するメモリであるディスプレイバッファ214に書き込む。
そのとき、横スキャンの処理と縦スキャンの処理が並行して行われているため、それぞれ他のスキャンが既に当該ピクセルに対して処理を行ったかどうかの1ビットのフラッグ情報を各ピクセルに対して保持する必要がある。
フラグレジスタ215にフラグが立っていなければバッファ213の「完成したCG画像」のピクセル値に対してブレンド処理を行い、立っていれば、バッファ214の「アンチエイリアス(Anti-Alias)処理後の画像」からピクセル値を読み出し、それに対してブレンド処理を行って書き戻す。
なお、法線バッファなし、法線復元もなしで、zバッファの情報のみを使うこともある。
それぞれのスキャンで、z値の2階微分を第1および第2の2階微分回路203,208で求め、隣あうピクセル同士の法線ベクトルの内積を第1および第2の内積計算回路204,209で計算する。
そして、第1および第2のエッジ判定回路205,210において、第1および第2の2階微分回路203,208、並びに第1および第2の内積計算回路204,209の結果に基づいてx方向とy方向それぞれについて当該ピクセルがエッジであるかどうかを判定し、判定結果をステートマシーン206,211に送る。
ステートマシーン206,211は、処理中のピクセルが、どのようなパターンのエッジの、どの部分なのかを判断し、そのエッジの情報を保持する。そして、カウンタ207,212において、エッジの長さを測る。
1つのエッジのパターンが、そのライン内で終了すると、ステートマシーン206,211、カウンタ207,212はクリアされ、そのラインの後ろのピクセルに遡ってブレンド係数の計算、ブレンドする相手のピクセルの決定などを行い、それぞれのピクセルに対してブレンド処理を行い、処理後の画像を格納するメモリであるディスプレイバッファ214に書き込む。
そのとき、横スキャンの処理と縦スキャンの処理が並行して行われているため、それぞれ他のスキャンが既に当該ピクセルに対して処理を行ったかどうかの1ビットのフラッグ情報を各ピクセルに対して保持する必要がある。
フラグレジスタ215にフラグが立っていなければバッファ213の「完成したCG画像」のピクセル値に対してブレンド処理を行い、立っていれば、バッファ214の「アンチエイリアス(Anti-Alias)処理後の画像」からピクセル値を読み出し、それに対してブレンド処理を行って書き戻す。
なお、法線バッファなし、法線復元もなしで、zバッファの情報のみを使うこともある。
また、スキャンの幅は、通常のエッジパターンを検出するには3ラインで十分だが、重なったエッジなどを分離するには少なくとも5ライン同時にスキャンする必要がある。本発明では、複数のラインとして何ライン同時にスキャンするかどのような可能性も否定しない。
以下に、ステートマシーンの一例について説明する。
ここで説明するステートマシーンにおいては、「state」、「count」、「parity」と
いう3つの変数を使う。
また、next#stateは、次にstateがとる値を示す。
スキャン方向に1ピクセルづつ進んでいく。x方向、y方向に、それぞれzバッファまたは、法線バッファまたは、エッジ情報バッファ(zバッファなどのスキャンにより得られたエッジ情報が入っているメモリのこと)をスキャンして、読み込みデータによって変数「state」を変化させる。変数「state」に応じてカウンタのクリア、カウントアップ
、値の保持が決まる。
いう3つの変数を使う。
また、next#stateは、次にstateがとる値を示す。
スキャン方向に1ピクセルづつ進んでいく。x方向、y方向に、それぞれzバッファまたは、法線バッファまたは、エッジ情報バッファ(zバッファなどのスキャンにより得られたエッジ情報が入っているメモリのこと)をスキャンして、読み込みデータによって変数「state」を変化させる。変数「state」に応じてカウンタのクリア、カウントアップ
、値の保持が決まる。
x方向スキャンの場合
state==0のとき
if( y方向にedgeであるピクセルだった)
next#state = 1
count = 1;
if( x方向にもedgeであった)
parity = 1;
else
parity = 0;
else
next#state = 0;
count = 0;
state==1のとき
if( y方向にedgeであるピクセルだった)
next#state = 1;
count = count + 1;
else
next#state = 0;
if(parity==1&&x方向にedgeであるピクセルだった)
mode=2でcount数のピクセル分、遡ってblend処理
if(parity==1&&x方向にedgeではなかった)
mode=1でcount数のピクセル分、遡ってblend処理
if(parity==0&&x方向にedgeであるピクセルだった)
mode=0でcount数のピクセル分、遡ってblend処理
if(parity==0&&x方向にedgeではなかった)
なにもしない
state==0のとき
if( y方向にedgeであるピクセルだった)
next#state = 1
count = 1;
if( x方向にもedgeであった)
parity = 1;
else
parity = 0;
else
next#state = 0;
count = 0;
state==1のとき
if( y方向にedgeであるピクセルだった)
next#state = 1;
count = count + 1;
else
next#state = 0;
if(parity==1&&x方向にedgeであるピクセルだった)
mode=2でcount数のピクセル分、遡ってblend処理
if(parity==1&&x方向にedgeではなかった)
mode=1でcount数のピクセル分、遡ってblend処理
if(parity==0&&x方向にedgeであるピクセルだった)
mode=0でcount数のピクセル分、遡ってblend処理
if(parity==0&&x方向にedgeではなかった)
なにもしない
以上のステートマシーンの動きとブレンド処理を図で書くと図13(A)〜(D)に示すようになる。
図の例は、x方向のスキャンで、上と横のエッジを見る場合の例である。
変数stateが1から0に変わるところで、遡ったブレンド処理を行う。
図の例は、x方向のスキャンで、上と横のエッジを見る場合の例である。
変数stateが1から0に変わるところで、遡ったブレンド処理を行う。
ブレンド(blend)係数の求め方
mode==0のとき、count値の大きいピクセルのブレンド係数の値が0.5付近の値で、
count値が若い(小さい)ピクセルのブレンド値は0付近の値に近付く。この計算の方法
は種々選択可能である。
上記例では、たとえばcount値Cのピクセルのブレンド係数をC/5*0.5とするの
が最も簡単な方法である。他にも、たとえば図7に示すように台形の面積面積をブレンド係数とすることも可能である。
このときは、式としては、次のようになる。
mode==0のとき、count値の大きいピクセルのブレンド係数の値が0.5付近の値で、
count値が若い(小さい)ピクセルのブレンド値は0付近の値に近付く。この計算の方法
は種々選択可能である。
上記例では、たとえばcount値Cのピクセルのブレンド係数をC/5*0.5とするの
が最も簡単な方法である。他にも、たとえば図7に示すように台形の面積面積をブレンド係数とすることも可能である。
このときは、式としては、次のようになる。
(数17)
blend係数= 0.5*0.5/ Len *( Len-C+1)2 - (Len-C)2
…(17)
Lenは本例では5である。
blend係数= 0.5*0.5/ Len *( Len-C+1)2 - (Len-C)2
…(17)
Lenは本例では5である。
mode==1のときは、count値Cとブレンド係数の大きさの関係がmode==0のときの逆に
なる。
mode==2のときは、0から0.5の間の適当な値で一様にしても、真ん中(この例だと
C==3付近)のブレンド係数が若干大きくなるように値を設定してやると、見た目、自然な仕上がりになる。
なる。
mode==2のときは、0から0.5の間の適当な値で一様にしても、真ん中(この例だと
C==3付近)のブレンド係数が若干大きくなるように値を設定してやると、見た目、自然な仕上がりになる。
なお、ここで説明したステートマシーン(state machine)は、ほんの1例である。
基本的には、x方向とy方向、それぞれの処理であり、各スキャンにおいて、エッジの形を感知するステートマシーンを置いて、ピクセル数を数える仕組みであり、ステートマシーンが動作した結果、通ってきたピクセルに対して遡って処理を施す、という処理となる。
基本的には、x方向とy方向、それぞれの処理であり、各スキャンにおいて、エッジの形を感知するステートマシーンを置いて、ピクセル数を数える仕組みであり、ステートマシーンが動作した結果、通ってきたピクセルに対して遡って処理を施す、という処理となる。
x方向ブレンドとy方向ブレンドを選択または混ぜる方法としては、以下のような方法を採用することが可能である。
・ブレンドする前に、ブレンド係数を比して大きい方だけの処理を行う方法。
・ブレンドする前に、ブレンド係数を比して小さい方だけの処理を行う方法。
・両方の処理を対当に混ぜ合わせる方法。
・x方向処理とy方向処理の間に時間的に前後する場合、先に処理した方を優先する方法。このとき、処理されたことを示す1bitをピクセルごとに記憶させるメモリが必要になる。
・x方向処理とy方向処理の間に時間的に前後する場合、ブレンド係数の大小で、どちらの処理を優先するか決める方法。この場合、ブレンド係数をピクセルごとに記憶させるメモリが必要になる。
・x方向処理とy方向処理の間に時間的に前後する場合、対当に混ぜる方法。この場合、ブレンド係数をピクセルごとに格納するメモリが必要になる。
・ブレンドする前に、ブレンド係数を比して大きい方だけの処理を行う方法。
・ブレンドする前に、ブレンド係数を比して小さい方だけの処理を行う方法。
・両方の処理を対当に混ぜ合わせる方法。
・x方向処理とy方向処理の間に時間的に前後する場合、先に処理した方を優先する方法。このとき、処理されたことを示す1bitをピクセルごとに記憶させるメモリが必要になる。
・x方向処理とy方向処理の間に時間的に前後する場合、ブレンド係数の大小で、どちらの処理を優先するか決める方法。この場合、ブレンド係数をピクセルごとに記憶させるメモリが必要になる。
・x方向処理とy方向処理の間に時間的に前後する場合、対当に混ぜる方法。この場合、ブレンド係数をピクセルごとに格納するメモリが必要になる。
図14および図15にzバッファのみを使用して、描画後の完全に後処理として行う場合の概念図を示す。この場合、図1のCRTコントロール回路16がメモリI/F回路144を通してグラフィックスメモリ145へのアクセスをしてzバッファをスキャンして、z値情報を使ってアンチエイリアス処理を各ピクセルに施して行く。
図14は、レンダリングされた結果のRGB画像に対して、CRTコントロール回路16によりメモリ上で画像を変化させ、その終了後、ディスプレイに転送する場合を示している。
図15は、レンダリングされた結果のRGB画像をディスプレイのためにラスタスキャンするのと並行して、それに同期してzバッファもスキャンして、ディスプレイへの転送時に、CRTコントロール回路16によりメモリ上で画像を変化させ、その終了後、ディスプレイに転送する場合を示している。
図15は、レンダリングされた結果のRGB画像をディスプレイのためにラスタスキャンするのと並行して、それに同期してzバッファもスキャンして、ディスプレイへの転送時に、CRTコントロール回路16によりメモリ上で画像を変化させ、その終了後、ディスプレイに転送する場合を示している。
図14および図15の両例共に、zバッファのみを使い、レンダリングに追加の処理はない。完全に後処理として行う。
エッジ情報抽出に際しては、具体的には、以下の2種のエッジを区別して、異なる処理を行う。
第1の処理は、図16に示すように、隣り合う平面の境界の場合の処理である。
第2の処理は、図17に示すようなオブジェクトと背景の境界の場合の処理である。
第1の処理と第2の処理とでは、zの2階微分のしきい値が異なる。
エッジ情報抽出に際しては、具体的には、以下の2種のエッジを区別して、異なる処理を行う。
第1の処理は、図16に示すように、隣り合う平面の境界の場合の処理である。
第2の処理は、図17に示すようなオブジェクトと背景の境界の場合の処理である。
第1の処理と第2の処理とでは、zの2階微分のしきい値が異なる。
第1の処理
第1の処理では、ブレンド係数が正確に求まる。
図16に示すように、当該ピクセルを中心とする、1x5 + 5x1 の十字形のz値を読み出す。
そして、当該ピクセルと接するピクセルの間に隣り合う平面の境界のエッジが存在するかどうか判定する。この判定と同時にブレンド係数も算出する。
判定にはzの2階微分を使う。2階微分はx方向、y方向、独立に計算して使用する。 この場合、2種類のしきい値を使用する。
この第1の処理と同時に第2の処理のための情報を生成しておく。
図16の例では、ブレンド係数として用いられるsは次のようになる。
第1の処理では、ブレンド係数が正確に求まる。
図16に示すように、当該ピクセルを中心とする、1x5 + 5x1 の十字形のz値を読み出す。
そして、当該ピクセルと接するピクセルの間に隣り合う平面の境界のエッジが存在するかどうか判定する。この判定と同時にブレンド係数も算出する。
判定にはzの2階微分を使う。2階微分はx方向、y方向、独立に計算して使用する。 この場合、2種類のしきい値を使用する。
この第1の処理と同時に第2の処理のための情報を生成しておく。
図16の例では、ブレンド係数として用いられるsは次のようになる。
(数18)
s = (sz3+sz1-2*sz2)/(sd4-sz3-sz2+sz1)
…(18)
s = (sz3+sz1-2*sz2)/(sd4-sz3-sz2+sz1)
…(18)
第2の処理
当該ピクセルを中心とする、1xn + nx1 の十字形の情報を読み出す。ただし、nはマス
クである。ここでいう情報というのは、上記第1の処理で生成されたものである。
当該ピクセルと接するピクセルの間にオブジェクトと背景の境界のエッジが存在するとき、上記マスク内の、エッジを構成するピクセルの数を数える。
その数からブレンド係数を算出する。
当該ピクセルを中心とする、1xn + nx1 の十字形の情報を読み出す。ただし、nはマス
クである。ここでいう情報というのは、上記第1の処理で生成されたものである。
当該ピクセルと接するピクセルの間にオブジェクトと背景の境界のエッジが存在するとき、上記マスク内の、エッジを構成するピクセルの数を数える。
その数からブレンド係数を算出する。
処理の流れ
下記の2つのループを順に行う。
第1ループ
第1のループでは、下記の処理を、全ピクセルに対して、順に行う。
エッジ抽出と第1の処理に係るエッジのブレンド処理を行う。これは、1x5 + 5x1 のマスクで全ピクセルについて、行う処理である。
・当該ピクセル上のzの2階微分をx,y方向について求める。
・当該ピクセルの上下左右4つのピクセルについて、それらのピクセル上のzの2階微分をx,y方向について求める。
・第1の処理に係るエッジを検出する(しきい値はzdev, zdev0を使う)x, y方向。
・第2の処理に係るエッジを検出する(しきい値はzdev1を使う)x, y方向。
・第1の処理に係るエッジの検出結果を使って、ブレンド処理を行い、RGBバッファを更新する。
・第2の処理に係るエッジ検出の結果と第1の処理のブレンド処理が行われたかどうかを示す1ビットを、メモリに残す(全ピクセルに対して)。
下記の2つのループを順に行う。
第1ループ
第1のループでは、下記の処理を、全ピクセルに対して、順に行う。
エッジ抽出と第1の処理に係るエッジのブレンド処理を行う。これは、1x5 + 5x1 のマスクで全ピクセルについて、行う処理である。
・当該ピクセル上のzの2階微分をx,y方向について求める。
・当該ピクセルの上下左右4つのピクセルについて、それらのピクセル上のzの2階微分をx,y方向について求める。
・第1の処理に係るエッジを検出する(しきい値はzdev, zdev0を使う)x, y方向。
・第2の処理に係るエッジを検出する(しきい値はzdev1を使う)x, y方向。
・第1の処理に係るエッジの検出結果を使って、ブレンド処理を行い、RGBバッファを更新する。
・第2の処理に係るエッジ検出の結果と第1の処理のブレンド処理が行われたかどうかを示す1ビットを、メモリに残す(全ピクセルに対して)。
第2ループ
第2のループでは、下記の処理を、全ピクセルに対して、順に行う。
第2の処理に係るエッジのブレンド処理を行う。これは、1xn + nx1 のマスクで全ピクセルについて、行う処理である。...nはマスク長である。
・x方向、y方向、それぞれマスクだけ、変数stateを見ながらカウントする。
・カウントする値は、4種である。
・上記4種のカウント値からブレンド係数を求めてブレンド処理を行い、RGBバッファを更新する。
このとき、第1の処理のブレンドが行われたフラグが立っていたら、ブレンド係数は0にする。
第1のループおよび第2のループは、それぞれ独立したループである。
第2のループでは、下記の処理を、全ピクセルに対して、順に行う。
第2の処理に係るエッジのブレンド処理を行う。これは、1xn + nx1 のマスクで全ピクセルについて、行う処理である。...nはマスク長である。
・x方向、y方向、それぞれマスクだけ、変数stateを見ながらカウントする。
・カウントする値は、4種である。
・上記4種のカウント値からブレンド係数を求めてブレンド処理を行い、RGBバッファを更新する。
このとき、第1の処理のブレンドが行われたフラグが立っていたら、ブレンド係数は0にする。
第1のループおよび第2のループは、それぞれ独立したループである。
次に、第2ループのカウント処理について、図17に関連付けて説明する。
ここでは、マスクnは7である。
図で、「Len = min ( (maskLen-1)/2, L1 )」とあるのは、マスクの中を数えるときに
、L1の端に到達するのが先か、マスクの端に到達するのが先かで、最小値(min値)を知
ることができる。
maskLenというのは図17では7であり、ここではnである。
図中、で示されるピクセルの数をもとに、次式で求められる値をブレンド係数とする。
ここでは、マスクnは7である。
図で、「Len = min ( (maskLen-1)/2, L1 )」とあるのは、マスクの中を数えるときに
、L1の端に到達するのが先か、マスクの端に到達するのが先かで、最小値(min値)を知
ることができる。
maskLenというのは図17では7であり、ここではnである。
図中、で示されるピクセルの数をもとに、次式で求められる値をブレンド係数とする。
(数19)
α = (黒いpixelの数- Len ) / (4*(Len+1) )
…(19)
α = (黒いpixelの数- Len ) / (4*(Len+1) )
…(19)
なお、係数の求め方は、上記は一例である。
基本は、与えられたマスクのマスク内のピクセルに対して、ブレンド係数ができるだけ多くの階調を持つように、ピクセルを分類して、それぞれ数えて、それらを使って係数
を求める、ということである。
基本は、与えられたマスクのマスク内のピクセルに対して、ブレンド係数ができるだけ多くの階調を持つように、ピクセルを分類して、それぞれ数えて、それらを使って係数
を求める、ということである。
次に、上記構成による動作を説明する。ここでは、zバッファのみを使い、レンダリングに追加の処理はない。完全に後処理として行う場合を例に説明する。
3次元コンピュータグラフィックスシステム10においては、グラフィックス描画等のデータは、メインプロセッサ11のメインメモリ12、あるいは外部からのグラフィックスデータを受けるI/Oインタフェース回路13からメインバス15を介してレンダリング回路14に与えられる。
なお、必要に応じて、グラフィックス描画等のデータは、メインプロセッサ11等において、座標変換、クリップ処理、ライティング処理等のジオメトリ処理が行われる。
ジオメトリ処理が終わったグラフィックスデータは、三角形の各3頂点の頂点座標x,y,z、輝度値R,G,B、描画しようとしている画素と対応するテクスチャ座標s,t,qとからなるポリゴンレンダリングデータS11となる。
このポリゴンレンダリングデータS11は、レンダリング回路14のDDAセットアップ回路141に順々に転送される。
なお、必要に応じて、グラフィックス描画等のデータは、メインプロセッサ11等において、座標変換、クリップ処理、ライティング処理等のジオメトリ処理が行われる。
ジオメトリ処理が終わったグラフィックスデータは、三角形の各3頂点の頂点座標x,y,z、輝度値R,G,B、描画しようとしている画素と対応するテクスチャ座標s,t,qとからなるポリゴンレンダリングデータS11となる。
このポリゴンレンダリングデータS11は、レンダリング回路14のDDAセットアップ回路141に順々に転送される。
DDAセットアップ回路141においては、ポリゴンレンダリングデータS11に基づいて、三角形の辺と水平方向の差分などを示す変分データが生成される。
具体的には、開始点の値と終点の値、並びに、その間の距離を用いて、単位長さ移動した場合における、求めようとしている値の変化分である変分が算出され、変分データを含むセットアップデータS141としてトライアングルDDA回路142に出力される。
具体的には、開始点の値と終点の値、並びに、その間の距離を用いて、単位長さ移動した場合における、求めようとしている値の変化分である変分が算出され、変分データを含むセットアップデータS141としてトライアングルDDA回路142に出力される。
トライアングルDDA回路142においては、変分データを含むセットアップデータS141を用いて、三角形内部の各画素における線形補間された(z,R,G,B,α,s,t,q)データが算出される。
そして、この算出された(z,R,G,B,α,s,t,q)データと、三角形の各頂点の(x,y)データとが、DDAデータS142として、トライアングルDDA回路142からテクスチャエンジン回路143に出力される。
すなわち、トライアングルDDA回路142においては、ポリゴンの頂点毎に求められた画像パラメータに基づいてポリゴン内部に含まれるすべてのピクセルの画像パラメータ(z,テクスチャ座標、カラーなど)を補間するラスタライズ処理が行われる。
そして、この算出された(z,R,G,B,α,s,t,q)データと、三角形の各頂点の(x,y)データとが、DDAデータS142として、トライアングルDDA回路142からテクスチャエンジン回路143に出力される。
すなわち、トライアングルDDA回路142においては、ポリゴンの頂点毎に求められた画像パラメータに基づいてポリゴン内部に含まれるすべてのピクセルの画像パラメータ(z,テクスチャ座標、カラーなど)を補間するラスタライズ処理が行われる。
テクスチャエンジン回路143においては、DDAデータS142が示す(s,t,q)データについて、sデータをqデータで除算する演算と、tデータをqデータで除算する演算とが行われる。そして、除算結果「s/q」および「t/q」に、それぞれテクスチャサイズUSIZEおよびVSIZEが乗算され、テクスチャ座標データ(u,v)が生成される。
次に、テクスチャエンジン回路143からメモリI/F回路144に対して生成されたテクスチャ座標データ(u,v)を含む読み出し要求が出力され、メモリI/F回路144を介して、グラフィックスメモリ145に記憶された(R,G,B)データが読み出される。
次に、テクスチャエンジン回路143において、読み出した(R,G,B)データの(R,G,B)データと、前段のトライアングルDDA回路142からのDDAデータS142に含まれる(R,G,B)データとが掛け合わされ、画素データとして生成される。
この画素データは、テクスチャエンジン回路143からメモリI/F回路144に出力される。
次に、テクスチャエンジン回路143において、読み出した(R,G,B)データの(R,G,B)データと、前段のトライアングルDDA回路142からのDDAデータS142に含まれる(R,G,B)データとが掛け合わされ、画素データとして生成される。
この画素データは、テクスチャエンジン回路143からメモリI/F回路144に出力される。
そして、メモリI/F回路144において、テクスチャエンジン回路143から入力した画素データに対応するzデータと、zバッファに記憶されているzデータとの比較が行われ、入力した画素データS145によって描画される画像が、前回、ディスプレイバッファに書き込まれた画像より、手前(視点側)に位置するか否かが判断される。
判断の結果、手前に位置する場合には、画像データに対応するzデータでzバッファに記憶されたzデータが更新される。
判断の結果、手前に位置する場合には、画像データに対応するzデータでzバッファに記憶されたzデータが更新される。
次に、メモリI/F回路144において、(R,G,B)データがグラフィックスメモリ145のディスプレイバッファに書き込まれる。
これら書き込む(更新も含む)べきデータは、書き込み系回路を介し所定のメモリに対して並列的に書き込まれる。
これら書き込む(更新も含む)べきデータは、書き込み系回路を介し所定のメモリに対して並列的に書き込まれる。
メモリI/F回路144においては、今から描画しようとしている画素におけるテクスチャアドレスに対応したテクスチャを格納しているグラフィックスメモリ145のメモリブロックがそのテクスチャアドレスにより算出され、そのメモリブロックにのみ読みだし要求が出され、テクスチャデータが読み出される。
描画においても同様に、今から描画しようとしている画素アドレスに対応する画素データを格納しているメモリブロックに対して、該当アドレスから画素データがモディファイ書き込み(Modify Write)を行うために読み出され、モディファイ後、同じアドレスへ書き戻される。
隠れ面処理を行う場合には、やはり同じように今から描画しようとしている画素アドレスに対応する奥行きデータを格納しているメモリブロックに対して、該当アドレスから奥行きデータがモディファイ書き込み(Modify Write)を行うために読み出され、必要ならばモディファイ後、同じアドレスへ書き戻される。
そして、図示しないCRTに画像を表示する場合には、CRTコントロール回路16において、与えられた水平垂直同期周波数に同期して、表示アドレスが発生され、メモリI/F回路144へ表示データ転送の要求が出される。
メモリI/F回路144では、その要求に従い、一定のまとまった固まりで、表示データがCRTコントロール回路16に転送される。
CRTコントロール回路16では、図示しないディスプレイ用FIFO等にその表示データが貯えられ、一定の間隔でRGBのインデックス値が生成される。
CRTコントロール回路16においては、内部にRGBのインデックスに対するRGB値が記憶されていて、インデックス値に対するRGB値が図示しないD/Aコンバータへ転送される。
そして、D/Aコンバータでアナログ信号に変換されたRGB信号がCRTへ転送される。
メモリI/F回路144では、その要求に従い、一定のまとまった固まりで、表示データがCRTコントロール回路16に転送される。
CRTコントロール回路16では、図示しないディスプレイ用FIFO等にその表示データが貯えられ、一定の間隔でRGBのインデックス値が生成される。
CRTコントロール回路16においては、内部にRGBのインデックスに対するRGB値が記憶されていて、インデックス値に対するRGB値が図示しないD/Aコンバータへ転送される。
そして、D/Aコンバータでアナログ信号に変換されたRGB信号がCRTへ転送される。
この場合、レンダリングされた結果のRGB画像に対して、CRTコントロール回路16によりメモリ上で画像を変化させ、その終了後、ディスプレイに転送される。あるいは、レンダリングされた結果のRGB画像をディスプレイのためにラスタスキャンするのと並行して、それに同期してzバッファもスキャンして、ディスプレイへの転送時に、CRTコントロール回路16によりメモリ上で画像を変化させ、その終了後、ディスプレイに転送される。
そして、zバッファをスキャンしながら、法線ベクトルを復元するときは、zバッファをスキャンして、法線ベクトルを復元しながらエッジ判定が行われる。
そして、zバッファをスキャンしながら、法線ベクトルを復元するときは、zバッファをスキャンして、法線ベクトルを復元しながらエッジ判定が行われる。
この場合、たとえばzバッファに対して縦スキャンと横スキャンが、同時並列的に行われる。それぞれのスキャンとともに処理も進行させる。
たとえばCRTコントロール回路16において、それぞれのスキャンにおいて、z値の2階微分が求められ、隣あうピクセル同士の法線ベクトルの内積が計算される。
そして、2階微分の結果および内積計算に結果に基づいてx方向とy方向それぞれについて当該ピクセルがエッジであるかどうかが判定される。この判定結果は、たとえばステートマシーンに送られる。
ステートマシーンにおいては、処理中のピクセルが、どのようなパターンのエッジの、どの部分なのかが判断され、そのエッジの情報が保持される。そして、カウンタにおいて、エッジの長さを測定される。
1つのエッジのパターンが、そのライン内で終了すると、ステートマシーン、カウンタはクリアされ、そのラインの後ろのピクセルに遡ってブレンド係数の計算、ブレンドする相手のピクセルの決定などが行われる。
そして、それぞれのピクセルに対してブレンド処理が行われる。
たとえばCRTコントロール回路16において、それぞれのスキャンにおいて、z値の2階微分が求められ、隣あうピクセル同士の法線ベクトルの内積が計算される。
そして、2階微分の結果および内積計算に結果に基づいてx方向とy方向それぞれについて当該ピクセルがエッジであるかどうかが判定される。この判定結果は、たとえばステートマシーンに送られる。
ステートマシーンにおいては、処理中のピクセルが、どのようなパターンのエッジの、どの部分なのかが判断され、そのエッジの情報が保持される。そして、カウンタにおいて、エッジの長さを測定される。
1つのエッジのパターンが、そのライン内で終了すると、ステートマシーン、カウンタはクリアされ、そのラインの後ろのピクセルに遡ってブレンド係数の計算、ブレンドする相手のピクセルの決定などが行われる。
そして、それぞれのピクセルに対してブレンド処理が行われる。
ブレンド処理後の画像は、格納するメモリであるディスプレイバッファに書き込まれる。
そのとき、横スキャンの処理と縦スキャンの処理が並行して行われているため、それぞれ他のスキャンが既に当該ピクセルに対して処理を行ったかどうかの1ビットのフラッグ情報が各ピクセルに対して保持される。
たとえば、フラグレジスタにフラグが立っていなければバッファ「完成したCG画像」のピクセル値に対してブレンド処理が行われる。
これに対してフラグが立っていれば、「アンチエイリアス(Anti-Alias)処理後の画像」からピクセル値が読み出され、それに対してブレンド処理が行われた後、書き戻される。
そのとき、横スキャンの処理と縦スキャンの処理が並行して行われているため、それぞれ他のスキャンが既に当該ピクセルに対して処理を行ったかどうかの1ビットのフラッグ情報が各ピクセルに対して保持される。
たとえば、フラグレジスタにフラグが立っていなければバッファ「完成したCG画像」のピクセル値に対してブレンド処理が行われる。
これに対してフラグが立っていれば、「アンチエイリアス(Anti-Alias)処理後の画像」からピクセル値が読み出され、それに対してブレンド処理が行われた後、書き戻される。
以上説明したように、本実施形態によれば、3次元コンピュータグラフィックスであることを生かして、描画時に持っている情報を有効に使用するので、極めて正確なエッジ情報を得ることができる。
また、描画の後処理であるので、描画処理そのものに対して要求される付加的な処理は最小である。付加的な処理が要求される場合もあるが、その場合でも、ピクセルの打ち込み数が増えたりするような処理ではないため、描画速度を遅くすることは全くない。
3次元コンピュータグラフィックスを描画するときに必ず生成するzバッファの情報だけで処理することができるため、必要なメモリの量が増大することがない。
アンチエイリアス処理に使うことを考えると、従来のものと比較して、全ての処理を後処理として行うことができるため、描画速度に対する影響が少ない。また、正確なエッジ情報を使ってエッジのパターンを抽出できるので、スーパーサンプリングなどの手法で問題になるマスクサイズによる制約などは全く無く、水平または垂直に近い直線的なエッジのエイリアスを実に美しく取り除くことができる。
また、描画の後処理であるので、描画処理そのものに対して要求される付加的な処理は最小である。付加的な処理が要求される場合もあるが、その場合でも、ピクセルの打ち込み数が増えたりするような処理ではないため、描画速度を遅くすることは全くない。
3次元コンピュータグラフィックスを描画するときに必ず生成するzバッファの情報だけで処理することができるため、必要なメモリの量が増大することがない。
アンチエイリアス処理に使うことを考えると、従来のものと比較して、全ての処理を後処理として行うことができるため、描画速度に対する影響が少ない。また、正確なエッジ情報を使ってエッジのパターンを抽出できるので、スーパーサンプリングなどの手法で問題になるマスクサイズによる制約などは全く無く、水平または垂直に近い直線的なエッジのエイリアスを実に美しく取り除くことができる。
なお、図1に示す3次元コンピュータグラフィックスシステム10では、ポリゴンレンダリングデータを生成するジオメトリ処理を、メインプロセッサ11で行う場合を例示したが、レンダリング回路14で行う構成にしてもよい。
10…3次元コンピュータグラフィックスシステム(画像処理装置)、11…メインプロセッサ、12…メインメモリ、13…I/Oインタフェース回路、14…レンダリング回路、141…DDAセットアップ回路、142…トライアングルDDA回路、143…テクスチャエンジン回路、144…メモリインタフェース(I/F)回路、145…グラフィックスメモリ、16…CRTコントロール回路、200…アンチエイリアス処理系、201…zバッファ、202…法線ベクトルバッファ、203…第1の2階微分回路、204…第1の内積計算回路、205…第1のエッジ判定回路、206…第1のステートマシン、207…第1のカウンタ、208…第2の2階微分回路、209…第2の内積計算回路、210…第2のエッジ判定回路、211…第2のステートマシン、212…第2のカウンタ、213…完成したコンピュータグラフィックス(CG)画像を格納するディスプレイバッファ、214…アンチエイリアス処理後の画像を格納するディスプレイバッファ、215…フラグレジスタ。
Claims (15)
- スクリーン座標系の描画対象領域内に、ピクセルデータを発生してメモリに対してレンダリング処理を行い、上記メモリに描画された画像を生成する場合に、エッジ情報を生成してアンチエイリアス処理を行う画像処理装置であって、
上記メモリに描画される所定のピクセルデータに基づいて上記エッジ情報を抽出するエッジ情報抽出手段と、
上記エッジ情報抽出手段で得られたエッジ情報に基づいてアンチエイリアスのために必要な処理内容を決定し、決定した処理を行うアンチエイリアス処理手段と
を有する画像処理装置。 - 上記アンチエイリアス処理手段は、各エッジ上のピクセルに対してブレンドのための隣接するピクセルと、ブレンドする割合とを決定し、上記決定したピクセルおよび値に基づいてブレンド処理を行う
請求項1記載の画像処理装置。 - 上記アンチエイリアス処理手段は、上記エッジ情報から処理中のピクセルがどのような形のパターンのどの位置にいるのかを示す第1の手段と、エイリアスパターンの開始点からエッジが逆転する変節点までの長さ、上記変節点からエイリアスパターンが終了するまでの長さをそれぞれ測定する第2の手段とを含み、上記第1の手段と第2の手段の情報に基づいてブレンド対象のピクセルの位置と当該ブレンドの係数を計算する
請求項2記載の画像処理装置。 - 上記メモリに描画されるピクセルデータには奥行き情報を含み、
上記エッジ情報抽出手段は、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンした結果得られた奥行き情報の2階微分値を求め、当該2階微分値に基づいてエッジ情報を抽出する
請求項3記載の画像処理装置。 - 上記メモリへの描画時に生成されるデータにピクセル毎の法線ベクトルを含み、上記メモリには法線ベクトルが格納される法線ベクトルバッファが形成され、
上記エッジ情報抽出手段は、上記法線ベクトルバッファに格納された上記ピクセル毎の法線ベクトルをスキャンした結果得られた法線ベクトルに基づいてエッジ情報を抽出する
請求項3記載の画像処理装置。 - 上記メモリに描画されるピクセルデータには奥行き情報を含み、
上記エッジ情報抽出手段は、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンした結果得られた奥行き情報とスクリーン座標からピクセル毎の法線ベクトルを復元し、復元した法線ベクトルに基づいてエッジ情報を抽出する
請求項3記載の画像処理装置。 - 上記エッジ情報抽出手段は、注目するライン近傍の複数のラインのエッジ情報を抽出する
請求項4記載の画像処理装置。 - 上記エッジ情報抽出手段は、注目するライン近傍の複数のラインのエッジ情報を抽出する
請求項5記載の画像処理装置。 - 上記エッジ情報抽出手段は、注目するライン近傍の複数のラインのエッジ情報を抽出する
請求項6記載の画像処理装置。 - スクリーン座標系の描画対象領域内に、ピクセルデータを発生してメモリに対してレンダリング処理を行い、上記メモリに描画された画像を生成する場合に、エッジ情報を生成してアンチエイリアス処理を行う画像処理方法であって、
上記メモリに描画される所定のピクセルデータに基づいて上記エッジ情報を抽出する第1ステップと、
上記第1ステップで得られたエッジ情報に基づいてアンチエイリアスのために必要な処理内容を決定し、決定した処理を行う第2ステップと
を有する画像処理方法。 - 上記第2ステップでは、各エッジ上のピクセルに対してブレンドのための隣接するピクセルと、ブレンドする割合とを決定し、上記決定したピクセルおよび値に基づいてブレンド処理を行う
請求項10記載の画像処理方法。 - 上記第2のステップは、
上記エッジ情報から処理中のピクセルがどのような形のパターンのどの位置にいるのかを示す第3にステップと、
エイリアスパターンの開始点からエッジが逆転する変節点までの長さ、変節点からエイリアスパターンが終了するまでの長さをそれぞれ測定する第4ステップとを含み、
上記第3ステップと第4ステップ情報に基づいてブレンド対象のピクセルの位置と当該ブレンドの係数を計算する
請求項11記載の画像処理方法。 - 上記メモリに描画されるピクセルデータには奥行き情報を含み、
上記第1ステップでは、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンし、得られた奥行き情報の2階微分値を求め、当該2階微分値に基づいてエッジ情報を抽出する
請求項12記載の画像処理方法。 - 上記メモリへの描画時に生成されるデータにピクセル毎の法線ベクトルを含み、上記メモリには法線ベクトルが格納される法線ベクトルバッファを形成し、
上記第1ステップでは、上記法線ベクトルバッファに格納された上記ピクセル毎の法線ベクトルをスキャンし、得られた法線ベクトルに基づいてエッジ情報を抽出する
請求項12記載の画像処理方法。 - 上記メモリに描画されるピクセルデータには奥行き情報を含み、
上記第1ステップでは、上記奥行き情報が格納された上記メモリの奥行き情報バッファをスキャンした結果得られた奥行き情報とスクリーン座標からピクセル毎の法線ベクトルを復元し、復元した法線ベクトルに基づいてエッジ情報を抽出する
請求項12記載の画像処理方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003334203A JP2005100177A (ja) | 2003-09-25 | 2003-09-25 | 画像処理装置およびその方法 |
EP04255728A EP1519319A3 (en) | 2003-09-25 | 2004-09-21 | Method and apparatus for antialiased blending in image rendering |
US10/947,985 US7280121B2 (en) | 2003-09-25 | 2004-09-23 | Image processing apparatus and method of same |
KR1020040076890A KR20050030595A (ko) | 2003-09-25 | 2004-09-24 | 화상 처리 장치 및 그 방법 |
CNA2004101037635A CN1674049A (zh) | 2003-09-25 | 2004-09-25 | 图像处理装置及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003334203A JP2005100177A (ja) | 2003-09-25 | 2003-09-25 | 画像処理装置およびその方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005100177A true JP2005100177A (ja) | 2005-04-14 |
Family
ID=34191502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003334203A Pending JP2005100177A (ja) | 2003-09-25 | 2003-09-25 | 画像処理装置およびその方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7280121B2 (ja) |
EP (1) | EP1519319A3 (ja) |
JP (1) | JP2005100177A (ja) |
KR (1) | KR20050030595A (ja) |
CN (1) | CN1674049A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012038105A (ja) * | 2010-08-06 | 2012-02-23 | Canon Inc | 情報処理装置、情報処理方法、およびプログラム |
Families Citing this family (70)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005100176A (ja) * | 2003-09-25 | 2005-04-14 | Sony Corp | 画像処理装置およびその方法 |
JP4180043B2 (ja) * | 2004-11-15 | 2008-11-12 | シャープ株式会社 | 3次元図形描画処理装置、画像表示装置、3次元図形描画処理方法、これをコンピュータに実行させるための制御プログラムおよび、これを記録したコンピュータ読み取り可能な可読記録媒体 |
KR100698626B1 (ko) * | 2004-12-10 | 2007-03-21 | 삼성전자주식회사 | 에일리어싱을 방지하기 위한 영상 보간 장치 및 방법 |
US20060250414A1 (en) * | 2005-05-03 | 2006-11-09 | Vladimir Golovin | System and method of anti-aliasing computer images |
US8269788B2 (en) * | 2005-11-15 | 2012-09-18 | Advanced Micro Devices Inc. | Vector graphics anti-aliasing |
US7518618B2 (en) * | 2005-12-23 | 2009-04-14 | Xerox Corporation | Anti-aliased tagging using look-up table edge pixel identification |
US7565015B2 (en) * | 2005-12-23 | 2009-07-21 | Xerox Corporation | Edge pixel identification |
JP4693660B2 (ja) * | 2006-03-10 | 2011-06-01 | 株式会社東芝 | 描画装置、描画方法及び描画プログラム |
GB2443858A (en) * | 2006-11-14 | 2008-05-21 | Sony Uk Ltd | Alias avoiding image processing using directional pixel block correlation and predetermined pixel value criteria |
US7733354B1 (en) | 2007-05-31 | 2010-06-08 | Adobe Systems Incorporated | Anti-aliased rendering |
JP2008306512A (ja) * | 2007-06-08 | 2008-12-18 | Nec Corp | 情報提供システム |
US20090033671A1 (en) * | 2007-08-02 | 2009-02-05 | Ati Technologies Ulc | Multi-sample rendering of 2d vector images |
US8294730B2 (en) * | 2007-09-04 | 2012-10-23 | Apple Inc. | Anti-aliasing of a graphical object |
US20100013854A1 (en) * | 2008-07-18 | 2010-01-21 | Microsoft Corporation | Gpu bezier path rasterization |
US8115781B2 (en) * | 2008-08-31 | 2012-02-14 | Trident Microsystems (Far East) Ltd. | Systems and methods of image processing including removal of discontinuous ramp and/or smoothing features |
US9473681B2 (en) | 2011-06-10 | 2016-10-18 | Flir Systems, Inc. | Infrared camera system housing with metalized surface |
US9517679B2 (en) | 2009-03-02 | 2016-12-13 | Flir Systems, Inc. | Systems and methods for monitoring vehicle occupants |
US9998697B2 (en) | 2009-03-02 | 2018-06-12 | Flir Systems, Inc. | Systems and methods for monitoring vehicle occupants |
US9843742B2 (en) | 2009-03-02 | 2017-12-12 | Flir Systems, Inc. | Thermal image frame capture using de-aligned sensor array |
US10757308B2 (en) | 2009-03-02 | 2020-08-25 | Flir Systems, Inc. | Techniques for device attachment with dual band imaging sensor |
US9635285B2 (en) | 2009-03-02 | 2017-04-25 | Flir Systems, Inc. | Infrared imaging enhancement with fusion |
US9986175B2 (en) | 2009-03-02 | 2018-05-29 | Flir Systems, Inc. | Device attachment with infrared imaging sensor |
US9451183B2 (en) | 2009-03-02 | 2016-09-20 | Flir Systems, Inc. | Time spaced infrared image enhancement |
US9674458B2 (en) | 2009-06-03 | 2017-06-06 | Flir Systems, Inc. | Smart surveillance camera systems and methods |
WO2012170946A2 (en) | 2011-06-10 | 2012-12-13 | Flir Systems, Inc. | Low power and small form factor infrared imaging |
USD765081S1 (en) | 2012-05-25 | 2016-08-30 | Flir Systems, Inc. | Mobile communications device attachment with camera |
US9235876B2 (en) | 2009-03-02 | 2016-01-12 | Flir Systems, Inc. | Row and column noise reduction in thermal images |
US9756264B2 (en) | 2009-03-02 | 2017-09-05 | Flir Systems, Inc. | Anomalous pixel detection |
US9948872B2 (en) | 2009-03-02 | 2018-04-17 | Flir Systems, Inc. | Monitor and control systems and methods for occupant safety and energy efficiency of structures |
US10244190B2 (en) | 2009-03-02 | 2019-03-26 | Flir Systems, Inc. | Compact multi-spectrum imaging with fusion |
US9208542B2 (en) | 2009-03-02 | 2015-12-08 | Flir Systems, Inc. | Pixel-wise noise reduction in thermal images |
US9756262B2 (en) | 2009-06-03 | 2017-09-05 | Flir Systems, Inc. | Systems and methods for monitoring power systems |
US9819880B2 (en) | 2009-06-03 | 2017-11-14 | Flir Systems, Inc. | Systems and methods of suppressing sky regions in images |
US10091439B2 (en) | 2009-06-03 | 2018-10-02 | Flir Systems, Inc. | Imager with array of multiple infrared imaging modules |
US9292909B2 (en) | 2009-06-03 | 2016-03-22 | Flir Systems, Inc. | Selective image correction for infrared imaging devices |
US9716843B2 (en) | 2009-06-03 | 2017-07-25 | Flir Systems, Inc. | Measurement device for electrical installations and related methods |
US9843743B2 (en) | 2009-06-03 | 2017-12-12 | Flir Systems, Inc. | Infant monitoring systems and methods using thermal imaging |
US8554008B2 (en) * | 2010-04-13 | 2013-10-08 | Vivante Corporation | Anti-aliasing system and method |
US9207708B2 (en) | 2010-04-23 | 2015-12-08 | Flir Systems, Inc. | Abnormal clock rate detection in imaging sensor arrays |
US9848134B2 (en) | 2010-04-23 | 2017-12-19 | Flir Systems, Inc. | Infrared imager with integrated metal layers |
US9706138B2 (en) | 2010-04-23 | 2017-07-11 | Flir Systems, Inc. | Hybrid infrared sensor array having heterogeneous infrared sensors |
KR101032835B1 (ko) * | 2010-07-21 | 2011-05-06 | 서울대학교산학협력단 | 백터 그래픽스 기술에 있어서 스캔라인 기반의 랜더링 방법 및 그에 따른 장치 |
KR101778353B1 (ko) | 2011-06-10 | 2017-09-13 | 플리어 시스템즈, 인크. | 적외선 이미징 장치용 불균일성 교정 기술 |
US10389953B2 (en) | 2011-06-10 | 2019-08-20 | Flir Systems, Inc. | Infrared imaging device having a shutter |
EP2719166B1 (en) | 2011-06-10 | 2018-03-28 | Flir Systems, Inc. | Line based image processing and flexible memory system |
US10051210B2 (en) | 2011-06-10 | 2018-08-14 | Flir Systems, Inc. | Infrared detector array with selectable pixel binning systems and methods |
US9058653B1 (en) | 2011-06-10 | 2015-06-16 | Flir Systems, Inc. | Alignment of visible light sources based on thermal images |
US9509924B2 (en) | 2011-06-10 | 2016-11-29 | Flir Systems, Inc. | Wearable apparatus with integrated infrared imaging module |
US10079982B2 (en) | 2011-06-10 | 2018-09-18 | Flir Systems, Inc. | Determination of an absolute radiometric value using blocked infrared sensors |
US10841508B2 (en) | 2011-06-10 | 2020-11-17 | Flir Systems, Inc. | Electrical cabinet infrared monitor systems and methods |
US9900526B2 (en) | 2011-06-10 | 2018-02-20 | Flir Systems, Inc. | Techniques to compensate for calibration drifts in infrared imaging devices |
US9235023B2 (en) | 2011-06-10 | 2016-01-12 | Flir Systems, Inc. | Variable lens sleeve spacer |
US9706137B2 (en) | 2011-06-10 | 2017-07-11 | Flir Systems, Inc. | Electrical cabinet infrared monitor |
US10169666B2 (en) | 2011-06-10 | 2019-01-01 | Flir Systems, Inc. | Image-assisted remote control vehicle systems and methods |
US9143703B2 (en) | 2011-06-10 | 2015-09-22 | Flir Systems, Inc. | Infrared camera calibration techniques |
US9961277B2 (en) | 2011-06-10 | 2018-05-01 | Flir Systems, Inc. | Infrared focal plane array heat spreaders |
EP2615834A1 (en) * | 2012-01-16 | 2013-07-17 | Thomson Licensing | Dealiasing method and device for 3D view synthesis |
US9811884B2 (en) | 2012-07-16 | 2017-11-07 | Flir Systems, Inc. | Methods and systems for suppressing atmospheric turbulence in images |
US9973692B2 (en) | 2013-10-03 | 2018-05-15 | Flir Systems, Inc. | Situational awareness by compressed display of panoramic views |
US11297264B2 (en) | 2014-01-05 | 2022-04-05 | Teledyne Fur, Llc | Device attachment with dual band imaging sensor |
RU2571574C1 (ru) * | 2014-10-01 | 2015-12-20 | Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования "Донской Государственный Технический Университет" (Дгту) | Устройство объединения изображений в единую композицию с плавным переходом контрастности |
CN105046729B (zh) * | 2015-08-07 | 2017-09-26 | 浙江大学 | 一种高效并行矢量数据可视化方法 |
CN107493407B (zh) * | 2016-06-08 | 2021-08-31 | 深圳富泰宏精密工业有限公司 | 拍照装置及拍照方法 |
CN110473281B (zh) * | 2018-05-09 | 2023-08-22 | 网易(杭州)网络有限公司 | 三维模型的描边处理方法、装置、处理器及终端 |
US11017265B1 (en) | 2020-01-29 | 2021-05-25 | ReportsNow, Inc. | Systems, methods, and devices for image processing |
CN112184893B (zh) * | 2020-10-15 | 2024-05-24 | 众智软件股份有限公司 | 线面体一体化的绘制方法、装置、设备和存储介质 |
WO2022250654A1 (en) * | 2021-05-24 | 2022-12-01 | Uiarmor.Com Llc | Systems, methods, and devices for image processing |
US11158031B1 (en) | 2021-05-24 | 2021-10-26 | ReportsNow, Inc. | Systems, methods, and devices for image processing |
US20230196627A1 (en) * | 2021-12-16 | 2023-06-22 | Meta Platforms Technologies, Llc | Anti-aliasing by encoding primitive edge representations |
CN115690333B (zh) * | 2022-12-30 | 2023-04-28 | 思看科技(杭州)股份有限公司 | 一种三维扫描方法及*** |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4780711A (en) * | 1985-04-12 | 1988-10-25 | International Business Machines Corporation | Anti-aliasing of raster images using assumed boundary lines |
US5123085A (en) * | 1990-03-19 | 1992-06-16 | Sun Microsystems, Inc. | Method and apparatus for rendering anti-aliased polygons |
JP3102805B2 (ja) * | 1990-10-23 | 2000-10-23 | 株式会社リコー | 図形出力装置 |
DE69328230T2 (de) * | 1992-12-01 | 2000-08-10 | Canon Kk | Entfernungbildverarbeitungsvorrichtung und -verfahren |
US5668940A (en) * | 1994-08-19 | 1997-09-16 | Martin Marietta Corporation | Method and apparatus for anti-aliasing polygon edges in a computer imaging system |
JP3609189B2 (ja) * | 1995-03-14 | 2005-01-12 | 株式会社リコー | アンチエイリアシング機能を有する画像生成装置 |
EP0984397B1 (de) * | 1998-08-30 | 2005-03-02 | Gmd - Forschungszentrum Informationstechnik Gmbh | Verfahren und Vorrichtung zum Eliminieren unerwünschter Stufungen an Kanten bei Bilddarstellungen im Zeilenraster |
US6429877B1 (en) * | 1999-07-30 | 2002-08-06 | Hewlett-Packard Company | System and method for reducing the effects of aliasing in a computer graphics system |
US6700672B1 (en) * | 1999-07-30 | 2004-03-02 | Mitsubishi Electric Research Labs, Inc. | Anti-aliasing with line samples |
EP1094421A3 (en) * | 1999-09-24 | 2003-07-30 | Nintendo Co., Limited | Method and apparatus for providing non-photorealistic cartoon outlining within a 3D videographics system |
US7061507B1 (en) * | 2000-11-12 | 2006-06-13 | Bitboys, Inc. | Antialiasing method and apparatus for video applications |
-
2003
- 2003-09-25 JP JP2003334203A patent/JP2005100177A/ja active Pending
-
2004
- 2004-09-21 EP EP04255728A patent/EP1519319A3/en not_active Withdrawn
- 2004-09-23 US US10/947,985 patent/US7280121B2/en not_active Expired - Fee Related
- 2004-09-24 KR KR1020040076890A patent/KR20050030595A/ko not_active Application Discontinuation
- 2004-09-25 CN CNA2004101037635A patent/CN1674049A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012038105A (ja) * | 2010-08-06 | 2012-02-23 | Canon Inc | 情報処理装置、情報処理方法、およびプログラム |
Also Published As
Publication number | Publication date |
---|---|
EP1519319A3 (en) | 2006-05-10 |
US7280121B2 (en) | 2007-10-09 |
KR20050030595A (ko) | 2005-03-30 |
US20050068333A1 (en) | 2005-03-31 |
CN1674049A (zh) | 2005-09-28 |
EP1519319A2 (en) | 2005-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005100177A (ja) | 画像処理装置およびその方法 | |
US10957082B2 (en) | Method of and apparatus for processing graphics | |
US8704830B2 (en) | System and method for path rendering with multiple stencil samples per color sample | |
JP2005100176A (ja) | 画像処理装置およびその方法 | |
US8059119B2 (en) | Method for detecting border tiles or border pixels of a primitive for tile-based rendering | |
US7239319B2 (en) | Rendering outline fonts | |
US7884825B2 (en) | Drawing method, image generating device, and electronic information apparatus | |
US8044971B2 (en) | Methods of and apparatus for processing computer graphics | |
US6664971B1 (en) | Method, system, and computer program product for anisotropic filtering and applications thereof | |
US8743135B2 (en) | Graphics processing systems | |
US6184893B1 (en) | Method and system for filtering texture map data for improved image quality in a graphics computer system | |
TW201706962A (zh) | 圖形處理 | |
US11087511B1 (en) | Automated vectorization of a raster image using a gradient mesh with arbitrary topology | |
KR20180037838A (ko) | 텍스쳐를 처리하는 방법 및 장치 | |
JP4311877B2 (ja) | 副標本化テクスチャ端縁部のアンチエイリアシング | |
US10269168B2 (en) | Graphics processing systems | |
KR0153664B1 (ko) | 3차원 도형 생성기 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070731 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070807 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071005 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20071106 |