透過的レンダリングのためのシステムと方法
可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、奥から手前の順に該多角形をソートし、その後ソートした三角形をOpenGLなどのグラフィックスAPIに供給するシステム、方法及びコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般にグラフィックス処理(graphics processing)に関するものである。
【発明の背景】
【0002】
航空宇宙産業、自動車産業など数多くの産業において、製造業者は初期段階でデザインの問題を発見すべくインタラクティブに(interactively)製品のデザインを見て点検するために可視化技術に依存することが増えてきている。製品構造全体を見てそのサブシステムのそれぞれを点検し易くする能力は、如何なる可視化システム(visualization system)においても不可欠とされている。したがって、本来なら陰になって見えない(occlusion)デザインの詳細が見えるようにするため、一部の選択した部品を透過的にレンダリングする(render transparently)ことが望ましい。また、ガラスなど透過的な素材からできている部品もあり、それらを透過的にレンダリングすることはそのシーンをよりリアルに見せる。したがって、インタラクティブなフレームレート(interactive frame rate)でオブジェクト(object)にリアルな透過性(transparency)を持たせることは効果的な可視化(visualization)のために重要なのである。
【0003】
新しいグラフィックシステムの殆どにおいては、「アルファブレンディング」(alpha blending)と呼ばれるプロセスにより透過的レンダリングが実現されている。透過性を正確にするには、一画素に寄与する全ての多角形の色を奥から手前の順に「ブレンド」しなければならない。フレームごとに正確にソーティングを行なう必要があるため、大きなモデルのインタラクティブな透過的レンダリングは困難な課題であった。
【0004】
従来提案されてきた三角形ソーティングの方法(triangle sort method)は、画像に基づいたものとオブジェクトに基づいたものの二種類に分類することができる。画像スペースに基づいた方法では、特殊なグラフィックハードウェアを利用する必要がある。この種の方法では、深さに沿って奥から手前の順に一層ずつ透過的な多角形をレンダリングする。各層のレンダリングには個別のレンダリングのパスが必要となり、そのシーンの最大深さの数だけレンダリングのパスが必要である。異なるパスからの各画素の色をブレンドするために追加のメモリバッファが必要となる。オブジェクトスペースに基づいたの方法では、その時の視野方向に対して全ての多角形をソートする。これらのソートされた多角形はその後、レンダリングのために奥から手前の順にグラフィックスのパイプラインに供給される。この種類の方法の殆どは、Z−バッファというハードウェアが利用できるようになる以前に可視性の問題を解決するために提案されたものである。これらの各方法には深刻な限界があり、大きな透過的モデルのレンダリングに効果的に利用することはできなかった。例えば、深さソーティング法にはO(N2)の計算の複雑さがあり、BSP(バイナリスペースパーティション)ソーティング法(binary space partition sort method)には大きな木構造(tree structure)を構築しメモリに保存する手間がかかる。大きな透過的のモデルのレンダリングをインタラクティブなレートで行なうことを可能にするための新たなアプローチが望まれている。
【0005】
BSPツリーの構築(tree construction)に関するこれまでの研究は、一つのファクター、すなわち最終的なBSPツリー(tree)における三角形の数を最小限にすることに焦点をあてており、実用面では等しく重要であるその他のファクターは考慮されていなかった。これらその他のファクターには、BSPツリーの構築にかかる時間、BSPツリー内の三角形をソートするのにかかると予想される時間などが含まれる。様々なファクターによって課された様々な条件を満たしつつ効率的にBSPツリーを構築することは困難ではあるが、このアプローチをより実用的なものにするにはきわめて重要である。
【0006】
深さソーティングに関するこれまでの研究は、一対の三角形の陰になって見えない部分がある関係を正確に割り出すことのできないようなテスト用アルゴリズムを用いていた。その結果として、二つの三角形が既に正しい順序に並んでいたとしても視野に依存した三角形スプリットが起こることがあった。そのような不必要な三角形スプリットを避け、より良いソーティング結果を得るために、陰になって見えない部分があることをテストするための、より洗練されたアルゴリズムが必要とされている。
【0007】
したがって本技術分野では、より良い透過的レンダリングのためのシステム、方法及びコンピュータプログラム製品が求められている。
【発明の概要】
【0008】
好ましい実施例では、可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、奥から手前の順に多角形をソートし、その後ソートした三角形をOpenGLなどのグラフィックスAPIに供給するシステム、方法及びコンピュータプログラム製品を提供する。
【0009】
上記は、後述する本発明の詳細な説明を当業者がより良く理解できるよう、本発明の特徴及び技術的な効果についてかなり広範に概要を述べたものである。本発明の更なる特徴と効果は本発明の請求項の主題となるものあり、以下において説明する。当業者は、開示されている概念及び特定の実施例を、本発明と同じ目的を果たすために他の構成を変更もしくはデザインするための基礎として容易に使用できることを理解するであろう。当業者はまた、これらの同等な構築は最も広義な形での本発明の精神及び範囲から逸脱するものではないことを認識するであろう。
【0010】
下記の発明の詳細な説明に進む前に、本特許全体に亘って用いる特定の単語及び語句を定義することは有意義であろう。「含む」及び「から成る」という用語並びにそれらの派生語は、制限のない包含を意味する。「または」と言う用語は包括的で、その意味するところは及び/またはということである。「に関連する」及び「と関連する」という語句並びにそれらの派生語は、含む、含まれる、相互に関連する、包含する、包含される、〜を含む、〜内に含まれる、相互に接続する、〜を包含する、〜に包含される、〜に接続するもしくは〜と接続する、〜と連結するもしくは〜に連結する、〜と伝達できる、〜と提携する、インターリーブする、並列する、〜に隣接する、〜に境を接するもしくは〜と境を接する、〜を有する、〜の性質を有する、等を意味する。「コントローラ」という用語は、少なくとも1つの操作を制御するデバイス、システム、またはそれらの部品の全てを意味し、そのようなデバイスが、ハードウェア、ファームウェア、ソフトウエアまたは少なくとも2つの同様なものを組み合わせたものに実装されているかを問わない。特定のコントローラーに関連する機能性は集中型でも分散型でもよく、ローカルかまたは遠隔かは問わないことに留意されたい。本特許では特定の単語および語句の定義を提供するが、当業者は、そのような定義は、殆どではないにしても多くの場合、そのように定義された単語および語句の従来の使用および今後の使用に当てはまることが理解できるであろう。
【発明を実施するための最良の形態】
【0011】
以下に考察する図1乃至図11及び本特許に記載の本発明の原理を説明するのに用いた様々な実施例は例を示すためだけのものであり、如何なる場合でも本発明の範囲はこれらのみに限定して解釈されるべきではない。当業者は、本発明の原理は適宜に準備されたものであればどのようなデバイスを用いても実施できることを理解するであろう。本出願の多数の革新的な教示を、現時点で好ましいとする実施例を特に参照しながら説明する。
【0012】
好ましい実施例では、可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、奥から手前の順に多角形をソートし、そしてソートした三角形をOpenGLなどのグラフィックスAPIに供給するシステム、方法及びコンピュータプログラム製品を提供する。
【0013】
本願ではでは特に三角形について説明しているが、当業者は、開示した実施例は全ての平面形状、例えば凸面または凹面の多角形であってもよく、単純でも複雑でもよいと認識するであろう。また区分面(partition plane)で切ったときに二つ以上の形状にスプリットする方法がある限り、曲線状のまたはプロシージャで定義された形状(procedurally−defined shape)でもよい。
【0014】
図1は好ましい実施例を実現できるデータ処理システムのブロック図である。図示したデータ処理システムは、プロセッサ102、2次キャッシュ/ブリッジ104及びローカルシステムバス106を含み、プロセッサ102は2次キャッシュ/ブリッジ104に、そして2次キャッシュ/ブリッジ104はローカルシステムバス106に接続されている。ローカルシステムバス106は、例えば、周辺構成要素相互接続(PCI)アーキテクチャバスでもよい。図示した例ではローカルシステムバスにはまたメインメモリ108及びグラフィックスアダプタ110も接続されている。
【0015】
ローカルエリアネットワーク(LAN)/ワイドエリアネットワーク/ワイアレス(例えばWiFi)アダプタ112などのその他の周辺構成要素もローカルシステムバス106に接続されるようにしてもよい。拡張バスインターフェース114によりローカルシステムバス106が入力/出力(I/O)バス116に接続される。I/Oバス116はキーボード/マウスアダプタ118、ディスクコントローラ120及びI/Oアダプタ122に接続されている。
【0016】
図示した例のI/Oバス116にはまたオーディオアダプタ124も接続されており、オーディオアダプタ124には音声を再生するためのスピーカー(図示せず)を接続することもできる。キーボード/マウスアダプタ118はマウス、トラックボール、トラックポインターなどのポインティングデバイス(図示せず)を提供する。
【0017】
当業者は、図1に示したハードウェアの詳細については様々であり得ると理解するであろう。例えば、図示したハードウェアに加えてまたはそれらの代わりに、光ディスクドライブ等のその他の周辺構成デバイスを用いることもできる。図示した例は説明のためだけのものであって、本発明に関する構造上の制限を示唆するものではない。
【0018】
本発明の好ましい実施例によるデータ処理システムはグラフィカルなユーザーインターフェースを用いたオペレーティングシステムを含む。該オペレーティングシステムは該グラフィカルなユーザーインターフェースに複数のウィンドウを同時にレンダリングすることを可能にし、各レンダリングウィンドウは異なるアプリケーションとのまたは同じアプリケーションの異なるインスタンスとのインターフェースを提供する。ユーザーは該グラフィカルなユーザーインターフェースのカーソルを該ポインティングデバイスを介して操作できる。該カーソルの位置を変えること及び/またはマウスボタンをクリックするなどのイベントによって、望ましいレスポンスを得るように作動させる。
【0019】
適宜に変更すれば、ワシントン州レドモンド市にあるマイクロソフト社の製品であるマイクロソフトウィンドウズTMの一バージョンなどの様々な市販のオペレーティングシステムの一つを用いることができる。説明したような本発明にしたがって該オペレーティングシステムを変更または作成してもよい。
【0020】
好ましい実施例は透過的レンダリングが現在抱える問題に対処するものである。図2の概略アーキテクチャ図に示すように、開示したシステム、方法及びコンピュータプログラム製品は、可視化APIとグラフィックスAPIの間で機能する。
【0021】
該システムは可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、好ましくは実質的に奥から手前の順に多角形をソートし、そしてソートした三角形をOpenGLなどのグラフィックスAPIに供給する。そうする際に、開示されたシステムは二つの従来型のソーティング方法を新規のやり方で統合して両方の利点を十分に引き出し、新規のキャッシュに格納するストラテジーを可能にすると共に、主要なアルゴリズムも大きく改良できるようにする。そして、処理時間、レンダリングの速度、レンダリングの質及びメモリ消費など様々なファクターに関する利点・不利点のトレードオフを実現できる顕著な柔軟性を提供することにより、システムを実用面で改善する。開示したシステムは、最大で数十万もの多角形までの大きなモデルを市販のグラフィックス用ハードウェアを用いてインタラクティブなフレームレートで、殆ど不自然な結果も無くレンダリングできることが証明されている。
【0022】
BSPソーティング法の特徴は深さソーティング法の特徴を補完するものである。BSPソーティング法は、非常に大きなツリー構造をメモリに維持することによりO(N)次のコンプレクシティを実現する。深さソーティング法はメモリのオーバーヘッドが少なくて済むが、O(N2)次のコンプレクシティを持ち、これはまったく望ましくない。本願で開示されている三角形ソーティング用アルゴリズムはこれら二つの方法を統合して両方の利点を引き出すものである。具体的には、(従来のやり方ではBSPツリーは三角形が一つのリーフノードで構築されていたのに対し)少なくとも幾つかの実施例においては、BSPツリーは三角形が複数あるリーフノードで構築される。そして該BSPツリーを走査し、走査中に各リーフノード上の三角形を深さソーティングすることにより三角形がソートされる。
【0023】
一つのリーフノード上で許容できる三角形の最大数βを指定することにより、開示されたアルゴリズムの挙動を、これら二つの方法の間で容易に調整でき、レンダリングの速度とメモリ消費の望ましいトレードオフが実現できる。例えば、βが1であると指定されると、開示されたアルゴリズムは従来のBSPソーティング用アルゴリズムへと戻り、βが三角形の合計数であるNと指定されると、開示されたアルゴリズムは従来の深さソーティング用アルゴリズムへと戻る。βが2とN−1の間の数値であると指定されると、我々のアルゴリズムの挙動もまたこれら二つの従来法の中間のものとなり、βが大きくなるにつれソーティング速度は落ちるがメモリ内のツリーサイズは小さくなる。また、好ましい実施例では深さソーティング用アルゴリズムには、二つの異なるモードがあり、深さソーティング用アルゴリズムがレンダリングの速度とレンダリングの質に関して、更なる柔軟性が提供される。高次なモードでは正確なレンダリングの結果が保証され、基本モードでは不自然な結果があるかもしれないがレンダリングの速度が速くなる。
【0024】
BSP構築アルゴリズムを改良するために、様々な技術を開示する。幾つかの実施例においては、実用的なアプリケーションに重要な複数のファクターを考慮した区分面の候補の質を評価するために新しい判断基準を用い、良い区分面の迅速な選択を促進する形状知識情報を効率的に抽出するために新しい方法を用いる。実験結果では、開発されたBSP構築アルゴリズムにより1.2GHzプロセッサのPCでおよそ1秒で2万個の三角形の高品質のBSPツリーを作成できることが示された。
【0025】
本願では、一対の三角形間での陰になって見えない部分がある関係を正確に識別するための洗練されていながら計算に関しては効率的なテスト用アルゴリズムにより、周知の深さソーティング用アルゴリズムが改良されている。その様にして不必要な三角形スプリットをなくすことができる。
【0026】
更に、ある有限数の視野方向一組に対してソートされた幾何学形状をキャッシュに格納して、視野をキャッシングするアルゴリズムが開示されている。これらのキャッシュに格納されたされた三角形の配列を用いると、その時の視野方向の現実の三角形の配列をキャッシュに格納されたレファレンス方向の中で最も近いものの三角形の配列で近似することにより、透過的レンダリングの速度を上げることができる。
【0027】
第一フレームの遅れを最小化するために、事前処理ステップとしてのBSPツリーの構築は出来る限り効率的なものでなくてはならない。BSPツリーは一度構築されればその後の全てのフレームのレンダリングに使用されるため、出来る限り最適化されたものでなくてはならない。この分野での従来の研究は単一の判断基準、つまり最終的なBSPツリーにおける三角形の数を最小限にすることに焦点を当てていた。
【0028】
好ましい実施例においては、区分面評価のための新しい判断基準と、最良の区分面を効率的に選択するための新しい知識主導アルゴリズムとから成るBSPツリー構築用アルゴリズムが使用されている。新しい判断基準は、各フレームの三角形をソーティングするための予測所要時間とBSPツリーの構築時間との両方を短縮するための必要条件を満たすために作られたものである。
【0029】
同一のリーフノードにおける三角形のソーティングに使用される深さソーティング用アルゴリズムは、陰になって見えない部分があるかどうかのテストを異なるレベルで用い、二つの異なるモードで作動できる。基本ソーティングモードでは、視野座標システムにおける三角形の最大Z座標に基づいて三角形をソートする。高度なソーティングモードでは、陰になって見えない部分がある環状の関係がない場合、更に洗練された形で陰になって見えない部分があるかどうかをテストし、三角形をスプリットせずに正確な結果を保証する。
【0030】
図2は、開示された透過性レンダリング用ソフトウェアシステムの実施例の概略を示す。システムへのインプット情報は、その時の視野方向と可視化APIから供給される透過的ノードである。出力情報は、レンダリングのためにグラフィックスのパイプラインに供給される奥から手前の順にソートされた三角形である。透過的ノードはレンダリングされる全ての透過的三角形を含むデータ構造で、シーンのグラフ中の単一もしくは複数の部分に対応していることもある。BSPツリーはそれが存在していない時点で、第一フレームの始めに先ず入力幾何学形状から形成される。BSPツリーは一度形成されると透過的ノードにおいてキャッシュに格納され、その後のフレームに用いられる。この時点でBSPツリーの中に組み込まれた透過的三角形は、次に三角形ソーティング用モジュールによりその時の視野方向に対してソートされる。法線情報及び色情報も含め、ソートされた三角形は(OpenGLなどの)グラフィックスAPIにレンダリングのために供給される。視野キャッシング用モジュールはオプションであり、これが作動可能とされている場合、ソートされた三角形は視野方向とともに透過的ノードのキャッシュに格納される。その後、近接した視野方向のレンダリングが要求された場合、三角形のソーティングは必要なく、このキャッシュに格納された三角形のデータをレンダリングのために直接呼び出すことができる。
【0031】
バイナリスペースパーティション(BSP)ツリー:繰り返し実行され、多数の入力オブジェクトを扱うプロセスに関してその効率改善のために重要な方法は、それらのオブジェクトの間に一貫した構造を構築しそれを維持することである。例えば、幾何学問題で頻繁に使用されるストラテジーでは、大規模問題を簡単で効率的に扱うことができる複数の小規模問題に分断する「分断攻略」アプローチの再帰的使用がある。BSPツリーはこの種の構造の一つであり、各ノードは三次元空間領域に置かれた一組のエレメントを表す。全てのエレメントを含むルートノードからスタートし、ユークリッド空間を重複しない二つの領域に分断するために区分面が使用される。区分面により切り分けられたエレメントは二つ以上のエレメントにスプリットする。各領域のエレメントに子ノードが作られ、これがBSPツリーの新しいリーフノードとなる。各リーフノードのこの区分は、事前に設定された条件が満たされるまで再帰的に継続して行われる。
【0032】
各BSPノードの二つの子ノード(child)は線形の区分面で隔てられているため、視野ポイントから離れた子ノードの陰になって他の子ノードに見えない部分がある状態になることはない。従って、BSP木構造(tree structure)は三角形をソーティングするために特に有用である。BSPツリー内に形成された潜在的な可視性の順序を利用することにより、その全てのノードの可視性ソーティング(visibility sorting)が単にツリーを走査することで達成できる。BSPツリーはシーンの幾何学形状を特徴づけ、視野方向には拠らないため、シーンの内容に変化がない限り異なる視野方向の正しい可視性の順序を入手するために同一のBSPツリーを使用できる。このことは、静的な幾何学形状の可視化アプリケーションで特に有用である。
【0033】
好ましい実施例のBSP構築アルゴリズム(BSP construction algorithm)は、余計なツリー構築時間(tree construction time)を掛けずに三角形のソーティングを可能にするBSPツリーを作成する。BSPツリーの構築に影響を及ぼす唯一の重要変数は、スプリットされる各リーフノードにおける区分面の選択である。従って、区分面の候補の評価にどのような判断基準を用いるべきか、また最良の区分面を如何にして効率的に選択するかということが重要課題となる。本願においては、ツリーの構築時間や最終的なツリーの質など複数のファクターを考慮した判断基準を選択することで第一の課題に対応し、最良の候補を迅速に識別するために抽出された形状知識を利用することで第二の課題に対応している。下記の説明は特に三角形エレメントに関連しているが、開示されたプロセスは明らかに一般的な平面多角形に応用可能なものであると当業者は認識するであろう。
【0034】
図3は開発されたBSPツリーの構築アルゴリズムの概略を示す。このアルゴリズムは三つのステップから成る:事前処理、区分面の選択、ノードの構築である。事前処理ステップは一度しか呼び出されないが、その後の二つのステップはスプリットされる各BSPノードに対して繰り返し呼び出される。三角形の法線情報及び位置情報を分析することで、区分面の候補をより効率的に選択するために使用される形状知識が事前処理ステップで抽出される。このステップにおいてはまた、全ての入力三角形を含むルートノードが作成され、これを保持するBSPノードリストが初期化される。ノードリストは、スプリットされる全てのリーフノードを保持した待ち行列タイプ構造のもので、このリストが空になった場合再帰的な構築プロセスは終了する。区分面選択のメカニズムは仮説と検証の方法に基づいており、つまり最高の結果を出し得る面を決定するために幾つかの候補面が選択され評価される。ノード構築ステップにおいては、各三角形は選択された区分面に関して分類され、区分面を横切るかどうかに基づいてスプリットされる。その後、その時のBSPノードに対し単一もしくは複数の子ノードが作成される。事前に設定された判断基準に基づき更なる再分断が必要な場合には、新しく作成された子ノードの各々がノードリストに付け加えられる。
【0035】
BSP構築アルゴリズムの課題の一つは、一組の三角形を含む所定のBSPノードに対する異なる区分面を比較するために、どの判断基準を用いるべきかということである。好ましい実施例においては、ツリー構築時間及び構築されるBSPツリーの質に関する様々な目標を反映した、wとして表される判断基準で区分面は評価される。最短のツリー構築時間とより良いBSPツリーを達成する可能性が、wの最大値を有する区分面において最も高くなるようにこの判断基準はデザインされている。
【0036】
表1は区分面Pの候補を特徴づけるために使用されるパラメータを示す。
【0037】
【表1】
【0038】
一組の三角形と区切り面Pの候補を含むリーフノードLがある場合、表1に示される四つのパラメータがPの質を特徴づけるために用いられる。パラメータnCに関しては、三角形が複数の三角形にスプリットされ、そのそれぞれが区分面Pの正の側か負の側に位置するようになるので、パラメータnCは判断基準wに悪い影響を及ぼすことは明らかである。三角形をスプリットすることは、一般的に結果としてツリーサイズがより大きくなりツリー構築時間が長くなる。また、BSPツリーにおける三角形の数が増加すると、三角形のソーティングも時間がかかる。P上にある三角形は同一平面上にあり、またノードLのフロント子ノード及びバック子ノードに対するこれら三角形全体の順序は容易に入手できるため、Pにおける三角形の順序は任意のものとすることができる。これら三角形のソーティングのコストはゼロであるため、パラメータnOは明らかに、判断基準wに対して良い影響を与える。
【0039】
nF及びnBの判断基準wへの影響はそれ程明らかなものではない。ツリーバランス、つまりnF及びnB間の差の絶対値は、BSPツリーにおける全ての三角形をソートするという目的においては重要ではない。しかし、ツリーのバランスが崩れた場合構築パイプラインを通る三角形の数が増加するため、ツリーバランスはツリー構築時間に甚大な影響を与えるということが明らかになっている。図4A及び図4Bに示される二つの極端なケースを分析しこれらを比較することで、このことは浮き彫りになる。図4Aは非常に良くバランスの取れたツリー区分を示し、図4Bは極端にバランスの崩れたツリー区分を示している。
【0040】
【0041】
上記の分析に基づいて、好ましい実施例では区分面の評価に下記の判断基準が用いられる。
w=nO−KCnC−abs(nF−nB)(1)
ここで、KCは三角形をスプリットすることの重要性を示す定数であり、absという記号は絶対値オペレーションを意味する。三角形をスプリットすることで、その時のノードをスプリットするオペレーションが遅くなるのみならず、扱う三角形の数が増えるため、最終的なツリーサイズが大きくなりツリー構築が更に遅くなるという事実を示すために、KCの値は一般的に1より大きく設定される。
【0042】
BSPツリー構築パイプラインから、正しい区分面の選択が構築時間及び最終的なBSPツリーサイズの両方に影響する課題であることが分かる。方程式(1)が示す評価判断基準は、区分面上の三角形が多くなり、区分面が切り分ける三角形の数が少なくなり、区分面のそれぞれの側の三角形のバランスができるだけ取れるように区分面を選択するべきである、ということを示している。好ましい実施例においては、入力三角形は事前処理ステップで、それぞれが特定の特徴もしくは位置づけパターンの情報を伝達する一貫した階層グループに編成される。このように編成された三角形はその後、質の高い区分面の候補の迅速な識別のために用いられる。
【0043】
図5は、32ビットの整数としての面インデックスのレイアウトの一例を示す。図6は、抽出した階層グループ(hierarchical group)の一例を示す。
【0044】
【0045】
好ましい実施例においては、各三角形の補助面の法線ベクトルとスカラー距離は、我々が面インデックスと呼ぶ単一の正負符号付整数にエンコードされる。面インデックスは、八進インデックス及び六進インデックスのそれぞれを正確にエンコードする3ビットと、二つの角度値のそれぞれを量子化しエンコードするnビットと、距離値を量子化しエンコードする25−2*nビットから成る。ここで、nは調整可能である。n=3である場合の面インデックスのレイアウトを図5に示す。ここで、最上位ビットが正負ビットとして確保され、次の6ビットが八進値及び六進値用であり、次の19ビットが量子化された距離値用であり、最後の6ビットが二つの量子化された角度値用である。
【0046】
領域、層及び面と呼ばれる三つのグループが抽出され、この3グループの間の階層関係(hierarchical relation)は図6に図示されている。抽出プロセスは全ての三角形をその面インデックスに対して(降順に、一般性は失わずに)シードリストSにソートすることから始まる。領域グループは、そのそれぞれがS中の同一の八進値及び六進値を有する三角形の隣接リストを含んでおり、その後リストSから抽出される。八進値及び六進値の定義から、最大で48個の領域が存在し、同一の領域内の全ての三角形はほぼ同じ方向を向いている。図5から分かるように、各領域内で三角形はその距離によりソートされる。層から同一の距離にある三角形と、同一の領域内にある層はそれらの距離により降順にソートされる。各層内で、同一の量子化された角度値を有し、それ故にほぼ同じ方向を向いている三角形は一つの面へとグループ化される。各面は一つもしくは複数の三角形エレメントから成る。
【0047】
区分面選択における基本ストラテジーは、選択された一組の面候補を比較し最高質の面を選ぶ「仮説と検証」である。好ましい実施例では、方程式(1)による評価で優れた区分面になる可能性が最も高い区分面の候補を迅速に選択するために、抽出された形状知識が利用される。
【0048】
殆どのCADモデルには重要性のある平面の特徴があるため、区分面上の三角形は、モデル内で最も大きな重要性のある面の特徴をあるものを選択した場合、最大多数となる。透過的なオブジェクト内の全ての面の特徴は面グループとして抽出されているため、最も大きな重要性のある面の特徴から成る三角形リストは、単に線形検索で識別できる。その後、リスト内の一つの三角形の補助面が区分面の候補として選択される(この例においては第一の三角形が選択される)。面の特徴の重要性は面グループの面積として、つまりはグループ内の三角形の全面積として定義される。これは、三角形が区分面によって切り分けられる可能性はその面積の増加と共に上昇するからで、それ故、面積が大きい三角形を区分面上に持つ方が良い。
【0049】
【0050】
区分面の六つの候補のそれぞれに関して、三角形との関係が演算される。区分面と単一の三角形との関係は四つのタイプ、三角形の上、三角形を横切る、三角形の前および後ろ、の内の一つとして分類されるが、区分面と一組の三角形との関係は、表1に示すようにnO、nC、nF及びnBの四つのパラメータで特徴づけられる。単一の三角形と面との関係のタイプは、三角形の三つの頂点とその面との関係から容易に推測でき、この関係は半平面テストによって容易に演算できる。
【0051】
選択された六つの候補面のそれぞれは、入力三角形の補助面である。このことは、少なくとも一つの三角形は切り分けられず、三角形によって形成された形状が凸状に近くない場合に良い結果を出す筈である、という意味で有益である。しかし、この形状がほぼ凸状である場合、選択された区分面は極端にバランスが悪くなる可能性が高く、これは避けるべきである。
【0052】
【0053】
【0054】
その時のBSPノードに対し最良な区分面が選択された後、手前の子ノード、または奥の子ノードもしくはその両方が、必要とされる親子リンクを有するように作られる。区分面の正の側にある三角形は全て手前の子ノード上に置かれるが、負の側にある三角形は全て奥の子ノード上に置かれる。区分面上にある三角形はその時のノード上に留まり、区分面を横切る三角形は二つもしくは三つの三角形にスプリットされる。スプリットされた三角形のそれぞれが、手前の子ノードか奥の子ノードのどちらかに追加される。
【0055】
同じ子ノード上の三角形の順序が変化しないように、その時のノード上の三角形が順序通りに処理されるような形でノード構築は行われる。例えば、その時のノードにおいて三角形Aが三角形Bに先行し、ノード構築後これらの三角形が同じ子ノードに属する場合、その後も三角形A(もしくはそのスプリットされた三角形)は三角形B(もしくはそのスプリットされた三角形)に先行する。従って子ノードの三角形リストは、更なるソーティングを行わずとも階層グループの抽出が可能な状態にある。
【0056】
BSPツリーに編成された三角形の可視性の順序は、走査時の各リーフノードにおける目の位置と深さソーティング手順に対し、BSPツリーを奥から手前の順に走査することで演算される。ツリーを走査することでBSPツリーの全てのノードがソートされるが、深さソーティング手順により単一のリーフノード内の三角形に関して、奥から手前への順番が設定される。三角形ソーティング用アルゴリズムの疑似コードの例を以下に示す。ここで、「inNode」はソートされるその時の入力BSPツリーノードであり、「inEye」は目の位置の入力位置であり、「outTriList」は演算されるソートされた三角形の出力リストである。非リーフノード上の三角形に関しては、深さソーティングは必要ないためリーフノード上の三角形に比べソーティングコストはかなり低い。表1に示される数値nCが方程式(1)の評価式に良い影響を与えるのはこのためである。
【0057】
PROC triangle-sort (inNode, inEye, outTriList)
{
if(inNode is leaf node){
tempList = depth-sort(inNode, inEye);
outTriList.add(tempList);
}
else if(inEye is in the front of inNode.partitionPlane){
triangle-sort(inNode.back, inEye, outTriList);
outTriList.add(inNode.onTriList);
triangle-sort(inNode.front, inEye, outTriList);
}
else if(inEye is at the back of inNode.partitionPlane){
triangle-sort(inNode.front, inEye, outTriList);
outTriList.add(inNode.onTriList);
triangle-sort(inNode.back, inEye, outTriList);
}
else{ // eye is on node.partitionPlane
triangle-sort(inNode.front, inEye, outTriList);
triangle-sort(inNode.back, inEye, outTriList);
}
}
【0058】
開示された深さソーティング用アルゴリズムは、異なる二つのモードで作動する。基本モードではそれぞれの三角形はポイントとして単純化され、一対の三角形の陰になって見えない部分がある関係は、それらの三角形から目の位置までの距離を比較することで演算できる。このように単純化することで、予想時間O(NlogN)でのQuickSortなどの効率的な実行が可能となるが、このテストは完全でなく、正確な結果は保証されていない。従って、ソートされた順序が誤りである可能性もあり、これは透過的レンダリングにおいて不自然な結果に繋がる。
【0059】
高次なモードで作動している場合、次項で説明する陰になって見えない部分があるかどうかをテストする高次なアルゴリズムによって演算された一対の三角形の陰になって見えない部分がある実際の関係に基づいて、深さソーティング用アルゴリズムが最終的なソートリストを作成する。保証された正確な結果を導き出しつつ、陰になって見えない部分がある実際の関係に基づいてソートリストを作成することは、基本Zソーティングよりも複雑である。三角形Aと三角形Bの陰になって見えない部分があるかどうかをこれらの三角形だけでテストしても、最終的な奥から手前にソートされたリストにおけるこれら三角形の順序が完全に決定されるわけではない、ということがこの複雑さの原因である。例えば、これら二つの三角形の陰になって見えない部分がある関係が、A<Bとして表される「BはAの陰になって見えない部分があることはない」という関係であると判明した場合、A>C0>C1...>Cn>Bとして表される陰になって見えない部分がある連鎖関係を有する単一もしくは複数の三角形C0,C1,...,Cnが存在する可能性があり、このことにより、最終リストにおいてAがBに先行するべきであるということになる。
【0060】
図7は、n=0であるケースに対応して描かれた、陰になって見えない部分がある連鎖関係を示す。この図においては、図の真上が「目の位置」となっている。この種のソーティング問題に「分断攻略」のパラダイムを直接応用するのは、可能であるとしても困難であり、一般的に演算複雑性O(N2)を有するアルゴリズムが予想される。深さソーティング用アルゴリズムはBSPツリーのそれぞれのリーフノードのみに応用され、単一のリーフノード上の三角形の最大数はコントロール可能であるため、好ましい実施例においてはこの演算負荷は軽減される。
【0061】
一般的に元のリストにおいてAがBより先であると仮定した場合、陰になって見えない部分があるかどうかのテストで求められる結果は、BがAの陰になって見えない部分がある状態にあるかどうかである。我々は先ず、複雑性が徐々に増加する、下記の四つの基本テスト[4]を用いる。どれか一つのテストが成功すれば、「BはAの陰になって見えない部分がある状態ではない」という結論が導き出される。
【0062】
1.視野座標システムで、Aの最小Z値はBの最大Z値よりも大きいか?
2.画像スペース内の、これら二つの三角形の軸に沿った境界ボックスは重なり
合っているか?
3.三角形Aは、三角形Bに対して目の位置と反対側に位置しているか?
4.三角形Bは、三角形Aに対して目の位置と同じ側に位置しているか?
【0063】
典型的なCADモデルにおいては、モデルデータは通常スペース的にかなりコンパクトであり、これらの基本テストのどれも成功しない場合が多々ある。このケースを扱うための公知のアプローチは、二つの多角形が既に正しく順序づけられている場合でも視野に依存したスプリットを行うことがあるので、理想的ではない。フレーム毎にキャッシュに格納されたBSPツリーの頻繁なアップデートが必要となるこのようなスプリットを避けるために、好ましい実施例では陰になって見えない部分があるかどうかの高次のテストを適用する。
【0064】
【0065】
図8A乃至8Cは三角形と、三角形の陰になって見えない領域を示す。図8Aはもう一方の三角形がそれだけである場合の領域Rを示す。図8Bは頂点vが共有されている場合の領域Rvを示す。図8Cは辺eが共有されている場合の領域Reを示す。それそれの図において、目の位置が表示されている。
【0066】
図9は三角形AとB領域の境界線との交差部分を示している。
【0067】
A領域として表される三角形Aの陰になって見えない領域が構築された後、三角形B上の陰になって見えないポイントの位置を迅速に探し出す方法は、三角形の共有されていない頂点のそれぞれを三角形Aに対してテストすることである。陰になって見えないポイントが見つからず、二つの三角形が一つの辺を共有する場合、「BはAの影になって見えない部分がある状態ではない」。そうでなければ、B領域が構築され、A上の共有されていない頂点から陰になって見えないポイントを検索する。それでも陰になって見えないポイントが見つからず、二つの三角形が一つの頂点を共有する場合もまた、「BはAの影になって見えない部分がある状態ではない」という結論が得られる。二つの三角形だけであり、どちらの三角形のどの頂点も陰になって見えないポイントとなる条件を満たさない場合、我々はB領域の錐形の境界とAとを交差させて、陰になって見えないポイントを演算する。演算された交差ポイントは錐形の境界上に位置し、陰になって見えないポイントとなる条件を満たす。図9に示されるケースに関しては、四つの交差ポイントがある。交差部分ポイントが見つからない場合、三角形Bは三角形Aの陰になって見えない部分がある状態ではない。陰になって見えない部分があるかどうかの高次なテストのアルゴリズムの疑似コードの例を以下に示す。
【0068】
PROC occlusion-test (triA, triB)
{
regionA = construct-region(triA);
occlusionPt = find-occlusionPt(triB, regionA); if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triA);
}
else if (triA shares an edge with triB) {
return “triA does not occlude triB”; }
else {
regionB = construct-region(triB);
occlusionPt = find-occlusionPt(triA, regionB);
if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triB);
}
else if (triA shares a vertex with triB) {
return “triA does not occlude triB”; }
else{
occlusionPt = intersect(triA, regionB);
if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triB);
}
else{
return “triA does not occlude triB”;
}
}
}
}
【0069】
【0070】
開示された視野をキャッシュに格納するアルゴリズム用疑似コードの例を以下に示す。この実施例において選択された参考方向は、単位球面上に均等に分散している。その時の視野方向に関して、最も近い参考方向が識別される。この参考方向からはキャッシュに格納された三角形リストが入手できない場合、三角形をソーティングするオペレーションが実行され、作成された三角形の配列が参考方向に対してキャッシュに格納される。これ以外の場合には、キャッシュに格納されたリストがレンダリングのために直接呼び出される。
【0071】
PROC view-caching (inNode, inViewDir, outSortedList)
{
if(refDirList is empty)
refDirList = constructReferenceDirList();
closestRefDir = findClosestRef(inViewDir, refDirList); if(cachedTriList is available for closestRefDir){
outSortedList = cachedTriList;
}
else{
triangle-sort(inNode, inViewDir, outSortedList);
cacheList(closestRefDir, outSortedList);
}
return;
}
【0072】
視野をキャッシュに格納することで、三角形ソーティングの実行が必要となる頻度が減ることにより、レンダリングのスピードが改善される。幾何学データの代わりにグラフィックスデータをキャッシュに格納することで更なる最適化が実現できる。例えば、三角形リストの代わりにディスプレイリストを参考方向においてキャッシュに格納することもできる。この方法によれば、必要なレンダリングのオペレーションも減らすことができる。
【0073】
図10は、上述のプロセスの詳細な説明に対応した、好ましい実施例によるプロセスのフローチャートを図示している。先ず、システムは透過的ノードとその時の視野方向を説明する幾何学データを受け取る(ステップ1005)。
【0074】
次に、システムはバイナリスペースパーティションツリーを構築する。ここで、透過的三角形のそれぞれがBSPツリーのリーフと関連づけられる(ステップ1010)。
【0075】
次に、BSPツリーを走査し各リーフにおいて三角形をソートすることで、実質的に奥から手前の順になるよう三角形をソートする(ステップ1015)。
【0076】
次に、ソートされた三角形をグラフィックスAPIに出力する(ステップ1020)。
【0077】
最後に、その時の視野に対してソートされたデータを、三角形の形でもしくは表示リストの形でキャッシュに格納する(ステップ1025)。
【0078】
図11は好ましい実施例によるもう一つのプロセスのフローチャートを図示している。このプロセスは、上述のBSPツリーの構築を説明する。第一に事前処理の段階で、システムはそれぞれの三角形の法線情報及び位置情報を含め、それぞれの三角形の形状知識を分析する(ステップ1105)。次に、システムはルートノード及びノードリストを作成する(ステップ1110)。
【0079】
その後、ツリーの各ノードに関して、システムは本願記載の区分面選択(ステップ1115)を実行する。その後、ノードのそれぞれの三角形は区分面に関して分類され(ステップ1120)、この分類に基づき、子ノードが作成される(ステップ1125)。
【0080】
残りのノードがある場合(ステップ1130)、このプロセスを繰り返す(ステップ1115に戻る)。残りのノードがなければ、ここでプロセスは終了し(ステップ1135)、全体プロセスでの次のステップが実行できる。
【0081】
グラフィックス処理及びレンダリングに関する更なる背景情報は、下記の文献に記載されており、これらの文献は全て参照することにより本願に含まれるものである。アブラハム・マーメン著、「バーチャルピクセルマップ技術とともに使用される透過的性及びアンチエイリアスアルゴリズム」、IEEE Computer Graphics & Applications、9(4)、1989年7月、43−55;キャス・エベリット著、「インタラクティブなオーダー非依存型透過的性」、白書、エヌビディア、2001年;マイケル・ケリー、カーク・ゴールド、ブレント・ピース、ステファニー・ウィナー、アレックス・イェン著、「ハードウェアで加速されたCSGレンダリング及び透過的性」、Proceedings of the 21st annual conference on computer graphics and interactive techniques、1994年、177−184;ニューウェル、M・E、ニューウェル、R・G、及びサンチャ、T・L著、「隠れたサーフェス問題へのソリューション」、Proc. ACM National Conf.、1972年;ヘンリー・ファッチ、ズビ・M・ケデム、ブルース・F・ネイラー著、「アプリオリなツリー構造による目に見えるサーフェスの生成について」、Proceedings of the 7th annual conference on computer graphics and internactive techniques、1980年7月、124−133;ヘンリー・ファッチ、グレゴリー・D・アブラム、エリック・D・グラント著、「リジットオブジェクトのほぼリアルタイムでの陰影ディスプレイ」、Computer Graphics、Vol.1、No.3、1983年7月.[7]マイケル・ディアリング著、「形状圧縮」、Proceedings of the 22nd annual conference on computer graphics and interactive techniques、1995年9月.[8]フォレイ、J・D、バン・ダム、A、フェイナー、S・K、ヒューズ、J・F著、「コンピュータグラフィックス:原理と実践」、第2刊、アディソン―ウェスリー、1997年。
【0082】
説明を簡潔かつ明確にするために、本発明と共に使用するに適した全てのデータ処理システムに関し、その完全な構成とオペレーションが本願に図示もしくは記載されているわけではないことを当業者は認識するであろう。そうではなく、本発明に特有なデータ処理システム、もしくは本発明を理解するのに必要なデータ処理システムのみが図示及び記載されている。データ処理システムの構成とオペレーションで本願に記載されていないものは、当技術分野で公知の様々な現行の実施方法及び使用例に沿ったもので良い。
【0083】
本発明は完全に機能的なシステムとして記載されているが、本発明のメカニズムの少なくとも一部は、機械で使用可能な様々な形態の媒体に収められた指示として頒布させることができることを当業者は理解するであろうことと、また本発明が、実際の頒布のために使用される指示もしくはシグナルを含む媒体の特定の種類に関わらず、同じ様に応用できることは、特記すべき事項である。機械で使用可能な媒体の例としては読み取り専用メモリ(ROM)もしくは電気的消去、プログラム可能型読み取り専用メモリ(EEPROM)などの不揮発性のハードコードされた媒体、フロッピーディスク、ハードディスクドライブ、及びコンパクトディスク読み取り専用メモリ(CD−ROM)、もしくはデジタル多用途ディスク(DVD)などのユーザーが記録できる媒体、及び、デジタルコミュニケーションリンク及びアナログコミュニケーションリンクなどの伝達型媒体が含まれる。
【0084】
本発明の実施例はその詳細が記載されているが、本願が開示する発明は、その最も広範な精神及び範囲から逸脱することなく、様々な形で変更、置き換え、変形、及び改良できるということを当業者は理解するであろう。
【0085】
本出願内の記載は如何なるものであれ、特定の構成要素、ステップ、もしくは機能が、特許請求の範囲に含まれなければならない不可欠な構成要素であると示唆するものではない。つまり、特許に含まれる内容の範囲は、請求項の範囲によってのみ定義されるものである。また、これらの請求項はどれも、「(ため)の手段」という言葉が分詞の後に続かない限り、合衆国法典第35編第12条の第6段落の発動を意図するものではない。
【0086】
本発明及び本発明による効果をより完全に理解するために、付随する図面と併せながら下記に説明をする。なお、図内の同じ数字は同じものを示す。
【図面の簡単な説明】
【0087】
【図1】様々な実施例を実現できるデータ処理システムのブロック図である。
【図2】本発明の一実施例による概略図である。
【図3】BSP木構造アルゴリズムの概要を示している。
【図4】A及びBはそれぞれ、釣合いのとれたツリー(balanced tree)と不釣合いなツリー(unbalanced tree)を図示している。
【図5】32ビットの整数としての面インデックスのレイアウトの一例である。
【図6】抽出した階層グループの一例を図示している。
【図7】陰になって見えない部分が連鎖している関係を示している。
【図8】A乃至Cは、三角形の陰になって見えない部分がある領域の三つの異なる形を示している。
【図9】三角形と領域の境界線との交差部分を示している。
【図10】好ましい実施例によるプロセスのフローチャートである。
【図11】好ましい実施例による別のプロセスのフローチャートである。
【技術分野】
【0001】
本発明は、一般にグラフィックス処理(graphics processing)に関するものである。
【発明の背景】
【0002】
航空宇宙産業、自動車産業など数多くの産業において、製造業者は初期段階でデザインの問題を発見すべくインタラクティブに(interactively)製品のデザインを見て点検するために可視化技術に依存することが増えてきている。製品構造全体を見てそのサブシステムのそれぞれを点検し易くする能力は、如何なる可視化システム(visualization system)においても不可欠とされている。したがって、本来なら陰になって見えない(occlusion)デザインの詳細が見えるようにするため、一部の選択した部品を透過的にレンダリングする(render transparently)ことが望ましい。また、ガラスなど透過的な素材からできている部品もあり、それらを透過的にレンダリングすることはそのシーンをよりリアルに見せる。したがって、インタラクティブなフレームレート(interactive frame rate)でオブジェクト(object)にリアルな透過性(transparency)を持たせることは効果的な可視化(visualization)のために重要なのである。
【0003】
新しいグラフィックシステムの殆どにおいては、「アルファブレンディング」(alpha blending)と呼ばれるプロセスにより透過的レンダリングが実現されている。透過性を正確にするには、一画素に寄与する全ての多角形の色を奥から手前の順に「ブレンド」しなければならない。フレームごとに正確にソーティングを行なう必要があるため、大きなモデルのインタラクティブな透過的レンダリングは困難な課題であった。
【0004】
従来提案されてきた三角形ソーティングの方法(triangle sort method)は、画像に基づいたものとオブジェクトに基づいたものの二種類に分類することができる。画像スペースに基づいた方法では、特殊なグラフィックハードウェアを利用する必要がある。この種の方法では、深さに沿って奥から手前の順に一層ずつ透過的な多角形をレンダリングする。各層のレンダリングには個別のレンダリングのパスが必要となり、そのシーンの最大深さの数だけレンダリングのパスが必要である。異なるパスからの各画素の色をブレンドするために追加のメモリバッファが必要となる。オブジェクトスペースに基づいたの方法では、その時の視野方向に対して全ての多角形をソートする。これらのソートされた多角形はその後、レンダリングのために奥から手前の順にグラフィックスのパイプラインに供給される。この種類の方法の殆どは、Z−バッファというハードウェアが利用できるようになる以前に可視性の問題を解決するために提案されたものである。これらの各方法には深刻な限界があり、大きな透過的モデルのレンダリングに効果的に利用することはできなかった。例えば、深さソーティング法にはO(N2)の計算の複雑さがあり、BSP(バイナリスペースパーティション)ソーティング法(binary space partition sort method)には大きな木構造(tree structure)を構築しメモリに保存する手間がかかる。大きな透過的のモデルのレンダリングをインタラクティブなレートで行なうことを可能にするための新たなアプローチが望まれている。
【0005】
BSPツリーの構築(tree construction)に関するこれまでの研究は、一つのファクター、すなわち最終的なBSPツリー(tree)における三角形の数を最小限にすることに焦点をあてており、実用面では等しく重要であるその他のファクターは考慮されていなかった。これらその他のファクターには、BSPツリーの構築にかかる時間、BSPツリー内の三角形をソートするのにかかると予想される時間などが含まれる。様々なファクターによって課された様々な条件を満たしつつ効率的にBSPツリーを構築することは困難ではあるが、このアプローチをより実用的なものにするにはきわめて重要である。
【0006】
深さソーティングに関するこれまでの研究は、一対の三角形の陰になって見えない部分がある関係を正確に割り出すことのできないようなテスト用アルゴリズムを用いていた。その結果として、二つの三角形が既に正しい順序に並んでいたとしても視野に依存した三角形スプリットが起こることがあった。そのような不必要な三角形スプリットを避け、より良いソーティング結果を得るために、陰になって見えない部分があることをテストするための、より洗練されたアルゴリズムが必要とされている。
【0007】
したがって本技術分野では、より良い透過的レンダリングのためのシステム、方法及びコンピュータプログラム製品が求められている。
【発明の概要】
【0008】
好ましい実施例では、可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、奥から手前の順に多角形をソートし、その後ソートした三角形をOpenGLなどのグラフィックスAPIに供給するシステム、方法及びコンピュータプログラム製品を提供する。
【0009】
上記は、後述する本発明の詳細な説明を当業者がより良く理解できるよう、本発明の特徴及び技術的な効果についてかなり広範に概要を述べたものである。本発明の更なる特徴と効果は本発明の請求項の主題となるものあり、以下において説明する。当業者は、開示されている概念及び特定の実施例を、本発明と同じ目的を果たすために他の構成を変更もしくはデザインするための基礎として容易に使用できることを理解するであろう。当業者はまた、これらの同等な構築は最も広義な形での本発明の精神及び範囲から逸脱するものではないことを認識するであろう。
【0010】
下記の発明の詳細な説明に進む前に、本特許全体に亘って用いる特定の単語及び語句を定義することは有意義であろう。「含む」及び「から成る」という用語並びにそれらの派生語は、制限のない包含を意味する。「または」と言う用語は包括的で、その意味するところは及び/またはということである。「に関連する」及び「と関連する」という語句並びにそれらの派生語は、含む、含まれる、相互に関連する、包含する、包含される、〜を含む、〜内に含まれる、相互に接続する、〜を包含する、〜に包含される、〜に接続するもしくは〜と接続する、〜と連結するもしくは〜に連結する、〜と伝達できる、〜と提携する、インターリーブする、並列する、〜に隣接する、〜に境を接するもしくは〜と境を接する、〜を有する、〜の性質を有する、等を意味する。「コントローラ」という用語は、少なくとも1つの操作を制御するデバイス、システム、またはそれらの部品の全てを意味し、そのようなデバイスが、ハードウェア、ファームウェア、ソフトウエアまたは少なくとも2つの同様なものを組み合わせたものに実装されているかを問わない。特定のコントローラーに関連する機能性は集中型でも分散型でもよく、ローカルかまたは遠隔かは問わないことに留意されたい。本特許では特定の単語および語句の定義を提供するが、当業者は、そのような定義は、殆どではないにしても多くの場合、そのように定義された単語および語句の従来の使用および今後の使用に当てはまることが理解できるであろう。
【発明を実施するための最良の形態】
【0011】
以下に考察する図1乃至図11及び本特許に記載の本発明の原理を説明するのに用いた様々な実施例は例を示すためだけのものであり、如何なる場合でも本発明の範囲はこれらのみに限定して解釈されるべきではない。当業者は、本発明の原理は適宜に準備されたものであればどのようなデバイスを用いても実施できることを理解するであろう。本出願の多数の革新的な教示を、現時点で好ましいとする実施例を特に参照しながら説明する。
【0012】
好ましい実施例では、可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、奥から手前の順に多角形をソートし、そしてソートした三角形をOpenGLなどのグラフィックスAPIに供給するシステム、方法及びコンピュータプログラム製品を提供する。
【0013】
本願ではでは特に三角形について説明しているが、当業者は、開示した実施例は全ての平面形状、例えば凸面または凹面の多角形であってもよく、単純でも複雑でもよいと認識するであろう。また区分面(partition plane)で切ったときに二つ以上の形状にスプリットする方法がある限り、曲線状のまたはプロシージャで定義された形状(procedurally−defined shape)でもよい。
【0014】
図1は好ましい実施例を実現できるデータ処理システムのブロック図である。図示したデータ処理システムは、プロセッサ102、2次キャッシュ/ブリッジ104及びローカルシステムバス106を含み、プロセッサ102は2次キャッシュ/ブリッジ104に、そして2次キャッシュ/ブリッジ104はローカルシステムバス106に接続されている。ローカルシステムバス106は、例えば、周辺構成要素相互接続(PCI)アーキテクチャバスでもよい。図示した例ではローカルシステムバスにはまたメインメモリ108及びグラフィックスアダプタ110も接続されている。
【0015】
ローカルエリアネットワーク(LAN)/ワイドエリアネットワーク/ワイアレス(例えばWiFi)アダプタ112などのその他の周辺構成要素もローカルシステムバス106に接続されるようにしてもよい。拡張バスインターフェース114によりローカルシステムバス106が入力/出力(I/O)バス116に接続される。I/Oバス116はキーボード/マウスアダプタ118、ディスクコントローラ120及びI/Oアダプタ122に接続されている。
【0016】
図示した例のI/Oバス116にはまたオーディオアダプタ124も接続されており、オーディオアダプタ124には音声を再生するためのスピーカー(図示せず)を接続することもできる。キーボード/マウスアダプタ118はマウス、トラックボール、トラックポインターなどのポインティングデバイス(図示せず)を提供する。
【0017】
当業者は、図1に示したハードウェアの詳細については様々であり得ると理解するであろう。例えば、図示したハードウェアに加えてまたはそれらの代わりに、光ディスクドライブ等のその他の周辺構成デバイスを用いることもできる。図示した例は説明のためだけのものであって、本発明に関する構造上の制限を示唆するものではない。
【0018】
本発明の好ましい実施例によるデータ処理システムはグラフィカルなユーザーインターフェースを用いたオペレーティングシステムを含む。該オペレーティングシステムは該グラフィカルなユーザーインターフェースに複数のウィンドウを同時にレンダリングすることを可能にし、各レンダリングウィンドウは異なるアプリケーションとのまたは同じアプリケーションの異なるインスタンスとのインターフェースを提供する。ユーザーは該グラフィカルなユーザーインターフェースのカーソルを該ポインティングデバイスを介して操作できる。該カーソルの位置を変えること及び/またはマウスボタンをクリックするなどのイベントによって、望ましいレスポンスを得るように作動させる。
【0019】
適宜に変更すれば、ワシントン州レドモンド市にあるマイクロソフト社の製品であるマイクロソフトウィンドウズTMの一バージョンなどの様々な市販のオペレーティングシステムの一つを用いることができる。説明したような本発明にしたがって該オペレーティングシステムを変更または作成してもよい。
【0020】
好ましい実施例は透過的レンダリングが現在抱える問題に対処するものである。図2の概略アーキテクチャ図に示すように、開示したシステム、方法及びコンピュータプログラム製品は、可視化APIとグラフィックスAPIの間で機能する。
【0021】
該システムは可視化APIから来る未処理の多角形幾何学形状及び視野パラメータを受け入れ、好ましくは実質的に奥から手前の順に多角形をソートし、そしてソートした三角形をOpenGLなどのグラフィックスAPIに供給する。そうする際に、開示されたシステムは二つの従来型のソーティング方法を新規のやり方で統合して両方の利点を十分に引き出し、新規のキャッシュに格納するストラテジーを可能にすると共に、主要なアルゴリズムも大きく改良できるようにする。そして、処理時間、レンダリングの速度、レンダリングの質及びメモリ消費など様々なファクターに関する利点・不利点のトレードオフを実現できる顕著な柔軟性を提供することにより、システムを実用面で改善する。開示したシステムは、最大で数十万もの多角形までの大きなモデルを市販のグラフィックス用ハードウェアを用いてインタラクティブなフレームレートで、殆ど不自然な結果も無くレンダリングできることが証明されている。
【0022】
BSPソーティング法の特徴は深さソーティング法の特徴を補完するものである。BSPソーティング法は、非常に大きなツリー構造をメモリに維持することによりO(N)次のコンプレクシティを実現する。深さソーティング法はメモリのオーバーヘッドが少なくて済むが、O(N2)次のコンプレクシティを持ち、これはまったく望ましくない。本願で開示されている三角形ソーティング用アルゴリズムはこれら二つの方法を統合して両方の利点を引き出すものである。具体的には、(従来のやり方ではBSPツリーは三角形が一つのリーフノードで構築されていたのに対し)少なくとも幾つかの実施例においては、BSPツリーは三角形が複数あるリーフノードで構築される。そして該BSPツリーを走査し、走査中に各リーフノード上の三角形を深さソーティングすることにより三角形がソートされる。
【0023】
一つのリーフノード上で許容できる三角形の最大数βを指定することにより、開示されたアルゴリズムの挙動を、これら二つの方法の間で容易に調整でき、レンダリングの速度とメモリ消費の望ましいトレードオフが実現できる。例えば、βが1であると指定されると、開示されたアルゴリズムは従来のBSPソーティング用アルゴリズムへと戻り、βが三角形の合計数であるNと指定されると、開示されたアルゴリズムは従来の深さソーティング用アルゴリズムへと戻る。βが2とN−1の間の数値であると指定されると、我々のアルゴリズムの挙動もまたこれら二つの従来法の中間のものとなり、βが大きくなるにつれソーティング速度は落ちるがメモリ内のツリーサイズは小さくなる。また、好ましい実施例では深さソーティング用アルゴリズムには、二つの異なるモードがあり、深さソーティング用アルゴリズムがレンダリングの速度とレンダリングの質に関して、更なる柔軟性が提供される。高次なモードでは正確なレンダリングの結果が保証され、基本モードでは不自然な結果があるかもしれないがレンダリングの速度が速くなる。
【0024】
BSP構築アルゴリズムを改良するために、様々な技術を開示する。幾つかの実施例においては、実用的なアプリケーションに重要な複数のファクターを考慮した区分面の候補の質を評価するために新しい判断基準を用い、良い区分面の迅速な選択を促進する形状知識情報を効率的に抽出するために新しい方法を用いる。実験結果では、開発されたBSP構築アルゴリズムにより1.2GHzプロセッサのPCでおよそ1秒で2万個の三角形の高品質のBSPツリーを作成できることが示された。
【0025】
本願では、一対の三角形間での陰になって見えない部分がある関係を正確に識別するための洗練されていながら計算に関しては効率的なテスト用アルゴリズムにより、周知の深さソーティング用アルゴリズムが改良されている。その様にして不必要な三角形スプリットをなくすことができる。
【0026】
更に、ある有限数の視野方向一組に対してソートされた幾何学形状をキャッシュに格納して、視野をキャッシングするアルゴリズムが開示されている。これらのキャッシュに格納されたされた三角形の配列を用いると、その時の視野方向の現実の三角形の配列をキャッシュに格納されたレファレンス方向の中で最も近いものの三角形の配列で近似することにより、透過的レンダリングの速度を上げることができる。
【0027】
第一フレームの遅れを最小化するために、事前処理ステップとしてのBSPツリーの構築は出来る限り効率的なものでなくてはならない。BSPツリーは一度構築されればその後の全てのフレームのレンダリングに使用されるため、出来る限り最適化されたものでなくてはならない。この分野での従来の研究は単一の判断基準、つまり最終的なBSPツリーにおける三角形の数を最小限にすることに焦点を当てていた。
【0028】
好ましい実施例においては、区分面評価のための新しい判断基準と、最良の区分面を効率的に選択するための新しい知識主導アルゴリズムとから成るBSPツリー構築用アルゴリズムが使用されている。新しい判断基準は、各フレームの三角形をソーティングするための予測所要時間とBSPツリーの構築時間との両方を短縮するための必要条件を満たすために作られたものである。
【0029】
同一のリーフノードにおける三角形のソーティングに使用される深さソーティング用アルゴリズムは、陰になって見えない部分があるかどうかのテストを異なるレベルで用い、二つの異なるモードで作動できる。基本ソーティングモードでは、視野座標システムにおける三角形の最大Z座標に基づいて三角形をソートする。高度なソーティングモードでは、陰になって見えない部分がある環状の関係がない場合、更に洗練された形で陰になって見えない部分があるかどうかをテストし、三角形をスプリットせずに正確な結果を保証する。
【0030】
図2は、開示された透過性レンダリング用ソフトウェアシステムの実施例の概略を示す。システムへのインプット情報は、その時の視野方向と可視化APIから供給される透過的ノードである。出力情報は、レンダリングのためにグラフィックスのパイプラインに供給される奥から手前の順にソートされた三角形である。透過的ノードはレンダリングされる全ての透過的三角形を含むデータ構造で、シーンのグラフ中の単一もしくは複数の部分に対応していることもある。BSPツリーはそれが存在していない時点で、第一フレームの始めに先ず入力幾何学形状から形成される。BSPツリーは一度形成されると透過的ノードにおいてキャッシュに格納され、その後のフレームに用いられる。この時点でBSPツリーの中に組み込まれた透過的三角形は、次に三角形ソーティング用モジュールによりその時の視野方向に対してソートされる。法線情報及び色情報も含め、ソートされた三角形は(OpenGLなどの)グラフィックスAPIにレンダリングのために供給される。視野キャッシング用モジュールはオプションであり、これが作動可能とされている場合、ソートされた三角形は視野方向とともに透過的ノードのキャッシュに格納される。その後、近接した視野方向のレンダリングが要求された場合、三角形のソーティングは必要なく、このキャッシュに格納された三角形のデータをレンダリングのために直接呼び出すことができる。
【0031】
バイナリスペースパーティション(BSP)ツリー:繰り返し実行され、多数の入力オブジェクトを扱うプロセスに関してその効率改善のために重要な方法は、それらのオブジェクトの間に一貫した構造を構築しそれを維持することである。例えば、幾何学問題で頻繁に使用されるストラテジーでは、大規模問題を簡単で効率的に扱うことができる複数の小規模問題に分断する「分断攻略」アプローチの再帰的使用がある。BSPツリーはこの種の構造の一つであり、各ノードは三次元空間領域に置かれた一組のエレメントを表す。全てのエレメントを含むルートノードからスタートし、ユークリッド空間を重複しない二つの領域に分断するために区分面が使用される。区分面により切り分けられたエレメントは二つ以上のエレメントにスプリットする。各領域のエレメントに子ノードが作られ、これがBSPツリーの新しいリーフノードとなる。各リーフノードのこの区分は、事前に設定された条件が満たされるまで再帰的に継続して行われる。
【0032】
各BSPノードの二つの子ノード(child)は線形の区分面で隔てられているため、視野ポイントから離れた子ノードの陰になって他の子ノードに見えない部分がある状態になることはない。従って、BSP木構造(tree structure)は三角形をソーティングするために特に有用である。BSPツリー内に形成された潜在的な可視性の順序を利用することにより、その全てのノードの可視性ソーティング(visibility sorting)が単にツリーを走査することで達成できる。BSPツリーはシーンの幾何学形状を特徴づけ、視野方向には拠らないため、シーンの内容に変化がない限り異なる視野方向の正しい可視性の順序を入手するために同一のBSPツリーを使用できる。このことは、静的な幾何学形状の可視化アプリケーションで特に有用である。
【0033】
好ましい実施例のBSP構築アルゴリズム(BSP construction algorithm)は、余計なツリー構築時間(tree construction time)を掛けずに三角形のソーティングを可能にするBSPツリーを作成する。BSPツリーの構築に影響を及ぼす唯一の重要変数は、スプリットされる各リーフノードにおける区分面の選択である。従って、区分面の候補の評価にどのような判断基準を用いるべきか、また最良の区分面を如何にして効率的に選択するかということが重要課題となる。本願においては、ツリーの構築時間や最終的なツリーの質など複数のファクターを考慮した判断基準を選択することで第一の課題に対応し、最良の候補を迅速に識別するために抽出された形状知識を利用することで第二の課題に対応している。下記の説明は特に三角形エレメントに関連しているが、開示されたプロセスは明らかに一般的な平面多角形に応用可能なものであると当業者は認識するであろう。
【0034】
図3は開発されたBSPツリーの構築アルゴリズムの概略を示す。このアルゴリズムは三つのステップから成る:事前処理、区分面の選択、ノードの構築である。事前処理ステップは一度しか呼び出されないが、その後の二つのステップはスプリットされる各BSPノードに対して繰り返し呼び出される。三角形の法線情報及び位置情報を分析することで、区分面の候補をより効率的に選択するために使用される形状知識が事前処理ステップで抽出される。このステップにおいてはまた、全ての入力三角形を含むルートノードが作成され、これを保持するBSPノードリストが初期化される。ノードリストは、スプリットされる全てのリーフノードを保持した待ち行列タイプ構造のもので、このリストが空になった場合再帰的な構築プロセスは終了する。区分面選択のメカニズムは仮説と検証の方法に基づいており、つまり最高の結果を出し得る面を決定するために幾つかの候補面が選択され評価される。ノード構築ステップにおいては、各三角形は選択された区分面に関して分類され、区分面を横切るかどうかに基づいてスプリットされる。その後、その時のBSPノードに対し単一もしくは複数の子ノードが作成される。事前に設定された判断基準に基づき更なる再分断が必要な場合には、新しく作成された子ノードの各々がノードリストに付け加えられる。
【0035】
BSP構築アルゴリズムの課題の一つは、一組の三角形を含む所定のBSPノードに対する異なる区分面を比較するために、どの判断基準を用いるべきかということである。好ましい実施例においては、ツリー構築時間及び構築されるBSPツリーの質に関する様々な目標を反映した、wとして表される判断基準で区分面は評価される。最短のツリー構築時間とより良いBSPツリーを達成する可能性が、wの最大値を有する区分面において最も高くなるようにこの判断基準はデザインされている。
【0036】
表1は区分面Pの候補を特徴づけるために使用されるパラメータを示す。
【0037】
【表1】
【0038】
一組の三角形と区切り面Pの候補を含むリーフノードLがある場合、表1に示される四つのパラメータがPの質を特徴づけるために用いられる。パラメータnCに関しては、三角形が複数の三角形にスプリットされ、そのそれぞれが区分面Pの正の側か負の側に位置するようになるので、パラメータnCは判断基準wに悪い影響を及ぼすことは明らかである。三角形をスプリットすることは、一般的に結果としてツリーサイズがより大きくなりツリー構築時間が長くなる。また、BSPツリーにおける三角形の数が増加すると、三角形のソーティングも時間がかかる。P上にある三角形は同一平面上にあり、またノードLのフロント子ノード及びバック子ノードに対するこれら三角形全体の順序は容易に入手できるため、Pにおける三角形の順序は任意のものとすることができる。これら三角形のソーティングのコストはゼロであるため、パラメータnOは明らかに、判断基準wに対して良い影響を与える。
【0039】
nF及びnBの判断基準wへの影響はそれ程明らかなものではない。ツリーバランス、つまりnF及びnB間の差の絶対値は、BSPツリーにおける全ての三角形をソートするという目的においては重要ではない。しかし、ツリーのバランスが崩れた場合構築パイプラインを通る三角形の数が増加するため、ツリーバランスはツリー構築時間に甚大な影響を与えるということが明らかになっている。図4A及び図4Bに示される二つの極端なケースを分析しこれらを比較することで、このことは浮き彫りになる。図4Aは非常に良くバランスの取れたツリー区分を示し、図4Bは極端にバランスの崩れたツリー区分を示している。
【0040】
【0041】
上記の分析に基づいて、好ましい実施例では区分面の評価に下記の判断基準が用いられる。
w=nO−KCnC−abs(nF−nB)(1)
ここで、KCは三角形をスプリットすることの重要性を示す定数であり、absという記号は絶対値オペレーションを意味する。三角形をスプリットすることで、その時のノードをスプリットするオペレーションが遅くなるのみならず、扱う三角形の数が増えるため、最終的なツリーサイズが大きくなりツリー構築が更に遅くなるという事実を示すために、KCの値は一般的に1より大きく設定される。
【0042】
BSPツリー構築パイプラインから、正しい区分面の選択が構築時間及び最終的なBSPツリーサイズの両方に影響する課題であることが分かる。方程式(1)が示す評価判断基準は、区分面上の三角形が多くなり、区分面が切り分ける三角形の数が少なくなり、区分面のそれぞれの側の三角形のバランスができるだけ取れるように区分面を選択するべきである、ということを示している。好ましい実施例においては、入力三角形は事前処理ステップで、それぞれが特定の特徴もしくは位置づけパターンの情報を伝達する一貫した階層グループに編成される。このように編成された三角形はその後、質の高い区分面の候補の迅速な識別のために用いられる。
【0043】
図5は、32ビットの整数としての面インデックスのレイアウトの一例を示す。図6は、抽出した階層グループ(hierarchical group)の一例を示す。
【0044】
【0045】
好ましい実施例においては、各三角形の補助面の法線ベクトルとスカラー距離は、我々が面インデックスと呼ぶ単一の正負符号付整数にエンコードされる。面インデックスは、八進インデックス及び六進インデックスのそれぞれを正確にエンコードする3ビットと、二つの角度値のそれぞれを量子化しエンコードするnビットと、距離値を量子化しエンコードする25−2*nビットから成る。ここで、nは調整可能である。n=3である場合の面インデックスのレイアウトを図5に示す。ここで、最上位ビットが正負ビットとして確保され、次の6ビットが八進値及び六進値用であり、次の19ビットが量子化された距離値用であり、最後の6ビットが二つの量子化された角度値用である。
【0046】
領域、層及び面と呼ばれる三つのグループが抽出され、この3グループの間の階層関係(hierarchical relation)は図6に図示されている。抽出プロセスは全ての三角形をその面インデックスに対して(降順に、一般性は失わずに)シードリストSにソートすることから始まる。領域グループは、そのそれぞれがS中の同一の八進値及び六進値を有する三角形の隣接リストを含んでおり、その後リストSから抽出される。八進値及び六進値の定義から、最大で48個の領域が存在し、同一の領域内の全ての三角形はほぼ同じ方向を向いている。図5から分かるように、各領域内で三角形はその距離によりソートされる。層から同一の距離にある三角形と、同一の領域内にある層はそれらの距離により降順にソートされる。各層内で、同一の量子化された角度値を有し、それ故にほぼ同じ方向を向いている三角形は一つの面へとグループ化される。各面は一つもしくは複数の三角形エレメントから成る。
【0047】
区分面選択における基本ストラテジーは、選択された一組の面候補を比較し最高質の面を選ぶ「仮説と検証」である。好ましい実施例では、方程式(1)による評価で優れた区分面になる可能性が最も高い区分面の候補を迅速に選択するために、抽出された形状知識が利用される。
【0048】
殆どのCADモデルには重要性のある平面の特徴があるため、区分面上の三角形は、モデル内で最も大きな重要性のある面の特徴をあるものを選択した場合、最大多数となる。透過的なオブジェクト内の全ての面の特徴は面グループとして抽出されているため、最も大きな重要性のある面の特徴から成る三角形リストは、単に線形検索で識別できる。その後、リスト内の一つの三角形の補助面が区分面の候補として選択される(この例においては第一の三角形が選択される)。面の特徴の重要性は面グループの面積として、つまりはグループ内の三角形の全面積として定義される。これは、三角形が区分面によって切り分けられる可能性はその面積の増加と共に上昇するからで、それ故、面積が大きい三角形を区分面上に持つ方が良い。
【0049】
【0050】
区分面の六つの候補のそれぞれに関して、三角形との関係が演算される。区分面と単一の三角形との関係は四つのタイプ、三角形の上、三角形を横切る、三角形の前および後ろ、の内の一つとして分類されるが、区分面と一組の三角形との関係は、表1に示すようにnO、nC、nF及びnBの四つのパラメータで特徴づけられる。単一の三角形と面との関係のタイプは、三角形の三つの頂点とその面との関係から容易に推測でき、この関係は半平面テストによって容易に演算できる。
【0051】
選択された六つの候補面のそれぞれは、入力三角形の補助面である。このことは、少なくとも一つの三角形は切り分けられず、三角形によって形成された形状が凸状に近くない場合に良い結果を出す筈である、という意味で有益である。しかし、この形状がほぼ凸状である場合、選択された区分面は極端にバランスが悪くなる可能性が高く、これは避けるべきである。
【0052】
【0053】
【0054】
その時のBSPノードに対し最良な区分面が選択された後、手前の子ノード、または奥の子ノードもしくはその両方が、必要とされる親子リンクを有するように作られる。区分面の正の側にある三角形は全て手前の子ノード上に置かれるが、負の側にある三角形は全て奥の子ノード上に置かれる。区分面上にある三角形はその時のノード上に留まり、区分面を横切る三角形は二つもしくは三つの三角形にスプリットされる。スプリットされた三角形のそれぞれが、手前の子ノードか奥の子ノードのどちらかに追加される。
【0055】
同じ子ノード上の三角形の順序が変化しないように、その時のノード上の三角形が順序通りに処理されるような形でノード構築は行われる。例えば、その時のノードにおいて三角形Aが三角形Bに先行し、ノード構築後これらの三角形が同じ子ノードに属する場合、その後も三角形A(もしくはそのスプリットされた三角形)は三角形B(もしくはそのスプリットされた三角形)に先行する。従って子ノードの三角形リストは、更なるソーティングを行わずとも階層グループの抽出が可能な状態にある。
【0056】
BSPツリーに編成された三角形の可視性の順序は、走査時の各リーフノードにおける目の位置と深さソーティング手順に対し、BSPツリーを奥から手前の順に走査することで演算される。ツリーを走査することでBSPツリーの全てのノードがソートされるが、深さソーティング手順により単一のリーフノード内の三角形に関して、奥から手前への順番が設定される。三角形ソーティング用アルゴリズムの疑似コードの例を以下に示す。ここで、「inNode」はソートされるその時の入力BSPツリーノードであり、「inEye」は目の位置の入力位置であり、「outTriList」は演算されるソートされた三角形の出力リストである。非リーフノード上の三角形に関しては、深さソーティングは必要ないためリーフノード上の三角形に比べソーティングコストはかなり低い。表1に示される数値nCが方程式(1)の評価式に良い影響を与えるのはこのためである。
【0057】
PROC triangle-sort (inNode, inEye, outTriList)
{
if(inNode is leaf node){
tempList = depth-sort(inNode, inEye);
outTriList.add(tempList);
}
else if(inEye is in the front of inNode.partitionPlane){
triangle-sort(inNode.back, inEye, outTriList);
outTriList.add(inNode.onTriList);
triangle-sort(inNode.front, inEye, outTriList);
}
else if(inEye is at the back of inNode.partitionPlane){
triangle-sort(inNode.front, inEye, outTriList);
outTriList.add(inNode.onTriList);
triangle-sort(inNode.back, inEye, outTriList);
}
else{ // eye is on node.partitionPlane
triangle-sort(inNode.front, inEye, outTriList);
triangle-sort(inNode.back, inEye, outTriList);
}
}
【0058】
開示された深さソーティング用アルゴリズムは、異なる二つのモードで作動する。基本モードではそれぞれの三角形はポイントとして単純化され、一対の三角形の陰になって見えない部分がある関係は、それらの三角形から目の位置までの距離を比較することで演算できる。このように単純化することで、予想時間O(NlogN)でのQuickSortなどの効率的な実行が可能となるが、このテストは完全でなく、正確な結果は保証されていない。従って、ソートされた順序が誤りである可能性もあり、これは透過的レンダリングにおいて不自然な結果に繋がる。
【0059】
高次なモードで作動している場合、次項で説明する陰になって見えない部分があるかどうかをテストする高次なアルゴリズムによって演算された一対の三角形の陰になって見えない部分がある実際の関係に基づいて、深さソーティング用アルゴリズムが最終的なソートリストを作成する。保証された正確な結果を導き出しつつ、陰になって見えない部分がある実際の関係に基づいてソートリストを作成することは、基本Zソーティングよりも複雑である。三角形Aと三角形Bの陰になって見えない部分があるかどうかをこれらの三角形だけでテストしても、最終的な奥から手前にソートされたリストにおけるこれら三角形の順序が完全に決定されるわけではない、ということがこの複雑さの原因である。例えば、これら二つの三角形の陰になって見えない部分がある関係が、A<Bとして表される「BはAの陰になって見えない部分があることはない」という関係であると判明した場合、A>C0>C1...>Cn>Bとして表される陰になって見えない部分がある連鎖関係を有する単一もしくは複数の三角形C0,C1,...,Cnが存在する可能性があり、このことにより、最終リストにおいてAがBに先行するべきであるということになる。
【0060】
図7は、n=0であるケースに対応して描かれた、陰になって見えない部分がある連鎖関係を示す。この図においては、図の真上が「目の位置」となっている。この種のソーティング問題に「分断攻略」のパラダイムを直接応用するのは、可能であるとしても困難であり、一般的に演算複雑性O(N2)を有するアルゴリズムが予想される。深さソーティング用アルゴリズムはBSPツリーのそれぞれのリーフノードのみに応用され、単一のリーフノード上の三角形の最大数はコントロール可能であるため、好ましい実施例においてはこの演算負荷は軽減される。
【0061】
一般的に元のリストにおいてAがBより先であると仮定した場合、陰になって見えない部分があるかどうかのテストで求められる結果は、BがAの陰になって見えない部分がある状態にあるかどうかである。我々は先ず、複雑性が徐々に増加する、下記の四つの基本テスト[4]を用いる。どれか一つのテストが成功すれば、「BはAの陰になって見えない部分がある状態ではない」という結論が導き出される。
【0062】
1.視野座標システムで、Aの最小Z値はBの最大Z値よりも大きいか?
2.画像スペース内の、これら二つの三角形の軸に沿った境界ボックスは重なり
合っているか?
3.三角形Aは、三角形Bに対して目の位置と反対側に位置しているか?
4.三角形Bは、三角形Aに対して目の位置と同じ側に位置しているか?
【0063】
典型的なCADモデルにおいては、モデルデータは通常スペース的にかなりコンパクトであり、これらの基本テストのどれも成功しない場合が多々ある。このケースを扱うための公知のアプローチは、二つの多角形が既に正しく順序づけられている場合でも視野に依存したスプリットを行うことがあるので、理想的ではない。フレーム毎にキャッシュに格納されたBSPツリーの頻繁なアップデートが必要となるこのようなスプリットを避けるために、好ましい実施例では陰になって見えない部分があるかどうかの高次のテストを適用する。
【0064】
【0065】
図8A乃至8Cは三角形と、三角形の陰になって見えない領域を示す。図8Aはもう一方の三角形がそれだけである場合の領域Rを示す。図8Bは頂点vが共有されている場合の領域Rvを示す。図8Cは辺eが共有されている場合の領域Reを示す。それそれの図において、目の位置が表示されている。
【0066】
図9は三角形AとB領域の境界線との交差部分を示している。
【0067】
A領域として表される三角形Aの陰になって見えない領域が構築された後、三角形B上の陰になって見えないポイントの位置を迅速に探し出す方法は、三角形の共有されていない頂点のそれぞれを三角形Aに対してテストすることである。陰になって見えないポイントが見つからず、二つの三角形が一つの辺を共有する場合、「BはAの影になって見えない部分がある状態ではない」。そうでなければ、B領域が構築され、A上の共有されていない頂点から陰になって見えないポイントを検索する。それでも陰になって見えないポイントが見つからず、二つの三角形が一つの頂点を共有する場合もまた、「BはAの影になって見えない部分がある状態ではない」という結論が得られる。二つの三角形だけであり、どちらの三角形のどの頂点も陰になって見えないポイントとなる条件を満たさない場合、我々はB領域の錐形の境界とAとを交差させて、陰になって見えないポイントを演算する。演算された交差ポイントは錐形の境界上に位置し、陰になって見えないポイントとなる条件を満たす。図9に示されるケースに関しては、四つの交差ポイントがある。交差部分ポイントが見つからない場合、三角形Bは三角形Aの陰になって見えない部分がある状態ではない。陰になって見えない部分があるかどうかの高次なテストのアルゴリズムの疑似コードの例を以下に示す。
【0068】
PROC occlusion-test (triA, triB)
{
regionA = construct-region(triA);
occlusionPt = find-occlusionPt(triB, regionA); if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triA);
}
else if (triA shares an edge with triB) {
return “triA does not occlude triB”; }
else {
regionB = construct-region(triB);
occlusionPt = find-occlusionPt(triA, regionB);
if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triB);
}
else if (triA shares a vertex with triB) {
return “triA does not occlude triB”; }
else{
occlusionPt = intersect(triA, regionB);
if (occlusionPt is found) {
return halfPlaneTest(occlusionPt, triB);
}
else{
return “triA does not occlude triB”;
}
}
}
}
【0069】
【0070】
開示された視野をキャッシュに格納するアルゴリズム用疑似コードの例を以下に示す。この実施例において選択された参考方向は、単位球面上に均等に分散している。その時の視野方向に関して、最も近い参考方向が識別される。この参考方向からはキャッシュに格納された三角形リストが入手できない場合、三角形をソーティングするオペレーションが実行され、作成された三角形の配列が参考方向に対してキャッシュに格納される。これ以外の場合には、キャッシュに格納されたリストがレンダリングのために直接呼び出される。
【0071】
PROC view-caching (inNode, inViewDir, outSortedList)
{
if(refDirList is empty)
refDirList = constructReferenceDirList();
closestRefDir = findClosestRef(inViewDir, refDirList); if(cachedTriList is available for closestRefDir){
outSortedList = cachedTriList;
}
else{
triangle-sort(inNode, inViewDir, outSortedList);
cacheList(closestRefDir, outSortedList);
}
return;
}
【0072】
視野をキャッシュに格納することで、三角形ソーティングの実行が必要となる頻度が減ることにより、レンダリングのスピードが改善される。幾何学データの代わりにグラフィックスデータをキャッシュに格納することで更なる最適化が実現できる。例えば、三角形リストの代わりにディスプレイリストを参考方向においてキャッシュに格納することもできる。この方法によれば、必要なレンダリングのオペレーションも減らすことができる。
【0073】
図10は、上述のプロセスの詳細な説明に対応した、好ましい実施例によるプロセスのフローチャートを図示している。先ず、システムは透過的ノードとその時の視野方向を説明する幾何学データを受け取る(ステップ1005)。
【0074】
次に、システムはバイナリスペースパーティションツリーを構築する。ここで、透過的三角形のそれぞれがBSPツリーのリーフと関連づけられる(ステップ1010)。
【0075】
次に、BSPツリーを走査し各リーフにおいて三角形をソートすることで、実質的に奥から手前の順になるよう三角形をソートする(ステップ1015)。
【0076】
次に、ソートされた三角形をグラフィックスAPIに出力する(ステップ1020)。
【0077】
最後に、その時の視野に対してソートされたデータを、三角形の形でもしくは表示リストの形でキャッシュに格納する(ステップ1025)。
【0078】
図11は好ましい実施例によるもう一つのプロセスのフローチャートを図示している。このプロセスは、上述のBSPツリーの構築を説明する。第一に事前処理の段階で、システムはそれぞれの三角形の法線情報及び位置情報を含め、それぞれの三角形の形状知識を分析する(ステップ1105)。次に、システムはルートノード及びノードリストを作成する(ステップ1110)。
【0079】
その後、ツリーの各ノードに関して、システムは本願記載の区分面選択(ステップ1115)を実行する。その後、ノードのそれぞれの三角形は区分面に関して分類され(ステップ1120)、この分類に基づき、子ノードが作成される(ステップ1125)。
【0080】
残りのノードがある場合(ステップ1130)、このプロセスを繰り返す(ステップ1115に戻る)。残りのノードがなければ、ここでプロセスは終了し(ステップ1135)、全体プロセスでの次のステップが実行できる。
【0081】
グラフィックス処理及びレンダリングに関する更なる背景情報は、下記の文献に記載されており、これらの文献は全て参照することにより本願に含まれるものである。アブラハム・マーメン著、「バーチャルピクセルマップ技術とともに使用される透過的性及びアンチエイリアスアルゴリズム」、IEEE Computer Graphics & Applications、9(4)、1989年7月、43−55;キャス・エベリット著、「インタラクティブなオーダー非依存型透過的性」、白書、エヌビディア、2001年;マイケル・ケリー、カーク・ゴールド、ブレント・ピース、ステファニー・ウィナー、アレックス・イェン著、「ハードウェアで加速されたCSGレンダリング及び透過的性」、Proceedings of the 21st annual conference on computer graphics and interactive techniques、1994年、177−184;ニューウェル、M・E、ニューウェル、R・G、及びサンチャ、T・L著、「隠れたサーフェス問題へのソリューション」、Proc. ACM National Conf.、1972年;ヘンリー・ファッチ、ズビ・M・ケデム、ブルース・F・ネイラー著、「アプリオリなツリー構造による目に見えるサーフェスの生成について」、Proceedings of the 7th annual conference on computer graphics and internactive techniques、1980年7月、124−133;ヘンリー・ファッチ、グレゴリー・D・アブラム、エリック・D・グラント著、「リジットオブジェクトのほぼリアルタイムでの陰影ディスプレイ」、Computer Graphics、Vol.1、No.3、1983年7月.[7]マイケル・ディアリング著、「形状圧縮」、Proceedings of the 22nd annual conference on computer graphics and interactive techniques、1995年9月.[8]フォレイ、J・D、バン・ダム、A、フェイナー、S・K、ヒューズ、J・F著、「コンピュータグラフィックス:原理と実践」、第2刊、アディソン―ウェスリー、1997年。
【0082】
説明を簡潔かつ明確にするために、本発明と共に使用するに適した全てのデータ処理システムに関し、その完全な構成とオペレーションが本願に図示もしくは記載されているわけではないことを当業者は認識するであろう。そうではなく、本発明に特有なデータ処理システム、もしくは本発明を理解するのに必要なデータ処理システムのみが図示及び記載されている。データ処理システムの構成とオペレーションで本願に記載されていないものは、当技術分野で公知の様々な現行の実施方法及び使用例に沿ったもので良い。
【0083】
本発明は完全に機能的なシステムとして記載されているが、本発明のメカニズムの少なくとも一部は、機械で使用可能な様々な形態の媒体に収められた指示として頒布させることができることを当業者は理解するであろうことと、また本発明が、実際の頒布のために使用される指示もしくはシグナルを含む媒体の特定の種類に関わらず、同じ様に応用できることは、特記すべき事項である。機械で使用可能な媒体の例としては読み取り専用メモリ(ROM)もしくは電気的消去、プログラム可能型読み取り専用メモリ(EEPROM)などの不揮発性のハードコードされた媒体、フロッピーディスク、ハードディスクドライブ、及びコンパクトディスク読み取り専用メモリ(CD−ROM)、もしくはデジタル多用途ディスク(DVD)などのユーザーが記録できる媒体、及び、デジタルコミュニケーションリンク及びアナログコミュニケーションリンクなどの伝達型媒体が含まれる。
【0084】
本発明の実施例はその詳細が記載されているが、本願が開示する発明は、その最も広範な精神及び範囲から逸脱することなく、様々な形で変更、置き換え、変形、及び改良できるということを当業者は理解するであろう。
【0085】
本出願内の記載は如何なるものであれ、特定の構成要素、ステップ、もしくは機能が、特許請求の範囲に含まれなければならない不可欠な構成要素であると示唆するものではない。つまり、特許に含まれる内容の範囲は、請求項の範囲によってのみ定義されるものである。また、これらの請求項はどれも、「(ため)の手段」という言葉が分詞の後に続かない限り、合衆国法典第35編第12条の第6段落の発動を意図するものではない。
【0086】
本発明及び本発明による効果をより完全に理解するために、付随する図面と併せながら下記に説明をする。なお、図内の同じ数字は同じものを示す。
【図面の簡単な説明】
【0087】
【図1】様々な実施例を実現できるデータ処理システムのブロック図である。
【図2】本発明の一実施例による概略図である。
【図3】BSP木構造アルゴリズムの概要を示している。
【図4】A及びBはそれぞれ、釣合いのとれたツリー(balanced tree)と不釣合いなツリー(unbalanced tree)を図示している。
【図5】32ビットの整数としての面インデックスのレイアウトの一例である。
【図6】抽出した階層グループの一例を図示している。
【図7】陰になって見えない部分が連鎖している関係を示している。
【図8】A乃至Cは、三角形の陰になって見えない部分がある領域の三つの異なる形を示している。
【図9】三角形と領域の境界線との交差部分を示している。
【図10】好ましい実施例によるプロセスのフローチャートである。
【図11】好ましい実施例による別のプロセスのフローチャートである。
【特許請求の範囲】
【請求項1】
グラフィックオブジェクトに対するノードと視野データを受け取ることと、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築することで、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、ことと、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートすることと、
該ソートされた形状を出力することと、
から成るグラフィックス処理の方法。
【請求項2】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項1の方法。
【請求項3】
該形状データをキャッシュに格納することから更に成る請求項1の方法。
【請求項4】
該バイナリスペースパーティションツリーを走査することから更に成る請求項1の方法。
【請求項5】
該形状が三角形であることを特徴とする請求項1の方法。
【請求項6】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項1の方法。
【請求項7】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項3の方法。
【請求項8】
グラフィックオブジェクト内の形状を分析することと、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成することで、それぞれのノードが少なくとも一つの形状に関連づけられている、ことと、
追加ノードのそれぞれに対して、区分面の選択を実行することと、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類することと、
該形状の分類に基づいて、子ノードを作成することと、
から成るグラフィックス処理の方法。
【請求項9】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項8の方法。
【請求項10】
該形状が三角形であることを特徴とする請求項8の方法。
【請求項11】
少なくともプロセッサとアクセス可能なメモリを有するデータ処理システムで、
グラフィックオブジェクトに対するノードと視野データを受け取るための手段と、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築するための手段で、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、該手段と、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートするための手段と、
該ソートされた形状を出力するための手段と、
から成る該データ処理システム。
【請求項12】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項11のデータ処理システム。
【請求項13】
該形状データをキャッシュに格納するための手段から更に成る請求項11のデータ処理システム。
【請求項14】
該バイナリスペースパーティションツリーを走査するための手段から更に成る請求項11のデータ処理システム。
【請求項15】
該形状が三角形であることを特徴とする請求項11のデータ処理システム。
【請求項16】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項11のデータ処理システム。
【請求項17】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項13のデータ処理システム。
【請求項18】
少なくともプロセッサとアクセス可能なメモリを有するデータ処理システムで、
グラフィックオブジェクト内の形状を分析するための手段と、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成するための手段で、それぞれのノードが少なくとも一つの形状に関連づけられている、該手段と、
追加ノードのそれぞれに対して、区分面の選択を実行するための手段と、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類するための手段と、
該形状の分類に基づいて、子ノードを作成するための手段と、
から成る該データ処理システム。
【請求項19】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項18のデータ処理システム。
【請求項20】
該形状が三角形であることを特徴とする請求項18のデータ処理システム。
【請求項21】
機械で読み取り可能な媒体に具現的に実施されたコンピュータプログラム製品で、
グラフィックオブジェクトに対するノードと視野データを受け取るための指示と、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築するための指示で、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、該指示と、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートするための指示と、
該ソートされた形状を出力するための指示と、
から成る該コンピュータプログラム製品。
【請求項22】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項21のコンピュータプログラム製品。
【請求項23】
該形状データをキャッシュに格納するための指示から更に成る請求項21のコンピュータプログラム製品。
【請求項24】
該バイナリスペースパーティションツリーを走査するための指示から更に成る請求項21のコンピュータプログラム製品。
【請求項25】
該形状が三角形であることを特徴とする請求項21のコンピュータプログラム製品。
【請求項26】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項21のコンピュータプログラム製品。
【請求項27】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項23のコンピュータプログラム製品。
【請求項28】
機械で読み取り可能な媒体に具現的に実施されたコンピュータプログラム製品で、
グラフィックオブジェクト内の形状を分析するための指示と、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成するための指示で、それぞれのノードが少なくとも一つの形状に関連づけられている、該指示と、
追加ノードのそれぞれに対して、区分面の選択を実行するための指示と、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類するための指示と、
該形状の分類に基づいて、子ノードを作成するための指示と、
から成る該コンピュータプログラム製品。
【請求項29】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項28のコンピュータプログラム製品。
【請求項30】
該形状が三角形であることを特徴とする請求項28のコンピュータプログラム製品。
【請求項1】
グラフィックオブジェクトに対するノードと視野データを受け取ることと、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築することで、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、ことと、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートすることと、
該ソートされた形状を出力することと、
から成るグラフィックス処理の方法。
【請求項2】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項1の方法。
【請求項3】
該形状データをキャッシュに格納することから更に成る請求項1の方法。
【請求項4】
該バイナリスペースパーティションツリーを走査することから更に成る請求項1の方法。
【請求項5】
該形状が三角形であることを特徴とする請求項1の方法。
【請求項6】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項1の方法。
【請求項7】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項3の方法。
【請求項8】
グラフィックオブジェクト内の形状を分析することと、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成することで、それぞれのノードが少なくとも一つの形状に関連づけられている、ことと、
追加ノードのそれぞれに対して、区分面の選択を実行することと、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類することと、
該形状の分類に基づいて、子ノードを作成することと、
から成るグラフィックス処理の方法。
【請求項9】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項8の方法。
【請求項10】
該形状が三角形であることを特徴とする請求項8の方法。
【請求項11】
少なくともプロセッサとアクセス可能なメモリを有するデータ処理システムで、
グラフィックオブジェクトに対するノードと視野データを受け取るための手段と、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築するための手段で、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、該手段と、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートするための手段と、
該ソートされた形状を出力するための手段と、
から成る該データ処理システム。
【請求項12】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項11のデータ処理システム。
【請求項13】
該形状データをキャッシュに格納するための手段から更に成る請求項11のデータ処理システム。
【請求項14】
該バイナリスペースパーティションツリーを走査するための手段から更に成る請求項11のデータ処理システム。
【請求項15】
該形状が三角形であることを特徴とする請求項11のデータ処理システム。
【請求項16】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項11のデータ処理システム。
【請求項17】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項13のデータ処理システム。
【請求項18】
少なくともプロセッサとアクセス可能なメモリを有するデータ処理システムで、
グラフィックオブジェクト内の形状を分析するための手段と、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成するための手段で、それぞれのノードが少なくとも一つの形状に関連づけられている、該手段と、
追加ノードのそれぞれに対して、区分面の選択を実行するための手段と、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類するための手段と、
該形状の分類に基づいて、子ノードを作成するための手段と、
から成る該データ処理システム。
【請求項19】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項18のデータ処理システム。
【請求項20】
該形状が三角形であることを特徴とする請求項18のデータ処理システム。
【請求項21】
機械で読み取り可能な媒体に具現的に実施されたコンピュータプログラム製品で、
グラフィックオブジェクトに対するノードと視野データを受け取るための指示と、
該グラフィックオブジェクトに対応するバイナリスペースパーティションツリーを構築するための指示で、該バイナリスペースパーティションツリーが、それぞれのリーフに関連する少なくとも一つの形状を有する、該指示と、
該バイナリスペースパーティションツリーのそれぞれのリーフで形状をソートするための指示と、
該ソートされた形状を出力するための指示と、
から成る該コンピュータプログラム製品。
【請求項22】
該形状が実質的に奥から手前の順にソートされることを特徴とする請求項21のコンピュータプログラム製品。
【請求項23】
該形状データをキャッシュに格納するための指示から更に成る請求項21のコンピュータプログラム製品。
【請求項24】
該バイナリスペースパーティションツリーを走査するための指示から更に成る請求項21のコンピュータプログラム製品。
【請求項25】
該形状が三角形であることを特徴とする請求項21のコンピュータプログラム製品。
【請求項26】
構成コンポーネントが使用され、該構成コンポーネントが該バイナリスペースパーティションツリーの解像度と各リーフにおけるソーティング形状とのバランスを取ることを特徴とする請求項21のコンピュータプログラム製品。
【請求項27】
構成コンポーネントが使用され、該構成コンポーネントがリソースの使用とキャッシュへの格納の解像度の正確性とのバランスを取ることを特徴とする請求項23のコンピュータプログラム製品。
【請求項28】
機械で読み取り可能な媒体に具現的に実施されたコンピュータプログラム製品で、
グラフィックオブジェクト内の形状を分析するための指示と、
バイナリスペースパーティションツリーに対してルートノードと追加ノードのリストを作成するための指示で、それぞれのノードが少なくとも一つの形状に関連づけられている、該指示と、
追加ノードのそれぞれに対して、区分面の選択を実行するための指示と、
該区分面の選択に基づいて、該追加ノードにおいて形状を分類するための指示と、
該形状の分類に基づいて、子ノードを作成するための指示と、
から成る該コンピュータプログラム製品。
【請求項29】
それぞれのノードが、三次元空間領域に置かれた一組のエレメントを表すことを特徴とする請求項28のコンピュータプログラム製品。
【請求項30】
該形状が三角形であることを特徴とする請求項28のコンピュータプログラム製品。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公表番号】特表2007−514243(P2007−514243A)
【公表日】平成19年5月31日(2007.5.31)
【国際特許分類】
【出願番号】特願2006−544050(P2006−544050)
【出願日】平成16年12月9日(2004.12.9)
【国際出願番号】PCT/US2004/041532
【国際公開番号】WO2005/057502
【国際公開日】平成17年6月23日(2005.6.23)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(504438288)ユージーエス、コープ (13)
【Fターム(参考)】
【公表日】平成19年5月31日(2007.5.31)
【国際特許分類】
【出願日】平成16年12月9日(2004.12.9)
【国際出願番号】PCT/US2004/041532
【国際公開番号】WO2005/057502
【国際公開日】平成17年6月23日(2005.6.23)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(504438288)ユージーエス、コープ (13)
【Fターム(参考)】
[ Back to top ]