以下、本発明の実施の形態について、図面に基づいて説明する。本実施形態において、画像処理装置は、GPU(Graphics Processing Unit)として実施される。また、本実施形態において、図形の境界線は、所定種類の線としての線分の連結により構成されることが採用される。なお、以下に説明する実施の形態は、本発明を実施する一例を示すものであって、本発明を以下に説明する具体的構成に限定するものではない。本発明を実施するにあたっては、実施の形態に応じた具体的構成が適宜採用されることが好ましい。
<システム構成>
図1は、本実施形態に係る画像処理装置を含むグラフィックシステムの構成を示す概略図である。
グラフィックシステム1は、CPU(Central Processing Unit)11、RAM(Random Access Memory)12、ROM(Read Only Memory)13、HDD(Hard Disk Drive)等の補助記憶装置14、画像処理装置であり2D(2次元)のベクタグラフィックス処理の機能を搭載するGPU15、及び表示装置である表示部16を備えたコンピュータである。ここで、グラフィックシステム1は、スマートフォンなどの携帯電話機、タブレット端末、パーソナルコンピュータ、その他のコンピュータ等である。なお、グラフィックシステム1は、トナーやインクによる描画機能を有するプリンタ、ビデオ機能を搭載するデジタル家電等であってもよい。また、本発明に係る画像処理装置は、GPU15である場合に限らず、グラフィックシステム1として実施されてもよい。
グラフィックシステム1では、インストールされた描画ソフトウェアにより、ベクタ図形が画素(ピクセル)の集合体として描画され、表示部16に表示される。
CPU11は、中央処理装置であり、RAM12等に展開された各種プログラムの命令及びデータを処理することで、RAM12、補助記憶装置14、GPU15、表示部16等を制御する。RAM12は、主記憶装置であり、CPU11によって制御され、各種命令やデータが書き込まれ、読み出される。補助記憶装置14は、不揮発性の補助記憶装置であり、RAM12にロードされるOSや描画ソフトウェア等、主にコンピュータの電源を落としても保持したい情報が書き込まれ、読み出される。
GPU15は、CPU11から制御情報や、描画対象となるベクタ形式の図形の情報(以下、描画オブジェクトデータと呼ぶことがある)等を受け付け、ベクタグラフィックスに関する処理を行う。ベクタ形式は、例えば、線分や曲線(例えば、ベジエ曲線、楕円曲線等)の方程式のパラメータで定義された基本的な構成要素を組み合わせたパス(Path)によって画像を表現する形式である。本実施形態におけるGPU15は、基本的な構成要素である所定種類の線として、線分を採用し、線分を組み合わせたパスによって図形の境界線を表す。なお、線分だけでなく、曲線によっても境界線が表されていることを採用してもよい。また、本実施形態におけるGPU15は、アンチエイリアシングを用いた図形の描画機能を備える。また、GPU15が行う処理の一部は、パイプライン処理される。
なお、GPU15は、同様の処理を行うグラフィックスアクセラレータや、LSI(Large Scale Integration)の部分であるIP(Intellectual Property)コア等であってもよい。
図2は、互いに線で外接し、順に描画される2つの図形の例を示す図である。本実施形態に係るグラフィックシステム1では、例えば、図2に示される図形SH1、SH2の描画処理が行われる。図2における図形の座標系は、原点Oを起点として、右方向がX軸、下方向がY軸である。図2の図形SH1は、折れ線V1V2V3V4V1を境界線とする図形(多角形)である。また、図形SH2は、折れ線V5V6V7V8V2V9V5を境界線とする図形である。図形SH1とSH2とは、互いに折れ線V8V2V9で構成される線で外接する。図2において、図形SH1の境界線及びその内部は赤色、図形SH2の境界線及びその内部は青色、背景色は黄色で描画されるものとする。このような図形の境界線や描画色の情報は、図形作成の機能を有するオーサリングツール等によって、作成され、図形のパスや描画色の情報として出力され、補助記憶装置14等に記憶される。グラ
フィックシステム1は、例えば、補助記憶装置14に記憶されている図形のデータを読み出し、描画処理する。
図3は、先に描画された図形の描画例を示す図である。図3は、本実施形態に係るグラフィックシステム1が、背景色の上に図2の図形SH1を描画した結果である。この描画結果は、図形SH2よりも先に図形SH1を描画することを前提としたものである。図3では、図形SH1が、格子状に並んだ各画素の色(濃淡)により表現され、描画されている。
図3の各画素には座標が割り当てられている。画素の座標系は、右方向がX軸、下方向がY軸であり、図3には、X座標が0から31まで、Y座標が0から23までに位置する画素が示されている。
図3では、アンチエイリアシングの処理により、例えば、座標(X,Y)=(23,5)に位置する画素等の、図形SH1の境界線と重なる画素の色は、背景色と図形SH1の描画色とが混合されるため、座標(X,Y)=(20,13)等の図形SH1内部に位置する画素の色(描画色)とは異なったものとなる。また、座標(X,Y)=(13,10)に位置する画素等の、図形SH1とSH2とが外接する線と重なる画素の色は、本実施形態に係るグラフィックシステム1の特徴により、背景色と混合されないため、図形SH1内部に位置する画素の色と同一のものとなる。また、座標(X,Y)=(17,8)に位置する画素等の、図形SH1とSH2とが外接する線の端点と重なる画素の色は、本実施形態に係るグラフィックシステム1の特徴により、背景色と図形SH1の描画色とが混合された色となる。
図4は、互いに線で外接し、順に描画された2つの図形の描画例を示す図ある。図4は、本実施形態に係るグラフィックシステム1が、図形SH1を描画した後(図3)に、図形SH2を描画した結果である。アンチエイリアシングの処理により、座標(X,Y)=(5,7)に位置する画素等の、図形SH2の境界線と重なる画素の色は、背景色と図形SH2の描画色とが混合されるため、座標(X,Y)=(11,11)等の図形SH2内部に位置する画素の色(描画色)とは異なったものとなる。また、座標(X,Y)=(13,10)に位置する画素等の図形SH1とSH2とが外接する線と重なる画素の色は、本実施形態に係るグラフィックシステム1の特徴により、図形SH1の描画色と図形SH2の描画色とが混合された色となる。また、座標(X,Y)=(17,8)に位置する画素等の、図形SH1とSH2とが外接する線の端点と重なる画素の色は、本実施形態に係るグラフィックシステム1の特徴により、背景色と図形SH1の描画色と図形SH2の描画色とが混合された色となる。
本実施形態に係るグラフィックシステム1は、以上説明したように、図形の境界線について、アンチエイリアシングによる滑らかな色の変化を得つつ、背景色が適切に混合された、所望の描画色が得られる描画機能を提供する。
<機能構成>
図5は、本実施形態に係る画像処理装置等の機能構成の概略を示す図である。補助記憶装置14に記憶されている描画ソフトウェア21は、CPU11によって実行されることで、境界線情報分割部22やGPU15の制御部31に対して描画指示等を行う機能部として機能する。また、GPU15は、制御部31、エッジ生成部32、制限範囲情報設定部33、交点生成部34、境界線取得部35、制限範囲取得部36、スパン生成部37、不透明度算出部38、ラスタライザ39、ピクセル生成部40を備える。また、GPU15が所定のデータ構造で交点情報を読み書きすることで、RAM12は、交点バッファ51として機能する。
なお、制御部31、エッジ生成部32、制限範囲情報設定部33、交点生成部34、境界線取得部35、制限範囲取得部36、スパン生成部37、不透明度算出部38、ラスタライザ39、及びピクセル生成部40のそれぞれ、またはこれらの組み合わせは、例えば、プログラムを実行するDSP(Digital Signal Processor)であってもよいし、専用のハードウェア回路であってもよい。また、GPU15が内部にRAMを備え、そのRAMが交点バッファ51として機能することを採用してもよい。
本実施形態において、描画ソフトウェア21は、グラフィックシステム1に搭載された、図形を描画するためのアプリケーションプログラムである。描画ソフトウェア21は、図形描画指示、描画色指定等の制御情報をGPU15に対して入力する。ここで、図形描画指示は、描画オブジェクトデータをともなった、図形の描画指示である。描画オブジェクトデータは、描画される図形を示すデータであり、共有情報を含む。共有情報は、図形と他の図形と外接に関する情報であり、外接する線(以下、共有線と呼ぶことがある)を示す情報である。
図6は共有情報を含む描画オブジェクトデータの例である。図6において、D001〜D006は、図2における図形SH1の描画オブジェクトデータを示し、データD007〜D012は、図2における図形SH2の描画オブジェクトデータを示す。描画ソフトウェア21は、例えば、データD001〜D006を、図形SH1の図形描画指示の際に、GPU15へ出力する。
図6において、描画オブジェクトデータは、始点座標及び終点座標の組で示される線分の情報の集合で表されている。これらの集合は、図形の境界線を示すパスを構成する。図6において、座標(V1x,V1y)、(V2x,V2y)、…(V9x,V9y)は、図2における点V1、V2、…V9の座標を示している。例えば、データD005の始点座標(V3x,V3y)及び終点座標(V4x,V4y)の組は、線分V3V4を示す。
本実施形態において、共有情報は、描画オブジェクトデータの各線分と関連付けられ、線分の始点座標に関する始点共有情報と線分の終点座標に関する終点共有情報との組で示される。始点共有情報及び終点共有情報は、それぞれ、「開始」(共有線の開始点)、「継続」(共有線の端点以外の点)、「終了」(共有線の終了点)、「−」(共有線上の点ではなく、共有情報はない)の何れかの値で示される。例えば、データD002及びD003の共有情報は、点V9が共有線の開始点であり、点V2が共有線の端点以外の点であり、点V8が共有線の終了点であることを示している。即ち、折れ線V9−V2−V8が共有線であることを示している。また、例えば、データD001の共有情報は、線分V1V9は、共有線上の線分ではないことを示している。
また、本実施形態において、描画ソフトウェア21は、図形描画指示を行うより前に、図形作成の機能を有するオーサリングツール等によって出力された作成された図形データから、図形描画指示の対象となる図形に関する描画オブジェクトデータ及び共有情報を生成する。この際、描画ソフトウェア21は、例えば、図形データが示す各図形の境界線の位置や傾きを算出し、重なりを判定することで、共有線を検出し、共有情報を生成する。
本実施形態において、境界線情報分割部22は、図形が他の図形と線で外接し共有線を有する場合であって、共有線の端点が図形の境界線を構成する線分上(線分の端点を除く)に存在するときに、共有線の当該端点で当該線分を分割する。そして、境界線情報分割部22は、分割前の当該線分の代わりに、分割された線分それぞれを示す線分の情報を要素とした新たなパスを生成する。例えば、図2の図形SH1の境界線が、線分V1V2、V2V3、V3V4、及びV4V1を要素とするパスで表されている場合を考える。図2
の図形SH1とSH2とは共有線である折れ線V9−V2−V8で外接する。更に、共有線の端点V9は、図形SH1のパスを構成する線分V1V2上に存在する。境界線情報分割部22は、線分V1V2を端点V9で分割し、線分V1V9、及びV9V2それぞれを示す線分の情報を要素とした新たなパス(折れ線V1V9V2V3V4V1)を生成する。更に、共有線の端点V8は、図形SH1の新たなパスを構成する線分V2V3上に存在する。境界線情報分割部22は、線分V2V3を端点V8で分割し、線分V2V8、及びV8V9それぞれを示す線分の情報を要素とした更に新たなパス(折れ線V1V9V2V8V3V4V1)を生成する。本実施形態において、境界線情報分割部22は、分割の対象がなくなるまで、このような分割を繰り返し、新たなパスを生成する。
境界線情報分割部22によれば、共有線の端点によりパスを構成する線分が分割されるため、各線分の組み合わせで共有線の情報を構成することが可能になり、線分単位に共有線に関する所定の画像処理を行うことができるようになる。このことによって、パイプライン処理の実現が容易になり、効率的な画像処理が実現可能になる。
本実施形態において、制御部31は、入力される制御情報に基づいて、エッジ生成部32、制限範囲情報設定部33、交点生成部34、スパン生成部37、ラスタライザ39、ピクセル処理部40等を制御する。制御部31は、GPU15におけるパイプライン処理の制御も行う。
本実施形態において、エッジ生成部32は、描画オブジェクトデータを取得し、取得した描画オブジェクトデータに基づいて、エッジ情報を生成する。そして、エッジ生成部32は、エッジ情報を交点生成部34に出力する。ここで、エッジ情報とは、図形の境界線を示すパスを分解した線分を示すエッジに関する情報であって、エッジの向き等の情報を含んだ、交点生成部34が処理するのに適した形式の情報である。エッジ情報は図形の境界線情報を構成する。本実施形態においてエッジは、パスを構成する線分と一致する。なお、パスが曲線等により構成されるようなグラフィックシステム1において、エッジ生成部32がパスを近似する線分に分解し、分解された線分それぞれをエッジとして扱い、それぞれのエッジに関するエッジ情報を生成することを採用してもよい。
また、本実施形態において、エッジ生成部32は、制限範囲情報設定部33を有しており、制限範囲情報設定部33を用いて、エッジ情報が示す境界線に制限範囲情報を設定させる。ここで、制限範囲情報とは、描画色の混合を制限する範囲を示す情報である。
図7は、エッジ情報のデータの例である。図7において、D101〜D106は、図2における図形SH1のエッジ情報を示し、データD107〜D112は、図2における図形SH2のエッジ情報を示す。エッジ生成部32は、例えば、図形SH1の描画オブジェクトデータの入力に対し、データD101〜D106を順次生成して出力する。
図7において、エッジ情報は、始点座標、始点制限情報、終点座標、終点制限情報、及び向きの情報を有する。始点座標及び終点座標の組は、図形の境界線を構成するエッジを示す。向きは、エッジの向きが上向き(「上」)であるか、下向き(「下」)であるかを示す。図形の内部は、エッジの向きにエッジに沿って移動したときの進行方向の右側または左側に定義される。本実施形態において、図形の内部は、エッジの向きの上向きに対して当該進行方向の右側、エッジの向きの下向きに対して左側に定義される。なお、図形の内部の定義規則(即ち、描画における塗りつぶしの規則)は、偶奇規則(Even−Odd Rule)等、その他の規則が採用されてもよい。
本実施形態において、制限範囲情報は、各エッジと関連付けられ、エッジの始点座標に関する始点制限情報と、エッジの終点座標に関する終点制限範囲情報とで示される範囲(
以下、制限範囲ということがある)を示す。始点制限情報及び終点制限情報は、それぞれ、「開始」(範囲の開始点)、「継続」(範囲の継続点)、「終了」(範囲の終了点)、「−」(範囲外の点)の何れかの値で示される。例えば、データD101〜D106に示される、図形SH1の境界線に設定された制限範囲情報の範囲は、点V9が開始点であり、点V2が継続点であり、点V8が終了点であることを示している。即ち、折れ線V9−V2−V8が設定された範囲であることを示している。
本実施形態において、制限範囲情報設定部33は、互いに共有線で外接する2つの図形のうち、先に描画される第1の図形の境界線に対して、当該共有線の範囲を制限範囲情報として設定する。また、制限範囲情報設定部33は、後に描画される第2の図形の境界線に対して、当該共有線の範囲に応じた制限範囲を設定しない。制限範囲情報設定部33は、描画オブジェクトデータのパスを構成する線分の情報、及び共有情報を入力とし、先に描画される図形のエッジ情報に制限範囲情報を設定し、後に描画される図形に制限範囲情報を設定しない。
ここで、互いに共有線で外接する2つの図形は、例えば、図2の図形SH1及びSH2である。なお、1つの図形Aが2つ以上の図形それぞれと外接する場合もある。この場合、制限範囲情報設定部33は、それぞれの外接について、境界線に対する制限範囲情報の設定を処理する。
図7には、描画ソフトウェア21が図形SH1に関する図形描画指示を先にGPU15に対して行い、その後に図形SH2に関する図形描画指示を行う場合におけるエッジ情報群が示されている。制限範囲情報設定部33は、先に描画される図形SH1に対しては、データD102、D103が示す制限範囲V9V2V8を設定し、後に描画される図形SH2に対しては、データD110、D111が示すように、制限範囲を設定しない。制限範囲情報設定部33の処理の詳細については、後述する。
制限範囲情報設定部33によれば、先に描画される図形の境界線に制限範囲情報が設定されるため、先に描画される図形の境界線の描画において、背景色が混合されず、カラーブリーディングを防止できる。また、制限範囲情報設定部33によれば、後に描画される図形の境界線に制限範囲情報が設定されないため、アンチエイリアシングによる滑らかな色の変化を得ることもできる。
本実施形態において、交点生成部34は、図形の境界線と走査線方向の画素の並びとの交点に位置する画素の座標、及び、当該画素の不透明度を図形が画素の覆う程度を示すカバー値とするか否かを示すカバー値採用情報を含む交点情報を生成する。ここで、交点生成部34は、交点情報が含むカバー値採用情報について、制限範囲情報の示す制限範囲(端点を含まない)に位置する画素に対して、カバー値採用情報にカバー値としないこと示す不採用値を設定した交点情報を生成する。また、交点生成部34は、制限範囲情報の示す制限範囲に位置しない画素(制限範囲情報の示す範囲の端点に位置する画素を含む)に対して、カバー値採用情報にカバー値とすることを示す採用値を設定した交点情報を生成する。またここで、本実施形態において、走査線は、描画される画像中の画素の水平方向の並びである。本実施形態において走査線方向は、X軸方向(水平方向)である。
交点生成部34は、境界線取得部35及び制限範囲取得部36を含み、境界線取得部35及び制限範囲取得部36によって、境界線情報及び制限範囲情報を示すエッジ情報を取得する。交点生成部34は、取得したエッジ情報に基づいて、交点情報を生成し、生成した交点情報を交点バッファ51に出力して蓄積させる。ここで、本実施形態において交点バッファ51は、1度に描画される図形ごとに、その図形の交点情報を蓄積するバッファである。なお、交点生成部34の処理の詳細については、後述する。
図8は、走査線及び交点の例を示すイメージ図である。図8には、図形SH1に関する描画処理を行う場合における、Y座標13の走査線SC11が示されている。図8において、交点に位置する画素は、交点I11a、I11b、及びI11cである。
図9は、交点バッファ51に蓄積された交点情報のデータの例である。図9において、交点情報は、Y、X、カバー値採用情報、及び向きの情報を有する。Y、Xは、それぞれ交点のY座標、X座標を示す。カバー値採用情報は、「採用」(カバー値とすることを示す採用値)、「不採用」(カバー値としないことを示す不採用値)の値をとる。向きは、交点を通過するエッジの向きを示す。図8において、D202〜D204は、それぞれ図8の交点I11a、I11b、及びI11cに対応する交点情報を示す。例えば、交点生成部34が生成したデータD202のカバー値採用情報は、交点I11aが制限範囲情報の設定されたエッジV2V8上(制限範囲情報の示す範囲)に位置するため、「不採用」となる。また、例えば、交点生成部34が生成したデータD204のカバー値採用情報は、交点I11cが制限範囲情報の設定されていないエッジV4V1上に位置する(制限範囲情報の示す範囲に位置しない)ため、「採用」となっている。また、本実施形態において、交点情報は、図9に図示されない、カバー値を算出するためのカバー値情報を含む。カバー値情報は、図形が交点をどのように覆っているかを示す情報である。
なお、交点バッファ51は、描画領域の大きさに応じて確保した2次元配列に交点情報を蓄積することを採用してもよい。
本実施形態において、境界線取得部35は、図形の境界線をベクタ形式により示す境界線情報としてのエッジ情報(始点座標、終点座標等)を取得する。
本実施形態において、制限範囲取得部36は、図形の境界線に設定される範囲の情報であって、描画色の混合を制限する範囲を示す制限範囲情報としてのエッジ情報(始点制限情報、終点制限情報等)を取得する。
本実施形態において、スパン生成部37は、走査線方向に連続して並ぶ、1つ以上の描画対象となる画素の範囲、及び当該範囲の不透明度を含むスパン情報を生成する。ここで、不透明度とは、描画における図形の描画色を混合する程度を示すものである。スパン生成部37は、不透明度算出部38を有しており、当該範囲に含まれる交点に位置する画素の不透明度が、不透明度算出部38によって算出される不透明度であるスパン情報を生成する。
本実施形態において、スパン生成部37は、まず、交点バッファ51に蓄積された交点情報を読み込む。スパン生成部37は、次に、読み込んだ交点情報に基づいて、スパン情報を生成する。スパン生成部37は、次に、生成したスパン情報をラスタライザ39に出力する。
図10は、スパン情報のデータの例である。図10のデータ301〜D304には、図形SH1のY座標13のスパンを示すスパン情報が示されている。図10において、スパン情報は、Y、始点X、終点X、不透明度の情報を含む。Yは、スパンのY座標を示す。始点X及び終点Xは、それぞれスパンの始点、終点のX座標を示す。不透明度は、スパンを画素として描画するときの描画色の不透明度を示す値であり、0(透明)より大きい値で、1.0(不透明、即ち描画色で上書き)以下である値をとる。例えば、不透明度0.5は半透明を示し、図形の描画の際にその図形の描画色を半分の比率で混合することを意味する。図10において、例えば、データD301のスパンは、図8の交点I11aの画素の描画に関するスパンを示す。また、例えば、データD303のスパンは、図8の交点
I11bの右隣(X座標16)の画素から交点I11cの左隣(X座標26)の画素までの描画に関するスパンを示す。
本実施形態において、不透明度算出部38は、図形の境界線と走査線方向の画素の並びとの交点に位置する各画素の不透明度として、制限範囲情報の示す範囲と走査線方向の画素並びとの交点に位置する画素に対して、不透明を示す値を算出する。また、不透明度算出部38は、不透明度として、制限範囲情報の示さない範囲と走査線方向の画素の並びとの交点に位置する画素に対して、当該画素を図形が覆う程度を示すカバー値を算出する。本実施形態において、不透明度算出部38は、交点情報部34によって生成された交点情報のカバー値採用情報に基づいて、不透明度を算出する。不透明度算出部38は、交点情報の画素(交点)それぞれに対し、画素がカバー値採用情報に不採用値の設定されている画素である場合に、不透明を示す値を算出する。また、不透明度算出部38は、画素がカバー値採用情報に不採用値の設定されていない画素である場合に、カバー値を算出する。
本実施形態において、不透明度算出部38が算出するカバー値は、1つの交点の画素における、図形が占める面積の割合である。不透明度算出部38は、交点情報が有するカバー値情報に基づいてカバー値を算出する。なお、カバー値の算出方法は、アンチエイリアシング技術における種々の方法から適当な方法を採用してもよい。
本実施形態の不透明度算出部38によれば、不透明度としてカバー値を算出するので、描画の際に、アンチエイリアシングによる滑らかな色の変化が得られる。また、制限範囲情報の示す範囲と走査線方向の画素並びとの交点に位置する画素に対して、不透明を示す値を算出するため、図形の境界線の一部については、例えば、背景色と混合されない所望の画素色を得ることもできる。即ち、カラーブリーディングを抑制した画素色を得ることができる。また、本実施形態の不透明度算出部38及び交点生成部34によれば、制限範囲情報の示す範囲の端点については不透明度としてカバー値を算出するので、共有線の端点に関して、背景色が混合された所望の画素色を得ることができる。
なお、本実施形態において、交点生成部34、交点バッファ51、及びスパン生成部37は、制限範囲の設定を含むエッジ情報を入力とし、スパン情報を生成する機能を提供する。このうち、交点生成部34及びスパン生成部37は、例えば、プログラムを実行する1つのDSPであってもよいし、1つの専用のハードウェア回路であってもよい。そして、このようなDSP、または専用のハードウェア回路を、本発明の1つの実施形態として採用してもよい。
本実施形態において、ラスタライザ39は、スパン情報、描画色に基づいて各画素の色に関するピクセル情報を生成する。ラスタライザ39は、生成したピクセル情報をピクセル処理部40に出力する。ピクセル情報は、不透明度を含む情報である。ラスタライザ39は、例えば、図10のデータD301〜D304のスパン情報と、図形SH1の描画色に基づいて、図3における座標(X,Y)=(14、13)〜(27、13)の画素に関するピクセル情報を生成し、ピクセル処理部40に出力する。このとき、例えば、図3における座標(X,Y)=(27、13)の画素に関するピクセル情報の不透明度は、0.5である。
本実施形態において、ピクセル処理部40は、ピクセル情報に基づいて表示部16を制御することで、描画領域に表示される画像を更新する。この際、ピクセル処理部40は、ピクセル情報の示す不透明度に応じて、既に描画されている色とピクセル情報の示す色との混合処理(ブレンド処理)を行う。ピクセル処理部40は、例えば、図3における座標(X,Y)=(27、13)の画素については、不透明度が0.5であるため、既に描画されている色(背景色)と描画色とを1:1の割合で混合する。
<処理の流れ>
図11から図15までを用いて、本実施形態に係るグラフィックシステム1の処理の流れを説明する。なお、これらの図に示された処理の具体的な内容及び順序は一例であり、処理内容及び順序には、実施の形態に適したものが適宜採用されることが好ましい。
図11は、描画の処理の流れの例を示すシーケンス図である。図11には、描画画像がクリアされ、図形SH1、SH2が順に描画されるまでの流れが記載されている。なお、この処理の流れにおいて、描画ソフトウェア21が扱う描画オブジェクトデータは、既に境界線情報分割部22によってパスが分割されているものである。
ステップS101及びS102では、表示画像がクリアされる。まず、ステップS101では、描画ソフトウェア21が背景色黄色で表示画像のクリアをする指示を制御情報としてGPU15に出力する。次に、ステップS102では、GPU15の制御部31が、入力された指示に従って、表示画像を背景色黄色でクリアする。この際、制御部31は、制限範囲設定部33が使用する処理済の共有情報を削除する(詳細は後述する)。この際、交点バッファ51に蓄積された交点情報はすべて削除(クリア)される。
ステップS103及びS104では、描画色が設定される。まず、ステップS103では、描画ソフトウェア21が描画色を赤色にする指定を制御情報としてGPU15に出力する。次に、ステップS104では、GPU15の制御部31が、入力された指定に従って、描画色を赤色に設定する。ここで設定された描画色は、ラスタライザ39等によって用いられる。
ステップS105からS112では、図形SH1の描画処理が行われる。まず、ステップS105で、描画ソフトウェア21が、制御情報としての図形SH1の図形描画指示とともに、図形SH1の描画オブジェクトデータをGPU15に対して出力する。次に、GPU15が入力された指示、描画オブジェクトデータに従って、ステップS106からS111までの処理を行う。ステップS106からS111までの処理によって、図3に示されるような描画結果が得られる。次に、ステップS112では、交点バッファ51がクリアされる。
ステップS106からS108までは、エッジに関するループ処理を構成し、ステップS106において生成されるエッジ情報それぞれを処理し、交点情報を蓄積する(L101)。また、ステップS109からS111までは、交点に関するループ処理を構成し、ステップS106からS108までのループ処理において蓄積される交点情報それぞれを処理する(L102)。なお、ステップS106からS111までの各処理は、図11では、順番に行われるように記載されているが、その全部または一部は、パイプライン処理される。このようにすることで、GPU15は、高速な描画処理を行うことができる。
ステップS106では、エッジ生成部32が、取得した図形SH1の描画オブジェクトデータに基づいて、エッジ情報を生成する。
ステップS107では、制限範囲情報設定部33が、図形SH1の境界線に対して制限範囲情報を設定する。具体的には、図7のデータD102及びD103の始点制限情報及び終点制御情報を設定する。処理の詳細については後述する。
ステップS108では、交点生成部34が、取得した図形SH1のエッジ情報に基づいて交点情報を生成し、生成した交点情報を交点バッファ51に出力し、蓄積させる。
ステップS109では、スパン生成部37が、交点バッファ51に蓄積された交点情報を読み込み、交点情報に基づいて、スパン情報を生成する。また、スパン生成部37は、生成したスパン情報をラスタライザ39に出力する。
ステップS110では、ラスタライザ39が、取得したスパン情報、描画色に基づいて各画素の色に関するピクセル情報を生成する。ラスタライザ39は、生成したピクセル情報をピクセル処理部40に出力する。
ステップS111では、ピクセル処理部40が、取得したピクセル情報を処理する。ピクセル処理部40、ピクセル情報に基づいて、表示画像の更新を行う。
ステップS112では、制御部31が、交点バッファ51に蓄積された交点情報をクリアする。
ステップS113及びS114では、描画色が設定される。ここで設定される描画色は青色であるが、その処理は、ステップS103及びS104と同様である。
ステップS115からS122まででは、図形SH2の描画処理が行われる。まず、ステップS115で、描画ソフトウェア21が、制御情報としての図形SH2の図形描画指示とともに、図形SH1の描画オブジェクトデータをGPU15に対して出力する。次に、GPU15が入力された指示、及び描画オブジェクトデータに従って、ステップS116からS121までの処理を行う。ステップS116からS121までの処理によって、図4に示されるような描画結果が得られる。次に、ステップS122では、交点バッファ51がクリアされる。
ステップS116からS118までは、エッジに関するループ処理を構成し、ステップS116において生成されるエッジ情報それぞれが処理され、交点情報が蓄積される(L103)。また、ステップS119からS121までは、交点に関するループ処理を構成し、ステップS116からS118までのループ処理において蓄積される交点情報それぞれが処理される(L104)。
ステップS117では、図形SH2がSH1より後に描画される図形であるため、制限範囲情報設定部33は、図形SH2の境界線に対して制限範囲情報を設定しない。そのため、図7のデータD107及びD112の始点制限情報及び終点制御情報を「−」(範囲外の点)となる。
ステップS116、及びS118からS122まででは、ステップS106、及びステップS108からS112までと同様に、エッジ生成、交点生成、スパン生成、ピクセル生成、ピクセル処理、交点バッファクリアの各処理が行われる。
図12は、本実施形態に係る制限範囲情報設定等の処理の流れを示すフローチャートである。この処理の流れは、描画ソフトウェア21から出力された描画オブジェクトデータがエッジ生成部32に取得されたことを契機に開始される。なお、この処理の流れは、図11のステップS107及びS117の処理の詳細を主に示すものである。
ステップS201では、制限範囲情報設定33が取得した描画オブジェクトデータのパスの構成要素(線分の情報)がすべて処理済みであるか否かを判定する。ステップS201で、すべて処理済みであると判定された場合は、処理は終了する。ステップS201で、すべて処理済みであると判定されなかった場合は、処理はステップS202へ進む。
ステップS202では、制限範囲情報設定33が、未処理である、次のパスの構成要素を処理対象に設定する。
ステップS203では、エッジ生成部32が、エッジ情報を生成する。ここで、生成されるエッジ情報には、制限範囲情報は設定されておらず、始点制限情報、終点制限情報の値は、何れも「−」である。
ステップS204では、制限範囲情報設定33が、処理対象の構成要素に関する共有情報が存在するか否かを判定する。ここで、処理対象の構成要素に関する共有情報は、図6における始点共有情報、終点共有情報で表される情報である。ステップS204で、共有情報が存在すると判定された場合(値が「開始」、「継続」、「終了」である場合)、処理はステップS205へ進む。ステップS204で、共有情報が存在すると判定されなかった場合(値が「−」である場合)、処理はステップS208へ進む。
ステップS205では、制限範囲情報設定33が、処理対象の構成要素に関する共有情報が処理済の共有情報と一致するか否かを判定する。ここで、処理済の共有情報は、ステップS207において、記憶される共有情報であり、制御部31が表示画像のクリアをする指示を取得した場合に、削除される情報である。またここで、一致するとは、共有情報の実質的な内容が同一であることをいう。例えば、図6のデータD011が示す共有情報は、V9を開始点としV2を継続点とする線分V9V2の外接の情報であるため、これと同内容の共有情報を示す図6のデータD002が処理済の共有情報として記憶されていた場合に、一致すると判定される。
ステップS205で、処理対象の構成要素に関する共有情報が処理済の共有情報と一致すると判定された場合、処理はステップS208へ進む。ステップS205で、処理対象の構成要素に関する共有情報が処理済の共有情報と一致すると判定されなかった場合、処理はステップS206へ進む。
ステップS206では、制限範囲情報設定33が、ステップS203で生成されたエッジ情報に制限範囲情報を設定する。本実施形態において、制限範囲情報設定33が設定する制限範囲情報の内容は、処理対象の構成要素に関する共有情報と同様の内容である。例えば、制限範囲情報設定33は、線分V9V2を示すエッジ情報に対し、図6のデータD002の線分V9V2の始点共有情報「開始」、終点共有情報「継続」が示す共有情報に対応して、始点制限情報「開始」、終点制限情報「継続」が示す制限範囲情報を設定する(図7のデータD102)。
ステップS207では、制限範囲情報設定33が、処理対象の構成要素の共有情報を処理済として記憶する。制限範囲情報設定33は、例えば、図6のデータD002を処理済の共有情報として記憶する。ここで記憶される処理済の共有情報によって、制限範囲情報設定33は、先に描画される図形の境界線に係るエッジであるか否かを判別することができる。
ステップS208では、エッジ生成部32が、ステップS203において生成したエッジ情報を交点生成部34に出力する。ここで出力されるエッジ情報は、ステップS206において、制限範囲情報が設定されている場合がある。ステップS208の後、処理はステップS201に戻る。
図13は、本実施形態に係る交点生成の処理の流れを示すフローチャートである。この処理の流れは、エッジ生成部32から出力されたエッジ情報が交点生成部34に取得されたことを契機に開始される。なお、この処理の流れは、図11のステップS108及びS
118の処理の詳細を示すものであり、1つの図形に対する全交点情報の生成に関する処理の流れを示すものである。
ステップS301では、交点生成部34が、走査線による走査範囲を設定する。まず、交点生成部34が、取得したエッジ情報から、エッジが示す線分のY座標の範囲として、最小のY座標(Ytop)及び最大のY座標(Ybottom)を求める。Ytop、Ybottomは、エッジの始点又は終点のY座標である。次に、走査範囲をYtopからYbottomまでに設定する。次に、交点生成部34は、処理対象の走査線の位置をY座標Ytopに設定する。
ステップS302では、交点生成部34が、処理対象の走査線の画素の並びと、取得したエッジ情報が示すエッジとの交点に位置する画素(以下単に交点ということがある)の座標を算出する。ステップS302で座標が算出された全交点は、ステップS303からS308までにおいて処理される。
ステップS303では、交点生成部34が、ステップS302で座標が算出された全交点が処理済みであるか否かを判定する。ステップS303で全交点が処理済みであると判定された場合、処理はステップS309へ進む。ステップS303で全交点が処理済みであると判定されなかった場合、処理はステップS304へ進む。
ステップS304では、交点生成部34が、未処理の交点から次の交点を1つ選択し、処理対象の交点として設定する。ステップS305からS308までにおいて、この交点に対応する交点情報が生成され、蓄積される。
ステップS305では、交点生成部34が、処理対象の交点がエッジ情報の示す制限範囲外、または、制限範囲の端点に位置するものであるか否かを判定する。ここで、制限範囲の端点とは、エッジ情報の始点制限情報または終点制限情報の値が「開始」または「終了」となっている点である。ステップS305で、処理対象の交点がエッジ情報の示す制限範囲外、または、制限範囲の端点に位置するものであると判定された場合、処理はステップS307ヘ進む。ステップS305で、処理対象の交点がエッジ情報の示す制限範囲外、または、制限範囲の端点に位置するものであると判定されなかった場合、処理はステップS306ヘ進む。
ステップS306では、交点生成部34が、処理対象の交点に対し、カバー値採用情報を不採用値に決定する。ステップS307では、交点生成部34が、処理対象の交点に対し、カバー値採用情報を採用値に決定する。
ステップS308では、交点生成部34が、ステップS306またはS307で決定されたカバー値採用情報を含む、処理対象の交点に対する交点情報を生成し、交点バッファ51に出力し、蓄積する。その後、処理はステップS303へ戻る。
ステップS309では、交点生成部34が、全走査線を処理済みか否か判定する。本実施形態において、交点生成部34は、処理対象の走査線のY座標がYbottomに達したか否かを判定する。ステップS309で、全走査線を処理済みであると判定された場合、処理は終了する。ステップS309で、全走査線を処理済みであると判定されなかった場合、処理はステップS310へ進む。
ステップS310では、交点生成部34が、処理対象の走査線の位置を示すY座標に1を加えることで、処理対象の走査線の位置を次の位置へ更新する。その後処理はステップS302へ戻る。
図14は、本実施形態に係るスパン生成の処理の流れを示すフローチャートである。この処理の流れは、少なくとも交点生成部34において1つの走査線に対応する交点情報が蓄積された後に開始される。なお、この処理の流れは、図11のステップS109またはS119の処理の詳細を示すものであり、1つの図形に対する全スパン情報の生成に関する処理の流れを示すものである。なお、この処理の流れは、描画対象の図形が、描画領域(画面)に納まる図形であることを前提とする。
ステップS401では、スパン生成部37が、処理対象の走査線の位置をY座標0に初期設定する。
ステップS402では、スパン生成部37が、処理対象の走査線の位置に対応する全交点情報を読込済みか否か判定する。ステップS402で処理対象の走査線の位置の交点に関する全交点情報を読込済みであると判定された場合、処理はステップS407へ進む。ステップS402で処理対象の走査線の位置の交点に関する全交点情報を読込済みであると判定されなかった場合、処理はステップS403へ進む。なお、処理対象の走査線の位置に対応する交点情報が交点バッファ51に蓄積されていない場合は、全交点情報を読込済みであると判定される。
ステップS403では、スパン生成部37が、処理対象の走査線の位置に対応する交点情報から、次の交点情報を1つ読み込む。ここで読み込まれる交点情報は、未読込のものうち、交点情報が含むX座標が最も小さいものである。即ち、本実施形態においてスパン生成部37は、X座標の昇順に交点情報を読み込む。ここで読み込まれた交点情報の交点は、処理対象の交点として扱われる。
ステップS404からS406では、1つのスパン情報が生成される。まず、ステップS404では、スパン生成部37が、読み込んだ交点情報が含む向きの情報に基づいて、処理対象の交点の右側が描画対象であるか否かを判定する。ステップS404で処理対象の交点の右側が描画対象であると判定された場合、処理はステップS406へ進む。ステップS404で処理対象の交点の右側が描画対象であると判定されなかった場合、処理はステップS405へ進む。
ステップS405では、スパン生成部37が処理対象の交点の左側のスパンを生成する。ここで生成されるスパンは、始点Xが(最後にステップS405でスパンを生成した交点のX座標+1)、終点Xが(処理対象の交点のX座標−1)、不透明度が1.0であるスパンである。
ステップS406では、スパン生成部37が処理対象の交点のスパン(当該交点の1画素に対応するスパン)を生成する。この処理の詳細は後述する。ステップS406の後、処理はステップS402に戻る。
ステップS407では、スパン生成部37が、全走査線について処理済みか否かを判定する。即ち、処理対象の走査線のY座標が描画領域のY軸方向の大きさに達したか否かを判定する。ステップS407で、全走査線を処理済みであると判定された場合、処理は終了する。ステップS407で、全走査線を処理済みであると判定されなった場合、処理はステップS408へ進む。
ステップS408では、スパン生成部37が、処理対象の走査線の位置を示すY座標に1を加えることで、処理対象の走査線の位置を次の位置へ更新する。その後処理はステップS402へ戻る。
図15は、本実施形態に係る交点のスパン生成の処理の流れを示すフローチャートである。この処理の流れは、図14におけるステップS406の処理の詳細を示すものである。
ステップS501では、スパン生成部37が、処理対象の交点の交点情報が有するカバー値採用情報が不採用値であるか否かを判定する。ステップS501で交点情報が有するカバー値採用情報が不採用値であると判定された場合、処理はステップS502へ進む。ステップS501で交点情報が有するカバー値採用情報が不採用値であると判定されなかった場合、処理はステップS503へ進む。
ステップS502では、スパン生成部37が、処理対象の交点に対して不透明のスパン情報を生成する。ここで生成されるスパン情報は、不透明度が1.0であるスパン情報である。つまり、ステップS502では、処理対象の交点に対して、交点に対するカバー値に関わらず、不透明度が1.0であるスパン情報が生成される。ここで生成されるスパン情報によれば、アンチエイリアシングの処理がされずに描画色で上書きされる画素に関するピクセル情報が、ラスタライザ39において生成されることになる。また、ここで生成されるスパン情報は、1つの画素(交点)に対応するスパンの情報であり、その始点X及び終点Xは、いずれも処理対象の交点のX座標である。
ステップS503では、スパン生成部37が、処理対象の交点に対して不透明度がカバー値のスパン情報を生成する。ここで生成されるスパン情報は、不透明度がカバー値であるスパン情報である。ここで生成されるスパン情報によれば、アンチエイリアシングの処理がされる画素に関するピクセル情報が、ラスタライザ39において生成されることになる。また、ここで生成されるスパン情報は、1つの画素(交点)に対応するスパンの情報であり、その始点X及び終点Xは、いずれも処理対象の交点のX座標である。
以上述べたように、本実施形態によれば、図形の境界線のうち、描画色の混合を制限する範囲の画素(交点)については、画素をベクタ図形が覆う程度に関わらず、不透明のスパンの情報が生成されるため、図形の境界線の描画について、アンチエイリアシングによる滑らかな色の変化を得つつ、所望の描画色が得られるベクタ図形の描画が可能となる。本実施形態によれば、例えば、FSAAのように描画領域全体の解像度を上げて描画し、2次処理としての縮小処理を行うことがないため、FSAA等に比べ、少ない計算資源で効率的に、カラーブリーディングを防止することができる。また、本実施形態によれば、従来の画像処理回路等に対して、比較的小さな変更のみで、カラーブリーディングの対策ができる。また、本実施形態によれば、パイプライン処理を用いた高速な画像処理も可能である。
≪変形例≫
交点生成部34は、更に、図形のパスを構成するエッジのうち、走査線方向と平行なエッジ上に位置する画素に関する交点情報を生成してもよい。ここで生成される交点情報のカバー値採用情報は、制限範囲情報の示す範囲に位置する画素に対して、不採用値が設定されたものである。このようにすることで、走査線方向と平行(水平)なエッジに対しても交点情報が生成され、対応するスパンが生成されるため、水平な線で互いに外接する図形の境界線の描画に対しても、アンチエイリアシングによる滑らかな色の変化を得つつ、効率的に所望の描画色を得ることができる。
また、上述の実施形態の境界線情報分割部22は、描画ソフトウェア21の機能として提供されたが、境界線情報分割部22は、GPU15が備え、本発明は、境界線情報分割部22を備えたGPU15として実施されてもよい。このようにすることで、専用の回路
等による高速な画像処理が可能となる。