本発明は、コンピューターグラフィクスの描画処理を行なう描画装置に関する。
従来のコンピューターグラフィクスの描画処理を行なう描画装置は、一般に、三角形ストリップ(Triangle Strip)、三角形ファン(Triangle Fan)、それらを相互に切り替えられる仕組み(以下、スネーク(Triangle Snake)という)、および三角形メッシュ(Triangle Mesh)などの形式で与えられたグラフィクスデータを描画する際に、そのグラフィックスデータを個別の三角形毎にラスタライズと呼ばれる画素毎の情報に変換する処理を行なっている。
図1は、三角形ストリップのデータ形式を示す図である。
三角形ストリップのデータ形式では、頂点P0、頂点P1、頂点P2、頂点P3、…、頂点PNUM−1、頂点PNUM、および頂点PNUM+1に対して、例えば、頂点P0、頂点P1、および頂点P2の3頂点で三角形T0が構成され、頂点P1、頂点P2、および頂点P3の3頂点で三角形T1が構成され、頂点PN、頂点PN+1、および頂点PN+2の3頂点で三角形TNが構成される。このデータ形式の特徴は、三角形を3つの頂点の情報で表現すると、NUM個の三角形の情報を記述するのに3×NUM個の頂点の情報が必要になるのに対し、三角形ストリップ形式なら(NUM+2)個の頂点の情報だけで済み、データ量を減らせることである。
図2は、三角形ファンのデータ形式を示す図である。
三角形ファンのデータ形式では、頂点P0、頂点P1、頂点P2、頂点P3、…、頂点PNUM−1、頂点PNUM、および頂点PNUM+1に対して、例えば、頂点P0、頂点P1、および頂点P2の3頂点で三角形T0が構成され、頂点P0、頂点P2、および頂点P3の3頂点で三角形T1が構成され、頂点P0、頂点PN+1、および頂点PN+2の3頂点で三角形TNが構成される。このデータ形式も三角形ストリップと同様にデータ量を減らせるのが特徴である。
図3は、スネークのデータ形式を示す図である。
スネークは、三角形ストリップと三角形ファンの相互を途中で自由に切り替えられるデータ形式である。切り替えのポイントを示すために別途情報が必要である。データ量は三角形ストリップや三角形ファンと同様であるが、三角形ストリップや三角形ファンの場合は、三角形の接続状態が一意に決められているため、条件が整わないと連続する三角形をそれほど多くできない。これに対し、本形式では、自由度が有るため、連続する三角形をより多くすることができる可能性が高いという特徴がある。
図4Aおよび図4Bは、三角形メッシュのデータ形式を示す図である。
三角形メッシュでは、三角形を構成する頂点の情報は、頂点データのインデックス/ポインタ501で表現される。この形式のデータは、辺を共有する三角形を示す情報を持たない場合が多いが、必要に応じてその情報を付加して使用される。
コンピューターグラフィクスの描画処理の途中結果や最終結果は通常、外部メモリもしくは内部メモリに配置される。この情報には、画素毎の視点からの距離情報やカラー情報、透明度などが含まれる。ラスタライズ処理された画素毎の情報をメモリ上に配置された中間結果(画素のカラー値や奥行き情報など)に反映する処理を行なう際には、現在の値をメモリから読み込み、処理した結果をメモリに書き戻す処理が必要となる。画素が不透明で、奥行き情報(Z値)を無視する場合で、かつメモリ上に配置された中間結果との混ぜ合わせ処理などが無い場合には、メモリ上に配置された中間結果を読み込まなくても済む場合も有る。その場合は、読み込み処理が無くなって書き込み処理だけになり、時間が半分になるものの、本質的な処理内容は変わらない。以下、中間結果は読み込むものとして説明する。
一般に、1画面の処理結果を得るためには画面のサイズの何倍もの量の画素を処理しなければならず、さらにアニメーション処理の場合などには1秒に数十回も画面を更新することを要求される。そのため、非常に高速に画素のデータを読み込み、書き戻さなければならず、この速度が描画装置の速度を決めてしまうことが多い。
DDR SDRAM(Double Data Rate SDRAM)に代表される最近のメモリは非常に高速にデータを出し入れできるが、最高性能を引き出すためにはある程度まとまったサイズでデータを読み書きしなければならないという制約が有る。処理速度が高速になり、取り扱うデータ量が多くなるにつれ、このサイズがかなり大きくなってきている。このため、描画装置は、1画面中の所望の1画素の情報だけを読み込んだり、書き込んだりすることはできず、システムで決まるサイズ(4画素〜256画素程度)の情報を画素ブロックとしてまとめて読み書きしなければならない。
まとめて読み書きしなければならない画素の領域(画素ブロック)は、何も工夫しなければ縦方向が1画素で横方向に長い領域になる場合がほとんどである。しかし、コンピューターグラフィクスの描画装置は、略正方形の画素ブロックを1度に読み書きするデータ単位としている。正方形とされているのは、三角形の単位でラスタライズ処理が施されて画素毎の処理が行われるからという理由と、平均すれば横長の三角形よりもそうでない三角形が多いという理由とに基づく。つまり、横長の領域よりは正方形に近い領域をまとめて取り扱う方が、三角形の領域外で必要が無いという画素の割合が低くなり、ひいては効率が良くなるからである。このことは一般的に知られている(例えば、特許文献1参照。)。
図5は、画素ブロックの形状が横長である場合を説明するための説明図である。
この図5に示すように、縦1画素×横64画素の領域(画素ブロック)601には、三角形602と重なっている有効な画素は8画素程度しか無い。
つまり、描画装置が画素ブロックの画素データをメモリに書き込んでも、殆ど不用な画素データを書き込んでしまうことになる。
図6は、画素ブロックの形状が正方形である場合を説明するための説明図である。
この図6に示すように、縦8画素×横8画素の領域(画素ブロック)701には、図5に示す三角形602と同じ三角形702と重なっている有効な画素は38画素もある。このように、正方形の画素ブロックの方が横長の画素ブロックに比べて明らかに有効な画素が多くなる。
上記特許文献1では、画素単位の情報に関してではなく、三角形に貼られるテクスチャデータに関する発明が開示されているが、8×8画素のブロック単位でデータが配置されている。これも同様の理由に基づく。
特表2001−507836号公報
しかしながら、上記特許文献1の描画装置では、メモリバスのバンド幅を無駄に使用してしまうという問題がある。その結果、広いバンド幅が必要となり、バンド幅が狭い場合には、描画処理に不具合が発生してしまう。
即ち、画素ブロックの形状を略正方形にしても、三角形の辺の近くでは一部のデータしか不用なのにその情報もまとめて取り扱うため、読み書きするデータ量が増大し、有効に使用可能なメモリバスバンド幅を低下させている。言い換えれば、一定時間内に読み書きできるデータの総量はメモリバスバンド幅で決まってしまうが、その中で無駄な画素のデータを一緒に読み込んだり書き込んだりしてしまうことで、総量のうち有効なデータ量を減らしていることになる。
図7は、不用なデータを説明するための説明図である。
例えば、三角形710が描画されるときには、三角形710の辺の一部を含む画素ブロックBkの全ての画素データがメモリに書き込まれる。しかし、その画素ブロックBkは、三角形710に含まれない領域Bkaの画素データと、三角形710に含まれる領域Bkbの画素データとを有する。したがって、画素ブロックBkのうち領域Bkbの画素データだけが必要であるにも関わらず、不用な領域Bkaの画素データまでメモリに書き込んでしまう。
図8は、三角形ストリップの場合においてメモリに不用なデータが書き込まれる様子を説明するための説明図である。
描画装置は、三角形T0,T1,T2,T3を順に描画しようとする場合、まず、三角形T0に含まれる画素を有する画素ブロックの画素データをメモリに書き込む。そして、次に、描画装置は、三角形T1に含まれる画素を有する画素ブロックの画素データをメモリに書き込む。
この場合、三角形T0と三角形T1の共有する辺を含む領域811では、各画素ブロックは、三角形T0の書き込み時と、三角形T1の書き込み時との2回もメモリに書き込まれることとなる。
例えば、領域811の画素ブロックBk1は、三角形T0に含まれる領域Bk1aの画素データと、三角形T1に含まれる領域Bk1bの画素データとを有する。したがって、三角形T0の書き込み時には、不用な領域Bk1bを含む画素ブロックBk1の全ての画素データがメモリに書き込まれ、三角形T1の書き込み時にも、不用な領域Bk1aを含む画素ブロックBk1の全ての画素データがメモリに書き込まれる。
このように、描画装置は、三角形T0,T1,T2,T3を順に描画しようとする場合、領域811,812,813に含まれる各画素ブロックを、無駄なデータがその画素ブロックに含まれている状態で、2度もメモリに書き込んでいる。
また、描画装置だけがメモリを独占的に使用している場合よりも、他の装置にもそのメモリが使用される場合、例えば描画装置がシステムLSI(Large Scale Integration)の中にひとつのユニットとして入っている場合はより深刻である。このような場合は、特定のユニット(装置)がメモリバスを占有して他のユニットの動作を阻害することがないように、量的な規制などが行われることが多い。よって、場合によっては少し時間をかけてもメモリアクセス量を減らす努力をしたほうが、より多くの有効なデータにアクセスでき、描画装置の性能を向上することが可能になる場合が多い。
そこで、無駄なメモリアクセスを減らすために、まとめて処理する画素データのキャッシュシステムを構築することが想定される。三角形ストリップや三角形ファンはもちろん、三角形メッシュのような汎用性のあるデータ形式でも、近くに有る三角形が続けて描画される場合が多く、局所性が有るため、一般的なキャッシュシステムを構成すれば効率をかなり改善できる。
しかしながら、上記特許文献1の描画装置にキャッシュシステムを構築しても、キャッシュのサイズをかなり大きくしないと効果が少なく、さらに回路構成が複雑になるため、キャッシュ回路を実装するのにかなりの開発工数が必要である。キャッシュのサイズを大きくすれば回路規模が大きくなり、開発工数の問題と両方で、これを組み込んだLSIや装置の価格を引き上げてしまうという課題を有する。
そこで、本発明は、かかる問題に鑑みてなされたものであって、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができる描画装置を提供することを目的とする。
上記目的を達成するために、本発明に係る描画装置は、描画データをラスタライズ処理して描画する描画装置であって、前記描画データからラスタライズ処理の対象となる第1の三角形領域を特定する三角形特定手段と、前記第1の三角形領域に含まれる画素を有する画素ブロックを特定するブロック特定手段と、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域と連接する第2の三角形領域の画素が含まれるか否かを判別する判別手段と、前記判別手段で含まれると判別されたときには、前記第2の三角形領域の画素を含む画素ブロックをラスタライズ処理して画素データを生成するラスタライズ手段と、前記ラスタライズ手段で生成された画素ブロックの画素データをメモリに書き込む書き込み手段と、前記メモリに書き込まれた画素データに応じた画像を表示させる表示制御手段とを備えることを特徴とする。
これにより、第1及び第2の三角形領域の画素を含む画素ブロックが検出されて、それらの画素を含んだ状態でその画素ブロックがラスタライズ処理されてメモリに書き込まれるため、従来例のように、第1の三角形領域の画素以外の不用なデータをメモリに書き込むことを避けることができる。その結果、大きいサイズのキャッシュメモリや多大な開発工数が必要な複雑な回路の開発および実装を行なうこと無く、画素データの書き込みの際の無駄を排除することにより、メモリバスバンド幅を有効に利用することができる。つまり、高価で複雑な回路構成を有することなく、メモリバスバンド幅を有効に利用することができる。そもそもメモリアクセス時に無駄が生じるのは三角形の辺の部分であるが、本発明では、この無駄を削減することができる。
例えば、三角形ストリップ形式のデータの三角形の数が充分多い場合は、個別の三角形について見ると、3個の辺のうち、2個の辺で問題が改善されるため、全体としてかなりメモリバスバンド幅を低減することができる。図8に示すように、三角形T1や三角形T3では3つの辺のうち2つの辺が共有される辺になっており、残り1辺だけについてのみ無駄が解消されないこととなる。
また、前記判別手段は、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域の後に描画すべき前記第2の三角形領域の画素が含まれるか否かを判別することを特徴としてもよい。
これにより、第1の三角形領域をラスタライズ処理の対象、つまり描画対象とするときには、第2の三角形領域が次に描画対象となる第1処理予定の三角形として扱われ、第1の三角形領域を描画対象とするときに、第1処理予定の三角形の画素も含めて画素ブロックがラスタライズ処理される。したがって、不用なデータの代わりに、第1処理予定の三角形の画素データをメモリに書き込むことができ、メモリバスバンド幅を有効に利用することができる。
また、前記判別手段は、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域の前に描画対象とされた前記第2の三角形領域の画素が含まれるか否かを判別することを特徴としてもよい。
これにより、第1の三角形領域をラスタライズ処理の対象、つまり描画対象とするときには、第2の三角形領域が直前に描画された処理済の三角形として扱われ、第1の三角形領域を描画対象とするときに、処理済の三角形の画素も含めて画素ブロックがラスタライズ処理される。したがって、不用なデータの代わりに、処理済の三角形の画素データをメモリに書き込むことができ、メモリバスバンド幅を有効に利用することができる。
ここで、前記三角形特定手段は、さらに、前記描画データからラスタライズ処理の対象となる前記第2の三角形領域を特定し、ブロック特定手段は、さらに、前記三角形特定手段が前記第2の三角形領域を特定したときには、前記第2の三角形領域に含まれる画素を有する画素ブロックを特定し、前記ラスタライズ手段は、さらに、前記三角形特定手段が前記第2の三角形領域を特定したときには、前記ブロック特定手段で特定された画素ブロックのうち、前記判別手段で判別された前記第1及び第2の三角形領域の画素を有する画素ブロックを、ラスタライズ処理の対象から除くことを特徴としてもよい。
これにより、第2の三角形領域がラスタライズ処理の対象、つまり描画対象になるときには、例えば、ブロック特定手段によって第2の三角形領域に含まれる画素を有する複数の画素ブロックが特定されると、その複数の画素ブロックのうち第1の三角形領域の画素を含む画素ブロックはラスタライズ処理の対象から除かれる。したがって、第1の三角形領域が描画対象のときに描画される画素ブロックを、第2の三角形領域が描画対象となるときにもラスタライズ処理してメモリに書き込むことを防いで、メモリバスバンド幅をさらに有効に利用することができる。
なお、本発明は、このような描画装置として実現することができるだけでなく、その方法やプログラム、そのプログラムを格納する記憶媒体、集積回路としても実現することができる。
本発明の描画装置は、無駄なメモリアクセスを減らすことができるため、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができる。
図1は、三角形ストリップのデータ形式を視覚的に示す図である。
図2は、三角形ファンのデータ形式を視覚的に示す図である。
図3は、スネークのデータ形式を視覚的に示す図である。
図4Aは、三角形メッシュのデータ形式を視覚的に示す図である。
図4Bは、三角形メッシュのデータ形式を示す図である。
図5は、画素ブロックの形状が横長である場合を説明するための説明図である。
図6は、画素ブロックの形状が正方形である場合を説明するための説明図である。
図7は、不用なデータを説明するための説明図である。
図8は、三角形ストリップの場合においてメモリに不用なデータが書き込まれる様子を説明するための説明図である。
図9は、本発明の実施の形態における描画装置の構成を示すブロック図である。
図10は、本発明の実施の形態における描画装置のアルゴリズムを示す概念図である。
図11は、本発明の実施の形態における描画装置の動作を示すフローチャートである。
図12は、本発明の実施の形態における第6の変形例に係る描画装置の処理を説明するための説明図である。
図13は、本発明の実施の形態における第6の変形例に係るダミー頂点を説明するための説明図である。
符号の説明
100 描画装置
111 制御部
112 トライアングル検出部
113 Aエッジ検出部
114 Bエッジ検出部
115 Cエッジ検出部
116 ラスタライズ部
117 メモリR/W部
120 メモリ
130 描画エンジン
200 表示部
以下本発明の実施の形態について、図面を参照しながら説明する。
図9は、本発明の実施の形態における描画装置の構成を示すブロック図である。
本実施の形態における描画装置100は、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができるものであって、制御部111と、トライアングル検出部112と、Aエッジ検出部113と、Bエッジ検出部114と、Cエッジ検出部115と、ラスタライズ部116と、メモリR/W部117と、画素記録モジュールたるメモリ120と、描画エンジン130とを備える。
このような描画装置100は、ラスタライズ部116でラスタライズ処理する際に3頂点ではなく、4頂点分の情報を用い、トライアングル検出部112と各エッジ検出部113,114,115の組み合わせでブロック毎に処理内容を決定し、処理を行なう。これによって、メモリR/W部117とメモリ120との間のデータの読み書きの量を減らすことができる。
制御部111は、三次元で表現された描画リストを取得して、その描画リストを二次元描画データに変換する。描画リストには、三次元上における各座標や、その座標における色、法線(nomal)などが含まれている。制御部111は、このような描画リストを、二次元上における座標と、その座標における色などとを示す二次元描画データに変換する。
さらに、制御部111は、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115に対して、二次元描画データを送信して、上記各部によって検出された描画対象の三角形および画素ブロックと、二次元描画データとをラスタライズ部116に出力する。
トライアングル検出部112は、二次元描画データから描画対象の三角形を検出するとともに、その描画対象の三角形に含まれる画素を有する画素ブロック(三角形画素ブロック)を検出する。つまり、描画対象の三角形に全て含まれる画素ブロックと、その三角形の辺の一部を含む画素ブロックとが三角形画素ブロックとして検出される。三角形の辺の一部を含む画素ブロックには、描画対象の三角形の画素が含まれると共に、その描画対象の三角形には不用な画素も含まれている。
Aエッジ検出部113は、三角形画素ブロックのうち、描画対象の三角形に連接して直前に描画処理の対象とされた三角形(処理済の三角形)の辺上にある画素ブロックを検出する。
つまり、Aエッジ検出部113は、三角形画素ブロックの何れかに、処理済の三角形の画素が含まれるか否かを判別し、含まれると判別された画素ブロックを検出する。ここで、Aエッジ検出部113は、上述の処理済の三角形の画素を含む画素ブロックを検出するときには、描画対象の三角形の3つの頂点と、処理済の三角形の1つの頂点とを用いて検出する。処理済の三角形の1つ頂点とは、描画対象の三角形と処理済の三角形とで共有される辺上にない頂点である。以下、このように検出された画素ブロックをA画素ブロックという。
Bエッジ検出部114は、三角形画素ブロックのうち、描画対象の三角形に連接して次に描画処理される予定の三角形(第1処理予定の三角形)の辺上にある画素ブロックを検出する。
つまり、Bエッジ検出部114は、三角形画素ブロックの何れかに、第1処理予定の三角形の画素が含まれるか否かを判別し、含まれると判別された画素ブロックを検出する。ここで、Bエッジ検出部114は、上述の第1処理予定の三角形の画素を含む画素ブロックを検出するときには、描画対象の三角形の3つの頂点と、第1処理予定の三角形の1つの頂点とを用いて検出する。第1処理予定の三角形の1つ頂点とは、描画対象の三角形と第1処理予定の三角形とで共有される辺上にない頂点である。以下、このように検出された画素ブロックをB画素ブロックという。
Cエッジ検出部115は、第1処理予定の三角形の画素を有する画素ブロックのうち、第1処理予定の三角形に連接してその次に描画処理される予定の三角形(第2処理予定の三角形)の辺上にある画素ブロックを検出する。つまり、Cエッジ検出部115は、第1処理予定の三角形の画素を有する画素ブロックのうち、第2処理予定の三角形の画素を含む画素ブロックを検出する。以下、このように検出された画素ブロックをC画素ブロックという。
ラスタライズ部116は、二次元描画データと、描画対象の三角形と、その三角形画素ブロックと、A画素ブロックと、B画素ブロックと、C画素ブロックとに基づいて、三角形画素ブロックのうち有効な部分に対してラスタライズ処理を行って画素データを生成する。
即ち、ラスタライズ部116は、三角形画素ブロックのうち、A画素ブロックを処理対象から省く。そして、ラスタライズ部116は、A画素ブロックが省かれた三角形画素ブロックの範囲で、描画対象の三角形と第1処理予定の三角形のそれぞれの少なくとも一部をラスタライズ処理して画素データを生成する。このとき、その三角形画素ブロックに含まれるB画素ブロックは、描画対象の三角形の画素と、第1処理予定の三角形の画素とが含まれた状態でラスタライズ処理される。
メモリR/W部117は、ラスタライズ部117によるラスタライズ処理によって生成された画素データを、A画素ブロックを除く三角形画素ブロックの単位でメモリ120に書き込む。
描画エンジン130は、表示制御手段として構成されており、メモリ120に書き込まれた画素データに応じた画像(描画対象三角形)を表示部200に表示させる。
このように本実施の形態では、描画対象の三角形の描画処理時に、第1処理予定の三角形の画素もB画素ブロックに含めてラスタライズ処理を行い、そのB画素ブロックの画素データをメモリ120に書き込む。一方、従来では、描画対象の三角形の描画処理時には、第1処理予定の三角形の画素がB画素ブロックに含められず、その代わりに不用なデータがB画素ブロックに含められ、そのB画素ブロックがメモリ120に書き込まれる。(なお、不用なデータの部分にはマスクがかけられ、その不用なデータが実際にメモリに書き込まれるわけではないが、そのデータ量に相当する分だけの帯域がメモリバスで使用される)。したがって、本実施の形態では、不用なデータのメモリ120への書き込みを防いでメモリバスバンド幅を有効に利用することができる。
また、第1処理予定の三角形の描画処理時には、この第1処理予定の三角形が描画対象の三角形となるため、上述のB画素ブロックは、この第1処理予定の三角形に対するA画素ブロックとなる。したがって、本実施の形態では、第1処理予定の三角形の描画処理時には、上述のB画素ブロックは処理対象から省かれる。一方、従来では、第1処理予定の三角形の描画処理時には、上述と同様に不用なデータを含むB画素ブロックがメモリ120に書き込まれる。したがって、本実施の形態では、さらにメモリバスバンド幅を有効に利用することができる。
図10は、本発明の実施の形態における描画装置100のアルゴリズムを示す概念図である。
図10において、各三角形は、三角形TN−1、三角形TN、三角形TN+1、三角形TN+2の順に描画される。本実施の形態の描画装置100は、三角形TNを描画する際に、N番目の頂点PN、(N+1)番目の頂点PN+1、および(N+2)番目の頂点PN+2の、3つの頂点の情報に対して、さらに、次に描画する三角形TN+1の頂点である(N+3)番目の頂点PN+3の情報も加え、4頂点分の情報からラスタライズ処理を行なう。三角形ストリップ(Triangle Strip)形式の特徴から、1頂点分の情報を加えるだけで2つの連続(連接)した三角形の情報が得られることになる。
図10に示す三角形TNを描画対象の三角形とする場合、上述の処理済の三角形は三角形TN−1に相当し、第1処理予定の三角形は三角形TN+1に相当し、第2処理予定の三角形は三角形TN+2に相当する。また、この場合、トライアングル検出部112は、描画対象の三角形TNを検出すると共に、ブロック群GBに含まれる各画素ブロックを上述の三角形画素ブロックとして検出する。Aエッジ検出部113は、画素ブロックBAを上述のA画素ブロックとして検出し、Bエッジ検出部114は、画素ブロックBBを上述のB画素ブロックとして検出する。なお、このような画素ブロックは、例えば64個の画素の集まりによって構成される。したがって、本実施の形態では、描画対象の三角形TNを描画するときには、描画対象の三角形TNの画素と第1処理予定の三角形TN+1の画素とを画素ブロックBBに含めて処理を行う。即ち、描画装置100は、ブロック群GBのうち画素ブロックBAを除く範囲で、描画対象の三角形TNと第1処理予定の三角形TN+1のそれぞれの一部をラスタライズ処理する。
三角形をラスタライズ処理する場合、三角形の範囲に入る画素がどれかを選択し、その画素毎のパラメータを計算することになる。伝統的な方法ではスクリーン上部からスクリーン下部に向かって、横一列に、左端から右端に向かって画素を選択し、それぞれの画素毎のパラメータを計算する。このようにすれば1画素変化した時の各パラメータの変化量を最初に計算しておけば、後はそれを加算していくだけで各パラメータの値を計算できるからである。グラフィクスシステムが開発された初期の頃は、画面全体の情報を記録しておくだけの記憶素子を準備できなかったので、画面の走査線の方向に合わせた描画も意味を持っていたが、今日では処理の方向は意味を持たなくなっている。スクリーン下部から上部に向かって処理しても良いし、右端から左端に向かって処理しても、ランダムに処理しても差し支えない。
メモリ120には、グラフィクス・システムを高速にするために、できるだけ高速に大量の情報を読み書きできることが要求される。DDR SDRAMに代表されるような最近の高速大容量メモリ素子は、連続するアドレス空間のデータを連続して読み書きした場合に、より高速に動作するようになっているため、最高性能を目指す場合はこの特徴を利用することになる。
たとえば1画素の情報を4バイトで管理しているグラフィクスシステムで、256バイト単位で読み書きした場合に性能が出せるメモリを使う場合、64画素分の情報をまとめて読み書きすることになる。
背景技術でも説明したように、図5のように縦1画素×横64画素の領域(画素ブロック)601と三角形602とでは、有効な画素(三角形602と重なっている画素)が8画素程度しか無い。しかし、図6のように縦8画素×横8画素の領域(画素ブロック)701にした場合は、図5の三角形602と同じ三角形702において有効な画素は38画素となり、明らかに有効な画素が多くなる。
よって、メモリ120上の画素配置は縦8画素×横8画素の領域(画素ブロック)状に配置するのが良い。
そのため、本実施の形態では、ラスタライズ処理は単純にスクリーン上部から下部、左端から右端に向かって処理するのではなく、この縦8画素×横8画素の領域(画素ブロック)単位で処理を行なう。このようにすると効率が良いからである。なお、ブロック内の処理順は任意である。
三角形の内部で、領域(画素ブロック)内に三角形の辺がかかっていないものについては、画素ブロック内の画素全てが処理対象になるので特に問題は起らない。256バイト単位で読み込んだ画素データは全て有効に用いられ、結果として書き出される256バイトのデータも全て意味の有るデータである。
だが、三角形の周辺部で、領域(画素ブロック)内に三角形の辺がかかっているもの、つまり領域の一部が三角形の内部で描画対象となり、それ以外の部分が三角形の外部で従来手法では描画対象外となるようなブロックに関しては、256バイト単位で読み込んだデータのうち、三角形の外部の画素に関しては必要の無いデータである。書き戻す際にもこのデータは本来不用であり、有効なデータの割合が小さくなる。
描画装置100がシステムLSIの中にユニットとして組み込まれ、他のコアと協調動作しているような場合は、特定のユニットがメモリバスを占有して他のユニットの動作を阻害することがないように、メモリアクセスに対して量的な規制などが行われていることが多い。例えば、無駄なアクセスも全てアクセス量として積算され、限度を超えると一定時間アクセスができなくなるなどのペナルティが課せられる場合がある。そのため、上述の有効データの割合が少なくなるという問題は深刻である。
この問題を解決するため、本発明の描画装置100では4頂点(頂点PN、頂点PN+1、頂点PN+2、頂点PN+3)の情報を利用して、領域(画素ブロック)内にある描画対象の三角形(三角形TN)の画素に加えて、その画素ブロック内にある、第1処理予定の三角形(三角形TN+1)の画素の処理も同時あるいは連続して行なう。なお、このような画素ブロックは、上述のB画素ブロックBBである。そのB画素ブロックBBを処理するタイミングは、第1処理予定の三角形TN+1の処理時でも良い。この場合には、描画対象の三角形TNの処理時に、上述のB画素ブロックBBの画素処理を行なわない。以下では前者、つまり第1処理予定の三角形TN+1の画素が、描画対象の三角形TNの画素を有する画素ブロック内に含まれていたら、描画対象の三角形TNの処理時に、その画素ブロック内における第1処理予定の三角形TN+1の画素も同時あるいは連続して処理するものとして説明する。
描画対象の三角形の3頂点および次に描画する予定の三角形(第1処理予定の三角形)の1頂点の4頂点の情報から、この2つの三角形のパラメータを計算することが可能である。即ち、上述のように、トライアングル検出部112は、画素ブロックの全部または一部が描画対象の三角形の内部であるものを上述の三角形画素ブロックとして検出する。また、Aエッジ検出部113は、描画対象の三角形(三角形TN)と一つ前に描画した処理済の三角形(三角形TN−1)との間で共有される辺(頂点PNと頂点PN+1とを結ぶ辺)の少なくとも一部が三角形画素ブロック内に入っているかどうかを検出する。Bエッジ検出部114は、描画対象の三角形(三角形TN)と次に描画する予定の三角形(第1処理予定の三角形TN+1)との間で共有される辺(頂点PN+1と頂点PN+2とを結ぶ辺)の少なくとも一部が三角形画素ブロック内に入っているかどうかを検出する。そして、Cエッジ検出部115は、次に描画する予定の三角形(第1処理予定の三角形TN+1)とさらにその次に描画する予定の三角形(第2処理予定の三角形TN+2)との間で共有される辺(頂点PN+2と頂点PN+3とを結ぶ辺)の少なくとも一部が、第1処理予定の三角形TN+1の画素を有する画素ブロック内に入っているかどうかを検出する。
したがって、トライアングル検出部112で検出された三角形画素ブロックのうち、Aエッジ検出部113で検出された画素ブロック(上述のA画素ブロックBA)を除いたものを描画処理対象にする。これは、一つ前に描画した処理済の三角形(三角形TN−1)の処理時点で既にこのA画素ブロックBAは描画済みであって、2度描画するのを避けるためである。
上述の描画処理対象の画素ブロックのうち、Bエッジ検出部114で検出された画素ブロック(上述のB画素ブロックBB)は、描画対象の三角形(三角形TN)と次に描画する三角形(第1処理予定の三角形TN+1)とで共有される辺上にある。このため、描画対象の三角形(三角形TN)に加えて次に描画する予定の三角形(第1処理予定の三角形TN+1)も、このB画素ブロックBB内だけは先行して描画しておく。多くの場合、B画素ブロックBB内にはこの2つの三角形しか存在せず、2つの三角形だけを描画するだけでB画素ブロックBB全体の処理を終えることができる。そのため、無駄なメモリアクセスを減らすことができる。
描画処理対象の画素ブロックのうち、3つのエッジ検出部に検出されないものは、描画対象の三角形内部に含まれる画素ブロックであり、これらの画素ブロックは、従来通り描画される。
図11は、本実施の形態における描画装置100の動作を示すフローチャートである。
描画装置100の制御部111は、まず、描画リストを取得して(ステップS100)、その描画リストを二次元描画データに変換する(ステップS102)。そして、トライアングル検出部112は、二次元描画データから描画対象の三角形、例えば、図10中の三角形TNを検出する(ステップS104)。
さらに、トライアングル検出部112は、その描画対象の三角形TNに含まれる画素を有する画素ブロックを、図10のブロック群GB内にある上述の三角形画素ブロックとして検出する(ステップS106)。
Aエッジ検出部113は、三角形画素ブロックのうち、描画対象の三角形TNに連接する処理済の三角形TN−1の画素を含む画素ブロックを、A画素ブロックBAとして検出する(ステップS108)。
その結果、ラスタライズ部116は、描画対象の三角形TNに属する三角形画素ブロックのうち、A画素ブロックBAを処理対象から省き、その残りの画素ブロックを描画処理対象に設定する(ステップS110)。
Bエッジ検出部114は、描画対象の三角形TNに連接する第1処理予定の三角形TN+1があるか否か、つまり、三角形画素ブロックの何れかに、第1処理予定の三角形TN+1の画素が含まれているか否かを判別する(ステップS112)。
ここで、第1処理予定の三角形TN+1があると判別したときには(ステップS112のY)、ラスタライズ部116は、ステップS110で設定した描画処理対象の画素ブロックの範囲で、描画対象の三角形TNと第1処理予定の三角形TN+1のそれぞれの少なくとも一部に対してラスタライズ処理を行なう(ステップS114)。つまり、ラスタライズ部116は、従来例と異なり、描画対象の三角形TNと第1処理予定の三角形TN+1の画素がB画素ブロックBBに含まれる形で、そのB画素ブロックBBに対してラスタライズ処理を行なう。
一方、第1処理予定の三角形TN+1がないと判別したときには(ステップS112のN)、ラスタライズ部116は、ステップS110で設定した描画処理対象の画素ブロックの範囲で、描画対象の三角形TNの少なくとも一部に対してラスタライズ処理を行なう(ステップS116)。
そして、メモリR/W部117は、ステップS114またはステップS116によるラスタライズ処理により生成された画素データを、画素ブロック単位でメモリ120に書き込む(ステップS118)。描画エンジン130は、メモリ120に書き込まれた画素データに応じた画像を表示部200に表示させる(ステップS120)。
なお、ここまでの説明では簡単のために例外的な処理を省略したが、実際に描画装置を実装するためにはそれらも考慮しなければならない。例えば、描画対象となる最初の三角形(N=0)には一つ前の三角形は存在しないため、最初の三角形と直前の三角形とで共有される辺は存在しない。また、最後の三角形(N=NUM−1)の場合には次の三角形は存在しないため、最後の三角形と直後の三角形とで共有される辺は存在しない。
また、頂点の画素ブロック(図10に示す画素ブロックBXや画素ブロックBY)には通常3個以上の三角形の画素が入るため、2個の三角形だけを用いてもその画素ブロックの全ての領域を塗り潰せない場合が多い。そこで、次に説明する処理を行なえばよい。ただし、頂点の画素ブロックは比較的簡単に検出できるため、逐次的に描画処理していく場合に2画素ブロック程度を保持してキャッシュ的にその2画素ブロックを扱った方が実装が簡単になり、性能が少し向上する可能性が有る。
三角形が小さい場合や、その角度が鋭い鋭角の場合は、1個の画素ブロックに3個以上の三角形の画素が入る場合がある。これは、Aエッジ検出部113とBエッジ検出部114、あるいはBエッジ検出部114とCエッジ検出部115によって同時に検出されるような領域(画素ブロック)が、上述のような3個以上の三角形の画素を含む画素ブロックに相当する。頂点が入っている画素ブロック以外でも頻度は少ないが有り得るので注意が必要である。
このような場合は、その画素ブロック内に関しては描画対象の三角形TNや、それ以前に描画した三角形TN−1については既に描画済みである。一方、次に描画する三角形TN+1の部分は、次に三角形TN+2を描画する際には既に描画が終わっているものとして取り扱われるため、今回描画しておかないといけない。例えば、図1に示す画素ブロックBYを、描画対象の三角形TNの描画時に、三角形N+2の一部を含めて描画しておく。このような場合には、描画装置100は、画素ブロックBY全体の処理が終わっていない中途半端な状態で、その画素ブロックBYを一度メモリ120に書き込み、またそれを読み出して続きを行なう。つまり、三角形TNや三角形TN+1のそれぞれの一部を含む画素ブロックBYをメモリ120に書き込み、またそれを読み出して三角形TN+2の一部をその画素ブロックBYに含める。このため、従来の手法と効率は変わらないことになる。このような場合専用にキャッシュシステムを導入すれば状況は改善されるが、頻度が少ない場合は改善効果があまり見込めないうえに、開発工数も大きくなるので状況に応じた総合的な判断が必要である。
なお、本実施の形態では、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115を、ラスタライズ部116の外部に設けたが、内部に実装してもよい。また、本実施の形態では、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115をそれぞれ分離させたが、分離させずに1つのモジュールに時分割で各画素ブロックを検出させてもよい。
(変形例1)
上記実施の形態では、描画対象の三角形TNと、次に描画予定の三角形TN+1とで共有される辺の一部が入っている領域(B画素ブロックBB)の描画処理を、描画対象の三角形TNを描画している際に同時に行なった。
本変形例1に係る描画装置は、描画対象の三角形TNを描画する際には、そのB画素ブロックBBの描画処理をせずに、次に描画予定の三角形TN+1を描画する際に、そのB画素ブロックBBの描画処理を行なう。即ち、そのB画素ブロックBBの範囲において、両三角形の画素を同時あるいは連続して描画する。
また、この場合には、本変形例1に係る描画装置は、描画対象の三角形TNを描画する際には、トライアングル検出部112で検出された三角形画素ブロックの何れかに、その三角形TNの前に描画対象とされた三角形TN−1の画素が含まれているか否かを判別する。つまり、描画装置は、描画対象の三角形TNを描画する際に、三角形TN−1の画素が含まれているA画素ブロックBAを検出して、その三角形TNの画素と三角形TN−1の画素とを含むA画素ブロックBAをラスタライズ処理して描画する。
(変形例2)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形ファンのデータ形式の描画データをラスタライズ処理して描画する。このようなデータ形式であっても、上記実施の形態と同様の効果を得ることができる。
(変形例3)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形ストリップと三角形ファンとを途中で変更できる形式(所謂Triangle Snake)の描画データをラスタライズ処理して描画する。このようなデータ形式であっても、上記実施の形態と同様の効果を得ることができる。
(変形例4)
上記実施の形態および変形例1では、2つの三角形に共有される辺の一部が入っている領域(画素ブロック)を、2つの三角形のうち描画順が早い方を描画している時に同時に描画したり、2つの三角形のうち描画順が遅い方を描画している時に同時に描画したりした。即ち、上記実施の形態および変形例1では、上記画素ブロックを描画するタイミングを、三角形の描画順に基づいて一意に決めた。
本変形例に係る描画装置は、別途与えられた情報や乱数などに従って、上記画素ブロックを描画するタイミングを個別に決定する。
なお、どちらの三角形を描画する際にも上記画素ブロックを同時には描画せず、別途、辺の一部が入っている画素ブロックだけを描画するような構成も考えられるのは言うまでもない。
(変形例5)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形メッシュのデータ形式の描画データをラスタライズ処理して描画する。三角形メッシュの場合は、ある三角形と辺を共有する三角形は最大三個有り、必ずしもそれらを連続して描画していくわけではないので、上記実施の形態や変形例1のように描画順だけで、上記辺上にある画素ブロックを何れの三角形の描画時に描画するかを決めるわけにはいかない。
そこで、本変形例に係る描画装置は、それぞれの辺について、その辺を共有する2つの三角形のうち何れの三角形を描画する際に、その辺上にある画素ブロックを一緒に描画すべきかを示す情報を取得する。そして、描画装置は、その取得した情報に基づいて、上記辺上にある画素ブロックを何れの三角形の描画時に描画するのかを決定する。もちろん、三角形の番号などから計算で自動的に決めてもよい。
(変形例6)
上記実施の形態およびその変形例1〜5では4個の頂点を扱うだけなので、同時に処理できる辺は1個だけである。大雑把に言えば、3つの辺のうち2個は共有させて処理できるが、残り1個はそのような処理ができない。
この問題を解決するために、本変形例に係る描画装置は、最大で6個の頂点の情報を利用し、共有する3つの辺全てを処理する。即ち、描画装置は、上記実施の形態およびその変形例1〜5で行なってきたような処理を3つの辺でそれぞれ行なう。
図12は、本変形例に係る描画装置の処理を説明するための説明図である。
この図12に示すような三角形ストリップ(頂点P0、頂点P1、頂点P2、頂点P3、頂点P4、頂点P5、および頂点P6)を考えた時、三角形ストリップを構成する三角形(三角形T0、三角形T1、三角形T2、三角形T3、および三角形T4)の間で共有される辺ではバス帯域を無駄にする問題が回避されるが、そのままではそれ以外の辺では従来通りである。
そこで本変形例に係る描画装置は、例えば頂点P0と頂点P1を結ぶ辺などの残された辺も処理するために、それらの辺を共有する三角形の頂点(頂点PA、頂点PB、頂点PC、頂点PD、頂点PE、頂点PF、および頂点PG)の情報を利用し、変形例5のように処理する。
三角形ストリップ形式の場合、その三角形ストリップ形式のグラフィックスデータにおいて、三角形ストリップを構成する特定の三角形の頂点に対して、その三角形と共有する辺を有する他の三角形の頂点を入れておけばよい。例えば、三角形T0の頂点P0、頂点P1、および頂点P2に対して、頂点PAを入れておく。これにより、描画装置は頂点PAを指定することができるとともに、データ形式を簡単にすることができる。
ここで、各三角形で共有される辺上にある画素ブロックを、どちら側の三角形を描画する際に描画するのかを示す描画情報を別途与えても良い。また、描画対象の三角形以外の他の三角形を描画しない場合は、描画対象の三角形と共有される辺を有する他の三角形の頂点の情報は不用になることを利用してもよい。即ち、描画対象の三角形の処理時に、他の三角形と共有される辺上にある画素ブロックを描画するものだけ、グラフィックスデータに他の三角形の頂点を入れておき、そうでない場合は、グラフィックスデータにダミーの頂点を入れておく。これにより、描画装置は、他の三角形の頂点やダミーの頂点を指定することができ、データ形式を簡単にすることができる。
なお、ダミーの頂点に2種類を設け、「描画対象の三角形と他の三角形とで共有される辺上の画素ブロックは他の三角形を描く時に処理することを示す頂点(OTHER)」と、「この辺は共有されていないことを示す頂点(NONE)」とを区別しておくべきである。つまり、頂点(NONE)は、描画対象の三角形の一辺を共有する他の三角形がないことを示す非共有情報であり、頂点(OTHER)は、他の三角形の画素を含むと判別された画素ブロックをラスタライズ処理の対象から除き、その画素ブロックのラスタライズ処理を他の三角形の処理時に行なうべきことを示す除外情報である。したがって、描画装置は、ダミーの頂点が頂点(OTHER)を示す場合には、他の三角形の画素を含む画素ブロック、つまり共有される辺が入っている画素ブロックに対するラスタライズ処理を禁止し、その領域(画素ブロック)を描画しない。そして、描画装置は、ダミーの頂点が頂点(NONE)を示す場合には、その頂点(NONE)に対応する描画対象の三角形の一辺上にある画素ブロックには、他の三角形領域の画素は含まれないと判別し、描画対象の三角形の画素のみを含む画素ブロックを描画する。
図13は、ダミーの頂点を説明するための説明図である。
描画対象の三角形T0に対してOTHER頂点PO1がある場合、描画装置は、描画対象の三角形T0を描画するときに、頂点P0と頂点P2を結ぶ辺上にある画素ブロックを描画処理せず、OTHER頂点PO1を有する三角形を描画するときに、先に描画対象であった三角形T0の一部をその画素ブロックに含めて、その画素ブロックを描画処理する。
また、描画対象の三角形T3に対してNONE頂点がある場合、描画装置は、描画対象の三角形T3を描画するときに、頂点P3と頂点P5を結ぶ辺上にある画素ブロックを描画処理する。
頂点P0、頂点PA、頂点P1、OTHER頂点PO1、頂点P2、頂点PC、頂点P3、OTHER頂点PO2、頂点P4、NONE頂点、頂点P5、頂点PF、頂点P6、および頂点PGを含む頂点データを可変長データとする。そして、通常の頂点(頂点P0、頂点P1、頂点P2、頂点P3、頂点P4、頂点P5、および頂点P6)、および共有する三角形の頂点(頂点PA、頂点PC、頂点PF、および頂点PG)のデータの長さと、ダミー頂点(OTHER頂点PO1、OTHER頂点PO2、およびNONE頂点)のデータの長さとを異なるようにすればダミー頂点のサイズを最小にすることができる。必ずしもダミー頂点が通常の頂点と同じデータサイズを持つ必要は無い。
なお、本変形例では、描画データの形式として三角形ストリップを例に挙げて説明したが、三角形ファンや、Snake、三角形メッシュなどでもよい。
以上、本発明について実施の形態およびその変形例を用いて説明したが、本発明はこれらに限定されるものではない。
例えば、本実施の形態およびその変形例では、全て三角形について説明したが、四角形以上の多角形でもよい。
また、本実施の形態およびその変形例に係る描画装置を、専用の半導体集積回路(LSI)やその一部として構成してもよく、トランジスタやリレー素子など別の手段で描画装置を構成してもよい。
本発明の描画装置は、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができるものであって、3次元コンピューターグラフィクスの処理として有効なだけではなく、2次元の処理方法としても有用である。したがってこれらの機能を含む家電機器や、ゲーム機、パーソナルコンピュータなどの分野で利用される可能性が有る。
本発明は、コンピューターグラフィクスの描画処理を行なう描画装置に関する。
従来のコンピューターグラフィクスの描画処理を行なう描画装置は、一般に、三角形ストリップ(Triangle Strip)、三角形ファン(Triangle Fan)、それらを相互に切り替えられる仕組み(以下、スネーク(Triangle Snake)という)、および三角形メッシュ(Triangle Mesh)などの形式で与えられたグラフィクスデータを描画する際に、そのグラフィックスデータを個別の三角形毎にラスタライズと呼ばれる画素毎の情報に変換する処理を行なっている。
図1は、三角形ストリップのデータ形式を示す図である。
三角形ストリップのデータ形式では、頂点P0、頂点P1、頂点P2、頂点P3、…、頂点PNUM-1、頂点PNUM、および頂点PNUM+1に対して、例えば、頂点P0、頂点P1、および頂点P2の3頂点で三角形T0が構成され、頂点P1、頂点P2、および頂点P3の3頂点で三角形T1が構成され、頂点PN、頂点PN+1、および頂点PN+2の3頂点で三角形TNが構成される。このデータ形式の特徴は、三角形を3つの頂点の情報で表現すると、NUM個の三角形の情報を記述するのに3×NUM個の頂点の情報が必要になるのに対し、三角形ストリップ形式なら(NUM+2)個の頂点の情報だけで済み、データ量を減らせることである。
図2は、三角形ファンのデータ形式を示す図である。
三角形ファンのデータ形式では、頂点P0、頂点P1、頂点P2、頂点P3、…、頂点PNUM-1、頂点PNUM、および頂点PNUM+1に対して、例えば、頂点P0、頂点P1、および頂点P2の3頂点で三角形T0が構成され、頂点P0、頂点P2、および頂点P3の3頂点で三角形T1が構成され、頂点P0、頂点PN+1、および頂点PN+2の3頂点で三角形TNが構成される。このデータ形式も三角形ストリップと同様にデータ量を減らせるのが特徴である。
図3は、スネークのデータ形式を示す図である。
スネークは、三角形ストリップと三角形ファンの相互を途中で自由に切り替えられるデータ形式である。切り替えのポイントを示すために別途情報が必要である。データ量は三角形ストリップや三角形ファンと同様であるが、三角形ストリップや三角形ファンの場合は、三角形の接続状態が一意に決められているため、条件が整わないと連続する三角形をそれほど多くできない。これに対し、本形式では、自由度が有るため、連続する三角形をより多くすることができる可能性が高いという特徴がある。
図4Aおよび図4Bは、三角形メッシュのデータ形式を示す図である。
三角形メッシュでは、三角形を構成する頂点の情報は、頂点データのインデックス/ポインタ501で表現される。この形式のデータは、辺を共有する三角形を示す情報を持たない場合が多いが、必要に応じてその情報を付加して使用される。
コンピューターグラフィクスの描画処理の途中結果や最終結果は通常、外部メモリもしくは内部メモリに配置される。この情報には、画素毎の視点からの距離情報やカラー情報、透明度などが含まれる。ラスタライズ処理された画素毎の情報をメモリ上に配置された中間結果(画素のカラー値や奥行き情報など)に反映する処理を行なう際には、現在の値をメモリから読み込み、処理した結果をメモリに書き戻す処理が必要となる。画素が不透明で、奥行き情報(Z値)を無視する場合で、かつメモリ上に配置された中間結果との混ぜ合わせ処理などが無い場合には、メモリ上に配置された中間結果を読み込まなくても済む場合も有る。その場合は、読み込み処理が無くなって書き込み処理だけになり、時間が半分になるものの、本質的な処理内容は変わらない。以下、中間結果は読み込むものとして説明する。
一般に、1画面の処理結果を得るためには画面のサイズの何倍もの量の画素を処理しなければならず、さらにアニメーション処理の場合などには1秒に数十回も画面を更新することを要求される。そのため、非常に高速に画素のデータを読み込み、書き戻さなければならず、この速度が描画装置の速度を決めてしまうことが多い。
DDR SDRAM(Double Data Rate SDRAM)に代表される最近のメモリは非常に高速にデータを出し入れできるが、最高性能を引き出すためにはある程度まとまったサイズでデータを読み書きしなければならないという制約が有る。処理速度が高速になり、取り扱うデータ量が多くなるにつれ、このサイズがかなり大きくなってきている。このため、描画装置は、1画面中の所望の1画素の情報だけを読み込んだり、書き込んだりすることはできず、システムで決まるサイズ(4画素〜256画素程度)の情報を画素ブロックとしてまとめて読み書きしなければならない。
まとめて読み書きしなければならない画素の領域(画素ブロック)は、何も工夫しなければ縦方向が1画素で横方向に長い領域になる場合がほとんどである。しかし、コンピューターグラフィクスの描画装置は、略正方形の画素ブロックを1度に読み書きするデータ単位としている。正方形とされているのは、三角形の単位でラスタライズ処理が施されて画素毎の処理が行われるからという理由と、平均すれば横長の三角形よりもそうでない三角形が多いという理由とに基づく。つまり、横長の領域よりは正方形に近い領域をまとめて取り扱う方が、三角形の領域外で必要が無いという画素の割合が低くなり、ひいては効率が良くなるからである。このことは一般的に知られている(例えば、特許文献1参照。)。
図5は、画素ブロックの形状が横長である場合を説明するための説明図である。
この図5に示すように、縦1画素×横64画素の領域(画素ブロック)601には、三角形602と重なっている有効な画素は8画素程度しか無い。
つまり、描画装置が画素ブロックの画素データをメモリに書き込んでも、殆ど不用な画素データを書き込んでしまうことになる。
図6は、画素ブロックの形状が正方形である場合を説明するための説明図である。
この図6に示すように、縦8画素×横8画素の領域(画素ブロック)701には、図5に示す三角形602と同じ三角形702と重なっている有効な画素は38画素もある。このように、正方形の画素ブロックの方が横長の画素ブロックに比べて明らかに有効な画素が多くなる。
上記特許文献1では、画素単位の情報に関してではなく、三角形に貼られるテクスチャデータに関する発明が開示されているが、8×8画素のブロック単位でデータが配置されている。これも同様の理由に基づく。
特表2001−507836号公報
しかしながら、上記特許文献1の描画装置では、メモリバスのバンド幅を無駄に使用してしまうという問題がある。その結果、広いバンド幅が必要となり、バンド幅が狭い場合には、描画処理に不具合が発生してしまう。
即ち、画素ブロックの形状を略正方形にしても、三角形の辺の近くでは一部のデータしか不用なのにその情報もまとめて取り扱うため、読み書きするデータ量が増大し、有効に使用可能なメモリバスバンド幅を低下させている。言い換えれば、一定時間内に読み書きできるデータの総量はメモリバスバンド幅で決まってしまうが、その中で無駄な画素のデータを一緒に読み込んだり書き込んだりしてしまうことで、総量のうち有効なデータ量を減らしていることになる。
図7は、不用なデータを説明するための説明図である。
例えば、三角形710が描画されるときには、三角形710の辺の一部を含む画素ブロックBkの全ての画素データがメモリに書き込まれる。しかし、その画素ブロックBkは、三角形710に含まれない領域Bkaの画素データと、三角形710に含まれる領域Bkbの画素データとを有する。したがって、画素ブロックBkのうち領域Bkbの画素データだけが必要であるにも関わらず、不用な領域Bkaの画素データまでメモリに書き込んでしまう。
図8は、三角形ストリップの場合においてメモリに不用なデータが書き込まれる様子を説明するための説明図である。
描画装置は、三角形T0,T1,T2,T3を順に描画しようとする場合、まず、三角形T0に含まれる画素を有する画素ブロックの画素データをメモリに書き込む。そして、次に、描画装置は、三角形T1に含まれる画素を有する画素ブロックの画素データをメモリに書き込む。
この場合、三角形T0と三角形T1の共有する辺を含む領域811では、各画素ブロックは、三角形T0の書き込み時と、三角形T1の書き込み時との2回もメモリに書き込まれることとなる。
例えば、領域811の画素ブロックBk1は、三角形T0に含まれる領域Bk1aの画素データと、三角形T1に含まれる領域Bk1bの画素データとを有する。したがって、三角形T0の書き込み時には、不用な領域Bk1bを含む画素ブロックBk1の全ての画素データがメモリに書き込まれ、三角形T1の書き込み時にも、不用な領域Bk1aを含む画素ブロックBk1の全ての画素データがメモリに書き込まれる。
このように、描画装置は、三角形T0,T1,T2,T3を順に描画しようとする場合、領域811,812,813に含まれる各画素ブロックを、無駄なデータがその画素ブロックに含まれている状態で、2度もメモリに書き込んでいる。
また、描画装置だけがメモリを独占的に使用している場合よりも、他の装置にもそのメモリが使用される場合、例えば描画装置がシステムLSI(Large Scale Integration)の中にひとつのユニットとして入っている場合はより深刻である。このような場合は、特定のユニット(装置)がメモリバスを占有して他のユニットの動作を阻害することがないように、量的な規制などが行われることが多い。よって、場合によっては少し時間をかけてもメモリアクセス量を減らす努力をしたほうが、より多くの有効なデータにアクセスでき、描画装置の性能を向上することが可能になる場合が多い。
そこで、無駄なメモリアクセスを減らすために、まとめて処理する画素データのキャッシュシステムを構築することが想定される。三角形ストリップや三角形ファンはもちろん、三角形メッシュのような汎用性のあるデータ形式でも、近くに有る三角形が続けて描画される場合が多く、局所性が有るため、一般的なキャッシュシステムを構成すれば効率をかなり改善できる。
しかしながら、上記特許文献1の描画装置にキャッシュシステムを構築しても、キャッシュのサイズをかなり大きくしないと効果が少なく、さらに回路構成が複雑になるため、キャッシュ回路を実装するのにかなりの開発工数が必要である。キャッシュのサイズを大きくすれば回路規模が大きくなり、開発工数の問題と両方で、これを組み込んだLSIや装置の価格を引き上げてしまうという課題を有する。
そこで、本発明は、かかる問題に鑑みてなされたものであって、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができる描画装置を提供することを目的とする。
上記目的を達成するために、本発明に係る描画装置は、描画データをラスタライズ処理して描画する描画装置であって、前記描画データからラスタライズ処理の対象となる第1の三角形領域を特定する三角形特定手段と、前記第1の三角形領域に含まれる画素を有する画素ブロックを特定するブロック特定手段と、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域と連接する第2の三角形領域の画素が含まれるか否かを判別する判別手段と、前記判別手段で含まれると判別されたときには、前記第2の三角形領域の画素を含む画素ブロックをラスタライズ処理して画素データを生成するラスタライズ手段と、前記ラスタライズ手段で生成された画素ブロックの画素データをメモリに書き込む書き込み手段と、前記メモリに書き込まれた画素データに応じた画像を表示させる表示制御手段とを備えることを特徴とする。
これにより、第1及び第2の三角形領域の画素を含む画素ブロックが検出されて、それらの画素を含んだ状態でその画素ブロックがラスタライズ処理されてメモリに書き込まれるため、従来例のように、第1の三角形領域の画素以外の不用なデータをメモリに書き込むことを避けることができる。その結果、大きいサイズのキャッシュメモリや多大な開発工数が必要な複雑な回路の開発および実装を行なうこと無く、画素データの書き込みの際の無駄を排除することにより、メモリバスバンド幅を有効に利用することができる。つまり、高価で複雑な回路構成を有することなく、メモリバスバンド幅を有効に利用することができる。そもそもメモリアクセス時に無駄が生じるのは三角形の辺の部分であるが、本発明では、この無駄を削減することができる。
例えば、三角形ストリップ形式のデータの三角形の数が充分多い場合は、個別の三角形について見ると、3個の辺のうち、2個の辺で問題が改善されるため、全体としてかなりメモリバスバンド幅を低減することができる。図8に示すように、三角形T1や三角形T3では3つの辺のうち2つの辺が共有される辺になっており、残り1辺だけについてのみ無駄が解消されないこととなる。
また、前記判別手段は、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域の後に描画すべき前記第2の三角形領域の画素が含まれるか否かを判別することを特徴としてもよい。
これにより、第1の三角形領域をラスタライズ処理の対象、つまり描画対象とするときには、第2の三角形領域が次に描画対象となる第1処理予定の三角形として扱われ、第1の三角形領域を描画対象とするときに、第1処理予定の三角形の画素も含めて画素ブロックがラスタライズ処理される。したがって、不用なデータの代わりに、第1処理予定の三角形の画素データをメモリに書き込むことができ、メモリバスバンド幅を有効に利用することができる。
また、前記判別手段は、前記ブロック特定手段で特定された画素ブロックに、前記第1の三角形領域の前に描画対象とされた前記第2の三角形領域の画素が含まれるか否かを判別することを特徴としてもよい。
これにより、第1の三角形領域をラスタライズ処理の対象、つまり描画対象とするときには、第2の三角形領域が直前に描画された処理済の三角形として扱われ、第1の三角形領域を描画対象とするときに、処理済の三角形の画素も含めて画素ブロックがラスタライズ処理される。したがって、不用なデータの代わりに、処理済の三角形の画素データをメモリに書き込むことができ、メモリバスバンド幅を有効に利用することができる。
ここで、前記三角形特定手段は、さらに、前記描画データからラスタライズ処理の対象となる前記第2の三角形領域を特定し、ブロック特定手段は、さらに、前記三角形特定手段が前記第2の三角形領域を特定したときには、前記第2の三角形領域に含まれる画素を有する画素ブロックを特定し、前記ラスタライズ手段は、さらに、前記三角形特定手段が前記第2の三角形領域を特定したときには、前記ブロック特定手段で特定された画素ブロックのうち、前記判別手段で判別された前記第1及び第2の三角形領域の画素を有する画素ブロックを、ラスタライズ処理の対象から除くことを特徴としてもよい。
これにより、第2の三角形領域がラスタライズ処理の対象、つまり描画対象になるときには、例えば、ブロック特定手段によって第2の三角形領域に含まれる画素を有する複数の画素ブロックが特定されると、その複数の画素ブロックのうち第1の三角形領域の画素を含む画素ブロックはラスタライズ処理の対象から除かれる。したがって、第1の三角形領域が描画対象のときに描画される画素ブロックを、第2の三角形領域が描画対象となるときにもラスタライズ処理してメモリに書き込むことを防いで、メモリバスバンド幅をさらに有効に利用することができる。
なお、本発明は、このような描画装置として実現することができるだけでなく、その方法やプログラム、そのプログラムを格納する記憶媒体、集積回路としても実現することができる。
本発明の描画装置は、無駄なメモリアクセスを減らすことができるため、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができる。
以下本発明の実施の形態について、図面を参照しながら説明する。
図9は、本発明の実施の形態における描画装置の構成を示すブロック図である。
本実施の形態における描画装置100は、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができるものであって、制御部111と、トライアングル検出部112と、Aエッジ検出部113と、Bエッジ検出部114と、Cエッジ検出部115と、ラスタライズ部116と、メモリR/W部117と、画素記録モジュールたるメモリ120と、描画エンジン130とを備える。
このような描画装置100は、ラスタライズ部116でラスタライズ処理する際に3頂点ではなく、4頂点分の情報を用い、トライアングル検出部112と各エッジ検出部113,114,115の組み合わせでブロック毎に処理内容を決定し、処理を行なう。これによって、メモリR/W部117とメモリ120との間のデータの読み書きの量を減らすことができる。
制御部111は、三次元で表現された描画リストを取得して、その描画リストを二次元描画データに変換する。描画リストには、三次元上における各座標や、その座標における色、法線(nomal)などが含まれている。制御部111は、このような描画リストを、二次元上における座標と、その座標における色などとを示す二次元描画データに変換する。
さらに、制御部111は、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115に対して、二次元描画データを送信して、上記各部によって検出された描画対象の三角形および画素ブロックと、二次元描画データとをラスタライズ部116に出力する。
トライアングル検出部112は、二次元描画データから描画対象の三角形を検出するとともに、その描画対象の三角形に含まれる画素を有する画素ブロック(三角形画素ブロック)を検出する。つまり、描画対象の三角形に全て含まれる画素ブロックと、その三角形の辺の一部を含む画素ブロックとが三角形画素ブロックとして検出される。三角形の辺の一部を含む画素ブロックには、描画対象の三角形の画素が含まれると共に、その描画対象の三角形には不用な画素も含まれている。
Aエッジ検出部113は、三角形画素ブロックのうち、描画対象の三角形に連接して直前に描画処理の対象とされた三角形(処理済の三角形)の辺上にある画素ブロックを検出する。
つまり、Aエッジ検出部113は、三角形画素ブロックの何れかに、処理済の三角形の画素が含まれるか否かを判別し、含まれると判別された画素ブロックを検出する。ここで、Aエッジ検出部113は、上述の処理済の三角形の画素を含む画素ブロックを検出するときには、描画対象の三角形の3つの頂点と、処理済の三角形の1つの頂点とを用いて検出する。処理済の三角形の1つ頂点とは、描画対象の三角形と処理済の三角形とで共有される辺上にない頂点である。以下、このように検出された画素ブロックをA画素ブロックという。
Bエッジ検出部114は、三角形画素ブロックのうち、描画対象の三角形に連接して次に描画処理される予定の三角形(第1処理予定の三角形)の辺上にある画素ブロックを検出する。
つまり、Bエッジ検出部114は、三角形画素ブロックの何れかに、第1処理予定の三角形の画素が含まれるか否かを判別し、含まれると判別された画素ブロックを検出する。ここで、Bエッジ検出部114は、上述の第1処理予定の三角形の画素を含む画素ブロックを検出するときには、描画対象の三角形の3つの頂点と、第1処理予定の三角形の1つの頂点とを用いて検出する。第1処理予定の三角形の1つ頂点とは、描画対象の三角形と第1処理予定の三角形とで共有される辺上にない頂点である。以下、このように検出された画素ブロックをB画素ブロックという。
Cエッジ検出部115は、第1処理予定の三角形の画素を有する画素ブロックのうち、第1処理予定の三角形に連接してその次に描画処理される予定の三角形(第2処理予定の三角形)の辺上にある画素ブロックを検出する。つまり、Cエッジ検出部115は、第1処理予定の三角形の画素を有する画素ブロックのうち、第2処理予定の三角形の画素を含む画素ブロックを検出する。以下、このように検出された画素ブロックをC画素ブロックという。
ラスタライズ部116は、二次元描画データと、描画対象の三角形と、その三角形画素ブロックと、A画素ブロックと、B画素ブロックと、C画素ブロックとに基づいて、三角形画素ブロックのうち有効な部分に対してラスタライズ処理を行って画素データを生成する。
即ち、ラスタライズ部116は、三角形画素ブロックのうち、A画素ブロックを処理対象から省く。そして、ラスタライズ部116は、A画素ブロックが省かれた三角形画素ブロックの範囲で、描画対象の三角形と第1処理予定の三角形のそれぞれの少なくとも一部をラスタライズ処理して画素データを生成する。このとき、その三角形画素ブロックに含まれるB画素ブロックは、描画対象の三角形の画素と、第1処理予定の三角形の画素とが含まれた状態でラスタライズ処理される。
メモリR/W部117は、ラスタライズ部117によるラスタライズ処理によって生成された画素データを、A画素ブロックを除く三角形画素ブロックの単位でメモリ120に書き込む。
描画エンジン130は、表示制御手段として構成されており、メモリ120に書き込まれた画素データに応じた画像(描画対象三角形)を表示部200に表示させる。
このように本実施の形態では、描画対象の三角形の描画処理時に、第1処理予定の三角形の画素もB画素ブロックに含めてラスタライズ処理を行い、そのB画素ブロックの画素データをメモリ120に書き込む。一方、従来では、描画対象の三角形の描画処理時には、第1処理予定の三角形の画素がB画素ブロックに含められず、その代わりに不用なデータがB画素ブロックに含められ、そのB画素ブロックがメモリ120に書き込まれる。(なお、不用なデータの部分にはマスクがかけられ、その不用なデータが実際にメモリに書き込まれるわけではないが、そのデータ量に相当する分だけの帯域がメモリバスで使用される)。したがって、本実施の形態では、不用なデータのメモリ120への書き込みを防いでメモリバスバンド幅を有効に利用することができる。
また、第1処理予定の三角形の描画処理時には、この第1処理予定の三角形が描画対象の三角形となるため、上述のB画素ブロックは、この第1処理予定の三角形に対するA画素ブロックとなる。したがって、本実施の形態では、第1処理予定の三角形の描画処理時には、上述のB画素ブロックは処理対象から省かれる。一方、従来では、第1処理予定の三角形の描画処理時には、上述と同様に不用なデータを含むB画素ブロックがメモリ120に書き込まれる。したがって、本実施の形態では、さらにメモリバスバンド幅を有効に利用することができる。
図10は、本発明の実施の形態における描画装置100のアルゴリズムを示す概念図である。
図10において、各三角形は、三角形TN-1、三角形TN、三角形TN+1、三角形TN+2の順に描画される。本実施の形態の描画装置100は、三角形TNを描画する際に、N番目の頂点PN、(N+1)番目の頂点PN+1、および(N+2)番目の頂点PN+2の、3つの頂点の情報に対して、さらに、次に描画する三角形TN+1の頂点である(N+3)番目の頂点PN+3の情報も加え、4頂点分の情報からラスタライズ処理を行なう。三角形ストリップ(Triangle Strip)形式の特徴から、1頂点分の情報を加えるだけで2つの連続(連接)した三角形の情報が得られることになる。
図10に示す三角形TNを描画対象の三角形とする場合、上述の処理済の三角形は三角形TN-1に相当し、第1処理予定の三角形は三角形TN+1に相当し、第2処理予定の三角形は三角形TN+2に相当する。また、この場合、トライアングル検出部112は、描画対象の三角形TNを検出すると共に、ブロック群GBに含まれる各画素ブロックを上述の三角形画素ブロックとして検出する。Aエッジ検出部113は、画素ブロックBAを上述のA画素ブロックとして検出し、Bエッジ検出部114は、画素ブロックBBを上述のB画素ブロックとして検出する。なお、このような画素ブロックは、例えば64個の画素の集まりによって構成される。したがって、本実施の形態では、描画対象の三角形TNを描画するときには、描画対象の三角形TNの画素と第1処理予定の三角形TN+1の画素とを画素ブロックBBに含めて処理を行う。即ち、描画装置100は、ブロック群GBのうち画素ブロックBAを除く範囲で、描画対象の三角形TNと第1処理予定の三角形TN+1のそれぞれの一部をラスタライズ処理する。
三角形をラスタライズ処理する場合、三角形の範囲に入る画素がどれかを選択し、その画素毎のパラメータを計算することになる。伝統的な方法ではスクリーン上部からスクリーン下部に向かって、横一列に、左端から右端に向かって画素を選択し、それぞれの画素毎のパラメータを計算する。このようにすれば1画素変化した時の各パラメータの変化量を最初に計算しておけば、後はそれを加算していくだけで各パラメータの値を計算できるからである。グラフィクスシステムが開発された初期の頃は、画面全体の情報を記録しておくだけの記憶素子を準備できなかったので、画面の走査線の方向に合わせた描画も意味を持っていたが、今日では処理の方向は意味を持たなくなっている。スクリーン下部から上部に向かって処理しても良いし、右端から左端に向かって処理しても、ランダムに処理しても差し支えない。
メモリ120には、グラフィクス・システムを高速にするために、できるだけ高速に大量の情報を読み書きできることが要求される。DDR SDRAMに代表されるような最近の高速大容量メモリ素子は、連続するアドレス空間のデータを連続して読み書きした場合に、より高速に動作するようになっているため、最高性能を目指す場合はこの特徴を利用することになる。
たとえば1画素の情報を4バイトで管理しているグラフィクスシステムで、256バイト単位で読み書きした場合に性能が出せるメモリを使う場合、64画素分の情報をまとめて読み書きすることになる。
背景技術でも説明したように、図5のように縦1画素×横64画素の領域(画素ブロック)601と三角形602とでは、有効な画素(三角形602と重なっている画素)が8画素程度しか無い。しかし、図6のように縦8画素×横8画素の領域(画素ブロック)701にした場合は、図5の三角形602と同じ三角形702において有効な画素は38画素となり、明らかに有効な画素が多くなる。
よって、メモリ120上の画素配置は縦8画素×横8画素の領域(画素ブロック)状に配置するのが良い。
そのため、本実施の形態では、ラスタライズ処理は単純にスクリーン上部から下部、左端から右端に向かって処理するのではなく、この縦8画素×横8画素の領域(画素ブロック)単位で処理を行なう。このようにすると効率が良いからである。なお、ブロック内の処理順は任意である。
三角形の内部で、領域(画素ブロック)内に三角形の辺がかかっていないものについては、画素ブロック内の画素全てが処理対象になるので特に問題は起らない。256バイト単位で読み込んだ画素データは全て有効に用いられ、結果として書き出される256バイトのデータも全て意味の有るデータである。
だが、三角形の周辺部で、領域(画素ブロック)内に三角形の辺がかかっているもの、つまり領域の一部が三角形の内部で描画対象となり、それ以外の部分が三角形の外部で従来手法では描画対象外となるようなブロックに関しては、256バイト単位で読み込んだデータのうち、三角形の外部の画素に関しては必要の無いデータである。書き戻す際にもこのデータは本来不用であり、有効なデータの割合が小さくなる。
描画装置100がシステムLSIの中にユニットとして組み込まれ、他のコアと協調動作しているような場合は、特定のユニットがメモリバスを占有して他のユニットの動作を阻害することがないように、メモリアクセスに対して量的な規制などが行われていることが多い。例えば、無駄なアクセスも全てアクセス量として積算され、限度を超えると一定時間アクセスができなくなるなどのペナルティが課せられる場合がある。そのため、上述の有効データの割合が少なくなるという問題は深刻である。
この問題を解決するため、本発明の描画装置100では4頂点(頂点PN、頂点PN+1、頂点PN+2、頂点PN+3)の情報を利用して、領域(画素ブロック)内にある描画対象の三角形(三角形TN)の画素に加えて、その画素ブロック内にある、第1処理予定の三角形(三角形TN+1)の画素の処理も同時あるいは連続して行なう。なお、このような画素ブロックは、上述のB画素ブロックBBである。そのB画素ブロックBBを処理するタイミングは、第1処理予定の三角形TN+1の処理時でも良い。この場合には、描画対象の三角形TNの処理時に、上述のB画素ブロックBBの画素処理を行なわない。以下では前者、つまり第1処理予定の三角形TN+1の画素が、描画対象の三角形TNの画素を有する画素ブロック内に含まれていたら、描画対象の三角形TNの処理時に、その画素ブロック内における第1処理予定の三角形TN+1の画素も同時あるいは連続して処理するものとして説明する。
描画対象の三角形の3頂点および次に描画する予定の三角形(第1処理予定の三角形)の1頂点の4頂点の情報から、この2つの三角形のパラメータを計算することが可能である。即ち、上述のように、トライアングル検出部112は、画素ブロックの全部または一部が描画対象の三角形の内部であるものを上述の三角形画素ブロックとして検出する。また、Aエッジ検出部113は、描画対象の三角形(三角形TN)と一つ前に描画した処理済の三角形(三角形TN-1)との間で共有される辺(頂点PNと頂点PN+1とを結ぶ辺)の少なくとも一部が三角形画素ブロック内に入っているかどうかを検出する。Bエッジ検出部114は、描画対象の三角形(三角形TN)と次に描画する予定の三角形(第1処理予定の三角形TN+1)との間で共有される辺(頂点PN+1と頂点PN+2とを結ぶ辺)の少なくとも一部が三角形画素ブロック内に入っているかどうかを検出する。そして、Cエッジ検出部115は、次に描画する予定の三角形(第1処理予定の三角形TN+1)とさらにその次に描画する予定の三角形(第2処理予定の三角形TN+2)との間で共有される辺(頂点PN+2と頂点PN+3とを結ぶ辺)の少なくとも一部が、第1処理予定の三角形TN+1の画素を有する画素ブロック内に入っているかどうかを検出する。
したがって、トライアングル検出部112で検出された三角形画素ブロックのうち、Aエッジ検出部113で検出された画素ブロック(上述のA画素ブロックBA)を除いたものを描画処理対象にする。これは、一つ前に描画した処理済の三角形(三角形TN-1)の処理時点で既にこのA画素ブロックBAは描画済みであって、2度描画するのを避けるためである。
上述の描画処理対象の画素ブロックのうち、Bエッジ検出部114で検出された画素ブロック(上述のB画素ブロックBB)は、描画対象の三角形(三角形TN)と次に描画する三角形(第1処理予定の三角形TN+1)とで共有される辺上にある。このため、描画対象の三角形(三角形TN)に加えて次に描画する予定の三角形(第1処理予定の三角形TN+1)も、このB画素ブロックBB内だけは先行して描画しておく。多くの場合、B画素ブロックBB内にはこの2つの三角形しか存在せず、2つの三角形だけを描画するだけでB画素ブロックBB全体の処理を終えることができる。そのため、無駄なメモリアクセスを減らすことができる。
描画処理対象の画素ブロックのうち、3つのエッジ検出部に検出されないものは、描画対象の三角形内部に含まれる画素ブロックであり、これらの画素ブロックは、従来通り描画される。
図11は、本実施の形態における描画装置100の動作を示すフローチャートである。
描画装置100の制御部111は、まず、描画リストを取得して(ステップS100)、その描画リストを二次元描画データに変換する(ステップS102)。そして、トライアングル検出部112は、二次元描画データから描画対象の三角形、例えば、図10中の三角形TNを検出する(ステップS104)。
さらに、トライアングル検出部112は、その描画対象の三角形TNに含まれる画素を有する画素ブロックを、図10のブロック群GB内にある上述の三角形画素ブロックとして検出する(ステップS106)。
Aエッジ検出部113は、三角形画素ブロックのうち、描画対象の三角形TNに連接する処理済の三角形TN-1の画素を含む画素ブロックを、A画素ブロックBAとして検出する(ステップS108)。
その結果、ラスタライズ部116は、描画対象の三角形TNに属する三角形画素ブロックのうち、A画素ブロックBAを処理対象から省き、その残りの画素ブロックを描画処理対象に設定する(ステップS110)。
Bエッジ検出部114は、描画対象の三角形TNに連接する第1処理予定の三角形TN+1があるか否か、つまり、三角形画素ブロックの何れかに、第1処理予定の三角形TN+1の画素が含まれているか否かを判別する(ステップS112)。
ここで、第1処理予定の三角形TN+1があると判別したときには(ステップS112のY)、ラスタライズ部116は、ステップS110で設定した描画処理対象の画素ブロックの範囲で、描画対象の三角形TNと第1処理予定の三角形TN+1のそれぞれの少なくとも一部に対してラスタライズ処理を行なう(ステップS114)。つまり、ラスタライズ部116は、従来例と異なり、描画対象の三角形TNと第1処理予定の三角形TN+1の画素がB画素ブロックBBに含まれる形で、そのB画素ブロックBBに対してラスタライズ処理を行なう。
一方、第1処理予定の三角形TN+1がないと判別したときには(ステップS112のN)、ラスタライズ部116は、ステップS110で設定した描画処理対象の画素ブロックの範囲で、描画対象の三角形TNの少なくとも一部に対してラスタライズ処理を行なう(ステップS116)。
そして、メモリR/W部117は、ステップS114またはステップS116によるラスタライズ処理により生成された画素データを、画素ブロック単位でメモリ120に書き込む(ステップS118)。描画エンジン130は、メモリ120に書き込まれた画素データに応じた画像を表示部200に表示させる(ステップS120)。
なお、ここまでの説明では簡単のために例外的な処理を省略したが、実際に描画装置を実装するためにはそれらも考慮しなければならない。例えば、描画対象となる最初の三角形(N=0)には一つ前の三角形は存在しないため、最初の三角形と直前の三角形とで共有される辺は存在しない。また、最後の三角形(N=NUM−1)の場合には次の三角形は存在しないため、最後の三角形と直後の三角形とで共有される辺は存在しない。
また、頂点の画素ブロック(図10に示す画素ブロックBXや画素ブロックBY)には通常3個以上の三角形の画素が入るため、2個の三角形だけを用いてもその画素ブロックの全ての領域を塗り潰せない場合が多い。そこで、次に説明する処理を行なえばよい。ただし、頂点の画素ブロックは比較的簡単に検出できるため、逐次的に描画処理していく場合に2画素ブロック程度を保持してキャッシュ的にその2画素ブロックを扱った方が実装が簡単になり、性能が少し向上する可能性が有る。
三角形が小さい場合や、その角度が鋭い鋭角の場合は、1個の画素ブロックに3個以上の三角形の画素が入る場合がある。これは、Aエッジ検出部113とBエッジ検出部114、あるいはBエッジ検出部114とCエッジ検出部115によって同時に検出されるような領域(画素ブロック)が、上述のような3個以上の三角形の画素を含む画素ブロックに相当する。頂点が入っている画素ブロック以外でも頻度は少ないが有り得るので注意が必要である。
このような場合は、その画素ブロック内に関しては描画対象の三角形TNや、それ以前に描画した三角形TN-1については既に描画済みである。一方、次に描画する三角形TN+1の部分は、次に三角形TN+2を描画する際には既に描画が終わっているものとして取り扱われるため、今回描画しておかないといけない。例えば、図1に示す画素ブロックBYを、描画対象の三角形TNの描画時に、三角形N+2の一部を含めて描画しておく。このような場合には、描画装置100は、画素ブロックBY全体の処理が終わっていない中途半端な状態で、その画素ブロックBYを一度メモリ120に書き込み、またそれを読み出して続きを行なう。つまり、三角形TNや三角形TN+1のそれぞれの一部を含む画素ブロックBYをメモリ120に書き込み、またそれを読み出して三角形TN+2の一部をその画素ブロックBYに含める。このため、従来の手法と効率は変わらないことになる。このような場合専用にキャッシュシステムを導入すれば状況は改善されるが、頻度が少ない場合は改善効果があまり見込めないうえに、開発工数も大きくなるので状況に応じた総合的な判断が必要である。
なお、本実施の形態では、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115を、ラスタライズ部116の外部に設けたが、内部に実装してもよい。また、本実施の形態では、トライアングル検出部112、Aエッジ検出部113、Bエッジ検出部114、およびCエッジ検出部115をそれぞれ分離させたが、分離させずに1つのモジュールに時分割で各画素ブロックを検出させてもよい。
(変形例1)
上記実施の形態では、描画対象の三角形TNと、次に描画予定の三角形TN+1とで共有される辺の一部が入っている領域(B画素ブロックBB)の描画処理を、描画対象の三角形TNを描画している際に同時に行なった。
本変形例1に係る描画装置は、描画対象の三角形TNを描画する際には、そのB画素ブロックBBの描画処理をせずに、次に描画予定の三角形TN+1を描画する際に、そのB画素ブロックBBの描画処理を行なう。即ち、そのB画素ブロックBBの範囲において、両三角形の画素を同時あるいは連続して描画する。
また、この場合には、本変形例1に係る描画装置は、描画対象の三角形TNを描画する際には、トライアングル検出部112で検出された三角形画素ブロックの何れかに、その三角形TNの前に描画対象とされた三角形TN-1の画素が含まれているか否かを判別する。つまり、描画装置は、描画対象の三角形TNを描画する際に、三角形TN-1の画素が含まれているA画素ブロックBAを検出して、その三角形TNの画素と三角形TN-1の画素とを含むA画素ブロックBAをラスタライズ処理して描画する。
(変形例2)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形ファンのデータ形式の描画データをラスタライズ処理して描画する。このようなデータ形式であっても、上記実施の形態と同様の効果を得ることができる。
(変形例3)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形ストリップと三角形ファンとを途中で変更できる形式(所謂Triangle Snake)の描画データをラスタライズ処理して描画する。このようなデータ形式であっても、上記実施の形態と同様の効果を得ることができる。
(変形例4)
上記実施の形態および変形例1では、2つの三角形に共有される辺の一部が入っている領域(画素ブロック)を、2つの三角形のうち描画順が早い方を描画している時に同時に描画したり、2つの三角形のうち描画順が遅い方を描画している時に同時に描画したりした。即ち、上記実施の形態および変形例1では、上記画素ブロックを描画するタイミングを、三角形の描画順に基づいて一意に決めた。
本変形例に係る描画装置は、別途与えられた情報や乱数などに従って、上記画素ブロックを描画するタイミングを個別に決定する。
なお、どちらの三角形を描画する際にも上記画素ブロックを同時には描画せず、別途、辺の一部が入っている画素ブロックだけを描画するような構成も考えられるのは言うまでもない。
(変形例5)
上記実施の形態では、描画装置100は、三角形ストリップのデータ形式の描画データをラスタライズ処理して描画した。
本変形例に係る描画装置は、三角形メッシュのデータ形式の描画データをラスタライズ処理して描画する。三角形メッシュの場合は、ある三角形と辺を共有する三角形は最大三個有り、必ずしもそれらを連続して描画していくわけではないので、上記実施の形態や変形例1のように描画順だけで、上記辺上にある画素ブロックを何れの三角形の描画時に描画するかを決めるわけにはいかない。
そこで、本変形例に係る描画装置は、それぞれの辺について、その辺を共有する2つの三角形のうち何れの三角形を描画する際に、その辺上にある画素ブロックを一緒に描画すべきかを示す情報を取得する。そして、描画装置は、その取得した情報に基づいて、上記辺上にある画素ブロックを何れの三角形の描画時に描画するのかを決定する。もちろん、三角形の番号などから計算で自動的に決めてもよい。
(変形例6)
上記実施の形態およびその変形例1〜5では4個の頂点を扱うだけなので、同時に処理できる辺は1個だけである。大雑把に言えば、3つの辺のうち2個は共有させて処理できるが、残り1個はそのような処理ができない。
この問題を解決するために、本変形例に係る描画装置は、最大で6個の頂点の情報を利用し、共有する3つの辺全てを処理する。即ち、描画装置は、上記実施の形態およびその変形例1〜5で行なってきたような処理を3つの辺でそれぞれ行なう。
図12は、本変形例に係る描画装置の処理を説明するための説明図である。
この図12に示すような三角形ストリップ(頂点P0、頂点P1、頂点P2、頂点P3、頂点P4、頂点P5、および頂点P6)を考えた時、三角形ストリップを構成する三角形(三角形T0、三角形T1、三角形T2、三角形T3、および三角形T4)の間で共有される辺ではバス帯域を無駄にする問題が回避されるが、そのままではそれ以外の辺では従来通りである。
そこで本変形例に係る描画装置は、例えば頂点P0と頂点P1を結ぶ辺などの残された辺も処理するために、それらの辺を共有する三角形の頂点(頂点PA、頂点PB、頂点PC、頂点PD、頂点PE、頂点PF、および頂点PG)の情報を利用し、変形例5のように処理する。
三角形ストリップ形式の場合、その三角形ストリップ形式のグラフィックスデータにおいて、三角形ストリップを構成する特定の三角形の頂点に対して、その三角形と共有する辺を有する他の三角形の頂点を入れておけばよい。例えば、三角形T0の頂点P0、頂点P1、および頂点P2に対して、頂点PAを入れておく。これにより、描画装置は頂点PAを指定することができるとともに、データ形式を簡単にすることができる。
ここで、各三角形で共有される辺上にある画素ブロックを、どちら側の三角形を描画する際に描画するのかを示す描画情報を別途与えても良い。また、描画対象の三角形以外の他の三角形を描画しない場合は、描画対象の三角形と共有される辺を有する他の三角形の頂点の情報は不用になることを利用してもよい。即ち、描画対象の三角形の処理時に、他の三角形と共有される辺上にある画素ブロックを描画するものだけ、グラフィックスデータに他の三角形の頂点を入れておき、そうでない場合は、グラフィックスデータにダミーの頂点を入れておく。これにより、描画装置は、他の三角形の頂点やダミーの頂点を指定することができ、データ形式を簡単にすることができる。
なお、ダミーの頂点に2種類を設け、「描画対象の三角形と他の三角形とで共有される辺上の画素ブロックは他の三角形を描く時に処理することを示す頂点(OTHER)」と、「この辺は共有されていないことを示す頂点(NONE)」とを区別しておくべきである。つまり、頂点(NONE)は、描画対象の三角形の一辺を共有する他の三角形がないことを示す非共有情報であり、頂点(OTHER)は、他の三角形の画素を含むと判別された画素ブロックをラスタライズ処理の対象から除き、その画素ブロックのラスタライズ処理を他の三角形の処理時に行なうべきことを示す除外情報である。したがって、描画装置は、ダミーの頂点が頂点(OTHER)を示す場合には、他の三角形の画素を含む画素ブロック、つまり共有される辺が入っている画素ブロックに対するラスタライズ処理を禁止し、その領域(画素ブロック)を描画しない。そして、描画装置は、ダミーの頂点が頂点(NONE)を示す場合には、その頂点(NONE)に対応する描画対象の三角形の一辺上にある画素ブロックには、他の三角形領域の画素は含まれないと判別し、描画対象の三角形の画素のみを含む画素ブロックを描画する。
図13は、ダミーの頂点を説明するための説明図である。
描画対象の三角形T0に対してOTHER頂点PO1がある場合、描画装置は、描画対象の三角形T0を描画するときに、頂点P0と頂点P2を結ぶ辺上にある画素ブロックを描画処理せず、OTHER頂点PO1を有する三角形を描画するときに、先に描画対象であった三角形T0の一部をその画素ブロックに含めて、その画素ブロックを描画処理する。
また、描画対象の三角形T3に対してNONE頂点がある場合、描画装置は、描画対象の三角形T3を描画するときに、頂点P3と頂点P5を結ぶ辺上にある画素ブロックを描画処理する。
頂点P0、頂点PA、頂点P1、OTHER頂点PO1、頂点P2、頂点PC、頂点P3、OTHER頂点PO2、頂点P4、NONE頂点、頂点P5、頂点PF、頂点P6、および頂点PGを含む頂点データを可変長データとする。そして、通常の頂点(頂点P0、頂点P1、頂点P2、頂点P3、頂点P4、頂点P5、および頂点P6)、および共有する三角形の頂点(頂点PA、頂点PC、頂点PF、および頂点PG)のデータの長さと、ダミー頂点(OTHER頂点PO1、OTHER頂点PO2、およびNONE頂点)のデータの長さとを異なるようにすればダミー頂点のサイズを最小にすることができる。必ずしもダミー頂点が通常の頂点と同じデータサイズを持つ必要は無い。
なお、本変形例では、描画データの形式として三角形ストリップを例に挙げて説明したが、三角形ファンや、Snake、三角形メッシュなどでもよい。
以上、本発明について実施の形態およびその変形例を用いて説明したが、本発明はこれらに限定されるものではない。
例えば、本実施の形態およびその変形例では、全て三角形について説明したが、四角形以上の多角形でもよい。
また、本実施の形態およびその変形例に係る描画装置を、専用の半導体集積回路(LSI)やその一部として構成してもよく、トランジスタやリレー素子など別の手段で描画装置を構成してもよい。
本発明の描画装置は、高価で複雑な回路構成を有することなくメモリバスバンド幅を有効に利用することができるものであって、3次元コンピューターグラフィクスの処理として有効なだけではなく、2次元の処理方法としても有用である。したがってこれらの機能を含む家電機器や、ゲーム機、パーソナルコンピュータなどの分野で利用される可能性が有る。
図1は、三角形ストリップのデータ形式を視覚的に示す図である。
図2は、三角形ファンのデータ形式を視覚的に示す図である。
図3は、スネークのデータ形式を視覚的に示す図である。
図4Aは、三角形メッシュのデータ形式を視覚的に示す図である。
図4Bは、三角形メッシュのデータ形式を示す図である。
図5は、画素ブロックの形状が横長である場合を説明するための説明図である。
図6は、画素ブロックの形状が正方形である場合を説明するための説明図である。
図7は、不用なデータを説明するための説明図である。
図8は、三角形ストリップの場合においてメモリに不用なデータが書き込まれる様子を説明するための説明図である。
図9は、本発明の実施の形態における描画装置の構成を示すブロック図である。
図10は、本発明の実施の形態における描画装置のアルゴリズムを示す概念図である。
図11は、本発明の実施の形態における描画装置の動作を示すフローチャートである。
図12は、本発明の実施の形態における第6の変形例に係る描画装置の処理を説明するための説明図である。
図13は、本発明の実施の形態における第6の変形例に係るダミー頂点を説明するための説明図である。
符号の説明
100 描画装置
111 制御部
112 トライアングル検出部
113 Aエッジ検出部
114 Bエッジ検出部
115 Cエッジ検出部
116 ラスタライズ部
117 メモリR/W部
120 メモリ
130 描画エンジン
200 表示部