(57)【要約】      （修正有）【課題】立体物をポリゴンメッシュでモデリングしディスプレイに描画するための前処理として行われるジオメトリ処理を行う。【解決手段】ジオメトリ処理のうち、頂点処理は頂点ごとに別々のプロセッサに分担して行わせ、そこで得られる処理済み頂点データをプロセッサ間で通知し、三角形ストリップ、独立三角形の処理時において異なるタイミングで座標変換処理、勾配算出処理合うことにより、各プロセッサにおいてポリゴン処理を行うことを可能にする。各プロセッサでは、頂点処理終了後に連続的にポリゴン処理を実行できるので、頂点処理とポリゴン処理との実行タイミングにアンバランスが発生しにくくなり、従って、プロセッサの遊び時間が少ない効率良い演算を行うことができる。【選択図】図７
2011175656.tif 000002
【特許請求の範囲】
【請求項１】
多角形近似された立体形状を示すポリゴンメッシュを処理する処理装置であって、
ポリゴンメッシュは、複数のポリゴンから構成され、
ポリゴンメッシュの取り得る構造として、複数の独立三角形と三角形ストリップを含み、
複数のプロセッサと、
ポリゴンを規定する頂点の頂点データを、頂点毎に、前記複数のプロセッサの何れかに分配する分配手段と、
ポリゴン毎に、当該ポリゴンに関する勾配算出処理を行うべきプロセッサを、前記複数のプロセッサの中から割り当てる割当手段と、を備え、
前記プロセッサは、ポリゴンメッシュが複数の独立三角形である場合と三角形ストリップである場合とでは、異なるタイミングで座標変換処理と勾配算出処理とを切換えながら実行する
ことを特徴とする処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ポリゴンメッシュを描画するためのジオメトリ処理に関する。
【背景技術】
【０００２】
近年、携帯電話等のモバイル機器で動作するいわゆるモバイルゲームが広くプレイされるようになっており、ジオメトリ処理は、このゲームの開発において大きなウェイトをなす。このようなモバイルゲームには、ポリゴンと呼ばれる多角形の組み合わせによって3次元の立体物をモデリングし、ディスプレイに描画するものがある。モデリングされた立体物は、ポリゴンを網目状に敷き詰めた構造をしていることからポリゴンメッシュと呼ばれる。ポリゴンメッシュは、多数の頂点と頂点間を結ぶ辺とで表現されるが、計算の簡単のために、ポリゴンとしては三角形が選ばれることが多い。ポリゴンメッシュの描画には、ポリゴンの頂点に関して座標変換や照度計算を行う頂点処理と、ポリゴンの辺の勾配や内部領域に関する計算等を行うポリゴン処理とが必要とされる。これらの処理は、ポリゴンメッシュを仮想空間上に配置しスクリーンに投影するという主にジオメトリカルな処理を行うためジオメトリ処理と総称するが、このジオメトリ処理がポリゴンメッシュを描画する上でボトルネックとなっている。
【０００３】
ジオメトリ処理を高速に行うために、複数のプロセッサを用いて頂点処理およびポリゴン処理を行う方法が特許文献1に開示されている。この方法によると、頂点処理とポリゴン処理とを別々のプロセッサに分担し、頂点ごとに行われる頂点処理を複数のプロセッサで並行して行い、得られた結果をメインプロセッサに引き渡してポリゴン処理を行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平11-328436号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方法では、頂点処理やポリゴン処理に要する時間、あるいは、描画するポリゴンメッシュの長さによって、頂点処理とポリゴン処理とを実行するタイミングがアンバランスになってしまうことを避けることができない。アンバランスとは、頂点処理が速すぎてポリゴン処理待ちの処理済み頂点データが溢れてしまったり、頂点処理が遅すぎてポリゴン処理で必要な処理済み頂点データが足りなくなってしまい、それらの時間調整をするためにプロセッサに遊び時間ができてしまうことをいう。
【０００６】
これは、ジオメトリ処理が次のような手順で行われるからである。すなわち、まず、ポリゴンメッシュを構成する頂点を順番に読み込み頂点処理を行い、あるポリゴンを構成する頂点すべてに関して頂点処理が終了した段階で、そのポリゴンに対するポリゴン処理を開始する。続いて、同じポリゴンメッシュにおける次の頂点に対して頂点処理を行い、また別のあるポリゴンを構成する頂点すべてに関して頂点処理が終了した段階で、そのポリゴンに対するポリゴン処理を開始するという手順でジオメトリ処理は行われる。従って、例えば、頂点処理に比べてポリゴン処理が短時間で終了する場合、頂点処理が終了するまでポリゴン処理を開始できず、プロセッサが何もせず待機する遊び時間ができてしまう。
【０００７】
また、例えば、ポリゴンメッシュが辺を共有した三角形が長く連なってできている場合は、ポリゴンメッシュを構成する最初の2点を除けば、頂点1つの頂点処理が終了するごとに、三角形の3つの頂点に関する頂点処理が終了することになる。よって、頂点処理とポリゴン処理の実行回数の比はほぼ1:1となる。一方、ポリゴンメッシュが単独の三角形が集まってできている場合は、頂点3つの頂点処理が終了した後、それら3つの頂点で構成される三角形に対するポリゴン処理を開始することができるのであって、次に、また別の三角形のポリゴン処理を開始するためには、また新たな頂点3つの頂点処理が終了するのを待たなければならない。よって、頂点処理とポリゴン処理の実行回数の比はほぼ3:1となる。このような違いがあるため、ポリゴンメッシュがどのような形状をしているかによって、頂点処理とポリゴン処理の実行タイミングがアンバランスになり、プロセッサに遊び時間ができてしまう。
【０００８】
以上のように、頂点処理とポリゴン処理とを別々のプロセッサに分担する方法では、それぞれの処理の実行タイミングにアンバランスができてプロセッサの遊び時間ができてしまうことを避けられない。携帯電話のようなモバイル機器では特に、省スペースおよび省電力の観点から、できるだけ効率良くプロセッサを使用しなければならないが、上記のような遊び時間は、計算資源を無駄にしてしまうという問題がある。
【０００９】
また、描画のフレームレイトは、例えば、10fpsと決まっているので、一定の時間内に一定量の計算を行う必要がある。プロセッサに遊び時間ができてしまう可能性があれば、それを考慮して、残りの時間で計算が完了できるように、プロセッサの動作クロックを上げておく必要があるが、これは消費電力やコストを増大させるという問題がある。
【００１０】
本発明の目的は、上記のようなアンバランスを解消し、プロセッサをより効率的に利用する処理装置を提供することである。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明に係る処理装置は、
ポリゴンメッシュは、複数のポリゴンから構成され、
ポリゴンメッシュの取り得る構造として、複数の独立三角形と三角形ストリップを含み、
複数のプロセッサと、
ポリゴンを規定する頂点の頂点データを、頂点毎に、前記複数のプロセッサの何れかに分配する分配手段と、
ポリゴン毎に、当該ポリゴンに関する勾配算出処理を行うべきプロセッサを、前記複数のプロセッサの中から割り当てる割当手段と、を備え、
前記プロセッサは、ポリゴンメッシュが複数の独立三角形である場合と三角形ストリップである場合とでは、異なるタイミングで座標変換処理と勾配算出処理とを切換えながら実行することを特徴とする処理装置である。
【発明の効果】
【００１２】
上記の構成の処理装置によると、立体物をモデリングしたポリゴンメッシュの描画において、ポリゴンを構成する個々の頂点に対して演算を行う頂点処理を、複数のプロセッサに分担して行わせ、その結果得られる処理済み頂点データをプロセッサ間で通知し合って互いに供給することで、どのプロセッサにおいてもポリゴン処理をすることが可能となる。複数のプロセッサに処理を分担させ、かつ、個々のプロセッサで頂点処理とポリゴン処理とを連続して行うことができるため、頂点処理とポリゴン処理の実行タイミングのアンバランスを解消できる。
【００１３】
それによって、プロセッサの遊び時間ができにくくなるため、プロセッサの性能を十分に発揮させることができ、携帯電話に搭載されるような低スペックなプロセッサであっても、映像を途切れたりさせることなく描画できるようになる。プロセッサが計算を実行する時間を長くとれるので、低いクロックで動作させることができるようになり、低消費電力、低コスト化に有用である。
【００１４】
また、本発明における処理装置が含む複数のプロセッサの内部構成はすべて同じになっており、各プロセッサで同じプログラムを走らせることで上記の処理を実現できる。そのため、プロセッサの数を変えても、プログラムを変更することなく拡張することができる。
【００１５】
ここで、前記供給手段は、各プロセッサごとに入出力部を有し、各入出力部は、当該入出力部が帰属するプロセッサと異なるプロセッサに帰属している複数個のレジスタから変換済み座標を受け取り、当該入出力部が帰属するプロセッサと同じプロセッサに帰属している演算部に送り込むとしてもよい。
【００１６】
演算部における頂点処理で得られる変換済み座標が、頂点処理が行われたプロセッサと同じプロセッサに属するレジスタに格納されていても、他のプロセッサに属する演算部におけるポリゴン処理で、その変換済み座標が必要となれば、入出力部が読み出してくることができるので、どのプロセッサの演算部においても、頂点処理のあとにポリゴン処理を連続して行うことができ、頂点処理とポリゴン処理のアンバランスが発生しにくくなる。
【００１７】
ここで、前記供給手段は、各プロセッサごとに入出力部を有し、各入出力部は、当該入出力部が帰属するプロセッサと同じプロセッサに帰属している演算部で変換された変換済み座標を受け取り、当該入出力部が帰属するプロセッサと異なるプロセッサに帰属している複数個のレジスタに送り込むとしてもよい。
【００１８】
演算部における頂点処理で得られる変換済み座標は、その変換済み座標を用いてポリゴン処理ガ行われる演算部が属するプロセッサと同じプロセッサに属するレジスタに格納されるので、どのプロセッサの演算部においても、頂点処理のあとにポリゴン処理を連続して行うことができ、頂点処理とポリゴン処理のアンバランスが発生しにくくなる。
【００１９】
ここで、前記供給手段は、各プロセッサごとに入出力部を有し、各入出力部は、当該入出力部が帰属するプロセッサと同じプロセッサに帰属している演算部で変換された変換済み座標、もしくは、当該入出力部が帰属するプロセッサと同じプロセッサに帰属しているレジスタから変換済み座標を受け取り、当該入出力部が帰属するプロセッサと異なるプロセッサに帰属している入出力部に送り込み、複数のプロセッサにおける個々の入出力部は、変換済み座標の送受信において循環的に連結されているとしてもよい。
【００２０】
演算部における頂点処理で得られる変換済み頂点座標を、頂点処理が行われた演算部が属するプロセッサとは異なるプロセッサに属する演算部に通知するために、それぞれのプロセッサに属する入出力部は唯一つの隣りのプロセッサに属する入出力部に変換済み頂点座標を通知する。最後のプロセッサに属する入出力部は、最初のプロセッサに属する入出力部に通知することで、どの変換済み頂点座標も、適切なプロセッサに属する演算部へと通知することができる。従って、どのプロセッサの演算部においても、頂点処理のあとにポリゴン処理を連続して行うことができ、頂点処理とポリゴン処理のアンバランスが発生しにくくなる。特に、ファンデータのようにポリゴン処理に用いられる変換済み頂点座標が、必ずしも連続する3頂点でない場合でも、隣りのプロセッサに属する入出力部へ通知する変換済み頂点座標を選択して送り出すので、容易に対応することができる。
【００２１】
ここで、前記供給手段は、各プロセッサ内にある演算部の出力段と、各プロセッサ内にあるレジスタの入力段とに介在するクロスバススイッチを含むとしてもよい。
クロスバスを使って、プロセッサ間での処理済み頂点データの送受信を行うので、変換済み頂点データの送り込み先が特定のプロセッサに固定されていなくても、クロスバスを制御することで、送り込み先のプロセッサを変更することができる。
【００２２】
ここで、前記各演算部は、前記頂点処理を行った直後に前記勾配処理を行うとしてもよい。
各プロセッサの演算部において、頂点処理が終了するとすぐにポリゴン処理を開始するので、無駄な遊び時間ができにくくなる。
【００２３】
ここで、前記供給手段は、隣接する一組のプロセッサのうち、一方のプロセッサ内にある演算部の出力段と、他方のプロセッサ内にあるレジスタの入力段とを結ぶ接続線、及び、両端に位置する一組のプロセッサのうち、一方のプロセッサ内にある演算部の出力段と、他方のプロセッサ内にあるレジスタの入力段とを結ぶ接続線にて構成されるとしてもよい。
【００２４】
本処理装置にはポリゴンメッシュを構成する頂点の座標が、一定の決まった順序で入力されるので、例えば、三角形ストリップを処理する場合は、連続する3つの頂点でポリゴンが構成されることが決まっている。そのため、変換済み座標を送受信も、設計段階に決められた特定プロセッサ間でのみなされればよく、複雑な構成のプロセッサを必要としない。
【００２５】
ここで、前記プロセッサ間の構成は処理装置内で並列的であり、各プロセッサでは同一のプログラムが実行されるとしてもよい。
処理装置内部でのプロセッサが並列的に構成されているため、各プロセッサで同一のプログラムを動かしておきながら、相互に連携してポリゴン処理を行うことができる。プログラムがプロセッサの数に依らないので、プロセッサの数を増減させる拡張が容易にできる。
【００２６】
ここで、前記処理装置は、携帯電話に内蔵され、モバイルゲームにおけるポリゴンメッシュの処理を行うとしてもよい。
本処理装置を携帯電話に内蔵することにより、モバイルゲーム等におけるグラフィックス描画処理を高速化できる。
【００２７】
ここで、前記プログラム、および、ポリゴンを規定する頂点の座標と辺に関する情報は、ネットワークから携帯電話のメモリにダウンロードされたものであるとしてもよい。
本処理装置におけるプロセッサで動作するプログラム、頂点データおよびポリゴンデータは、ネットワークからダウンロードされ、携帯電話のメモリに記録されるので、携帯電話はモデリング処理をする必要はなく、ダウンロードされたデータに対してダウンロードされたプログラムを適用するだけでよい。
【００２８】
ここで、前記処理装置は、携帯電話のメモリ上のプログラム、および、ポリゴンを規定する頂点の座標と辺に関する情報を格納した領域のアドレスを携帯電話のメインプロセッサから通知されるとしてもよい。
【００２９】
本処理装置は、プログラム、頂点データおよびポリゴンデータが格納されたメモリ領域のアドレスを、CPUより通知されるので、大量のデータでも高速にアクセスできる。
ここで、前記処理装置は浮動小数点演算器を備え、前記頂点の座標は、浮動小数点型に変換された座標であるとしてもよい。
【００３０】
座標データを浮動小数点型で扱うので、丸め誤差等によっていびつなポリゴンが描画されてしまうことを防ぐことができる。
ここで、前記座標変換処理は、他のプロセッサにおける座標変換処理とはタイミングをずらして開始されるとしてもよい。
【００３１】
各プロセッサにおける座標変換処理の開始タイミングをずらすことにより、ポリゴンを構成する最後の頂点の座標変換が終了した時点で、既に変換済みの他の頂点座標を使って、勾配算出処理を開始することができる。
【００３２】
ここで、前記ポリゴンは三角形ポリゴンであるとしてもよい。
最も単純なポリゴンである三角形ポリゴンを用いることで、勾配計算処理が簡単になる。頂点の数とポリゴンの数との比が1に近いので、頂点処理とポリゴン処理のアンバランスを抑制することができる。
【００３３】
ここで、前記各演算部は、各ポリゴンを規定する複数の頂点の照度をもとに、ポリゴンの辺上および内部の照度を算出するとしてもよい。
各演算部において、ポリゴンを構成する頂点における照度を計算し、それらをもとに、ポリゴンの辺上や内部における照度を計算することで、仮想空間上でポリゴンへの光の当たり具合を再現し、立体的な描画を行うことができる
【図面の簡単な説明】
【００３４】
【図１】本発明における携帯電話の外観図。
【図２】ポリゴンによるモデリングの例を示す図。
【図３】三角形ストリップの例を示す図。
【図４】三角形ファンの例を示す図。
【図５】独立三角形の例を示す図。
【図６】本発明における携帯電話の構成図。
【図７】本発明の実施形態1における処理装置の構成図。
【図８】本発明の実施形態1における処理装置の分配部における分配処理を説明する図。
【図９】本発明の実施形態1における処理装置の割当部における割当処理を説明する図。
【図１０】頂点処理で行われる内部処理の流れを示す図。
【図１１】頂点処理における座標変換を説明する図。
【図１２】ポリゴン処理で行われる内部処理の流れを示す図。
【図１３】ポリゴン処理における勾配計算を説明する図。
【図１４】本発明の実施形態1における処理装置の動作を説明する図。
【図１５】本発明の実施形態1における処理装置のタイミングチャート。
【図１６】本発明の実施形態1における処理装置の動作のフローチャート。
【図１７】本発明の実施形態1における処理装置の各プロセッサにおける処理を示すフローチャート。
【図１８】クリッピング処理を説明する図。
【図１９】表裏判定およびバックフェイスカリングを説明する図。
【図２０】本発明の実施形態2における処理装置の構成図。
【図２１】本発明の実施形態2における処理装置の動作を説明する図。
【図２２】本発明の実施形態3における処理装置の構成図。
【図２３】本発明の実施形態3における処理装置の動作を説明する図。
【発明を実施するための形態】
【００３５】
〔実施形態1〕
本発明の実施形態1における処理装置は、図1のような携帯電話に内蔵され、メモリ上に記録されたゲームプログラムおよびゲームデータを元に、ディスプレイに立体物の投影像を描画するためのセットアップデータを生成する。
【００３６】
ここで、立体物とはゲームに登場するキャラクターや構造物のことであり、ゲームデータは、これらの立体物をポリゴンを用いてモデリングしたときの頂点の座標を含んだ頂点データ、および、どの頂点を結んでポリゴンが構成されるかを示す情報を含んだポリゴンデータである。また、ゲームプログラムは、これらの頂点データとポリゴンデータからセットアップデータを算出するためのマイクロコードを含んでいる。セットアップデータとは、ディスプレイの画素ごとに照度等の画素情報を対応させたデータ列である。
【００３７】
例えば、図2には、(a)カメ、(b)角錐、(c)Λ型物体が三角形ポリゴンによってモデリングされる例が示されている。モデリングは、対象物に対して固定されたローカル座標系において、三角形ストリップ、三角形ファン、独立三角形を組み合わせてなされる。ポリゴンは必ずしも三角形である必要はないが、演算の容易さから、実際には三角形が選ばれることが多く、この例でも三角形ポリゴンを前提とする。
【００３８】
三角形ストリップとは、図3のように、辺を共有する三角形が細長く連なったものであり、図2(a)のカメの甲羅が三角形ストリップで近似されている。図3(a)に示す三角形ストリップは、6つの頂点のローカル座標Li(xi,yi,zi)(i=1,2,3,4,5,6)を含んだ頂点データと、頂点Li,L(i+1),L(i+2)(i=1,2,3,4)がポリゴンΔiを構成することを示すポリゴンデータによって規定される。
【００３９】
三角形ファンとは、図4のように、辺を共有する三角形が扇状に連なったものであり、図2(a)のカメの尻尾が三角形ファンで近似されている。図4(a)に示す三角形ファンは、6つの頂点のローカル座標Li(xi,yi,zi)(i=1,2,3,4,5,6)を含んだ頂点データと、頂点L1,L(i+1),L(i+2)(i=1,2,3,4)がポリゴンΔiを構成することを示すポリゴンデータによって規定される。
【００４０】
独立三角形とは、図5のように、三角形が1つずつ独立しているものであり、図2(b)の角錐の上に立つ旗が独立三角形で近似されている。図5(a)に示す独立三角形は、6つの頂点のローカル座標Li(xi,yi,zi)(i=1,2,3,4,5,6)を含んだ頂点データと、頂点L3i-2,L3i-1,L3i(i=1,2)がポリゴンΔiを構成することを示すポリゴンデータによって規定される。
【００４１】
上記のように、対象物に固定された個々のローカル座標系でモデリングされた各立体物は、ワールド座標系で定義される仮想空間に配置することで、相互の位置関係が決定される。図3(b)、図4(b)、図5(b)は、ローカル座標Li(xi,yi,zi)がワールド座標Wi(Xi,Yi,Zi)に変換されることを示している。
【００４２】
〈携帯電話の構成〉
図6は、本発明の実施形態1における処理装置100を内蔵した携帯電話の構成図である。ゲームプログラムおよびゲームデータはネットワークで配信されているものをダウンロードできるようになっており、操作入力部140から入力されるユーザの指示に従って、送受信部130から受信され、メモリ120に記録される。ゲームプログラムが実行されると、CPU 110は、ジオメトリ処理を行うマイクロコードと、ジオメトリ処理で用いられる頂点データとポリゴンデータとを記憶した領域、演算に必要な種々のパラメータを記憶した領域のメモリ上でのアドレスを処理装置100に通知する。処理装置100は、通知されたアドレスからマイクロコードを読み込み、メモリ上の頂点データとポリゴンデータとに対してマイクロコードを実行することで、セットアップデータを生成する。生成されたセットアップデータは、ディスプレイ150に転送され描画がなされる。
【００４３】
〈処理装置の構成〉
次に、本発明の実施形態1における処理装置の構成について説明する。図7は、本発明の実施形態1における処理装置の構成図である。本発明の実施形態1における処理装置は、4つのプロセッサ200a,b,c,dと、それらを駆動するクロック240、頂点データを各プロセッサに分配する分配部250、及び、ポリゴン処理を実行するプロセッサを割り当てる割当部260とから構成される。各プロセッサ200a,b,c,dは、レジスタ210a,b,c,d、演算部220a,b,c,d、および、入出力部230a,b,c,dをそれぞれ有している。
【００４４】
処理装置は、頂点データおよびポリゴンデータを入力として受け付け、各頂点データを順番にプロセッサに分配し、各プロセッサで、頂点処理およびポリゴン処理が行われた結果得られるセットアップデータを出力する。
【００４５】
(分配部250)
分配部250は、頂点の座標変換を並列化して実行させるために、ポリゴンを規定する頂点を、各々のプロセッサに分配する。プロセッサの数をMとすると、座標変換は並列度Mで行われることになる。ここで、分配とは、ポリゴンメッシュを構成するすべてのポリゴンに関して、ポリゴンを規定する頂点の座標をメモリから読み出して、各頂点に対して1つのプロセッサを対応させ、対応するそれぞれのプロセッサ内の演算部に読み出した頂点の座標を引き渡すことである。ポリゴンを規定する頂点の数をKとすると、プロセッサ数Mと頂点数Kの大小関係によって、分配部250による分配には、次の3つのパターンがある。
【００４６】
M=Kの場合、プロセッサ側には、1つのポリゴンの全ての頂点に関する座標変換を同時に実行する能力がある。この場合、ポリゴンを規定するK=M個の頂点を読み出して、M個の各プロセッサに同時に出力することで分配はなされる。
【００４７】
M>Kの場合、プロセッサ側には、1つのポリゴンの全ての頂点の座標変換を同時に実行すると共に、他のポリゴンの頂点の座標変換を実行する余力がある。この場合、ポリゴンを構成するK個の頂点と、次のポリゴンを構成するK個の頂点のうちの(M-K)個の頂点とをメモリから読み出して、合計M個の頂点をM個の各プロセッサに出力することで分配はなされる。但し、K<(M-K)の場合は、次のポリゴンを構成するK個の頂点全てを読み出しても、(M-K)個にならないので、更に次以降のポリゴンを構成する頂点も読み出し、ポリゴンメッシュの最後の頂点まで読み出してしまわない限りは、合計M個の頂点がプロセッサに同時に出力されるようにする。
【００４８】
M<Kの場合、プロセッサ側には、1つのポリゴンの全ての頂点の座標変換を同時に処理する能力がない。この場合、ポリゴンを構成するK個の頂点のうち、まずM個を読み出し、それらの座標変換を行ったあと、残りの(K-M)個の頂点を読み出すという処理が必要となる。
【００４９】
なお、分配がなされたあとプロセッサにおいて実行される処理は、上述の座標変換に限らず照度計算等も含み、実際には頂点処理が行われる。また、上では頂点がM個のプロセッサに同時に出力されると述べたが、実際にはメモリから読み出された頂点は、逐次プロセッサに出力される。上でいう同時とは、分配部250がメモリから合計M個の頂点を読み出すまでを1周期としたとき、同じ周期内でという意味である。
【００５０】
分配を行うにあたって、具体的に、どの頂点を、どのプロセッサに出力するかという出力先の決定は、連番であるインデックスを付与された個々の頂点を順番にメモリから読み出し、連番であるインデックスを付与された個々のプロセッサに順番に出力し、最後のプロセッサまでいくと最初のプロセッサに戻って出力することでなされる。
【００５１】
上記の分配処理の具体的な手順を、図8のフローチャートを参照しながら説明する。分配部250は、まず、固定値N、Mの初期化を行う。分配部250は、メモリからポリゴンデータを読み出し、ジオメトリ処理の対象となるポリゴンメッシュの頂点の数をNとする。また、メモリからパラメータを読み出し、処理装置に含まれるプロセッサの数をMとする(ステップ3001)。すなわち、ポリゴンメッシュを構成する頂点には1からNまでのインデックスが付与され、プロセッサには1からMまでのインデックスが付与されている。分配部250は、読み出す頂点のインデックスをn=1と初期化し(ステップ3002)、頂点nの分配先となるプロセッサのインデックスをm=1と初期化する(ステップ3003)。分配部250は、頂点nをメモリから読み出し、プロセッサmに分配する(ステップ3004)。次に、頂点を指すインデックスn、及び、プロセッサを指すインデックスmを1ずつ増加させ(ステップ3005)、頂点を指すインデックスnが全頂点の数Nより大きくなれば(ステップ3006 Y)、終了する。頂点を指すインデックスnが全頂点の数Nより大きくなければ(ステップ3006 N)、プロセッサを指すインデックスmと全プロセッサの数Mとを比較し、mがMより大きくなれば(ステップ3007 Y)、ステップ3003に戻り、分配先のプロセッサをm=1に戻す。mがMより大きくなければ(ステップ3007 N)、ステップ3004に戻り、分配処理を継続する。
【００５２】
分配部250は、以上のようにして、分配処理を行うので、例えば、図3に示すような三角形ストリップ、あるいは、図5に示すような独立三角形を処理する場合は、頂点L1、L2、L3、L4をプロセッサ200a,b,c,dに順番に分配し、最後のプロセッサまで分配したら、次の頂点L5は、最初のプロセッサ200aに戻って分配する。
【００５３】
以上が分配部250の説明である。
(割当部260)
割当部260は、あるポリゴンの勾配算出を行うにあたって、勾配算出を担当することになるプロセッサを、当該ポリゴンに割り当てる。ここで、割当とは、1からMまであるプロセッサに対して、ある与えられたポリゴンpに関する勾配算出を行うプロセッサmを決定し、プロセッサmにおいて勾配算出を行わせることである。このような割当が必要であるのは以下の理由による。つまり、座標変換は、並列度Mの並列計算が可能であったが、勾配算出は、そのような並列計算はできない。なぜなら、複数のポリゴンの変換後の頂点座標が一度に揃わないからである。そうすると、本来、座標変換が任務であるはずのプロセッサのどれかに勾配算出を割り当て、このプロセッサに勾配算出をさせることが理想的である。このように、勾配算出は並列計算に不向きであるため、これに割り当てるべきプロセッサを動的に決定するというのが、割当部260の役割である。この割当は、勾配算出を行うべきポリゴンを構成する頂点のうち、最後の頂点に付与された連番であるインデックスを、プロセッサ数Mで割り、そのとき得られる剰余を、出力先のプロセッサ番号として採用することでなされる。これは、各ポリゴンを複数のプロセッサが交代で処理するための配慮である。分配処理においてプロセッサに分配された頂点座標が、ポリゴンを構成する頂点のうちの最後の頂点であるかどうかを判定するために、ポリゴンメッシュが三角形ストリップかどうか等を示す形状の特性が考慮される。
【００５４】
なお、割当がなされたあとプロセッサにおいて実行される処理は、上述の勾配算出に限らずポリゴン内部領域の演算等も含み、実際にはポリゴン処理が行われる。
上記の割当処理の具体的な手順を、図9のフローチャートを参照しながら説明する。図9では、演算がしやすいために実際によく採用される三角形ポリゴンの場合での処理を示している。割当部260は、まず、固定値N、Mの初期化を行う。割当部260は、メモリからポリゴンデータを読み出し、ジオメトリ処理の対象となるポリゴンメッシュの頂点の数をNとする。また、メモリからパラメータを読み出し、処理装置に含まれるプロセッサの数をMとする(ステップ3101)。割当部260は、処理中のポリゴンメッシュの種類に関する情報を得るために、メモリからポリゴンデータを読み出す(ステップ3102)。割当部260は、頂点のインデックスをn=3、割当対象となるポリゴンのインデックスをp=1と初期化する(ステップ3103)。割当部260は、頂点nの頂点処理を行うプロセッサを指すインデックスmを、頂点を指すインデックスnを、プロセッサの数Mで割った余りとして算出する(ステップ3104)。割当部260は、ポリゴンpのポリゴン処理をプロセッサmで行うように割り当てる(ステップ3105)。次に、処理中のポリゴンメッシュの種類が、三角形ストリップである場合は(ステップ3106 Y)、頂点を指すインデックスn、及び、割当対象となるポリゴンを指すインデックスpを、それぞれ1ずつ増加させる(ステップ3107)。処理中のポリゴンメッシュの種類が、三角形ストリップでない場合は(ステップ3106 N)、処理中のポリゴンメッシュは独立三角形とみなされるので、頂点を指すインデックスnを3だけ増加し、割当対象となるポリゴンを指すインデックスpは1だけ増加させる(ステップ3108)。頂点を指すインデックスnが、全頂点の数Nよりも大きければ(ステップ3109 Y)、割当処理を終了し、全頂点の数Nよりも大きくなければ(ステップ3109 N)、ステップ3104に戻り、割当処理を継続する。
【００５５】
割当部260は、以上のようにして、割当処理を行うので、例えば、図3のような三角形ストリップを処理する場合は、3番目の頂点L3の頂点処理を行うプロセッサ200cで、頂点L1、L2、L3で構成されるポリゴンΔ1のポリゴン処理を行うように割り当て、4番目の頂点L4の頂点処理を行うプロセッサ200dで、頂点L2、L3、L4で構成されるポリゴンΔ2のポリゴン処理を行うように割り当てる。また、図5のような独立三角形を処理する場合は、3番目の頂点L3の頂点処理を行うプロセッサ200cで、頂点L1、L2、L3で構成されるポリゴンΔ1のポリゴン処理を行うように割り当て、6番目の頂点L6の頂点処理を行うプロセッサ200bで、頂点L4、L5、L6で構成されるポリゴンΔ2のポリゴン処理を行うように割り当てる。
【００５６】
以上が割当部260の説明である。
演算部は、乗算器や加算器で構成されるALU(Arithmetic and Logic Unit)であり、分配部250により分配された頂点データに対して頂点処理を行い、処理済み頂点データを同じプロセッサ内のレジスタに出力する。また、演算部は、割当部260によりポリゴン処理を行うように割り当てられている場合は、同じプロセッサの入出力部から与えられた処理済み頂点データに対してポリゴン処理を行い、セットアップデータを出力する。
【００５７】
レジスタは、同じプロセッサの演算部で頂点処理された処理済み頂点データを格納する。
入出力部は、同じプロセッサの演算部における三角形ポリゴンのポリゴン処理に必要な処理済み頂点データ3つのうち、別のプロセッサの演算部で頂点処理された2つを、それらのプロセッサ内のレジスタから読み出し、入出力部と同じプロセッサ内の演算部に転送する。
【００５８】
処理装置には三角形ポリゴンメッシュの頂点データが規則的に入力されるので、それらを処理する4つのプロセッサ内の入出力部が、どのプロセッサ内の入出力部から処理済み頂点データを取得すべきかは、設計段階で固定される。図7のように、4つのプロセッサを並列的に構成することで、各プロセッサでは同一のプログラムを実行するようになっている。このようにすることで、プロセッサの数を増減させる場合でも、新たにプログラムを組み直す必要がなく、容易に対応できる。
【００５９】
入出力部は、各プロセッサに設置され、それぞれは同一のプログラムに従って独立に動作しているが、プロセッサ間での処理済み頂点データの受け渡しは、各入出力部と処理済み頂点データの伝送経路を含めた全体が処理済み頂点データの供給部として働く。
【００６０】
〈頂点処理〉
ここで、頂点処理の内容について説明する。図10は、頂点処理で行われる内部処理の流れを示した図である。演算部は、モデリングされた立体物のローカル座標L(x,y,z)を含む頂点データを取得すると、まず、座標変換部300でワールド座標W(x,y,z)に変換する。この座標変換は、図11(a)のように、カメがモデリングされたローカル座標系x1y1z1と、図11(b)のように、角錐がモデリングされたローカル座標系x2y2z2とは、互いに独立であり、図11(c)のように、1つのワールド座標系XY Zの所定の位置に、これらの立体物を配置するときのローカル座標系からワールド座標系への座標変換である。座標変換において、立体物の向き指定する回転角、位置を指定する並進ベクトル、大きさを指定するスケール比等のパラメータがメモリから読み出される。
【００６１】
次に、視野変換部310では、カメラ位置を原点とし、カメラから見た座標系でのワールド座標W'(X',Y',Z')へと座標変換を行う。視点をカメラにし、カメラの方向やズームレベルを指定することにより、立体物を投影するスクリーンが決定される。
【００６２】
次に、照度計算部320では、光源位置から照射される光を立体物に当てたときの各頂点における照度fの計算を行う。ここでは一例として照度を取り上げているが、頂点の色など他の特性であっても同様である。
【００６３】
最後に、ビューポート変換部330では、ディスプレイの解像度等を含んだディスプレイ情報を読み出し、3次元のワールド座標をスクリーンに投影する。これによって、3次元の仮想空間上の頂点の座標は、2次元のスクリーン座標P(ξ,η)に変換される。
【００６４】
上記のように、ローカル座標系で定義された頂点データを、スクリーン平面上の2次元座標と照度等の頂点の特性を示す情報を含んだ頂点データに変換にすることが頂点処理であり、頂点処理された頂点データを処理済み頂点データと呼ぶ。
【００６５】
〈ポリゴン処理〉
次に、ポリゴン処理の内容について説明する。
ポリゴン処理は、演算部が頂点処理を終えたあと、ある条件が満たされている場合に実行される。その条件とは、ポリゴンメッシュの種類と頂点処理を行った頂点の順番に依存し、ポリゴンデータを参照することで、ポリゴン処理を行うかどうかが判断される。ポリゴンデータには、現在処理しているポリゴンメッシュがどのような種類であるかを示す情報が含まれており、割当部はそれを見てポリゴンメッシュの種類を判定する。図3のような三角形ストリップを処理している場合は、演算部が頂点処理を行った頂点が、ポリゴンメッシュの3番目以降の頂点ならば、ポリゴン処理を開始するように割当部は指示する。図5のような独立三角形を処理している場合は、演算部が頂点処理を行った頂点が、ポリゴンメッシュにおける頂点配列において3の倍数番目の頂点である場合に、ポリゴン処理を開始するように割当部は指示する。このとき、入出力部は、ポリゴンメッシュにおける頂点の配列において1つ前と2つ前の頂点に関する処理済み頂点データを取得し演算部に送り込み、演算部は、自身で頂点処理した処理済み頂点データと合わせた合計3つの処理済み頂点データをもとにポリゴン処理を行う。
【００６６】
本実施例では、図7に示すように、入出力部は、1つ前あるいは2つ前の頂点に関する処理済み頂点データを取得することしか想定していないので、図4のような三角形ファンは独立三角形として扱う。
【００６７】
図12は、ポリゴン処理で行われる内部処理の流れを示した図である。上述したように、まず、勾配計算部340が頂点処理で得られた処理済み頂点データを3つ取得する。勾配計算部340は、これらの3頂点がスクリーン上に形成する三角形ポリゴンの辺の勾配を計算することで、三角形ポリゴンの内部と外部との境界を決定する。また、勾配計算部340は、三角形ポリゴンの辺上における照度を、頂点における照度を内挿することで算出する。
【００６８】
例えば、図3の最初のポリゴンΔ1を処理する場合について説明する。図13(a)は、ポリゴンΔ1のスクリーン上に投影された3頂点P1,P2,P3を示している。勾配計算部340は、まず、頂点P1とP2、P2とP3、P3とP1を結ぶ線分の勾配を計算し、図13(b)のように、三角形ポリゴンの辺を決定する。次に、頂点の照度をもとに辺上の点の照度を内挿する。図13(c)は、頂点P1、P2、P3の照度をそれぞれf1、f2、f3としたとき、横軸に頂点の相対的な位置関係を、縦軸に照度をプロットした図である。辺P1P2上の点P4の照度f4は、図13(c)上で、点(P1,f1)と点(P2,f2)を結ぶ直線上で、点P4の位置における値として算出される。また、辺P2P3上の点P5の照度f5も同様に、図13(c)上で、点(P2,f2)と点(P3,f3)を結ぶ直線上で、点P5の位置における値として算出される。
【００６９】
このようにして、三角形ポリゴンの辺上の照度を算出したあと、内部領域計算部350で三角形ポリゴンの内部領域における照度の算出を行う。三角形ポリゴンの内部の点における照度も、辺上の点の照度と同様に、頂点の照度と辺上の点の照度とから内挿することにより算出される。
【００７０】
以上のようにして決定された三角形ポリゴンの内部および辺上の画素数がNであったとすると、N個のスクリーン座標(ξi,ηi)と照度fiの組(i=1,2,…,N)としてセットアップデータが生成される。
【００７１】
〈動作〉
次に、本処理装置の動作を、図14を参照しながら説明する。図14は、本発明の実施形態1における処理装置において、図3の三角形ストリップが処理される様子を順を追って示した図である。図14の各ステップは、図7の構成図を簡略化して描いたものであり、ALUはそれぞれ演算部220a,b,c,d、Rはそれぞれレジスタ210a,b,c,dであり、ALUとRの組が処理装置中に4つあるプロセッサ200a,b,c,dに対応している。図14では、入出力部230a,b,c,dは省略している。図14では、明記していないが、4つずつあるプロセッサ等は、図7と同様に左から順にa,b,c,dに対応する。
【００７２】
まず、図14(a)は処理開始直前の状態である。図3の三角形ストリップは6個の頂点で構成されており、図14(a)では、それらの頂点データL1,L2,…,L6が、三角形ストリップを構成する順番に処理待ち状態にある。矢印は、頂点データL1が、プロセッサ200aの演算部220aに入力されることを示している。
【００７３】
図14(b)では、プロセッサ200aの演算部220aに入力された頂点データL1が頂点処理されて、処理済み頂点データP1に変換される。処理済み頂点データP1は、同じプロセッサ200aのレジスタ210aに出力される。また、次の頂点データL2は、プロセッサ200bの演算部220bに入力される。
【００７４】
図14(c)では、プロセッサ200bの演算部220bに入力された頂点データL2が頂点処理されて、処理済み頂点データP2に変換される。処理済み頂点データP2は、同じプロセッサ200bのレジスタ210bに入力される。更に、頂点データL3が、プロセッサ200cの演算部220cに入力される。
【００７５】
図14(d)では、プロセッサ200cの演算部220cに入力された頂点データL3が頂点処理されて、処理済み頂点データP3に変換される。この段階で、三角形ポリゴンΔ1を構成する3頂点の頂点処理が終了するので、プロセッサ200cの入出力部230cは、プロセッサ200aのレジスタ210a、および、プロセッサ200bのレジスタ210bから処理済み頂点データP1、P2を取得し、同じプロセッサ200cの演算部220cに出力する。また、前の段階と同様に、処理済み頂点データP3は、同じプロセッサ200cのレジスタ210cに出力され、頂点データL4は、プロセッサ200dの演算部220dに入力される。
【００７６】
図14(e)では、プロセッサ200cの演算部220cにおいて、処理済み頂点データP1、P2、P3を用いてポリゴン処理が行われ、三角形ポリゴンΔ1に関するセットアップデータが出力される。この段階では、三角形ポリゴンΔ2を構成する3頂点の頂点処理が終了するので、プロセッサ200dの入出力部230dが、プロセッサ200bの演算部220bとプロセッサ200cの演算部220cから処理済み頂点データP2とP3を取得し、同じプロセッサ200dの演算部220dに入力する。また、処理済み頂点データP4は、プロセッサ200dのレジスタ210dに出力される。この例では、処理装置がもつプロセッサは4つなので、次に入力される頂点データL5は、プロセッサ200aの演算部220aに入力される。
【００７７】
図14(f)では、プロセッサ200dの演算部220dにおいて、処理済み頂点データP2、P3、P4を用いてポリゴン処理が行われ、三角形ポリゴンΔ2に関するセットアップデータが出力される。前の段階と同様に、プロセッサ200aの入出力部230aは、プロセッサ200cの演算部220cとプロセッサ200dの演算部220dから処理済み頂点データP3とP4を取得し、同じプロセッサ200aの演算部220aに入力する。処理済み頂点データP5は、プロセッサ200aのレジスタ210aに出力される。このとき、プロセッサ200aのレジスタ210aに格納されていた処理済み頂点データP1は上書きされることになる。最後の頂点データL6は、プロセッサ200bの演算部220bに入力される。
【００７８】
図14(g)では、プロセッサ200aの演算部220aにおいて、処理済み頂点データP3、P4、P5を用いてポリゴン処理が行われ、三角形ポリゴンΔ3に関するセットアップデータが出力される。また、プロセッサ200bの入出力部230bは、プロセッサ200dの演算部220dとプロセッサ200aの演算部220aから処理済み頂点データP4とP5を取得し、同じプロセッサ200bの演算部220bに入力する。処理済み頂点データP6は、プロセッサ200bのレジスタ210bに出力される。
【００７９】
最後に、図14(h)では、プロセッサ200bの演算部220bにおいて、処理済み頂点データP4、P5、P6を用いてポリゴン処理が行われ、三角形ポリゴンΔ4に関するセットアップデータが出力される。
【００８０】
以上のようにして、図3の三角形ストリップのジオメトリ処理が終了し、処理装置は、三角形ポリゴンΔ1、Δ2、Δ3、Δ4のセットアップデータを出力する。
ここでは、説明のために1サイクルのジオメトリ処理しか行っていないが、実際には、三角形ストリップの最後の頂点の頂点処理が終了したあと、連続して最初の頂点の処理を開始してもよい。
【００８１】
〈タイミングチャート〉
次に、上記のようにジオメトリ処理が行われる場合に、頂点処理およびポリゴン処理が各プロセッサ200a,b,c,dにおいてどのようなタイミングで行われるかを、図15を参照しながら説明する。
【００８２】
図15は、本発明の実施形態1における処理装置のタイミングチャートであり、横軸に時刻tをとり、最上段にクロック240が出力するクロック信号を示してある。図15(a)は、図3の三角形ストリップを処理する場合で、図15(b)は、図5の独立三角形を処理する場合である。
【００８３】
まず、図15(a)の三角形ストリップを処理する場合について説明する。
時刻t=0に、演算部220aにおいて、頂点P1の頂点処理が開始する。この例では、頂点処理にはクロック3周期分の時間がかかるとする。その後、半クロック分遅れた時刻t=1に、演算部220bにおいて、頂点P2の頂点処理が開始する。続いて、時刻t=2に、演算部220cにおいて、頂点P3の頂点処理が開始し、時刻t=3に、演算部220dにおいて、頂点P4の頂点処理が開始する。1つの三角形ポリゴンを処理するには、3つの頂点の頂点処理が終了しておく必要があるが、最後の頂点が終了した時点で、1つ前と2つ前の2頂点の頂点処理が終了していることが保証されるように、番号の大きい頂点の頂点処理は、番号の小さい頂点の頂点処理よりも、わずかに遅らせて開始させている。
【００８４】
時刻t=6に、頂点P1の頂点処理が終了するが、この時点ではポリゴン処理を開始するのに必要な3つの処理済み頂点データの処理が終了していないので、演算部220aでは、続いて頂点P5の頂点処理を開始する。同様に、時刻t=7で、頂点P2の頂点処理が終了すると、演算部220bは、頂点P6の頂点処理を開始する。
【００８５】
時刻t=8に、頂点P3の頂点処理が終了すると、頂点P1とP2の頂点処理も終了しているので、演算部220cは、処理済み頂点データP1、P2、P3を用いて、三角形ポリゴンΔ1のポリゴン処理を開始する。この例では、ポリゴン処理にはクロック2周期分の時間がかかるとする。
【００８６】
続いて、時刻t=9に、頂点P4の頂点処理が終了すると、演算部220dは、処理済み頂点データP2、P3、P4を用いて、三角形ポリゴンΔ1のポリゴン処理を開始する。
時刻t=12に、演算部220aにおける頂点P5の頂点処理と、演算部220cにおける三角形ポリゴンΔ1のポリゴン処理が終了すると、演算部220aは処理済み頂点データP3、P4、P5を用いて、三角形ポリゴンΔ3のポリゴン処理を開始し、演算部220cは、三角形ストリップの最初の頂点P1の頂点処理に戻る。
【００８７】
同様に、時刻t=13に、演算部220bにおける頂点P6の頂点処理、および、演算部220dにおける三角形ポリゴンΔ2のポリゴン処理が終了すると、演算部220bは処理済み頂点データP4、P5、P6を用いて、三角形ポリゴンΔ4の頂点処理を開始し、演算部220dは頂点P2の頂点処理を開始する。
【００８８】
以上のようにして、本処理装置は、複数のプロセッサに頂点処理を分担して行わせ、ポリゴン処理に必要な処理済み頂点データの計算が終了するごとに、ポリゴンを構成する最後の頂点を処理したプロセッサにおいてポリゴン処理を行う。これによって、プロセッサの遊び時間を極力短くし、頂点処理およびポリゴン処理を時間的に密に行うことができる。
【００８９】
一方、図15(b)の独立三角形を処理する場合では、頂点P1からP6に対する最初の頂点処理と、時刻t=8において、演算部220cが三角形ポリゴンΔ1のポリゴン処理を開始する部分は、図15(a)の三角形ストリップを処理する場合と同じである。
【００９０】
独立三角形の場合、2番目の三角形ポリゴンΔ2は、頂点P4、P5、P6で構成されるので、時刻t=13になって初めて開始できる。時刻t=9で、演算部220dは頂点P4の頂点処理を終了するが、演算部220cにおける三角形ポリゴンΔ1のポリゴン処理が終了しておらず、頂点P1の頂点処理が開始していないため、演算部220dは頂点P2の頂点処理を開始できない。従って、演算部220dにおいて、時刻t=9から時刻t=12まで、遊び時間ができてしまう。
【００９１】
同様に、時刻t=12で、演算部220aは頂点P5の頂点処理を終了するが、演算部220dにおける頂点P2の頂点処理が開始していないため、頂点P3の頂点処理を開始できない。従って、演算部220aにおいて、時刻t=12から時刻t=14まで、遊び時間ができてしまう。
【００９２】
このような事情のため、独立三角形を処理する場合は、三角形ストリップを処理する場合に比べて、図15(b)の空白部分で示すように、プロセッサの遊び時間が所々にできてしまうが、これは許容の範囲内である。従来のように頂点処理とポリゴン処理を別々のプロセッサに分担させた場合は、頂点処理に重点を置くと、ポリゴン処理が追いつかず処理済み頂点データが貯まってしまい、逆に、ポリゴン処理に重点を置くと、頂点処理がついていけなくなるというジレンマのため、三角形ストリップもしくは独立三角形のいずれか一方に処理装置を最適化すると、他方ではどうしてもプロセッサの使用効率が悪くなってしまうという問題があった。しかし、本発明の処理装置では、三角形ストリップであっても独立三角形であっても、同程度に効率良く演算を行うことができる。
【００９３】
〈フローチャート〉
最後に、本発明の実施形態1における処理装置の動作の流れを図16のフローチャートに示す。
【００９４】
メモリ上の座標は整数型で記憶されているが、これをそのまま使ってジオメトリ処理を行うと演算誤差によって変換後の座標がずれてしまい、いびつなポリゴンを描画してしまうことになるため、まず、座標を整数型から浮動小数点型に変換する(ステップ1001)。
【００９５】
頂点処理の最初のステップとして、浮動小数点型に変換された頂点座標に対して、ローカル座標系からワールド座標系への座標変換を行い、それぞれ独立にモデリングされた立体物を1つの仮想空間上に配置する(ステップ1002)。更に、カメラ視点の座標系へと視野変換を行い、立体物を投影するスクリーンの向きや大きさを決める(ステップ1003)。次に、各頂点における照度計算を行う(ステップ1004)。頂点処理の最終段階としてビューポート変換を行い、仮想空間上の3次元座標から、スクリーン平面上の2次元座標への変換を行う(ステップ1005)。このとき、クリッピングが必要かどうか、すなわち、スクリーンからはみ出た座標があるかどうかを判定し(ステップ1006)、必要であればクリッピング処理を行う(ステップ1007)。
【００９６】
次に、ポリゴン処理に移行し、まず、勾配計算行い、ポリゴンの境界線を決め、境界線上での照度等を頂点での値をもとに算出する(ステップ1008)。境界線が決まると、ポリゴンの内部領域が決まるので、内部領域における照度等を頂点および返上の値をもとに算出する(ステップ1009)。
【００９７】
最後に処理装置は、セットアップデータにおける座標を浮動小数点型から整数型に戻して(ステップ1010)、ディスプレイに描画する(ステップ1011)。
〈各プロセッサにおける処理のフローチャート〉
次に、各プロセッサにおける頂点処理およびポリゴン処理の流れを、図17を参照しながら説明する。
【００９８】
各プロセッサは、基本的にポリゴンメッシュを構成する1頂点を取得し頂点処理を行うという処理を継続し、ポリゴン処理を開始する条件が満たされた場合にのみ、他のプロセッサから処理済み頂点データを読み取りポリゴン処理を行うという処理を、ポリゴンメッシュを構成するすべての頂点について頂点処理が終わるまで行う。以下、各ステップを追ってみていく。
【００９９】
まず、ステップ2001で、ポリゴンメッシュを構成するすべての頂点の頂点処理が終わっているかどうか判定し、終わっていれば(ステップ2001 Y)、処理を終了する。
まだ処理すべき頂点があれば(ステップ2001 N)、頂点Lnを取得する(ステップ2002)。頂点Lnは、他のプロセッサでもまだ頂点処理されていない頂点で、最もインデックスが若い頂点であり、座標変換前のローカル座標を含んでいる。
【０１００】
演算部は、頂点Lnを取得したら、すぐに頂点処理を行い、処理済み頂点データPnを算出する(ステップ2003)。演算部は、算出した処理済み頂点データPnを自プロセッサのレジスタに格納する(ステップ2004)。
【０１０１】
次に、演算部がポリゴン処理を行うかどうかの判定を、割当部が行う。処理中のポリゴンメッシュが三角形ストリップである場合は(ステップ2005 Y)、処理した頂点のインデックスnが3以上であれば(ステップ2006 Y)、ステップ2009に進み、nが3以上でないなら(ステップ2006 N)、ステップ2001に戻る。処理中のポリゴンメッシュが三角形ストリップでない場合は(ステップ2005 N)、それは独立三角形とみなされるので(ステップ2007)、この場合nが3の倍数なら(ステップ2008 Y)、ステップ2009に進み、nが3の倍数でないなら(ステップ2008 N)、ステップ2001に戻る。
【０１０２】
ステップ2009では、入出力部は、処理した頂点Pnに対して、インデックスが1つ前および2つ前の頂点に関する処理済み頂点データP(n-2)、P(n-1)を、他のプロセッサのレジスタから取得し、それらを演算部に送り込む。
【０１０３】
演算部は、入出力部から得た処理済み頂点データP(n-2)、P(n-1)と、自身で処理した処理済み頂点データPnを用いてポリゴン処理を行う(ステップ2010)。ポリゴン処理でセットアップデータを算出すると、ステップ2001に戻る。以上の処理を、ポリゴンメッシュを構成するすべての頂点に関して頂点処理が終わるまで繰り返す。
【０１０４】
〈クリッピング処理〉
次に、クリッピング処理について説明する。クリッピング処理とは、立体物のスクーンへの投影像がスクリーンからはみ出した場合に、はみ出した部分をカットし、新しくポリゴンメッシュを構成し直すことをいう。スクリーンからはみ出した部分はディスプレイに描画する必要がないので、クリッピング処理を行うことで、無駄なポリゴン処理をしなくてすむようになる。例えば、図3の三角形スプリットをスクリーンに投影したとき、図18(a)のようになっていたとする。このとき、図18(a)の頂点P4、P5、P6で構成される三角形ポリゴンΔ4の一部はスクリーンをはみ出している。このような場合には、はみ出し部分をもつ三角形ポリゴンΔ4とスクリーン枠との交点を、図18(a)の点P7、P8のように算出し、スクリーン内部に収まっている4点P4、P5、P7、P8を頂点として、図18(b)のように三角形ポリゴンを構成し直す。交点P7、P8における照度等は、ポリゴン処理の場合と同様に頂点間を内挿することで算出される。
【０１０５】
〈表裏判定およびバックフェイスカリング〉
図16における、クリッピングの判定とクリッピング処理のステップは、三角形ポリゴンを構成する3頂点に関する頂点処理が終了して初めてできる処理であれば他の処理であってもよい。クリッピング以外には、例えば、バックフェイスカリングがある。これは、立体物のスクリーンへの投影像から、表裏判定で裏向きと判定される三角形ポリゴンを選択し描画対象から省くことである。
【０１０６】
図2(c)のようなΛ型物体をスクリーンに投影すると、図19(a)のように、三角形ポリゴンの裏側が見える。このような場合に、頂点座標からポリゴンが表を向いているか裏を向いているかを判定することが表裏判定である。これは、図19(a)のような三角形ストリップの頂点Pi(i=1,2,…,6)の順番とスクリーン平面上での並び方との関係から判定することができる。すなわち、図19(a)で、頂点P1、P2、P3からなる三角形ポリゴンΔ1は、矢印で示すように頂点が反時計回りに並んでいる。三角形ストリップにおける奇数番目の三角形ポリゴンは、その三角形ポリゴンを構成する頂点が反時計回りに並んでいる場合を表向きと定義する。このとき三角形ストリップの性質上、次の頂点P2、P3、P4からなる三角形ポリゴンΔ2は、矢印で示すように頂点が時計回りに並ぶ。よって、三角形ストリップにおける偶数番目の三角形ポリゴンは、その三角形ポリゴンを構成する頂点が時計回りに並んでいる場合が表向きとなる。従って、頂点P3、P4、P5らなる三角形ポリゴンΔ3は、奇数番目の三角形ポリゴンであって頂点の並びが時計回りであるので裏向きと判定され、、頂点P4、P5、P6らなる三角形ポリゴンΔ4は、偶数番目の三角形ポリゴンであって頂点の並びが反時計回りであるので裏向きと判定される。これが、表裏判定である。
【０１０７】
バックフェイスカリングをするかしないかは立体物ごと設定され、バックフェイスカリングをしない場合は、図19(b)のように、裏面の描画もされるのに対して、バックフェイスカリングをする場合は、図19(c)に網掛けで示したように、裏面の描画は省略される。バックフェイスカリングをすると、裏面が描画されないため投影像としては不完全なものになるが、計算量および描画量が少なくなり、高速化に有効である。
【０１０８】
〔実施形態2〕
本発明の実施形態2では、処理装置における複数のプロセッサの構成が、実施形態1とは異なる例について説明する。実施形態1では、処理済み頂点データは、その頂点処理を行った演算部が帰属するプロセッサと同じプロセッサに帰属するレジスタに格納され、入出力部が各プロセッサ内のレジスタから処理済み頂点データを取得するという方式であった。実施形態2では、処理済み頂点データは、演算部において頂点処理が行われるプロセッサに帰属するレジスタに格納され、入出力部は各プロセッサ内のレジスタへと処理済み頂点データを送り出す。
【０１０９】
〈構成〉
図20は、本発明の実施形態2における処理装置の構成図である。本発明の実施形態2における処理装置は、4つのプロセッサ200a,b,c,dと、それらを駆動するクロック240、頂点データを分配する分配部250、ポリゴン処理を行うプロセッサを割り当てる割当部260とから構成され、各プロセッサ200a,b,c,dが、レジスタ210a,b,c,d、演算部220a,b,c,d、および、入出力部230a,b,c,dをそれぞれ有している点は、実施形態1と同じである。しかし、実施形態2における処理装置に含まれるプロセッサは、更にレジスタ210a',b',c',d'を有し、それぞれ2つのレジスタをもつ。また、入出力部による処理済み頂点データの受け渡し方が実施形態1とは異なっている。
【０１１０】
入出力部は、図20に示すように、同じプロセッサ内の演算部で頂点処理された処理済み頂点データを、2つの異なるプロセッサ内のレジスタに送り込む。こうすることにより、自プロセッサで頂点処理されていない処理済み頂点データを用いてポリゴン処理を行うことが可能となる。
【０１１１】
レジスタは、入出力部から送り込まれた処理済み頂点データを格納する。
演算部は、与えられた頂点データに対して頂点処理を行うと、得られた処理済み頂点データと、同じプロセッサ内の2つのレジスタに格納された処理済み頂点データとを合わせて、計3つの処理済み頂点データを用いて三角形ポリゴンのポリゴン処理を行う。
【０１１２】
〈動作〉
次に、本発明の実施形態2における処理装置の動作を、図21を参照しながら説明する。図21は、図14と同様に、本発明の実施形態2における処理装置が、図3の三角形ストリップを処理する場合の例である。図21におけるALUおよびRがそれぞれ演算部220a,b,c,dおよびレジスタ210a,a',b,b',c,c',d,d'を表し、本発明の実施形態2における処理装置は、1つの演算部と2つのレジスタの組で示されるプロセッサを4つ内蔵している。図21では、明記していないが、4つずつあるプロセッサ等は、図20と同様に左から順にa,b,c,dに対応し、各プロセッサに2つあるレジスタは左からa,a'などと対応している。
【０１１３】
まず、図21(a)は、本処理装置に頂点データおよびポリゴンデータが入力される直前状態である。頂点データL1が、プロセッサ200aの演算部220aに入力される。
図21(b)は、プロセッサ200aの演算部220aで頂点処理された処理済み頂点データP1は、プロセッサ200b,c内のレジスタ210b',cへと送り込まれる。また、次に処理される頂点データL2は、プロセッサ200bの演算部220bへと入力される。
【０１１４】
図21(c)では、プロセッサ200bの演算部220bで頂点処理された処理済み頂点データP2が、プロセッサ200c,d内のレジスタ210c',dへと送り込まれる。次に処理される頂点データL3は、プロセッサ200cの演算部220cへと入力される。
【０１１５】
図21(d)において、プロセッサ200cの演算部220cで頂点処理が終了すると、プロセッサ200cには、三角形ポリゴンΔ1を構成する3つの頂点に関する処理済み頂点データP1、P2、P3がそろうので、プロセッサ200cの演算部220cは、同じプロセッサ200cのレジスタ210c,c'から処理済み頂点データP1、P2を取得して、三角形ポリゴンΔ1のポリゴン処理を行う。このとき、レジスタ210c,c'から、処理済み頂点データP1、P2は消去される。また、プロセッサ200cの演算部220cで頂点処理された頂点データP3は、プロセッサ200d,aのレジスタ210d',aへと送り込まれる。次に処理される頂点データL4は、プロセッサ200dの演算部220dへと入力される。
【０１１６】
図21(e)において、プロセッサ200cの演算部220cは、三角形ポリゴンΔ1に対するポリゴン処理を終えてセットアップデータを出力する。また、プロセッサ200dの演算部220dで頂点処理が終了すると、プロセッサ200dには、三角形ポリゴンΔ2を構成する3つの頂点に関する処理済み頂点データP2、P3、P4がそろうので、プロセッサ200dの演算部220dは、同じプロセッサ200dのレジスタ210d,d'から処理済み頂点データP2、P3を取得して、三角形ポリゴンΔ2のポリゴン処理を行う。このとき、レジスタ210d,d'から、処理済み頂点データP2、P3は消去される。プロセッサ200dの演算部220dで頂点処理された頂点データP4は、プロセッサ200a,bのレジスタ210a',bへと送り込まれる。次に処理される頂点データL5は、プロセッサ200aの演算部220aへと入力される。
【０１１７】
図21(f)において、プロセッサ200dの演算部220dは、三角形ポリゴンΔ2に対するポリゴン処理を終えてセットアップデータを出力する。また、プロセッサ200aの演算部220aで頂点処理が終了すると、プロセッサ200aには、三角形ポリゴンΔ3を構成する3つの頂点に関する処理済み頂点データP3、P4、P5がそろうので、プロセッサ200aの演算部220aは、同じプロセッサ200aのレジスタ210a,a'から処理済み頂点データP3、P4を取得して、三角形ポリゴンΔ3のポリゴン処理を行う。このとき、レジスタ210a,a'から、処理済み頂点データP3、P4は消去される。プロセッサ200aの演算部220aで頂点処理された頂点データP5は、プロセッサ200b,cのレジスタ210b',cへと送り込まれる。このとき、プロセッサ200bのレジスタ210b'に残っている処理済み頂点データP1は上書きされる。次に処理される頂点データL6は、プロセッサ200bの演算部220bへと入力される。
【０１１８】
図21(g)において、プロセッサ200aの演算部220aは、三角形ポリゴンΔ3に対するポリゴン処理を終えてセットアップデータを出力する。また、プロセッサ200bの演算部220bで頂点処理が終了すると、プロセッサ200bには、三角形ポリゴンΔ4を構成する3つの頂点に関する処理済み頂点データP4、P5、P6がそろうので、プロセッサ200bの演算部220bは、同じプロセッサ200bのレジスタ210b,b'から処理済み頂点データP4、P5を取得して、三角形ポリゴンΔ4のポリゴン処理を行う。このとき、レジスタ210b,b'から、処理済み頂点データP4、P5は消去される。プロセッサ200bの演算部220bで頂点処理された頂点データP6は、プロセッサ200c,dのレジスタ210c',dへと送り込まれる。
【０１１９】
最後に、図21(h)において、プロセッサ200bの演算部220bは、三角形ポリゴンΔ4に対するポリゴン処理を終えてセットアップデータを出力する。
以上のようにして、本発明の実施形態2における処理装置は、ジオメトリ処理を行う。
【０１２０】
なお、実施形態1でも述べた通り、三角形ストリップの最後の点P6の頂点処理が終了したあと、引き続いて最初の点P1の頂点処理を開始してもよい。
〔実施形態3〕
本発明の実施形態3では、処理装置における複数のプロセッサが、処理済み頂点データの受け渡しを循環的に行う例について説明する。実施形態1および実施形態2では、入出力部は複数のレジスタとの間で処理済み頂点データの受け渡しを行ったが、実施形態3では、入出力部は、送り先となるただ1つの入出力部が決まっている。
【０１２１】
〈構成〉
図22は、本発明の実施形態3における処理装置の構成図である。本発明の実施形態3における処理装置は4つのプロセッサ200a,b,c,dと、それらを駆動するクロック240、頂点データを分配する分配部250、ポリゴン処理を行うプロセッサを割り当てる割当部260とから構成され、各プロセッサ200a,b,c,dが、レジスタ210a,b,c,d、演算部220a,b,c,d、および、入出力部230a,b,c,dをそれぞれ有している点は、実施形態1や実施形態2と同じである。しかし、実施形態3における処理装置に含まれるプロセッサは、それぞれ3つのレジスタを有し、入出力部による処理済み頂点データの受け渡し方が、循環的になっているという点で、前述の例とは異なっている。
【０１２２】
すなわち、図22に示すように、入出力部230aは入出力部230bへ、入出力部230bは入出力部230cへ、入出力部230cは入出力部230dへ、入出力部230dは入出力部230aへ、というように処理済み頂点データの送り込み先が決まっている。各入出力部230a,b,c,dは、送り込まれた処理済み頂点データが、自プロセッサ内の演算部におけるポリゴン処理で必要ならば、自プロセッッサ内のレジスタに格納する。その処理済み頂点データを必要とするポリゴン処理で、まだ開始していないポリゴン処理があれば、更に、次のプロセッサ内の入出力部へと引き渡す。
【０１２３】
レジスタは入出力部から送り込まれた処理済み頂点データを格納する。
演算部は、与えられた頂点データに対して頂点処理を行い、処理済み頂点データを他のプロセッサへ送り込むために入出力部に転送する。また、レジスタから送り込まれる処理済み頂点データに対してポリゴン処理を行う。
【０１２４】
〈動作〉
次に、本発明の実施形態3における処理装置の動作を図23を参照しながら説明する。図23は、本発明の実施形態3における処理装置が、図4の三角形ファンを処理する場合の例である。図23におけるALUおよびRがそれぞれ演算部220a,b,c,dおよびレジスタ210a,a',a",b,b',b",c,c',c",d,d',d"を表し、本発明の実施形態3における処理装置は、1つの演算部と3つのレジスタの組で表されるプロセッサを4つ内蔵している。レジスタは上から順にa,a',a"などのように、図22に対応している。
【０１２５】
まず、図23(a)は、本処理装置に頂点データおよびポリゴンデータが入力される直前の状態である。頂点データL1が、プロセッサ200aの演算部220aに入力される。
図23(b)において、プロセッサ200aの演算部220aで頂点処理された処理済み頂点データP1は、まず、同じプロセッサ200aのレジスタ210aに送り込まれる。次に処理される頂点データL2は、プロセッサ200bの演算部220bに入力される。
【０１２６】
図23(c)において、プロセッサ200bの演算部220bで頂点処理された処理済み頂点データP2は、まず、同じプロセッサ200bのレジスタ210bに送り込まれる。プロセッサ200aのレジスタ210aに格納された処理済み頂点データP1は、プロセッサ200aの演算部220aで行われるポリゴン処理では用いられないので、プロセッサ200bのレジスタ210b'に送り込まれる。次に処理される頂点データL3は、プロセッサ200cの演算部220cに入力される。
【０１２７】
図23(d)において、プロセッサ200cの演算部220cで頂点処理された処理済み頂点データP3は、まず、同じプロセッサ200cのレジスタ210cに送り込まれる。プロセッサ200bのレジスタ210b,b'に格納された処理済み頂点データP1、P2は、プロセッサ200bの演算部220bで行われるポリゴン処理では用いられないので、プロセッサ200cのレジスタ210c',c"にそれぞれ送り込まれる。次に処理される頂点データL4は、プロセッサ200dの演算部220dに入力される。
【０１２８】
図23(e)において、プロセッサ200dの演算部220dで頂点処理された処理済み頂点データP4は、まず、同じプロセッサ200dのレジスタ210dに送り込まれる。プロセッサ200cのレジスタ210c,c',c"には、3つの処理済み頂点データP1、P2、P3がそろっているので、これらを同じプロセッサ200cの演算部220cに送り、三角形ポリゴンΔ1のポリゴン処理を行う。また、処理済み頂点データP1、P2、P3のうち、P1、P3は、Δ1以降の三角形ポリゴンのポリゴン処理にも用いられるので、プロセッサ200dのレジスタ210d',d"にそれぞれ送り込まれる。次に処理される頂点データL5は、プロセッサ200aの演算部220aに入力される。
【０１２９】
図23(f)において、プロセッサ200aの演算部220aで頂点処理された処理済み頂点データP5は、まず、同じプロセッサ200aのレジスタ210aに送り込まれる。プロセッサ200dのレジスタ210d,d',d"には、3つの処理済み頂点データP1、P3、P4がそろっているので、これらを同じプロセッサ200dの演算部220dに送り、三角形ポリゴンΔ2のポリゴン処理を行う。また、処理済み頂点データP1、P3、P4のうち、P1、P4は、Δ2以降の三角形ポリゴンのポリゴン処理にも用いられるので、プロセッサ200aのレジスタ210a',a"にそれぞれ送り込まれる。プロセッサ200cの演算部220cでポリゴン処理が終わると、三角形ポリゴンΔ1に関するセットアップデータが出力される。次に処理される頂点データL6は、プロセッサ200bの演算部220bに入力される。
【０１３０】
図23(g)において、プロセッサ200bの演算部220bで頂点処理された処理済み頂点データP6は、まず、同じプロセッサ200bの演算部220bに送り、三角形ポリゴンΔ3のポリゴン処理を行う。プロセッサ200aのレジスタ210a,a',a"には、3つの処理済み頂点データP1、P4、P5がそろっているので、これらを同じプロセッサ200aの演算部220aに送り、三角形ポリゴンΔ3のポリゴン処理を行う。また、処理済み頂点データP1、P4、P5のうち、P1、P5は、Δ3以降の三角形ポリゴンのポリゴン処理にも用いられるので、プロセッサ200bのレジスタ210b,b'にそれぞれ送りこ込まれる。プロセッサ200dの演算部220dでポリゴン処理が終わると、三角形ポリゴンΔ2に関するうセットアップデータが出力される。
【０１３１】
図23(h)において、プロセッサ200bのレジスタ210b,b',b"には、3つの処理済み頂点データP1、P5、P6がそろっているので、これらを同じプロセッサ200bの演算部220bに送り、三角形ポリゴンΔ4のポリゴン処理を行う。
【０１３２】
以上のようにして、本発明の実施形態3における処理装置は、ジオメトリ処理を行う。
〔その他の実施形態〕
上では、4つのプロセッサの間で処理済み頂点データを通知し合う方法についていくつかの例を示したが、プロセッサの数は4つに限らない。また、各プロセッサが有するレジスタも上記で指定した数に限るものではない。本発明の本質は、異なるプロセッサで演算された処理済み頂点データを、互いに通知し合うことで、どのプロセッサにおいてもポリゴン処理を実行可能にすることにあり、その通知方法は上記の例に限るものではない。例えば、処理済み頂点データをクロスバスを経由して通知し合うようにしてもよい。
【産業上の利用可能性】
【０１３３】
本発明における処理装置は、立体物をポリゴンに近似して描画する際のジオメトリ処理を複数のプロセッサで行い、プロセッサごとに行われる頂点処理で得られる処理済み頂点データをプロセッサ間で通知し合うことで、それぞれの頂点処理終了後にポリゴン処理を連続的に行うことができる。そのため、頂点処理とポリゴン処理との実行タイミングにアンバランスができにくく、プロセッサに無駄な遊び時間を発生させない効率良い演算処理を行うことができる。従って、携帯電話のような非力なプロセッサしか搭載しない機器であっても、映像を途切れさせずに描画を行うことができる。プロセッサが計算に費す時間を長くとれるので、動作クロックを下げることができ、低消費電力、低コスト化に有用である。
【０１３４】
また、複数のプロセッサが並列的に構成されているため、すべて同じプログラムで処理することができる。従って、プロセッサの数を増減させても新たにプログラムを組み直す必要がなく、拡張性に優れている。
【符号の説明】
【０１３５】
100：処理装置
110：CPU
120：メモリ
130：送受信部
140：操作入力部
150：ディスプレイ
200a,200b,200c,200d：プロセッサ
210a,210b,210c,210d：レジスタ
210a',210b',210c',210d'：レジスタ
210a",210b",210c",210d"：レジスタ
220a,220b,220c,220d：演算部
230a,230b,230c,230d：入出力部
240：クロック
250：分配部
260：割当部
300：座標変換部
310：視野変換部
320：照度計算部
330：ビューポート変換部
340：勾配計算部
350：内部領域計算部
【図１】
2011175656.tif 000003
【図２】
2011175656.tif 000004
【図３】
2011175656.tif 000005
【図４】
2011175656.tif 000006
【図５】
2011175656.tif 000007
【図６】
2011175656.tif 000008
【図７】
2011175656.tif 000009
【図８】
2011175656.tif 000010
【図９】
2011175656.tif 000011
【図１０】
2011175656.tif 000012
【図１１】
2011175656.tif 000013
【図１２】
2011175656.tif 000014
【図１３】
2011175656.tif 000015
【図１４】
2011175656.tif 000016
【図１５】
2011175656.tif 000017
【図１６】
2011175656.tif 000018
【図１７】
2011175656.tif 000019
【図１８】
2011175656.tif 000020
【図１９】
2011175656.tif 000021
【図２０】
2011175656.tif 000022
【図２１】
2011175656.tif 000023
【図２２】
2011175656.tif 000024
【図２３】
2011175656.tif 000025