JP2003510704A - シーン・ベース・プログラムの高速処理の方法およびシステム - Google Patents

シーン・ベース・プログラムの高速処理の方法およびシステム

Info

Publication number
JP2003510704A
JP2003510704A JP2001525656A JP2001525656A JP2003510704A JP 2003510704 A JP2003510704 A JP 2003510704A JP 2001525656 A JP2001525656 A JP 2001525656A JP 2001525656 A JP2001525656 A JP 2001525656A JP 2003510704 A JP2003510704 A JP 2003510704A
Authority
JP
Japan
Prior art keywords
scene graph
thread
threads
data
render
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2001525656A
Other languages
English (en)
Inventor
ディアリング,マイケル・エフ
ソウィッヅラル,ヘンリー
ラッシュホース,ケヴィン
トゥイリーガー,ドゥーグ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2003510704A publication Critical patent/JP2003510704A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description

Abstract

(57)【要約】 シーン・グラフ・ベースのデータおよび/またはプログラムもしくはその両方の高速処理のシステムおよび方法を開示する。一実施形態では、シーン・グラフを直接に使用するようにシステムを構成することができる。もう1つの実施形態では、元々シーン・グラフの一部として受け取られたデータを管理する、複数の構造体およびスレッドを生成するようにシステムを構成することができる。構造体およびスレッドは、メッセージングの使用を介して状態変化に関する情報を伝えるように構成することができる。このシステムには、スレッド間のメッセージングと、タイム・スタンプおよび/またはイベント・スタンプを用いるメッセージングと、一貫性を保証するためのエポックと、レンダ・ビン、ジオメトリ構造体、およびレンダリング環境構造体などの補助構造体とのサポートを含めることができる。

Description

【発明の詳細な説明】
【0001】 (発明の背景) 1.発明の分野 本発明は、全般的にはコンピュータ・グラフィックスの分野に関し、より具体
的には、3次元グラフィックス・データを管理し、レンダリングするグラフィッ
クス・システムおよびグラフィックス・ソフトウェアに関する。
【0002】 2.関連技術の説明 コンピュータ・システムは、通常、コンピュータ・スクリーンまたはディスプ
レイ・デバイスへのビジュアル出力を生成するために、そのグラフィックス・シ
ステムを利用する。初期のグラフィックス・システムは、プロセッサが出力とし
て生成したものを受け取り、それをスクリーンに表示することを担当するだけで
あった。本質的に、これらのグラフィックス・システムは、単純なトランスレー
タまたはインターフェースとして働いた。しかし、現代のグラフィックス・シス
テムには、高い処理能力を有するグラフィックス・プロセッサが組み込まれてい
る。これらのグラフィックス・プロセッサは、単純なトランスレータではなく、
コプロセッサのように働く。この変化は、ディスプレイ・デバイスに送られるデ
ータの複雑さと量の両方における最近の増加に起因する。たとえば、現代のコン
ピュータ・ディスプレイは、初期のモデルより多数の画素、より多くのカラー・
デプスを表示し、より複雑な画像をより高いリフレッシュ・レートで表示するこ
とができる。同様に、表示される画像は、より複雑であり、アンチエイリアスお
よびテクスチャ・マッピングなどの高度な技法を用いることができる。
【0003】 その結果、グラフィックス・システムにかなりの処理能力がなければ、CPU
が、グラフィックス計算の実行に長時間を費やすことになる。これによって、プ
ログラム実行に関連する他のタスクを実行するのに必要な処理能力がコンピュー
タ・システムから奪われ、これによって、総合システム性能が劇的に低下する可
能性がある。しかし、強力なグラフィックス・システムがあれば、CPUが、ス
クリーンに箱を描くように指示された時に、CPUが、各画素の位置および色を
計算する必要から解放される。その代わりに、CPUは、「この座標に箱を描け
」と述べる要求をビデオ・カードに送ることができる。グラフィックス・システ
ムが、箱を描き、他のタスクを実行するためにプロセッサを解放する。
【0004】 一般に、コンピュータ内のグラフィックス・システム(グラフィックス・シス
テムとも称する)は、性能レベルを高めるためにそれ自体のプロセッサを含むビ
デオ・アダプタの1種である。これらのプロセッサは、グラフィカル変換の計算
用に特殊化され、したがって、コンピュータ・システムによって使用される汎用
CPUよりもよい結果を達成する。さらに、これらのプロセッサは、グラフィッ
クス・システムがグラフィックス計算を処理している間に他のコマンドを実行す
るためにコンピュータのCPUを解放する。グラフィカル・アプリケーション、
特にマルチメディア・アプリケーションの普及によって、高性能グラフィックス
・システムが、コンピュータ・システムの一般的な特徴になった。ほとんどのコ
ンピュータ製造業者が、現在、その自社システムに高性能グラフィックス・シス
テムをバンドルしている。
【0005】 グラフィックス・システムは、通常は、限られた機能の組だけを実行するので
、カスタマイズすることができ、したがって、グラフィックス・オペレーション
においてコンピュータの汎用中央プロセッサよりはるかに効率的である。初期の
グラフィックス・システムは、2次元(2D)グラフィックスの実行に制限され
ていたが、グラフィックス・システムの機能性は、3次元(3D)ワイヤフレー
ム・グラフィックス、3Dソリッドをサポートするために高められ、現在では、
高度なシェーディング、フォギング、アルファ・ブレンディング、およびスペキ
ュラ(鏡面反射)・ハイライティングなどの特殊効果およびテクスチャを有する
3次元(3D)グラフィックスのサポートを含む。
【0006】 グラフィックス・システムと現代のCPU全般の両方の新機能を利用するため
に、グラフィックス・アプリケーション・プログラム・インターフェース(「A
PI」)が開発された。APIは、ソフトウェア・アプリケーションを構築する
ためのルーチン、プロトコル、および/またはツールの組である。APIでは、
プログラマがアプリケーションを作成するために必要とする基本構成要素の構築
を提供することによって、プログラムを開発するタスクを単純化することが試み
られている。一般的なAPIの一例が、Microsoft Corporat
ion社のWin32 APIである。
【0007】 グラフィックスAPIは、プログラマがグラフィカル・アプリケーションをす
ばやく開発できるようにする点では成功したが、レンダリングされるシーンの複
雑さの最近の増加が、アプリケーションを実行するCPUおよびグラフィックス
・システムに対するさらに大きな要求を課しつつある。従来は、タスクが単一の
CPUにとって計算集中的に過ぎるようになった時に、多重CPUシステムが使
用される。これらの多重CPUシステムでは、並列処理を使用して、2つ以上の
プロセッサの間で計算を分割する。しかし、通常のグラフィカルAPIは、並列
処理、特にネットワークを介する並列処理を可能にするのによく適してはいない
。したがって、複雑なシーンの作成、更新、およびレンダリングを効率的に管理
するシステムおよび方法が必要である。具体的には、APIで実施することがで
き、ネットワーク化された設定での分散処理をサポートすることができるシステ
ムおよび方法も望ましい。
【0008】 (発明の概要) 上で識別された問題は、本明細書に記載のシーン・グラフ・ベースのデータの
高速処理のシステムおよび方法によって、少なくとも部分的に解決することがで
きる。一実施態様では、このシステムが、シーン・グラフ・ベースのデータに関
する並列構造体を生成する。この並列構造体には、オブジェクトとスレッドの両
方を含めることができる。有利なことに、このシステムは、レンダリングに並列
構造体を使用することができ、これによって、階層(すなわちツリー)形式での
シーン・グラフのトラバーサルの反復を回避することができる。この並列構造体
は、効果的にグラフィックス・アプリケーション・プログラマに見られないよう
にAPI内で実施することができ、グラフィックス・アプリケーション・プログ
ラマは、シーン・グラフ構造体の使用を継続して、グラフィックス・アプリケー
ションを作成する。
【0009】 一実施態様では、このシステムを、シーン・グラフを直接に使用するように構
成することができる。もう1つの実施態様では、このシステムを、補助構造体の
ソースとしてシーン・グラフを使用するように構成することができる。補助構造
体は、シーン・グラフ・ベースのプログラムのレンダリングおよび実行の際にシ
ステムを助けることができる。システムには、スレッドとオブジェクトの間のメ
ッセージングと、タイム・スタンプおよび/またはイベント・スタンプを用いる
メッセージングと、一貫性を保証するためのエポックと、レンダ・ビン、ジオメ
トリ構造体、およびレンダリング環境構造体などの補助構造体とのサポートを含
めることもできる。
【0010】 コンピュータ・プログラムも企図されている。一実施態様では、コンピュータ
・プログラムに、シーン・グラフを受け取り、シーン・グラフをトラバースして
、シーン・グラフに対応する複数の構造体およびスレッドを生成するように構成
された複数の命令が含まれる。シーン・グラフには、複数の3次元オブジェクト
を表す情報を含めることができる。シーン・グラフには、3次元オブジェクトの
挙動データ、サウンド・データ、触覚(たとえばフォース・フィード・バック・
データ)、外見データ、ジオメトリ・データ、環境データ(たとえば照明、フォ
グ)、および他のデータを含む、複数の異なるタイプのデータも含めることがで
きる。情報には、外見データ、ジオメトリ・データ、および環境データを含める
ことができる。各構造体を、シーン・グラフから選択されたデータを管理するオ
ブジェクトとすることができ、複数のスレッドを、シーン・グラフに対応する1
つまたは複数のフレームをレンダリングするために実行可能とすることができる
。いくつかの実施態様では、スレッドを、状態変化を指定するメッセージを生成
するように構成することができ、メッセージを、複数の構造体にマルチキャスト
するか、単一の構造体にユニキャストすることができる。各構造体は、その構造
体を更新するように構成された、対応する更新スレッドを有することができる。
作成される並列構造体の1つが、レンダリングされる特定のジオメトリ・データ
への参照を受け取り、レンダ・ビンに保管するように構成されるレンダ・ビンで
あることが好ましい。レンダ・ビンに、1つまたは複数のレンダ・スレッドを関
連付けることができ、これによって、多数のプロセッサを使用する並列レンダリ
ングが可能になる。
【0011】 有利なことに、各構造体を、それ自体のデータを管理(し、任意選択として最
適化)するように構成することができる。したがって、1つの構造体によって、
すべての変換データを管理することができ、複数の変換を一緒に縮約することに
よって、複数の変換を最適化することができる。
【0012】 上で注記したように、シーン・グラフを管理し、レンダリングする方法も企図
されている。一実施態様では、この方法に、複数の3次元オブジェクトを表す情
報を含むシーン・グラフを生成することと、シーン・グラフに対応する構造体お
よびスレッドの並列の組を生成するためにシーン・グラフをトラバースすること
とを含めることができ、各構造体に、シーン・グラフから選択されたデータを管
理するオブジェクトが含まれ、複数のスレッドが、シーン・グラフに対応する1
つまたは複数のフレームをレンダリングするために実行可能である。この方法は
、ソフトウェア、ハードウェア、またはその組合せで実施することができる。
【0013】 本発明の前述ならびに他の目的、特徴、および長所は、添付図面と併せ読むと
き、以下の詳細な説明を参照することによってさらに完全に理解することができ
る。
【0014】 本発明は、さまざまな修正形態および代替形態を許すが、その特定の実施態様
を、例として図面に示し、本明細書で詳細に説明する。しかし、図面およびそれ
に対する詳細な説明が、開示される特定の形態に本発明を制限することを意図さ
れたものではなく、逆に、その意図が請求項によって定義される本発明の趣旨お
よび範囲に含まれるすべての修正形態、同等物、および代替形態を含むことであ
ることを理解されたい。単語「できる、可能性がある(may)」は、本出願で
は、必須の意味(すなわちmust)ではなく、許容的な意味(すなわち、潜在
能力を有する、可能である)で使用される。同様に、単語「含まれる(incl
ude)」およびその派生形は、本明細書では、「含むがこれに制限されない(
including,but not limited to)」を意味するた
めに使用される。
【0015】 (複数の実施形態の詳細な説明) コンピュータ・システム−図1 図1を参照すると、上で説明したシステムおよび方法を実施するのに使用する
ことができるコンピュータ・システム10の一実施形態が示されている。このコ
ンピュータ・システムは、従来のデスクトップ・パーソナル・コンピュータ、ラ
ップトップ・コンピュータ、ネットワークPC、インターネット機器、HDTV
システムおよびインタラクティブ・テレビジョン・システムを含むテレビジョン
、携帯情報端末(PDA)、および、2Dまたは3Dのグラフィックスを表示す
る他の装置を含む、任意の数のさまざまなシステムの基礎として使用することが
できる。
【0016】 図からわかるように、コンピュータ・システム10には、システム・ユニット
12と、システム・ユニット12に結合されたビデオ・モニタまたはディスプレ
イ・デバイス14が含まれる。ディスプレイ・デバイス14は、さまざまなタイ
プのディスプレイ・モニタまたはディスプレイ・デバイスのいずれか(たとえば
CRT、LCD、ガス−プラズマ・ディスプレイ)とすることができる。キーボ
ード16および/またはマウス18もしくは他の入力装置(たとえば、トラック
ボール、ディジタイザ、タブレット、6自由度入力デバイス、ヘッド・トラッカ
、アイ・トラッカ、データ・グローブ、ボディ・センサなど)を含むさまざまな
入力デバイスを、コンピュータ・システムに接続することができる。アプリケー
ション・ソフトウェアを、コンピュータ・システム10によって実行して、3D
グラフィカル・オブジェクトをディスプレイ・デバイス14に表示することがで
きる。アプリケーション・ソフトウェアは、メモリに保管されるか、ネットワー
ク接続を使用してサーバから読み取られるか、コンピュータ・ディスケット、C
D−ROM、DVD−ROM、またはコンピュータ・テープなどの記憶媒体から
読み取ることができる。
【0017】 コンピュータ・システムのブロック図−図2 図2を参照すると、図1のコンピュータ・システムの一実施形態を示す単純化
されたブロック図が示されている。コンピュータ・システムのうちで、本発明の
理解に必要でない要素は、便宜上図示されていない。図からわかるように、コン
ピュータ・システム10には、高速メモリ・バスまたはシステム・バス24に結
合された中央処理装置(CPU)22が含まれる。システム・メモリ26も、高
速バス24に結合することができる。
【0018】 ホスト・プロセッサ22には、たとえば、マイクロプロセッサ、マルチプロセ
ッサ、およびCPUなどのさまざまなタイプの1つまたは複数のプロセッサを含
めることができる。システム・メモリ26には、ランダム・アクセス・メモリ(
たとえば、とりわけ、スタティック・ランダム・アクセス・メモリすなわち「S
RAM」、シンクロナス・ダイナミック・ランダム・アクセス・メモリすなわち
「SDRAM」、およびRambusダイナミック・アクセス・メモリすなわち
「RDRAM」)および大容量記憶装置を含む、異なるタイプのメモリ・サブシ
ステムの組合せを含めることができる。システム・バスまたはホスト・バス24
には、1つまたは複数の通信バスまたはホスト・コンピュータ・バス(ホスト・
プロセッサ、CPU、およびメモリ・サブシステムの間の通信用)ならびに特殊
化されたサブシステム・バスを含めることができる。
【0019】 本発明による3Dグラフィックス・システムまたはグラフィックス・システム
28が高速メモリ・バス24に結合される。3Dグラフィックス・システム28
は、たとえば、クロスバ・スイッチまたは他のバス接続性ロジックによって、バ
ス24に結合することができる。さまざまな他の周辺デバイスまたは他のバスを
、高速メモリ・バス24に接続できることが仮定される。3Dグラフィックス・
システムを、コンピュータ・システム10内の1つまたは複数のバスに結合でき
、かつ/または、さまざまなタイプのバスに結合できることに留意されたい。さ
らに、3Dグラフィックス・システムを、通信ポートに結合し、これによって、
たとえばインターネットまたはネットワークなどの外部ソースからグラフィック
ス・データを直接に受け取ることができる。図からわかるように、ディスプレイ
・デバイス14が、コンピュータ・システム10に含まれる3Dグラフィックス
・システム28に接続される。
【0020】 ホストCPU22は、プログラムされた入出力(I/O)プロトコルに従って
ホスト・バス24を介してグラフィックス・システム28との間で情報を転送す
ることができる。その代わりに、グラフィックス・システム28が、直接メモリ
・アクセス(DMA)プロトコルに従って、またはインテリジェント・バス・マ
スタリングを介して、メモリ・サブシステム26にアクセスすることができる。
【0021】 OpenGLまたはJava(R) 3Dなどのアプリケーション・プログラ
ミング・インターフェース(API)に準拠するグラフィカル・アプリケーショ
ン・プログラムを、ホストCPU22上で実行し、ディスプレイ・デバイス14
での出力のためのポリゴンなどのジオメトリック・プリミティブ(グラフィック
ス・データ)を定義するコマンドおよびデータを生成することができる。使用さ
れる特定のグラフィックス・インターフェースによる定義に従って、これらのプ
リミティブが、表面と裏面について別々の色プロパティを有することができる。
ホスト・プロセッサ22は、これらのグラフィックス・データをメモリ・サブシ
ステム26に転送することができる。その後、ホスト・プロセッサ22は、ホス
ト・バス24を介してグラフィックス・システム28にグラフィックス・データ
を転送するように動作することができる。もう1つの実施形態では、グラフィッ
クス・システム28が、DMAアクセス・サイクルを使用して、ホスト・バス2
4を介してジオメトリ・データ配列を読み込むことができる。もう1つの実施形
態では、グラフィックス・システム28を、Intel Corporatio
n社によって広められたAdvanced Graphics Port(AG
P)などの直接ポートを介してシステム・メモリ26に結合することができる。
【0022】 グラフィックス・システムは、ホストCPU22および/またはシステム・メ
モリ26、他のメモリを含むさまざまなソースから、または、たとえばインター
ネットなどのネットワークなど外部ソースから、または、たとえばテレビジョン
などの放送媒体から、または他のソースから、グラフィックス・データを受け取
ることができる。
【0023】 グラフィックス・システムの一実施形態に、ディスプレイ・バッファに結合さ
れたグラフィックス・プロセッサを含めることができる。本明細書で使用される
ディスプレイ・バッファは、ディスプレイ・デバイスに出力され、表示される特
定のフレームを表す情報(たとえば、画素または画素を形成するのに使用するこ
とができるサンプル)が保管されるバッファである。たとえば、従来のフレーム
・バッファを、ディスプレイ・バッファとみなすことができる。ディスプレイ・
バッファの内容は、通常は、ディスプレイ・デバイスでの表示のために、ディジ
タル情報をアナログ・ビデオ信号に変換するディジタル・アナログ変換器(DA
C)に出力される。構成に応じて、グラフィックス・プロセッサ(並列処理シス
テムの場合には複数のプロセッサ)を、メイン・システム・メモリおよび/また
はホストCPUから受け取った、命令を実行するかデータを処理するように構成
することができる。
【0024】 コンピュータ・システム10には、コンピュータ・システムがコンピュータ・
ネットワークとの間でデータを送受信できるようにするネットワーク・インター
フェース(図示せず)を含めることもできる。一実施形態では、コンピュータ・
システムを、3次元シーン・グラフの管理およびレンダリングに関連するタスク
をネットワーク上の他のコンピュータに分配するように構成することができる。
タスクは、オブジェクト(たとえばデータとスレッド)をネットワーク上の他の
コンピュータに(すなわち、それぞれがそれ自体の非共有メモリを使用して)送
信することによって分配することができる。これらのコンピュータは、メッセー
ジのシステム(下で詳細に説明する)を介して互いに通信することができる。
【0025】 シーン・グラフ−図3 上記のように、シーン・グラフは、特定の3次元シーンまたはワールドを定義
するオブジェクトおよびグラフィックス・データの階層である。たとえば、最上
位ノードが、建物全体と、その建物を占めるすべての家具調度および人を表すこ
とができる。シーン・グラフをトラバースする際に、グループ・ノードの次のレ
ベルが、建物の中の特定の部屋を表すことができる。シーン・グラフをもう1レ
ベルだけトラバースすることによって、それぞれが特定の部屋の中の1人の人ま
たは1つの家具オブジェクト(たとえば椅子)を表すグループ・ノードをもたら
すことができる。各グループ・ノードが、変換ノードの下のどんなノード(すな
わち子ノード)の並行移動かつ/または回転を行う変換ノードも有することがで
きる。多数のレベルのシーン・グラフが可能であるが、最終的に、シーン・グラ
フのトラバースは、リーフ・ノードで終わる。リーフ・ノードは、通常は、ある
オブジェクト(たとえばティー・カップまたは椅子)またはより大きいオブジェ
クトの部分(たとえば人の手)を表す。リーフ・ノードは、通常は、オブジェク
トを記述したグラフィックス・データへの1つまたは複数のポインタを有する。
たとえば、実施形態では、リーフ・ノードが、オブジェクトの形状を定義するポ
リゴン(またはNURBS(Non−Uniform Rational B−
Spline))およびオブジェクトの外見を定義するテクスチャ・マップを含
むデータ・ファイルへのポインタを有することができる。リーフ・ノードは、境
界ボックスへのポインタも有することができる。
【0026】 シーン・グラフをレンダリングのためにサブミットする前に、「オブジェクト
・カリング」を実行することが有利である。オブジェクト・カリングは、オブジ
ェクトをシーン・グラフから選択的に除去する処理を指す。オブジェクト・カリ
ングのほとんどの実施形態で、オブジェクトは、現在のビューフラスタンの外部
にあるか、さえぎられる(部分的にまたは完全にのいずれか)ので、除去される
。オブジェクトは、多数のオブジェクトを有する複雑なシーン・グラフについて
特に有用である。現在のグラフィックス・ハードウェアは、すべてのオブジェク
トをレンダリングする時に満足なフレーム・レートを達成できない場合があるの
で、オブジェクト・カリング(object culling)によって、現在の視点/方位から
見ることができないオブジェクトの除去を試みる。したがって、オブジェクト・
カリングでは、ビューアに実際に可視であるオブジェクトだけをレンダリングす
ることによって、グラフィックス・パイプライン帯域幅の浪費を減らすことを試
みる。たとえば、特定のシーン・グラフが、都市全体の仮想モデルを表すと仮定
すると、現在の視点が特定の建物の基部に近い場合に、その特定の建物が、その
背後にあるものを覆い隠す。したがって、その建物が不透明であり、その特定の
建物の背後の他の構造の影または反射が可視ではないと仮定すると、これらの隠
された構造のレンダリングにレンダリング・リソースを割り当てる理由はない。
【0027】 図3に移ると、シーン・グラフ50の一実施形態が図示されている。この例で
は、シーン・グラフ50が、Java(R) 3Dクラスのインスタンスから作
成されるが、他のタイプのシーン・グラフも可能であり、企図されている(たと
えば、VRMLシーン・グラフ)。シーン・グラフ50は、ビジュアル・オブジ
ェクトおよびオーディオ・オブジェクトのジオメトリ、サウンド、ライト、位置
、方位、および外見を定義するオブジェクトから組み立てられる。
【0028】 図からわかるように、シーン・グラフ50は、ノードとアークを有するデータ
構造とみなすことができる。ノードは、データ要素を表し、アークは、データ要
素の間の関係を表す。図では、シーン・グラフ50のノード54から66および
74が、Java(R) 3Dクラスのインスタンスである。アークは、Jav
a(R) 3Dクラス・インスタンスの間の2タイプの関係を表す。第1のタイ
プの関係は、親子関係である。たとえば、この実施形態では、分岐グループ・ノ
ード60などのグループ・ノードが、任意の数の子(Shape3dリーフ・ノ
ード64など)を有することができるが、1つの親(すなわちローカル(locale)
・ノード54)だけを有する。同様に、リーフ・ノードは、1つの親を有するが
、子は有しない。これらの関係が、図では実線によって示されている。第2のタ
イプの関係が、参照である。参照によって、特定のノード・コンポーネント・オ
ブジェクトがシーン・グラフ・ノードに関連付けられる。ノード・コンポーネン
ト・オブジェクトによって、ビジュアル・オブジェクトのレンダリングに使用さ
れるジオメトリ属性および外見属性が定義される。参照は、図では破線によって
示されている。
【0029】 図からわかるように、Java(R) 3D(商標)シーン・グラフ50は、
親子関係でツリー構造を形成するノード・オブジェクトから構成される。あるツ
リー構造の中では、1つのノード(たとえば、図のVirtualUniver
seノード52)がルートである。他のノードは、ルートからアークに従うこと
によってアクセス可能である。シーン・グラフ50は、ローカル(locale)・オブ
ジェクト54をルートとするツリーから形成される。ノード・コンポーネントお
よび参照アークは、シーン・グラフ・ツリーの一部ではない。ツリーのルートか
らリーフのそれぞれには1つのパスだけが存在するので、シーン・グラフのルー
トからリーフ・ノードのそれぞれへのパスは1つだけ存在する。シーン・グラフ
50のルートから特定のリーフ・ノードへのパスを、そのリーフ・ノードの「シ
ーン・グラフ・パス」と呼ぶ。シーン・グラフ・パスは、正確に1つのリーフに
つながるので、シーン・グラフ50内のリーフごとに1つのシーン・グラフ・パ
スがある。
【0030】 Java(R) 3Dシーン・グラフのシーン・グラフ・パスのそれぞれによ
って、そのリーフの状態情報が完全に指定される。状態情報には、ビジュアル・
オブジェクトの位置、方位、およびサイズが含まれる。その結果、各ビジュアル
・オブジェクトのビジュアル属性は、そのシーン・グラフ・パスだけに依存する
。Java(R) 3Dレンダラは、この事実を利用し、最も効率的であると判
定された順序でリーフをレンダリングする。Java(R) 3Dプログラマは
、通常は、オブジェクトのレンダリング順序に対する制御を有しない。
【0031】 シーン・グラフのグラフィック表現は、Java(R) 3Dプログラムの設
計ツールおよび/またはドキュメンテーションとして働くことができる。シーン
・グラフは、図に示された標準グラフィック・シンボルを使用して描かれる。J
ava(R) 3Dプログラムは、シーン・グラフのオブジェクトより多数のオブジェクトを
有することができる。
【0032】 Java(R) 3D virtual universeを設計するために
は、シンボルの標準セットを使用してシーン・グラフを描く。設計が完了した後
に、そのシーン・グラフ・ドローイングを、プログラムの仕様として使用するこ
とができる。プログラムが完了した後に、同一のシーン・グラフが、プログラム
の簡潔な表現になる(仕様に従ったと仮定して)。したがって、既存のプログラ
ムから描かれたシーン・グラフによって、そのプログラムが作成するシーン・グ
ラフがドキュメント化される。
【0033】 シーン・グラフ・ベースのプログラムの高速処理 まず、シーン・グラフ・ベース・プログラムのシステムおよび方法の一実施形
態の全般的概要を開示する。その後、Java(R) 3D APIのコンテキ
ストで実施されるシステムおよび方法の一実施形態の詳細な説明を開示する。こ
の開示、添付の図面、および請求項を再検討した後に当業者が理解するであろう
ように、他のプログラミング言語および/またはAPIを、本明細書に開示され
たシステムおよび方法を実施するために使用または修正することができる。
【0034】 上で注記したように、シーン・ベース・プログラムの処理の柔軟性および/ま
たは速度を改善するために、グラフィックス・システム(ハードウェアおよび/
またはソフトウェア)を、直接にまたはさまざまな補助構造体を構築するための
「ソース」構造体としてシーン・グラフを使用するように構成することができる
。シーン・グラフの詳細な説明および例を、付属物2(「Getting St
arted with the Java(R) 3D(商標)API」)とし
て本明細書に添付する。一実施形態では、グラフィックス・システムを、(i)
たとえばレンダリング(フラスタン・カリング(frustumn culling)およびオクル
ージョン・カリング(occlusion culling)を含む)、サウンド(モノラル、ステ
レオ、3D化されたサウンドを含む)、実行カリング、衝突検出、および/また
はピッキングもしくはこれらの組合せなどのシーン・グラフ・ベースのプログラ
ムのより効率的なレンダリングおよび実行を助けるか、(ii)オリジナルのシ
ーン・グラフへの参照が制限されるか存在しない状態での直接実行のための補助
構造体を生成(コンパイル)するのを助けるか、いずれかのために、これらの補
助構造体を使用するように構成することができる。
【0035】 これには、オリジナル構造体のトラーバサルの範囲を減らすための補助構造体
の使用、それによってオリジナル構造体(シーン・グラフ)への参照を減らすた
めの1つまたは複数の補助構造体によるオリジナル構造体の置換、または、関連
するシーン・グラフ・ベース・プログラムのレンダリングおよび実行(グラフィ
ックス、挙動、サウンド、衝突検出、およびピッキングを含むがこれに制限され
ない)のために十分な情報を含む新しい構造体によるオリジナル構造体の完全な
置換を含めることができるが、これに制限されない。
【0036】 そのような補助構造体(スケーラビリティのために設計された)の特定の一実
施形態が、k−dop階層のより低次元のバージョンであり、この場合には、可
視性検出、フラスタン・カリング、オクルージョン・カリング、実行カリング、
衝突検出、境界ボリューム判定、およびピッキングに使用される、軸に整列され
た境界ボックス(6−dop)の階層である。そのような実施形態の1つが、1
999年2月9日出願の米国特許出願第09/247466号、表題「Visi
ble Object Determination for Interac
tive Visualization」に開示されている。
【0037】 いくつかの実施形態では、システムが、マスタ・コントロールと称するシステ
ム・ベースのスケジューラをサポートすることができ、このマスタ・コントロー
ルは、シングル・プロセッサ・システムおよびマルチプロセッサ・システムのリ
ソースを含むさまざまなリソースの管理を処理する。マスタ・コントロールは、
さまざまなレンダラおよびシステムの計算を管理し、それらの実行をコンピュー
タのさまざまなプロセッサ、メモリ・システム、および他のネットワーク接続さ
れたコンピュータに割り当てることができる。マスタ・コントロールは、システ
ムのさまざまな計算をシリアライズするか、これらの計算を並列に実行すること
ができる。マスタ・コントロールは、最初のスタートアップ時に、またはシステ
ムが実行を継続する時間にわたって動的にの両方で、レンダリング・コンポーネ
ントおよび計算コンポーネントの追加または除去を可能にすることができる。こ
のさまざまなレンダリング・コンポーネントおよび計算コンポーネントの直交化
によって、新しいレンダラ(たとえば触覚)によるシーン・グラフ実行システム
の拡張または既存レンダラのそのレンダラの異なる実施形態による置換が可能に
なる。
【0038】 いくつかの実施形態で、このシステムで、状態変化を指定するためのメッセー
ジ・パッシングの使用を実施することもできる。これらのメッセージは、単調増
加するタイムスタンプ/イベントスタンプを用いてラベルが付けられる。これら
の「スタンプされた」またはラベルを付けられたイベントを用いると、一貫性を
保証しながら並列処理または分散処理が可能になる。
【0039】 いくつかの実施形態では、一貫性を保証するために、「エポック」を使用する
ようにシステムを構成することができる。エポックは、「スタンプされた」メッ
セージの選択されたインターバルに含まれるラベル(タイムスタンプ/イベント
スタンプ)のコンパクトな(連続的な)セットを有するすべてのメッセージから
なる。新しいエポックの連続的な宣言によって、レンダラおよび他の計算が、現
在のエポック内で作業でき、したがって、変更の一貫性のあるセットを操作でき
るようになる。
【0040】 いくつかの実施形態で、ジオメトリ構造体と呼ばれる補助構造体を使用するこ
とができる。ジオメトリ構造体は、app空間的に配置されたレンダリング可能
なオブジェクトの現在の一貫性のある状態を含むように構成することができる。
この構造体は、レンダリング可能な空間的に配置されたオブジェクトのグループ
化にクラスタ・アルゴリズムを使用する境界ボックス階層とすることができる。
この構造体には、多数のオブジェクトをすばやく含め、除外するための特殊化さ
れたメソッド(スイッチ処理)も含めることができる。この構造体には、さらに
、望ましいプロパティを保持するために階層を再平衡化するための特殊化された
メソッドを含めることができる。この構造体によって、そのオブジェクトへの一
貫性のある同時アクセスが可能になる。
【0041】 すべての非レンダリング可能な空間的に配置されたオブジェクトの現在の一貫
性のある状態(ライト、フォグ、背景、クリップ、モデル・クリップなどのノー
ドなどの非ジオメトリック・オブジェクトを含む)を含む、レンダリング環境構
造体と呼ばれる補助構造体。この構造体は、オブジェクトをすばやく含め、除外
するための特殊化されたメソッドと、望ましいプロパティを保持するために階層
を再平衡化するための特殊化されたメソッドを共有する。この構造体によって、
そのオブジェクトへの一貫性のある同時アクセスが可能になる。
【0042】 いくつかの実施形態で、グラフィックス・システムを、レンダ・ビンと称する
補助構造体を生成/サポートするように構成することができる。レンダ・ビンは
、特定のフレームについてレンダリングする必要があるオブジェクトのスーパー
セットを含むように構成することができる。レンダ・ビンは、構造体に保持され
るオブジェクトを「エイジング」し、随時の「コンパクション」計算中に「オー
バーエイジ」オブジェクトを除去することができる。レンダ・ビン構造体は、M
T/MP(マルチスレッド/マルチプロセッサ)対応とすることができ、これに
よって、オブジェクトの追加とオブジェクトへのアクセスの両方のための同時ア
クセスが可能になる。この構造体は、基礎となるレンダリング・ハードウェア・
アーキテクチャとの互換性がより高い順序に、レンダリングされるオブジェクト
をソートすることと、基礎となるハードウェアに対するより適当な一致のために
レンダリング可能なコンポーネントを組み合わせるか分割できるようにする他の
ローカル(ほとんど「ピープホール(peephole)」)最適化のために、レンダリン
グされるオブジェクトをソートすることの両方を行うことができる。レンダ・ビ
ンに保持されたレンダリング可能なオブジェクトに、関連するオブジェクトがレ
ンダリングされる前に実行されるコールバックを関連付けることができ、これら
のオブジェクトは、複数の状態変化オブジェクトへの参照を保持することができ
る。これらのオブジェクトに、複数の変換行列、レンダリング属性、およびジオ
メトリ詳細のレベルを含むシステム固有の計算、またはユーザ指定のバージョン
の前のそれぞれの計算も含めることができる。レンダ・ビン構造体は、レンダリ
ング可能なオブジェクトの大きなグループの包含または除外のために最適化する
ことができる(スイッチ・モード処理)。
【0043】 図4に移ると、シーン・グラフを管理し、レンダリングするために並列構造体
を作成する方法の一実施形態を示す図が示されている。シーン・グラフには、ロ
ーカル・ノード54、変換ノード66AからD、ビュー・プラットホーム74、
挙動ノード92、ライト・ノード90、およびジオメトリ・ノード・コンポーネ
ント96が含まれる。この図に、シーン・グラフの一部だけが示されていること
と、追加のノードおよびノード・コンポーネント(たとえばBranchGro
upノード)が存在するが、単純にするために図に示されていないことに留意さ
れたい。
【0044】 図からわかるように、シーン・グラフが作成されるか最初にトラバースされる
際に、複数の構造体200から210を含む並列構成が生成される。各構造体は
、シーン・グラフ内の特定のタイプのオブジェクトに関する責任を負う。たとえ
ば、ジオメトリ構造体200は、シーン・グラフのジオメトリ・ノード・コンポ
ーネントに関する責任を負う。同様に、レンダリング属性構造体202は、現在
の視点およびビュー・フラスタンなどのレンダリング属性に関する責任を負う。
レンダリング環境構造体204は、照明および、フォグなどの他の環境効果に関
する責任を負う。変換構造体206は、グループ・ノードの変換に関する責任を
負い、挙動構造体208は、挙動ノード(たとえば、衝突が検出されるなど、あ
る条件が満たされた結果としてのオブジェクトに対する変化)に関する責任を負
う。レンダ・ビン210は、オブジェクトの選択およびレンダリングに関する責
任を負う。
【0045】 図からわかるように、並列データ構造体200から208は、それぞれが更新
スレッド200Bから208Bを有することができる。更新スレッドは、変更を
処理するために呼び出すことができる(たとえば、対応するメッセージ・キュー
内のメッセージに基づいて)。たとえば、ライト・ノード90の色が変化したと
仮定すると、その効果に対するメッセージを、レンダリング環境構造体204の
メッセージ・キュー204Aに送ることができる。レンダリング環境構造体の更
新スレッド204Bを呼び出して、メッセージについてメッセージ・キュー20
4Aを検査し、更新メッセージを検出し、それ相応にレンダリング環境構造体2
04を変更することができる。いくつかの場合に、更新スレッドが、他の構造体
(たとえばレンダ・ビン210)に伝えられるそれ自体のメッセージを生成する
ことができる。
【0046】 レンダ・ビン210は、更新スレッドの代わりに複数の異なるレンダ・スレッ
ド212Aから212Nを用いて構成することができる。これらのスレッドは、
並列に動作し、レンダ・ビン210の異なる部分をレンダリングする。その一例
が、仮想現実感用のヘッド・マウント式ディスプレイを使用するシステムである
。ヘッド・マウント式ディスプレイは、通常は、2つのスクリーン(目のそれぞ
れに1つ)を有する。立体視効果を達成するために、各ディスプレイが、通常は
、それぞれが異なる視点に従ってレンダリングされる異なる画像を表示する。し
たがって、2つの異なるディスプレイのそれぞれについて、異なるレンダ・メソ
ッドを開始することができる。同様に、一部の仮想現実感アプリケーションでは
、複数のユーザのそれぞれが、仮想世界を個別にナビゲートする際に、自分自身
の視点を有することができる。もう1つの実施形態では、視点ごとに異なるレン
ダ・ビンを生成する(これは、下で詳細に説明する)。レンダ・スレッドは、並
列に動作することができるが、それぞれが、特定のビューではなく特定の1つま
たは複数のオブジェクトに対応することができる。
【0047】 複数の異なるタイプの並列データ構造体を図に示し、本明細書で説明するが、
正確な実施形態に依存して、必要に応じて(たとえばサウンドまたはフォース・
フィードバック・デバイスのサポートのため)追加のタイプの並列データ構造体
を作成できることに留意されたい。同様に、複数の追加のスレッドも作成するこ
とができる。
【0048】 有利なことに、この並列構造体を使用することによって、並列構造体を生成す
るために、シーン・グラフを1回トラバースするだけでよくなる。シーン・グラ
フ・トラーバサルの数を減らすことによって、レンダリング性能を潜在的に改善
することができる。さらに、並列構造体およびそれに対応するスレッドの異なる
部分を、並列処理のためにネットワークを介して別のコンピュータ(すなわち、
1つまたは複数の非共有メモリ・コンピュータ)に伝えることができる。各構造
体がセット・アップされた後に、実行を並列に行うことができ、状態変化情報は
、異なるコンピュータまたはプロセッサの間で伝送されるメッセージを介して伝
えられる。対照的に、シーン・グラフの継続的に繰り返されるトラーバサルは、
特に並列プロセッサがメモリを共有しない時には、並列処理実施形態にも適さな
い。
【0049】 各構造体200から210は、メッセージを受け取り、保管するように構成さ
れた、対応するメッセージ・キュー200Aから210Aを有する。図からわか
るように、シーン・グラフの作成中または最初のトラーバサル中に、メッセージ
を生成し、対応する並列構造体に伝えることができる。たとえば、ジオメトリ・
ノード・コンポーネント96がシーン・グラフに追加される時に、ジオメトリ構
造体200のメッセージ・キュー200Aにメッセージが送られる。同様に、ラ
イト・ノード90がシーン・グラフに追加される時に、レンダリング環境構造体
204のメッセージ・キュー204Bにメッセージが送られる。
【0050】 図5に移ると、シーン・グラフ・ベースのグラフィックス・データを管理し、
レンダリングするために並列構造体を作成する方法の一実施形態の流れ図が示さ
れている。この実施形態では、方法が、universeの作成(ステップ10
2)から開始(ステップ100)される。次に、子ノード(たとえば図3および
4に示されたものなど)および分岐のグラフを作成する(ステップ104)。こ
の処理を、ツリーが完成するまで継続する(ステップ106)。次に、ツリーを
トラバースする(ステップ110)。検出されたノードごとに(ステップ112
)、メッセージ(たとえば「InsertNode」)を生成する(ステップ1
14)。同様に、検出された新しいビューごとに(ステップ116)、メッセー
ジ(たとえば「CreateRenderBin」)を生成する(ステップ11
8)。この処理を、ツリーを完全にトラバースするまで継続する(ステップ12
0)。他の実施形態では、メッセージを、シーン・グラフ・ツリーの作成と同時
に生成できることに留意されたい。
【0051】 次に、タイマ・カウンタを初期化することができ(ステップ122)、マスタ
・コントロール・スレッドを開始することができる(ステップ130)。マスタ
・コントロール・スレッドは、現在のエポックを定義するように構成され(ステ
ップ132)、その後、実行のためにスレッドをスケジューリングする(ステッ
プ134)。この処理が、実行が完了するまで継続される(ステップ136から
138)。エポックは、スレッド実行の効率的なスケジューリングを可能にする
ためにマスタ・コントロール・スレッドによって定義される時間期間である。メ
ッセージにタイムスタンプを付けることができ、これによって、マスタ・コント
ロール・スレッドが、スレッドによって処理されるメッセージまたはタスクのエ
イジ(および重要性)に基づいてスレッドをスケジューリングできるようになる
。この時間管理処理の一実施形態を、下で詳細に説明する。
【0052】 Java(R) 3D(商標)APIを使用する例の実施形態 Java(R) 3Dアーキテクチャ Java(R) 3D APIを使用して、上で説明したシステムおよび方法
の一実施形態を実施することができる。そのような実施形態の1つを、下で詳細
に説明する。しかし、他の実施形態も可能であり、企図されていることに留意さ
れたい。この特定の実施形態を説明するために、シーン・グラフ構造体の概要を
提示し、その後、ランタイム・システムのコンポーネントを提示する。次に、シ
ステム・スタートアップ、ランタイム・システム・オペレーション、およびシス
テム・シャットダウンの処理を提示する。その後、この実施形態の特定の特徴を
、さらに詳細に説明する。また、標準Java(R)(商標)およびJava(
R) 3Dの変数名、オブジェクト名、およびプロセスが、本明細書で使用され
ることに留意されたい。Java(R)およびJava(R) 3Dに関するさ
らなる情報について、書籍、表題「The Java(R) 3D(商標)AP
I Specification」、Sowizral、Rushforth、
およびDeering著、Addison−Wesley Publishin
g Co.,刊、ISBN:0201710412、および表題「The Ja
va(R)(商標)Programming Language」、Ken A
rnold、James Gosling、およびDavid Holmes著
、Addison−Wesley Publishing Co.,刊、ISB
N:0201704331を参照されたい。
【0053】 シーン・グラフ構造体 Java(R) 3D APIは、Java(R)クラスのセットである。ア
プリケーションは、これらのクラスのインスタンスを作成し、そのメソッドを呼
び出してJava(R) 3Dを制御する。一実施形態では、これらのクラスの
多くを、実際に実装を処理する、保持されるクラス(retained class)を囲むラ
ッパー・クラスにすぎないものとすることができる。APIオブジェクトを作成
する時に、そのオブジェクトが、それに保持される対応オブジェクトを作成する
ことができる。これは、NodeおよびNodeComponentのサブクラ
スであるすべてのクラスにあてはまる。一実施形態では、作業中のシーン・グラ
フ構造体が、保持される側だけで実装される。
【0054】 図6に移ると、シーン・グラフ構造体の一実施形態が示されている。この実施
形態では、シーン・グラフ構造体およびすべての子/親関係が、保持されるクラ
スで実装される。APIクラスは、保持されるクラス(62’、66A’、66
B’、64A’、および64B’)のラッパー・クラス(54、62、66A、
66B、64A、64B)として構成することができる。さらに、すべてのシー
ン・グラフ・リンク(たとえば親/子関係)が、保持される側で実装される。い
くつかの実施形態では、各クラスのほとんどを、保持される側で実装することが
できる。やはり図に示されているように、この実施形態では、「Locale」
クラスが、並列に保持されるクラスを有しない。このタイプの内部構造を使用す
ることの可能な長所の1つは、capability bit処理およびシーン
・グラフのコンパイルが、単純化されることである(下で詳細に説明する)。
【0055】 capability bit処理 capability bitは、Java(R) 3D APIで、アプリ
ケーションが、シーン・グラフの異なる部分に対してアプリケーションが行う修
正または照会が何であるかをJava(R) 3Dに知らせるのに使用すること
ができる。シーン・グラフ内のNodeおよびNodeComponentのそ
れぞれが、そのNodeまたはNodeComponentのために定義された
capability bitを有することができる。分岐グラフが、ライブに
された(シーン・グラフに挿入された)か、コンパイルされた(BranchG
roup.compile()またはSharedGroup.compile
()を介して)後に、アプリケーションは、それがオブジェクトごとにセットし
たcapability bitに基づく修正または照会だけを行うことができ
る。これは、APIクラスのそれぞれのメソッドに、並列に保持されるメソッド
を呼び出す前にcapability bitを検査する責任を負わせることに
よって実施することができる。
【0056】 下記のコードは、Materialクラスからのそのようなテストの例である
。 public final void setAmbientColor (C
olor3f color) { if (isLiveOrCompiled()) if (!this.capabilities.get (ALLOW_CO
MPONENT_WRITE)) throw new CapabilityNotSetException
(“Material:no capability to set comp
onent”); ((MaterialRetained) this.retained).
setAmbientColor (color); } Material.ALLOW_COMPONENT_WRITE capa
bility bitは、材料(material)属性の設定を制御するため
に定義されたcapability bitである。オブジェクトがコンパイル
されたかライブになった後に変更可能にならないようにするために、いくつかの
メソッドが定義されている。下記のコードは、ImageComponent2
Dからの例である。 public final void set (BufferedImage
image) { checkForLiveOrCompiled(); ((ImageComponent2DRetained) this.ret
ained). set(image); }
【0057】 この場合、コンポーネントがライブであるかコンパイル済みである場合に、c
heckForLiveOrCompiled()が例外をスローする。いくつ
かの実施形態では、すべてのNodeおよびNodeComponentが、c
apability bit処理を実施することができる。したがって、すべて
のNodeおよびNodeComponentが、並列に保持されるクラスを有
する。APIに対して変更が行われる時に、NodeおよびNodeCompo
nentに、新しいcapability bitを必要とする可能性がある新
しい特徴を与えることができる。これを容易にすると同時にコンパクトな全体セ
ットの維持を試みるために(すなわち、capability bitテストを
すばやく実行できるようにするために)、すべてのcapability bi
t値を定義するクラスを含めることができる。このクラスは、クラス階層に基づ
く線形の順序でビット値を割り当てることができる。有利なことに、クラス階層
内のどのパスでも、線形の順序で進行するビット値を有することができる。さら
に、独立の階層が、同一のビット値を有することができ、これによって、ビット
値のコンパクトなセットがもたらされる。
【0058】 Java(R) 3Dでは、最も深いクラス階層が、ConeSound階層
であり、最大のcapability bit値が39である。いくつかの実施
形態では、64ビット(すなわち「long」変数型で使用可能なビット数)未
満の限界またはゴールを設定することができる。
【0059】 分岐グラフのコンパイル Java(R) 3D APIでは、アプリケーションがBranchGra
phまたはSharedGraphをコンパイルすることができる(Branc
hGroup.compile()およびSharedGroup.compi
le()を介して)。コンパイル時に、実施形態が、サブグラフを分析し、サブ
グラフに対する最適化を実行することができる。実施形態は、アプリケーション
が最適化を案内するためにセットしたcapability bitを使用する
ことができる。1つの可能な最適化の例が、シーン・グラフのフラット化である
【0060】 図7に移ると、シーン・グラフをフラット化する方法の一実施形態が示されて
いる。この図には、2つの特徴が示されている。第1に、この例では、Tran
sformGroupノード66AからBが、capability bitを
セットされておらず、したがって、変更または照会することができない。その結
果、分岐グラフがコンパイルされた時に、TransformGroupRet
ainedノードが除去され、その合成値が、Shape3DRetained
ノード64”にキャッシングされる。
【0061】 第2に、保持されるクラスを囲むラッパー・クラスとしてAPIクラスを構成
することの1つの可能な長所が示されている。TransformGroupノ
ードは、capability bitをセットされておらず、この分岐がコン
パイルされているので、アプリケーションがTransformGroupRe
tainedノードを変更または照会する方法がない。したがって、これらを除
去することができる。アプリケーションは、まだTransformGroup
ノードへの参照を有することができるが、capability bitがセッ
トされていないので、これは問題ではない。
【0062】 したがって、この図には、コンパイル最適化の1つの例が示されている。しか
し、一般に、コンパイル最適化は、Java(R) 3D実装の残りでの最適化
と独立である。いくつかの実施形態では、Java(R) 3Dランタイム・シ
ステムが、サブグラフを受け取るか処理する前に、最適化を実行することができ
る。他のコンパイル最適化には、小さいShape3Dノードのクラスタ化、大
きなShape3Dノードの分割、ジオメトリ・データのストリップ化、および
ジオメトリ・データの圧縮をも含めることができる。
【0063】 ランタイム・システムの概要 Java(R) 3D APIは、マルチスレッド式の完全に非同期の実施形
態をサポートするように構成されている。このAPIを用いると、実施形態が、
その作業構造体としてのシーン・グラフ、または性能向上のための代替データ構
造のいずれかを使用できるようになる。いくつかの実施形態では、シーン・グラ
フが、主作業構造体である。多数の特徴に関して、これは有用な作業構造体であ
る。しかし、可能な最適化を検討する時に、シーン・グラフが、実際には、処理
に制限がある構造体になる可能性がある。したがって、他の実施形態では、より
柔軟なアーキテクチャをサポートして、より高度な最適化をもたらすことができ
る。一実施形態では、より柔軟なアーキテクチャに、3つのコンポーネントすな
わち、構造体、スレッド、およびメッセージが含まれる。これらのコンポーネン
トのそれぞれを、下で詳細に説明する。
【0064】 構造体 構造体は、他のオブジェクトの集合を管理するオブジェクトである。構造体は
、シーン・グラフの内容だけに依存する。構造体は、その構造体に対する要件の
組を与えられて、それに含まれるオブジェクトの最適化の責任を負う。構造体は
、シーン・グラフ構造体から独立であり、それ自体のオブジェクトだけに関して
責任を負う。すべての構造体の親クラスが、J3dStructureである。
下に、このシステムの一実施形態でサポートすることができる異なるタイプの構
造体の説明をリストする。
【0065】 GeometryStructure GeometryStructureは、シーン・グラフ内のすべてのジオメ
トリ・データおよびバウンド・データを編成する責任を負う。VirtualU
niverseごとに1つのGeometryStructureがある。
【0066】 BehaviorStructure BehaviorStructureは、すべてのBehaviorノードを
編成する責任を負う。挙動スケジューラのセマンティクスを実装する責任は負わ
ない。BehaviorStructureは、高速の実行カリングおよび処理
のために、ノードおよびそれらのウェイクアップ判断基準を編成するだけである
。VirtualUniverseごとに1つのBehaviorStruct
ureがある。
【0067】 SoundStructure SoundStructureは、すべてのSoundノードを編成する責任
を負う。サウンド・スケジューラのセマンティクスを実装する責任は負わない。
SoundStructureは、高速のサウンド・レンダ・カリングのために
ノードを編成するだけである。VirtualUniverseごとに1つのS
oundStructureがある。
【0068】 RenderingEnvironmentStructure RenderingEnvironmentStructureは、レンダリ
ング環境に影響するオブジェクトを編成する責任を負う。これには、Light
ノード、Fogノード、Clipノード、Backgroundノード、および
ModelClipノードが含まれる。RenderingEnvironme
ntStructureは、それらのセマンティクスを実装しない。Rende
ringEnvironmentStructureは、シーンまたは特定のジ
オメトリに適用される環境特性を判定するための高速なメソッドを提供するだけ
である。VirtualUniverse..1.3.1.5ごとに1つのRe
nderingEnvironmentStructureがある。
【0069】 RenderingAttributesStructure RenderingAttributesStructureは、NodeC
omponentオブジェクトおよびそのミラー・オブジェクトのレンダリング
のすべてを管理する責任を負う。Java(R) 3Dのすべてについて1つの
RenderingAttributesStructureがある。
【0070】 RenderBin RenderBin構造体は、可視ジオメトリ・オブジェクトの集合を、レン
ダリングに最適に編成する責任を負う。Viewごとに1つのRenderBi
nがある。
【0071】 TransformStructure TransformStructureは、システム内で使用されるすべての
変換およびバウンドを更新する責任を負う。
【0072】 スレッド スレッドは、上で説明した構造体を使用するように構成される。1.2実装に
は、多数の異なるタイプのスレッドがある。この節では、システム内のすべての
スレッド・タイプを提示する。
【0073】 MasterControl MasterControlは、システムの制御スレッドである。Maste
rControlは、システム内の他のすべてのスレッドのスケジューリングを
行う。MasterControlは、タイム・スナップショットを取る責任も
負う。これは、Timeの節で説明する。システム全体に1つのMasterC
ontrolがある。
【0074】 J3dThread J3dThreadは、システム内の他のすべてのスレッドの抽象親クラスで
ある。J3dThreadでは、スレッドの、初期化と、MasterCont
rolによって通知されることと、クリーンアップとに関するすべての機能性が
実装される。MasterControlを除く、システム内のすべてのスレッ
ドが、J3dThreadのサブクラスである。
【0075】 StructureUpdateThread すべての構造体が、StructureUpdateThreadを有する。
メッセージが構造体に送られる時に、StructureUpdateThre
adが、その構造体に関してこれらのメッセージを取り出すようにスケジューリ
ングされる。StructureUpdateThreadは、その更新パスの
時間インターバルの間に含まれる、その構造体に関するメッセージだけを取り出
す。これは、下で詳細に説明する。
【0076】 Renderer これは、ジオメトリをレンダリングするスレッドである。これは、SwapB
uffersコマンドも発行する。Screen3Dごとに1つのRender
erがある。単一のスクリーン上に複数のCanvas3Dがある時には、Re
ndererスレッドが、Canvas3Dごとに実行される。Rendere
rは、RenderBinおよびRenderingAttributesSt
ructureを使用する。
【0077】 BehaviorScheduler このスレッドは、トリガされたアクティブな挙動のスケジューリングおよび処
理に関する責任を負う。このスレッドは、BehaviorStructure
を使用する。現在、VirtualUniverseごとに1つのBehavi
orSchedulerがある。
【0078】 SoundScheduler このスレッドは、サウンド・スケジューリングと、AudioDevice3
Dへのサウンド・レンダリング要求の送出に関する責任を負う。Viewごとに
1つのSoundSchedulerがある。このスレッドは、SoundSt
ructureを使用する。
【0079】 InputDeviceScheduler このスレッドは、非ブロッキング入力デバイスのスケジューリングに関する責
任を負う。PhysicalEnvironmentごとに1つのInputD
eviceSchedulerがある。
【0080】 メッセージ メッセージは、システム内で発生する変化を、システムを介して内部または外
部と通信するのに使用される。一実施形態では、「J3dMessage」と呼
ばれる単一のメッセージ・クラスが実装される。各メッセージは、下記のフィー
ルドを有することができる。 time−メッセージが送られた時刻。これは、時間を管理するMaster
Controlによって書き込まれる。 refcount−このメッセージの参照カウント。1つのメッセージが、複
数のデスティネーションに行くことができる。すべてのデスティネーションがメ
ッセージを消費した時に、そのメッセージのrefcountが0になり、その
メッセージはfreelistに置かれる。 threads−このメッセージを必要とするすべてのスレッド・タイプを表
すbitmask。 universe−このメッセージを発したuniverse。 view−このメッセージを受け取らなければならないView。nullの
場合には、すべてのViewがこのメッセージを受け取る。 type−このメッセージのタイプ。 args−5つのオブジェクト参照の配列。引数は、このフィールドを介して
デスティネーションに渡される。 MasterControlがメッセージのfreelistを維持するので
、メッセージが必要な時に、GCアクティビティが減少する。
【0081】 Time 本明細書で使用される時に、時間への言及は、System.current
TimeMillis()で測定された時間を指さない。その代わりに、時間は
、より正確には、変更カウントと呼ばれる。MasterControlが、「
time」と呼ばれるフィールドを有し、このフィールドは、0として開始され
、(i)システム内でメッセージが送られるたびに、および(ii)Maste
rControlがタイム・スナップショットをとる時に、増分される。この時
間の概念は、さまざまなスレッドが、すべてのスレッドにまたがって一貫性があ
るデータ・スナップショットに対してそれぞれのタスクを実行していることを保
証するのに使用される。これを、下でさらに詳細に説明する(節見出しMast
erControlを参照されたい)。
【0082】 システム・スタートアップ Java(R) 3Dのブートストラップには、処理のためにシステムを準備
するための、いくつかのシステム関連オペレーションの実行が含まれる。一実施
形態では、この処理が、Java(R) 3Dシステムの呼出しごとに1回だけ
行われる。ブートストラップ・コードは、MasterControlに含まれ
る。MasterControlは、VirtualUniverseクラスの
staticメンバであり、これは、Java(R) 3Dシステムに1つのM
asterControlだけが存在することを意味する。したがって、Mas
terControlのコンストラクタが、ブートストラップ・コードの実行に
使用される。たとえば、使用されるネイティブ・グラフィックス・ライブラリの
タイプを照会し、ロードすることができる。
【0083】 使用されるネイティブ・レンダリングAPIを含むクラスを、NativeA
PIInfoと呼ぶ。このクラスの異なる実装を、異なるターゲット・プラット
ホームごとにコンパイルすることができる。このクラスは、1つのメソッド、g
etRenderingAPI()を有し、その可能な値は、RENDER_O
PENGL_SOLARIS、RENDER_OPENGL_WIN32、また
はRENDER_DIRECT3Dである。しかし、どのレンダリング・ライブ
ラリを使用するかの選択は、システムにコンパイルすることができ、また、ブー
トストラップ処理を拡張することによってランタイムに選択可能にすることがで
きることに留意されたい。
【0084】 任意の順序でJava(R) 3Dオブジェクトを作成するようにアプリケー
ションを構成することができる。しかし、Java(R) 3Dにそれ自体をブ
ートストラップさせる条件も存在する可能性がある。第1に、上で示したように
、VirtualUniverseが作成される場合に、ブートストラップが発
生する。Canvas3Dなどの、VirtualUniverseが作成され
る前にネイティブ・ライブラリ・アクセスが必要になる他のケースがある。これ
らのケースでは、staticのイニシャライザ・メソッドをクラスに含めるこ
とができる。そのメソッドは、staticのMasterControlを作
成させるstaticメソッドVirtualUniverse.loadLi
braries()を呼び出すように構成することができ、ブートストラップが
発生する。
【0085】 Universe構造体 VirtualUniverseが作成される時に、複数の構造体が作成され
る。これには、GeometryStructure、BehaviorStr
ucture、SoundStructure、およびRenderingEn
vironmentStructureが含まれる。これらは、View/Re
ndering独立なので、ここで作成される。これらは、ビューがまだアクテ
ィブでない可能性がある場合であっても、Nodeがシーン・グラフに追加され
る時に使用可能であることが必要である。RenderingAttribut
esStructureは、Java(R) 3Dのすべてについて1つだけが
あるので、MasterControlが作成される時に作成される。
【0086】 Canvas3D作成 Canvas3Dを作成するためには、アプリケーションが、まず、必要を満
たすGraphicsConfigurationを得なければならない。これ
には、GraphicsConfigTemplate3Dオブジェクトに書き
込み、そのオブジェクトを、レンダリングされるデバイスのgetBestCo
nfiguration()メソッドに渡すことが含まれる。現在の実装では、
デフォルト・スクリーン・デバイスだけがサポートされる。GraphicsD
evice.getBestConfiguration()は、単純にGra
phicsConfigTemplate3D.getBestConfigu
ration()メソッドを呼び出して、引数としてすべての使用可能な構成を
渡す。そのテンプレートに最良のGraphicsConfiguration
を選択し、返すのは、GraphicsConfigTemplate3Dの責
任である。GraphicsConfigTemplate3Dは、Java(
R) 3Dクラスであり、したがって、選択処理に対する制御を有する。Gra
phicsConfigTemplate3Dには、コンパイル時にJava(
R) 3Dに組み込まれ、プラットホーム/レンダリングAPI固有の選択セマ
ンティクスを実装する、NativeConfigTemplate3Dという
クラスがある。Solarisの場合、OpenGLが唯一のレンダリングAP
Iであるが、渡されるGraphicsConfigurationsのリスト
が無視され、選択は、glXChooseVisual()を行うことによって
ネイティブ・コードで実行される。ビジュアルが選択された後に、そのIDが返
され、渡されたGraphicsConfigurationsと突き合わされ
る。一致するGraphicsConfigurationが返される。win
32では、OpenGLとDirect3Dの両方について、選択処理では何も
行われない。win32ウィンドウのPixelFormatは、いつでも変更
することができるので、Java(R) 3Dは、システムが最初のレンダリン
グGraphicsContextを必要とする時に、単純にウィンドウのPi
xelFormatを変更する。これについては、Rendererを説明する
時にさらに説明する。
【0087】 この最後に、Canvas3Dに、現在のレンダリングAPIを用いてレンダ
リングすることができる。しかし、システムは、Canvas3Dがレンダリン
グされる準備ができるか、アクティブ化されるまで、スタート・アップしない。
この処理を、下で説明する。
【0088】 Viewアクティブ化 ランタイム・システムは、2ステップで起動される。第1ステップは、Can
vas3DオブジェクトがAWT(抽象ウィンドウ・ツールキット)コンテナに
追加されることによって(すなわち、Canvas3D.addNotify(
)が呼び出される時に)トリガされる。それに応答して、キャンバスが、Vie
w.addNotify()を呼び出すことによって、それが追加されたことを
そのViewに通知する。この時点で、Viewが、それ自体および呼出し元の
キャンバスをMasterControlに登録する。次に、ViewのRen
derBinおよびSoundSchedulerが、作成され、初期化される
。これがMasterControlに登録される最初のビューである場合には
、BehaviorSchedulerも作成され、初期化される。これがその
スクリーンについて最初に登録されるキャンバスである場合には、そのスクリー
ンのRendererも、作成され、初期化される。
【0089】 この時点で、すべてのスレッドおよび構造体が、作成され、初期化されている
。しかし、Viewは、まだアクティブではない(すなわち、その構造体が、メ
ッセージを受け取らず、そのスレッドが、MasterControlによって
スケジューリングされない)。これは、ビューに関連するCanvas3Dがア
クティブ化されるまで行われない。一実施形態では、Canvas3Dをアクテ
ィブ化できる前に、3つの条件を満足しなければならない。第1に、ペイント・
イベントが、Canvas3Dで受け取られていなければならない。これは、A
WTがCanvas3D用の基礎となるウィンドウ・システム・リソースを割り
振る方法に基づく要件である(これは、下のRendererの節で詳細に説明
する)。第2に、Canvas3Dが実行状態になっていなければならない。こ
れは、Canvas3D.start/stopRenderer()メソッド
によって直接に制御される。最後の第3の条件は、Canvas3Dがスクリー
ン上で可視でなければならないことである。これは、Canvas3D上のさま
ざまなイベントを追跡することによって監視される。Canvas3D上のイベ
ントを追跡するために、内部クラス(EventCatcher)で、Canv
as3DまたはBehaviorSchedulerが追跡するイベントの適当
なリスナ・インターフェースのすべてを実装する。EventCatcherは
、イベントを受け取り、それをBehaviorSchedulerに渡す。E
ventCatcherは、その状態が変化したことをCanvas3Dにも通
知する。3つの条件のいずれかの状態が変化した場合に、Canvas3D.e
valuateActive()を呼び出して、Canvas3Dの状態を再評
価する。Canvas3Dのアクティブ状態が変化した場合には、View.e
valuateActive()を介して、それが関連するViewに、その状
態を評価するように通知する。一実施形態では、アクティブ化される前に満たさ
れる2つの条件がある。第1に、Viewが、ライブのViewPlatfor
mに接続されていなければならない。第2に、ViewのCanvas3Dの1
つがアクティブでなければならない。Viewの状態が変化する場合には、Vi
ewが、それ自体をアクティブ化または非アクティブ化する。
【0090】 Viewアクティブ化には、複数のステップが含まれる。第1に、新しいVi
ewがアクティブ化されたというメッセージが、システム内のスレッドにブロー
ドキャストされる。これは、新しいViewが、関係を持つすべての構造体に登
録されることを保証するために行われる。また、このメッセージによって、最初
の可視性オペレーションおよびレンダ・オペレーションがこのViewに対して
行われる。次に、Viewが、ID番号を持っていない場合には、それを取得す
る。このIDの使用は、下で説明する。ID番号を受け取った後に、Viewが
、そのVirtualUniverseがプライマリ・ビューを有するかどうか
を調べる。そうでない場合には、MasterControlに新しいプライマ
リ・ビューを選択させる。その後、Viewが、そのVirtualUnive
rseに、このViewに関連するすべてのCanvas3D上の現在イネーブ
ルされているイベントのすべて(BehaviorSchedulerによって
選択される)をイネーブルさせる。
【0091】 注−アクティブ化追跡が常に行われることを保証するために、Compone
ntEventsが、Canvas3Dについて必ずイネーブルされる。最後に
、Viewが、MasterControlにそれをアクティブ化させる。この
時点で、MasterControlは、ViewのRenderBinおよび
SoundSchedulerをアクティブとしてマークする。これが唯一のア
クティブViewである場合には、MasterControlが、Behav
iorSchedulerもアクティブ化する。この時点で、システムが、通常
の動作状態になる。
【0092】 システム・フロー この実施形態は、メッセージ・パッシングに基づくので、発生するセット・シ
ステム・フローはない。しかし、コンポーネントがどのようにインターオぺレー
トするかを説明するために、例のアプリケーション・シナリオを例として使用す
ることができる。この例では、アプリケーションが、回転する単独の立方体であ
るHelloUniverseである。Java(R)3Dの観点から、このア
プリケーションは、1つのShape3Dノードとその上で変化するTrans
formGroupからなる。TransformGroupは、フレームごと
に1回トリガされるBehaviorから変更されている。これが内部的にどの
ように見えるかを知るために、まずMasterControlを調べる。
【0093】 図8に移ると、例のHelloUniverseアプリケーションについてM
asterControlによって管理されるスレッドの一実施形態が示されて
いる。図に示されたスレッドの数は、このような単純なアプリケーションに対し
て多く見えるかもしれないが、箱の中に「X」があるスレッドだけが、反復のそ
れぞれで実行される。また、構造体および更新スレッドのそれぞれが、シーン・
グラフに含まれるものに基づいて条件的に作成されることに留意されたい。まず
、反復を開始するために、MasterControlが、タイム・スナップシ
ョットをとる。言い換えると、この時点で、MasterControlが、ど
のスレッドをこの特定の反復で実行する必要があるかを決定する。この決定は、
どのメッセージが各スレッドに送られたかに基づく。図に示された例では、2つ
の更新スレッドが実行される。TransformGroupが、フレームごと
に変更されるので、GeometryStructureおよびRenderB
inが、Shape3Dノードの位置を追跡する必要がある。したがって、これ
らの更新スレッドが、反復ごとにスケジューリングされる。この場合、両方の更
新スレッドによって、Shape3DノードのTransform3D値が更新
される。GeometryStructureおよびRenderBinは、2
つの異なる参照時間に作業するので、これらがキャッシングする値は異なる。こ
れは、CachedTransformと呼ばれる新しいオブジェクトを用いて
達成される。このオブジェクトは、下でTransformGroupノードに
関して詳細に説明する。MasterControlは、この反復について進行
する前に、すべての更新スレッドが終了するのを待つ。これによって、残りのス
レッドが、状態更新を追跡する必要なしに有効なデータを操作することが保証さ
れる。
【0094】 この図には、実際に2つのスレッド・リストが示されている。最初のリストに
は、更新スレッドおよび「作業」スレッドが含まれ、第2のリストには、レンダ
・スレッドが含まれる。MasterControlは、2つのリストを保ち、
その結果、レンダ・スレッドにより高い優先順位を与えて、これらを並列に処理
できるようになる。レンダ・スレッドは、必ずRenderBin構造体から作
業するので、RenderBinがメッセージを処理する間に行えることに対す
るいくつかの制約がある可能性がある。これは、下のRenderBinの節で
詳細に説明する。HelloUniverseの例では、第1のRenderス
レッドが最初にスケジューリングされる。このスレッドが、RenderBin
をレンダリングする。それと同時に、各更新スレッドが実行を許可される。この
例では、これに、TransformStructureおよびGeometr
yStructureが含まれる。
【0095】 次に、BehaviorSchedulerが実行を許可され、最後に、Re
nderBin更新が実行を許可される。この時間の間に、Renderスレッ
ドが終了した場合に、レンダSwapスレッドが実行を許可される。これによっ
て、HelloUniverseの反復が完了する。
【0096】 次に、この例で各スレッドが行うことについて簡単に説明する。Transf
ormGroupがフレームごとに変化するので、TransformStru
ctureが、システム内のジオメトリ・オブジェクトの仮想世界座標でのlo
calToVworldの値およびバウンドを更新する必要がある。Trans
formStructure更新が完了した後になるまで、Transform
Structureの後のどの更新スレッドもスケジューリングすることができ
ない。これは、ほとんどの構造体が、その更新された値に頼るからである。
【0097】 次に更新される構造体は、GeometryStructureである。この
構造体は、シーン内のすべてのジオメトリ・データの空間データ構造を維持する
。あるオブジェクトが移動する場合に、そのオブジェクトの新しい位置を反映す
るようにこのデータ構造が更新される。
【0098】 BehaviorSchedulerおよびRenderBinの更新は、同
時に実行することができる。BehaviorSchedulerは、最後のサ
イクル以降にトリガされた挙動を実行する。この場合では、立方体を回転させて
いるのはRotationInterpolatorである。
【0099】 RenderBinについては、立方体が移動したので、RenderBin
が、同一のライトおよびフォグがこのジオメトリに適用されるかどうかを検査す
る。同一のライトおよびフォグが適用される場合には、この場合にはこれで終了
である。RenderBin更新スレッドは、実際にRenderBinを変更
しない可能性がある。これは、RenderBin更新スレッドと同時に1つま
たは複数のRendererがRenderBinを実行しているからである。
変更が必要な場合には、それを単純に記録し、ObjectUpdateの時(
下で詳細に説明する)まで延期する。
【0100】 これと並列に、Rendererスレッドも動作中である可能性がある。最初
のRendererスレッド呼出しは、すべての可視オブジェクトをCanva
s3Dにレンダリングする責任を負う。それが完了した後に、第2のRende
rerスレッド呼出しが、バッファ・スワップを実行する。バッファ・スワップ
が完了した後に、フレームが経過したことをBehaviorSchedule
rに通知するようにMasterControlを構成することができる。その
通知によって、もう一度挙動にトリガがかけられ、処理が継続する。
【0101】 システム・エグジット Java(R)メモリ・モデルの潜在的な長所の1つが、システム・エグジッ
トおよびクリーンアップが比較的単純であることである。アプリケーションが、
そのJava(R) 3Dオブジェクトへの参照のすべてを除去し、すべてのJ
ava(R) 3Dスレッドがエグジットする場合に、Java(R)ガーベッ
ジ・コレクタが、Java(R) 3Dが割り当てたJava(R)リソースのすべてを再利用する。残念ながら
、いくつかの実施形態では、アプリケーションがJava(R) 3Dについて
終了した時をJava(R) 3Dに通知するためのサポートがない。したがっ
て、代替の機構を使用して、Java(R) 3Dスレッドが不要になった時に
、それがエグジットすることを保証することができる。
【0102】 一実施形態では、この機構を、既存のaddNotify/removeNo
tify方式で実施することができる。たとえば、Canvas3Dがそのコン
テナから除去される時に、Canvas3DがそのViewsに通知するように
構成することができる。Viewが除去される時に、Viewが、Master
Control.unregisterView()を介してMasterCo
ntrolに通知する。MasterControlは、そのViewに関連す
るすべてのスレッドを停止する。それが最後の登録されたViewである場合に
は、MasterControlは、VirtualUniverseベースの
スレッドを停止し、最後に、それ自体を停止する。これによって、アクティブな
Java(R) 3Dスレッドのすべてが除去されるので、ユーザがもはやJa
va(R) 3D参照を有しない時に、それらがJVM(Java(R)仮想マ
シン)によって完全に再利用される。これによって、Java(R) 3Dラン
タイム・システムの概要を完了する。下では、本明細書に記載のシステムおよび
方法を実施するのに使用することができる個々のコンポーネント、そのアーキテ
クチャ、およびそれらが使用するアルゴリズムを詳細に説明する。
【0103】 MasterControl MasterControlは、Java(R) 3Dのグローバル制御オブ
ジェクトである。これは、VirtualUniverseクラスのstati
cオブジェクトであり、したがって、システム内に1つだけ存在する。その主な
機能は、他のすべてのスレッドの、ユーザ・ベースのスケジューリングを実行す
ることである。MasterControlは、少数のAPI機能も実装するこ
とができる。
【0104】 スレッドの作成および消滅 一実施形態では、システム内のすべてのスケジューリング可能なスレッドが、
J3dThreadのサブクラスである。このクラスでは、スレッドの初期化コ
ード、通信コード、および消滅コードのすべてが実装される。これによって、M
asterControlに、スレッドの作成、スケジューリング、および破棄
のための共通インターフェースが与えられる。
【0105】 システム内には、2タイプのスレッド関連付けすなわち、VirtualUn
iverseに関連するスレッドとViewに関連するスレッドがある。それぞ
れを順番に説明する。VirtualUniverseスレッドに関して、Vi
rtualUniverseが作成される時に、VirtualUnivers
e用の構造体が作成される。VirtualUniverseに関連するスレッ
ドは、そのVirtualUniverseに登録されたビューがある時に限っ
て初期化される必要がある。したがって、それが、これらのスレッドの初期化に
トリガをかけるイベントになる。VirtualUniverseの最初のビュ
ーが登録される時に、MasterControlが、VirtualUniv
erseのスレッドを初期化する。作成され初期化される構造体は、Geome
tryStructure、BehaviorStructure、Sound
Structure、およびRenderingEnvironmentStr
uctureである。やはり、RenderingAttributesStr
uctureは、1つのグローバル構造体としてMasterControlに
よって作成される。これらの構造体のそれぞれが、MasterControl
に登録される更新スレッドを有する。これらの構造体と共に、MasterCo
ntrolは、VirtualUniverseのBehaviorSched
ulerも作成し、初期化する。最後に、MasterControlThre
adがない場合には、これによって、MasterControlThread
が作成され、初期化される。
【0106】 Viewベースのスレッドの場合、トリガをかけるイベントは、Viewの登
録である。Viewが登録される時に、そのViewのスレッドが、作成され、
初期化される。このスレッドには、SoundSchedulerと、Rend
erBinの更新スレッドが含まれる。このViewのPhysicalEnv
ironmentのInputDeviceSchedulerも、作成され、
初期化される(必要な場合に)。また、Viewの各Canvas3Dに関連す
る一意のScreen3Dのそれぞれが、そのRendererスレッドを初期
化される。スレッドは、作成され初期化されるが、まだアクティブではない。こ
れは、Viewがアクティブになった後に発生する。あるViewがアクティブ
になる時に、それに関連するすべてのスレッドが、アクティブ化される。Mas
terControlがスケジューリングについてそれらのスレッドを検討する
のは、この時点である。Viewが非アクティブ化される時に、スレッドが、単
に非アクティブとしてマークされる。スレッドは、この時点では破棄されない。
これによって、Viewのスレッドを、破棄せずに停止することが可能になる。
【0107】 Viewベースのスレッドのスレッド消滅は、Viewの登録解除によってト
リガされる。MasterControlは、View登録と完全に非同期なの
で、なんらかの記録が必要である。Viewが登録解除される時に、Maste
rControlは、スレッドを破棄する前に、安全な時点まで待つ。スレッド
を即座に破棄するのではなく、MasterControlは、スレッドをゾン
ビ・スレッド・リストに置くだけである。その後、MasterControl
Threadが、スレッド・リストの変化を調べる時に、J3dThread.
finish()を呼び出すことによってゾンビ・スレッドを破棄する。Vie
wは、MasterControlThreadがゾンビ・リストをクリーンす
る前にそれ自体を登録解除し、登録する可能性があるので、すべてのスレッド作
成コードに、まず、作成されるスレッドがゾンビ・リストにあるかどうかを検査
させることが望ましい。VirtualUniverseスレッドの消滅は、V
irtualUniverseの最後のViewの除去によってトリガされる。
これも、非同期イベントであり、したがって、スレッドは、やはりゾンビ・リス
トに置かれて、安全な時にMasterControlによって取り除かれる。
【0108】 MasterControlThread MasterControlオブジェクトは、2つの部分に分割されて、それ
らがもはや不要になった時にJava(R) 3Dが関連するリソースを解放で
きるようになっている。すべてのデータがMasterControlオブジェ
クト自体の中に保持されるが、制御するスレッドは、MasterContro
lThread(MCT)にカプセル化されている。これによって、システムが
、システム状態を維持しながら、制御するスレッドをすばやく作成でき、破棄で
きるようになる。MasterControlThreadのフローを使用して
、MasterControlの大部分を説明することができる。第1に、MC
Tは、実行すべきタスク(すなわち作業)があるかどうかを調べる。Boole
an変数workToDoを使用して、保留中の作業があることをMCTに知ら
せる。実行すべきタスクがない場合には、MasterControlThre
adは、タスクが到着するまで待ち状態に入る。作業を引き起こすアクションに
よって、MCTが通知を受ける。これによって、Java(R) 3Dが、実行
すべき保留中のタスクがない時にCPUリソースを消費しないようにすることが
できる。
【0109】 workThreadsリスト 次に、MCTは、新しいスレッドがシステムに追加されたかどうかを調べる。
これは、updateThreadLists()で行われる。スレッドが、シ
ステムに追加されたか除去された時に、MCTが、スケジューリング可能なスレ
ッドのリストを更新する。スレッド変更が必要な時には、Boolean変数t
hreadListsChangedがセットされる。そうである場合には、u
pdateThreadLists()が、スレッドのworkThreads
配列を再計算し、ゾンビ・スレッドをクリーン・アップする。次に、updat
eWorkThreads()が、スレッド・スケジューリングの決定を行う。
この処理の一部として、updateWorkThreads()は、まず、w
orkThreads配列に何個の項目が必要であるかを計算する。一実施形態
では、workThreads配列が、2次元である。上で注記したように、更
新/作業スレッドの配列と、レンダ・スレッドの配列がある。それぞれの項目の
数は、下記のように計算される。 更新/作業リストの場合、スレッド項目の数は、 ・更新スレッドの数と、 ・VirtualUniverse(それぞれについて1つのBehavio
rScheduler)の数と、 ・Viewごとに、 i.1つのSoundSchedulerと、 ii.一意のPhysicalEnvironment(InputDevi
ceScheduler)の数と の合計である。これによって、更新/作業配列の全長が与えられる。 レンダ・リストの場合、スレッド項目の数は、 ・1つのレンダ要求スレッドと(OffscreenモードおよびImmed
iateモードについて) ・Viewごとに、 i.Canvas3Dの数(Canvas3Dごとに1Renderer)と
、 ii.Screen3Dの数(Screen3Dごとに1Swap)と の合計である。
【0110】 workThreads配列は、J3dThreadDataオブジェクトの
配列である。J3dThreadDataオブジェクトによって、単一の呼出し
についてスレッドを実行するのに必要なすべての情報がカプセル化される。J3
dThreadDataが保存するデータには、下記が含まれる。 ・スレッド参照であるJ3dThread ・4つの時間値のセット(Timeの節で説明した) ・このスレッド呼出しのオプションのbitmask ・スレッドに渡される引数 ・このスレッドがこのパスで実行されることを必要とするか否か ・Rendererスレッドによって使用される引数
【0111】 J3dThreadDataオブジェクトは、スレッドが、workThre
adsのリスト内に複数存在できるようにするために使用される。これの一例が
、Rendererスレッドであり、これは、単一のMCTパスについて複数回
実行される可能性がある。各スレッドは、そのJ3dThreadDataオブ
ジェクトのリストを管理する責任を負う。いくつかの実施形態では、Rende
rerスレッドだけが、複数のJ3dThreadDataオブジェクトを有す
る。Rendererスレッドは、RenderingについてView/Ca
nvas3D対ごとに1つのJ3dThreadDataオブジェクトと、Sw
appingについてView/Screen3D対ごとに1つのJ3dThr
eadDataオブジェクトを使用する。
【0112】 workThreads配列が割り当てられた後に、その配列に書き込むよう
にupdateWorkThreads()を構成することができる。J3dT
hreadDataオブジェクトは、配列に追加される時に、そのさまざまなフ
ィールドに書き込まれる。スレッド呼出しを管理する方法を知るためにMCTが
使用する、いくつかのスレッド実行オプションがある。オプションの一部は、互
いに排他的であるが、それ以外は組み合わせることができる。 一実施形態では、オプションのリストに下記が含まれる。 ・J3dThreadData.CONT_THREAD:このスレッドの実
行中に他のスレッドを実行することができる。 ・J3dThreadData.WAIT_THIS_THREAD:他のス
レッドの実行を許可する前に、このスレッドが終了するまで待機する。 ・J3dThreadData.WAIT_ALL_THREADS:他のス
レッドの実行を許可する前に、現在実行中のすべてのスレッドが完了するのを待
つ。 次の2つのフラグの一方を、上のフラグと組み合わせることができる。 ・J3dThreadData.START_TIMER:所与のViewに
関連するフレームのタイミングを開始する。 ・J3dThreadData.STOP_TIMER:所与のViewに関
連するフレームのタイミングを停止する。そのデータをViewに保管する。
【0113】 状態配列に書き込む際に、配列の最初のスレッドは、RenderingAt
tributeStructure更新スレッドである。これが最初であるのは
、システム全体について1つだけ存在するからである。次に、各univers
eのTransformStructure更新スレッドが追加される。これら
は、他のスレッドが更新された値を使用できるようにするために、早期に実行さ
れる必要がある。これによって、更新リストのセクション1が完了する。このセ
クションのすべてのスレッドを、並列に実行することができるが、更新リストは
、それらが終了するまで継続されない。スレッドの次のセクションは、更新スレ
ッドに基づくuniverseの完了である。したがって、universeご
とに、更新スレッドが、GeometryStructure、Behavio
rStructure、RenderingEnvironmentStruc
ture、およびSoundStructureについて追加される。このセク
ションのすべてのスレッドを、並列に実行することができるが、これらが完了す
るまでは、それ以上の更新/作業スレッドは実行されない。これは、これらが、
これらの構造体に対する更新に頼るからである。更新/作業スレッドの最後のセ
ットは、各universeのBehaviorScheduler、各Phy
sicalEnvironmentのInputDeviceSchedule
r、および、Viewごとの、RenderBin更新スレッドおよびSoun
dSchedulerである。これらのスレッドも、並列に実行することができ
る。
【0114】 workThreads配列の第2次元は、レンダ・スレッドに使用される。
MCTは、別々のScreen3Dに対するものであるが同一のViewを共有
するCanvas3Dへの並列レンダリングを可能にする。これを容易にするた
めに、Canvas3DがViewに追加され、除去される時に、いくつかのデ
ータ構造をViewで更新することができる。これらは、2つのArrayLi
stからなる。第1のArrayListであるscreenListは、現在
アクティブなすべてのScreen3Dのリストである。第2のArrayLi
stであるcanvasListは、ArrayListのリストである。この
リストの各ArrayListは、そのScreen3D上のすべてのCanv
as3Dのリストである。
【0115】 図9に移ると、この構造が、3つの一般的なケースについて示されている。第
1のケースは、最も一般的な、1つのScreen3D(302)上の1つのC
anvas3D(308)を有するケースである。第2のケースは、1つのSc
reen3D(302)上の2つのCanvas3D(308および320)を
有する。第3のケースは、2つのScreen3D(302および316)上の
2つのCanvas3D(308および320)である。第3のケースは、シス
テムが2つのキャンバスに並列にレンダリングできるケースである。canva
sList(310)が、Canvas3Dの2次元配列(310Aから310
B)としてキャッシングされ、したがって、これをすばやく構文解析することが
できる。
【0116】 updateWorkThreads()に戻ると、スケジューリングされる
必要があるRendererを、この2次元配列から導出することができる。c
anvasListの各項目は、そのScreen3DのCanvas3Dの配
列である。canvasList配列の長さは、並列に実行できるRender
erの総数である。canvasList内の最長の配列が、スケジューリング
される必要がある並列Renderグループの総数である。各Screen3D
が、その上の異なる数のCanvas3Dを有する可能性があるので、各並列レ
ンダ・グループが、同一のサイズであるとは限らない。並列レンダ・グループ内
の、最後の1つを除くすべてのRenderスレッドが、スレッド・オプション
にJ3dThreadData.CONT_THREADをセットされる。レン
ダ・グループ内の最後の1つは、そのフラグにJ3dThreadData.W
AIT_ALL_THREADSをセットされる。というのは、これが、そのグ
ループ内のすべてのスレッドが終了するのを待つからである。これらのRend
erer呼出しのすべてが、2つのスレッド引数すなわち、実行するオペレーシ
ョン(Renderer.RENDER)と、レンダリングする対象のCanv
as3Dを有する。
【0117】 workThreadsレンダ配列に次に追加されるスレッドのセットは、バ
ッファ・スワップ・コマンドを発行するRendererスレッドである。Vi
ewのScreen3Dごとに1つのスレッド呼出しが必要である。これは、c
anvasListをもう一度反復することによって、直接に得られる。これら
のRendererスレッド呼出しの、最後の1つを除くすべてが、そのスレッ
ド・オプションにJ3dThreadData.CONT_THREADをセッ
トされる。というのは、これらのすべてを並列に実行できるからである。最後の
Rendererは、そのスレッド・オプション・フラグに、J3dThrea
dData.WAIT_ALL_THREADSおよびJ3dThreadDa
ta.STOP_TIMERをセットされる。というのは、このスレッドが、す
べてのスレッドが終了するのを待ち、Viewタイマを停止するからである。各
Rendererが受け取る引数は、実行するオペレーション(Rendere
r.SWAP)、View、およびスワップされるCanvas3Dのリストで
ある。レンダ配列の最後の項目は、レンダ要求スレッドである。これは、オフス
クリーン・レンダリング要求およびイミディエート・モード要求を処理するのに
使用される。この時点で、workThreads配列が更新された。upda
teWorkThreads()が完了した後に、updateThreadL
ists()が、ゾンビ・スレッドのリストを処理し、J3dThread.f
inish()を呼び出すことによってそれらをkillする。ここで、Mas
terControlが、スケジューリングされるスレッドの完全に更新された
セットを有する。
【0118】 Time 上で述べたように、一実施形態では、各スレッドに関連する4つの時間がある
。まず、lastUpdateTimeがある。これは、メッセージがそのスレ
ッドに送られた最後の時刻である。メッセージがスレッドに送られるたびに、こ
の値が更新される。次はupdateTimeである。これは、lastUpd
ateTimeのスナップショット値である。スナップショット時間は、各MC
T反復の最初にとられる。最後に、lastUpdateReferenceT
imeとupdateReferenceTimeがある。これらの時間によっ
て、スレッドの所与の呼出しで処理されつつある時間値のスナップショット範囲
が定義される。これらも、各MCT反復の最初にとられる。
【0119】 MCTのフローに戻って、workThreadsリストを検査した後に、M
CTは、スレッドのタイム・スナップショットをとる。これは、updateT
imeValues()で行われる。反復ごとに保存される、2つの時間値すな
わち、currentTimeとlastTimeがある。変数current
Timeは、updateTimeValues()が呼び出されるたびに、g
etTime()を呼び出すことによって取り出される。変数lastTime
は、前のcurrentTimeである。スナップショットごとに、curre
ntTimeとlastTimeの間の時間値によって、現在の時間範囲が定義
される。2つの時間値が更新された後に、各workThreadが検査される
。各スレッドのlastUpdateReferenceTimeに、last
Timeがセットされ、各スレッドのupdateReferenceTime
に、currentTimeがセットされ、各スレッドのupdateTime
に、スレッドのlastUpdateTimeがセットされる。スレッドのup
dateTimeが、そのlastUpdateReferenceTimeよ
り大きい場合には、そのスレッドが、実行される必要があるスレッドとしてフラ
グを立てられる。
【0120】 スレッドの実行 タイム・スナップショットが行われた後に、MCTは、各スレッドの実行に進
む。MCTは、runMonitor()を使用して、各スレッドの実行フラグ
に従い、レンダ・スレッドに最高の優先順位を与えて、各スレッドを実行させる
。J3dThreadは、初期化される時に、即座にその同期化されるrunM
onitor()メソッドに進み、wait()状態に進み、MCTからの通知
を待つ。スレッドを実行する時刻である時に、MCTが、それ自体の同期化され
るrunMonitor()メソッドに進み、スレッドのrunMonitor
()を呼び出して、それに通知(notify())し、リターンする。
【0121】 この時点で、MCTは、複数の状態に入ることができる。スレッド実行オプシ
ョンから、このスレッドを待つことが示される場合には、スレッド参照を保管し
、MCTは、そのスレッドのnotify()によってそのスレッドが終了した
ことが示されるまで、wait()状態になる。スレッド実行オプションから、
MCTがすべてのスレッドの完了を待たなければならないことが示される場合に
は、MCTは、すべての実行中のスレッドが終了するまでwait()状態に繰
り返し入る。これは、現在実行中のスレッドの数を表すthreadPendi
ngカウンタを有することによって追跡される。これらのオプションのどちらも
がセットされていない場合には、CPUリソース不足であるかどうかを検査する
ようにMCTを構成することができる。MCTは、cpuLimitに対してt
hreadPendingを検査することによってこれを行う。これらが等しい
場合には、MCTは、スレッドが完了するまでwait()状態に入る。これら
の条件のどれもが真でない場合には、MCTは、次のスレッドに進む。すべての
スレッドが処理された後に、MCTは、updateObjectリストを処理
し、もう1つの反復のためにリターンする。
【0122】 更新オブジェクト 構造体が、それらの更新を処理する時に、Rendererが使用している構
造体の一部を修正することが必要になる場合がある。構造体は、メッセージを処
理する時に更新を行うことができない。というのは、その時にRenderer
が実行中である可能性が高いからである。いくつかの実施形態では、インターフ
ェース呼出しObjectUpdateを定義して、この問題に対処することが
できる。インターフェース呼出しは、単一のupdateObject()メソ
ッドからなるインターフェースとすることができる。オブジェクトが、それ自体
に対する、Rendererが依存する修正を行う必要があることを見つけた場
合に、そのオブジェクトが、このインターフェースを実装する。修正が必要にな
った時に、オブジェクトは、それ自体をMasterControlのオブジェ
クト更新リストに追加する。MasterControlは、レンダ依存構造体
への修正を行うことが安全であると判断した時に、その更新オブジェクト・リス
トの各オブジェクトのupdateObject()メソッドを呼び出す。これ
が、RenderingAttributesStructure、Trans
formStructure、RenderBin、および他の構造体が、その
レンダ依存修正を処理する方法である。
【0123】 フレーム・タイマ MasterControlによって実装される特徴の1つが、Viewフレ
ーム・タイミングAPIである。MasterControlは、MCTによっ
て処理されるスレッドのスレッド実行オプションにフラグを追加することによっ
て、これを行う。MCTは、各スレッドについて反復する際に、スレッドの実行
フラグを検査する。J3dThreadData.START_TIMERフラ
グがセットされている場合には、Viewをスレッド引数から抽出し、View
のframeNumberを増分し、System.currentTimeM
illis()を呼び出すことによってframeStartTimeを取り出
す。その後、スレッドが実行を許可される。スレッドについてJ3dThrea
dData.STOP_TIMERフラグがセットされている場合には、そのス
レッドが、実行を許可され、Viewが、スレッド引数から抽出され、そのVi
ewのstopTimeが、System.currentTimeMilli
s()を呼び出すことによって記録され、View.setFrameTimi
ngValues()メソッドが呼び出される。この同期化されるメソッドは、
frameNumber値、startTime値、およびstopTime値
を受け取り、currentFrameNumber、currentFram
eStartTime、currentFrameDuration、fram
eNumbers環状バッファ、およびframeStartTimes環状バ
ッファを更新する。アプリケーションが、View APIを用いてこれらの値
のいずれかを取り出す時に、アプリケーションは、同期化されるメソッドを介し
て進んで、これらの値がMT−SAFEな形で保管され、取り出されることを保
証する。
【0124】 メッセージ 上で注記したように、メッセージを使用して、システム全体を通じて情報を通
信することができる。MasterControlは、システム内のメッセージ
を保管し、配布する。メッセージが必要な時には必ず、そのメッセージが、Vi
rtualUniverse.mc.getMessage()を呼び出すこと
によって取り出される。このMasterControlメソッドは、まず、メ
ッセージfreelistがメッセージを有するかどうかを調べる。そうである
場合には、これらのメッセージの1つを再利用する。そうでない場合には、新し
いメッセージを作成し、それを返す。コンポーネントがメッセージを有した後に
、それをシステムに送る前に書き込まれる必要がある複数のフィールドがある。
書き込まれなければならない最初のフィールドは、universeである。次
に、メッセージのタイプが書き込まれる。すべてのメッセージ・タイプが、J3
dMessageクラスで見つかる。その後、スレッドのbitmaskが書き
込まれる。これは、このメッセージを送られる必要があるすべてのスレッド・タ
イプのbitmaskである。可能なすべてのスレッド・タイプを、J3dTh
readクラスで見つけることができる。最後に、メッセージの引数を書き込む
必要がある。引数の最大個数は、現在は5であるが、この数は任意である。すべ
てのフィールドが完了した後に、メッセージが、VirtualUnivers
e.mc.processMessage()を呼びす事によって、システムに
送られる。処理することができるメッセージには、主に2つのタイプがある。構
造体に送られると同時に作業スレッドに通知するメッセージがある。また、実行
が必要なスレッドに通知することだけを意図されたメッセージがある。この後者
のケースが必要なものである場合には、コンポーネントは、単純にVirtua
lUniverse.mc.sendRunMessage()を呼び出して、
引数で指定されたスレッドに通知することができる。
【0125】 メッセージの送出 メッセージは、VirtualUniverse.mc.processMe
ssage()に送られる時に、以下のステップをたどる。まず、getTim
e()を介して新しい時間値を得ることによって、メッセージの時間フィールド
が書き込まれる。次に、メッセージの宛先である各作業スレッドが、そのlas
tUpdateTime値に、メッセージの新しい時間値をセットされる。その
後、このメッセージが予定されたすべての構造体に、J3dStructure
.addMessage()を呼び出すことによってこのメッセージが送られる
。最後に、MasterControlが、行うべき作業があることの通知を受
ける。
【0126】 メッセージの消費 メッセージは、MasterControlによって、そのprocessM
essages()メソッドを介して、構造体に送られる。メッセージを取り出
すのは、構造体の更新メソッドの責任である。スレッドは、MasterCon
trolによって実行を通知される時に、2つの時間値すなわち、lastUp
dateTimeおよびreferenceTimeを受け取る。時間値las
tUpdateTimeは、メッセージがこの構造体に送られた最後の時間値で
ある。スレッドは、そのスレッドが作業する参照時間であるreference
Timeも得る。構造体にとって、これは、更新スレッドが、lastUpda
teTime以下であるがreferenceTimeを超えないすべてのメッ
セージを消費する必要があることを意味する。
【0127】 構造体のprocessMessages()メソッドが呼び出される時に、
その構造体は、時間範囲を用いてgetMessages()を呼び出す。この
メソッドは、その時間範囲に含まれるすべてのメッセージを返す。単一のメッセ
ージを多数の構造体に送ることができ、したがって、各メッセージが、参照カウ
ントを有する。メッセージが構造体メッセージ・キューに追加されるたびに、そ
の参照カウントが増分される。各構造体のprocessMessages()
メソッドが最後に実行することが、J3dMessage.decRefcou
nt()の呼出しである。参照カウントが0になる時に、そのフィールドのすべ
てがnullにされ、MasterControlメッセージfreelist
に置かれる。
【0128】 プライマリ・ビュー MasterControlは、各VirtualUniverseのプライ
マリ・ビューを割り当てる責任も負う。MasterControlにこれを行
うことを要求できるケースが2つある。Viewがアクティブになる時に、その
Viewが、VirtualUniverseがプライマリViewを有するか
どうかを調べる。そうでない場合には、そのViewは、VirtualUni
verse.mc.assignNewPrimaryView()を呼び出す
。また、Viewが非アクティブ化される時に、そのViewがそのVirtu
alUniverseのプライマリViewである場合に、そのViewが、V
irtualUniverse.mc.assignNewPrimaryVi
ew()を呼び出す。渡されたVirtualUniverseがプライマリ・
ビューを有する場合に、それは、もはやアクティブでないVirtualUni
verseであり、したがって、ViewのprimaryViewフラグに偽
がセットされる。その後、与えられたVirtualUniverse内のビュ
ーを探して、すべてのアクティブViewについて反復する。最初の1つを見つ
けた時に停止する。見つかった場合には、そのViewのprimaryVie
wフラグに真をセットし、VirtualUniverseのプライマリ・ビュ
ーに、見つかったビューをセットする。見つからない場合には、Virtual
Universeのプライマリ・ビューにnullをセットする。
【0129】 上の実施形態をかなり詳細に説明してきたが、他のバージョンが可能である。
上の開示を完全に理解した後に、多数の変形形態および修正形態が、当業者に明
白になるであろう。請求項は、そのような変形形態および修正形態のすべてを含
むように解釈されることが意図されている。本明細書で使用した見出しは、編成
のみを目的とし、本明細書の説明または請求項を制限することを意図されていな
いことに留意されたい。
【図面の簡単な説明】
【図1】 本明細書に記載のシステムおよび方法を実施するのに使用することができるコ
ンピュータ・システムの一実施形態を示す図である。
【図2】 図1のコンピュータ・システムの簡略化されたブロック図である。
【図3】 シーン・グラフの一実施形態を示す図である。
【図4】 管理およびレンダリングのための並列構造体を有するシーン・グラフの一実施
形態を示す図である。
【図5】 図4の並列構造体を生成する方法の一実施形態の流れ図である。
【図6】 シーン・グラフのもう1つの実施形態の図である。
【図7】 構造体最適化の一実施形態の図である。
【図8】 現在の作業スレッドのリストの一実施形態の図である。
【図9】 スクリーン・リストおよびキャンバス・リストの複数の例の構成を示す図であ
る。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,MZ,SD,SL,SZ,TZ,UG ,ZW),EA(AM,AZ,BY,KG,KZ,MD, RU,TJ,TM),AE,AG,AL,AM,AT, AU,AZ,BA,BB,BG,BR,BY,BZ,C A,CH,CN,CR,CU,CZ,DE,DK,DM ,DZ,EE,ES,FI,GB,GD,GE,GH, GM,HR,HU,ID,IL,IN,IS,JP,K E,KG,KP,KR,KZ,LC,LK,LR,LS ,LT,LU,LV,MA,MD,MG,MK,MN, MW,MX,MZ,NO,NZ,PL,PT,RO,R U,SD,SE,SG,SI,SK,SL,TJ,TM ,TR,TT,TZ,UA,UG,UZ,VN,YU, ZA,ZW (72)発明者 ソウィッヅラル,ヘンリー アメリカ合衆国・94022−1240・カリフォ ルニア州・ロス アルトス・イースト ポ ートラ アベニュ・16 (72)発明者 ラッシュホース,ケヴィン アメリカ合衆国・95124−2207・カリフォ ルニア州・サン ホゼ・フォウン ドライ ブ・3314 (72)発明者 トゥイリーガー,ドゥーグ アメリカ合衆国・95008−5112・カリフォ ルニア州・キャンベル・フォウン ドライ ブ・1147 Fターム(参考) 5B050 BA08 BA09 CA02 EA19 EA24 EA26 FA02 5B080 CA03 GA00

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 複数の3次元オブジェクトを表す情報を含むシーン・グラフ
    を生成することと、 該シーン・グラフに対応する構造体およびスレッドの並列セットを生成するた
    めに該シーン・グラフをトラバースすることであって、各構造体が、該シーン・
    グラフから選択されたデータを管理するオブジェクトを含み、複数のスレッドが
    、該シーン・グラフに対応する1つまたは複数のフレームをレンダリングするた
    めに実行可能である、該シーン・グラフをトラバースすることと を含む方法。
  2. 【請求項2】 該選択されたデータが、外見データ、ジオメトリ・データ、
    および環境データを含む請求項1に記載の方法。
  3. 【請求項3】 複数の3次元オブジェクトを表す、外見データ、ジオメトリ
    ・データ、および環境データを含む情報を備えたシーン・グラフを受け取ること
    と、 該シーン・グラフに対応する複数の構造体およびスレッドを生成するために該
    シーン・グラフをトラバースすることであって、各構造体が、該シーン・グラフ
    から選択されたデータを管理するオブジェクトを含み、複数のスレッドが、該シ
    ーン・グラフに対応する1つまたは複数のフレームをレンダリングするために実
    行可能である、該シーン・グラフをトラバースすることと を実行するように構成された複数の命令を含む、電子媒体上で実施されるコン
    ピュータ・プログラム。
  4. 【請求項4】 該スレッドが、状態変化を指定するメッセージを生成するよ
    うに構成された請求項1から3に記載のコンピュータ・プログラムまたは方法。
  5. 【請求項5】 該メッセージを、複数の構造体にマルチキャストするか、単
    一の構造体にユニキャストすることができる請求項1から4に記載のいずれかの
    コンピュータ・プログラムまたは方法。
  6. 【請求項6】 各構造体が、該構造体を更新するように構成された対応する
    更新スレッドを有する請求項1から5に記載のいずれかのコンピュータ・プログ
    ラムまたは方法。
  7. 【請求項7】 該シーン・グラフが、該3次元オブジェクトの挙動データを
    含む請求項1から6に記載のいずれかのコンピュータ・プログラムまたは方法。
  8. 【請求項8】 該環境データが、照明情報およびフォグ情報を含む請求項1
    から7に記載のいずれかのコンピュータ・プログラムまたは方法。
  9. 【請求項9】 1つの構造体が、レンダリングされる特定のジオメトリ・デ
    ータへの参照をレンダ・ビン内に保管するメッセージを受け取るように構成され
    た該レンダ・ビンである請求項1から8に記載のいずれかのコンピュータ・プロ
    グラムまたは方法。
  10. 【請求項10】 該レンダ・ビンが、それに関連する1つまたは複数のレン
    ダ・スレッドを有し、各レンダ・スレッドが、該ジオメトリ・データをレンダリ
    ングするように構成された請求項1から9に記載のコンピュータ・プログラムま
    たは方法。
  11. 【請求項11】 該プログラムが、各構造体に該シーン・グラフからの該構
    造体のデータを最適化させるように構成された請求項1から10に記載のコンピ
    ュータ・プログラムまたは方法。
  12. 【請求項12】 該プログラムが、ジオメトリ・データをストリップ化する
    ことによって該構造体のデータを最適化するように構成された請求項1から11
    に記載のいずれかのコンピュータ・プログラムまたは方法。
  13. 【請求項13】 該プログラムが、ノードを分割することによって該構造体
    のデータを最適化するように構成された請求項1から12に記載のいずれかのコ
    ンピュータ・プログラムまたは方法。
  14. 【請求項14】 該プログラムが、該シーン・グラフをフラット化すること
    によって該構造体のデータを最適化するように構成された請求項1から13に記
    載のいずれかのコンピュータ・プログラムまたは方法。
  15. 【請求項15】 該構造体の1つが、境界ボックスである請求項1から14
    に記載のいずれかのコンピュータ・プログラムまたは方法。
  16. 【請求項16】 該メッセージが、タイム・スタンプを含む請求項1から1
    5に記載のいずれかのコンピュータ・プログラムまたは方法。
  17. 【請求項17】 該タイム・スタンプが、変更カウントであるいずれかの請
    求項16に記載のコンピュータ・プログラムまたは方法。
  18. 【請求項18】 該メッセージが、イベント・スタンプを含む請求項1から
    17に記載のいずれかのコンピュータ・プログラムまたは方法。
  19. 【請求項19】 該メッセージが、個々のスレッドの並列処理を可能にする
    ために使用される請求項1から18に記載のいずれかのコンピュータ・プログラ
    ムまたは方法。
  20. 【請求項20】 シーン・グラフを受け取ることと、 該シーン・グラフに対応する構造体およびスレッドの並列セットを生成するこ
    とであって、各構造体が、該シーン・グラフから選択されたデータを管理するオ
    ブジェクトを含み、該スレッドの第1サブセットが、該オブジェクトに対する変
    更に基づいて該構造体を更新するために実行可能であり、該スレッドの第2サブ
    セットが、該シーン・グラフを繰り返してトラバースすることなく該構造体に基
    づいて画像をレンダリングするために実行可能である、該シーン・グラフに対応
    する構造体およびスレッドの並列セットを生成することと を含む方法。
JP2001525656A 1999-09-24 2000-09-22 シーン・ベース・プログラムの高速処理の方法およびシステム Pending JP2003510704A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15605499P 1999-09-24 1999-09-24
US60/156,054 1999-09-24
PCT/US2000/026081 WO2001022370A1 (en) 1999-09-24 2000-09-22 Method and apparatus for rapid visualization of three-dimensional scenes

Publications (1)

Publication Number Publication Date
JP2003510704A true JP2003510704A (ja) 2003-03-18

Family

ID=22557897

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001525656A Pending JP2003510704A (ja) 1999-09-24 2000-09-22 シーン・ベース・プログラムの高速処理の方法およびシステム

Country Status (6)

Country Link
EP (1) EP1224622B1 (ja)
JP (1) JP2003510704A (ja)
AT (1) ATE282230T1 (ja)
AU (1) AU7831500A (ja)
DE (1) DE60015784T2 (ja)
WO (1) WO2001022370A1 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007536622A (ja) * 2004-05-03 2007-12-13 マイクロソフト コーポレーション モデル3d構築アプリケーションプログラムインターフェース
JP2007536621A (ja) * 2004-05-03 2007-12-13 マイクロソフト コーポレーション 3次元シーン階層の2次元合成システムへの組込み
KR101399473B1 (ko) * 2012-08-13 2014-05-28 (주)투비소프트 다중 프로세싱을 이용한 렌더링 처리 장치 및 방법
KR101399472B1 (ko) 2012-08-13 2014-06-27 (주)투비소프트 다중 프로세싱을 이용한 렌더링 처리 장치 및 방법
KR101527775B1 (ko) * 2013-07-11 2015-06-16 정은숙 Ifc 파일 고속 처리 시스템 및 방법

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751655B1 (en) * 2000-04-18 2004-06-15 Sun Microsystems, Inc. Method and apparatus for transport of scenegraph information across a network
US7161599B2 (en) * 2001-10-18 2007-01-09 Microsoft Corporation Multiple-level graphics processing system and method
US7535475B2 (en) 2005-11-01 2009-05-19 Adobe Systems Incorporated Virtual view tree
EP1958163A4 (en) * 2005-12-08 2011-08-17 Agency 9 Ab METHOD FOR REPRODUCING A ROOT-FREE SCENE GRAPH WITH A USER-CONTROLLED ORDER OF THE PLAYBACK
US8648867B2 (en) 2006-09-25 2014-02-11 Neurala Llc Graphic processor based accelerator system and method
CN103150753B (zh) * 2013-03-22 2016-01-13 中国人民解放军63680部队 一种大范围高精度匹配数字航道三维可视化方法
WO2014204615A2 (en) 2013-05-22 2014-12-24 Neurala, Inc. Methods and apparatus for iterative nonspecific distributed runtime architecture and its application to cloud intelligence
WO2014190208A2 (en) 2013-05-22 2014-11-27 Neurala, Inc. Methods and apparatus for early sensory integration and robust acquisition of real world knowledge
US9626566B2 (en) 2014-03-19 2017-04-18 Neurala, Inc. Methods and apparatus for autonomous robotic control
KR20170036657A (ko) 2014-03-19 2017-04-03 뉴럴라 인코포레이티드 자율 로봇 제어를 위한 방법들 및 장치
US11379471B1 (en) * 2019-09-26 2022-07-05 Apple Inc. Hierarchical datastore for an agent

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5657479A (en) * 1995-12-04 1997-08-12 Silicon Graphics, Inc. Hierarchical display list processing in graphics data retrieval system
US5896139A (en) * 1996-08-01 1999-04-20 Platinum Technology Ip, Inc. System and method for optimizing a scene graph for optimizing rendering performance

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007536622A (ja) * 2004-05-03 2007-12-13 マイクロソフト コーポレーション モデル3d構築アプリケーションプログラムインターフェース
JP2007536621A (ja) * 2004-05-03 2007-12-13 マイクロソフト コーポレーション 3次元シーン階層の2次元合成システムへの組込み
KR101399473B1 (ko) * 2012-08-13 2014-05-28 (주)투비소프트 다중 프로세싱을 이용한 렌더링 처리 장치 및 방법
KR101399472B1 (ko) 2012-08-13 2014-06-27 (주)투비소프트 다중 프로세싱을 이용한 렌더링 처리 장치 및 방법
US8952970B2 (en) 2012-08-13 2015-02-10 Tobesoft Co., Ltd. Rendering processing apparatus and method using multiprocessing
US8952971B2 (en) 2012-08-13 2015-02-10 Tobesoft Co., Ltd. Rendering processing apparatus and method using multiprocessing
KR101527775B1 (ko) * 2013-07-11 2015-06-16 정은숙 Ifc 파일 고속 처리 시스템 및 방법

Also Published As

Publication number Publication date
AU7831500A (en) 2001-04-24
DE60015784D1 (de) 2004-12-16
EP1224622B1 (en) 2004-11-10
WO2001022370A1 (en) 2001-03-29
WO2001022370A9 (en) 2002-10-03
EP1224622A1 (en) 2002-07-24
DE60015784T2 (de) 2005-10-27
ATE282230T1 (de) 2004-11-15
WO2001022370A8 (en) 2001-07-12

Similar Documents

Publication Publication Date Title
US6765571B2 (en) Using a master controller to manage threads and resources for scene-based rendering
US7061486B2 (en) Using messaging to manage scene-based rendering
US6570564B1 (en) Method and apparatus for rapid processing of scene-based programs
US7184038B2 (en) Using render bin parallelism for rendering scene graph based graphics data
US7170511B2 (en) Creating a parallel structure for scene-based rendering
US9978115B2 (en) Sprite graphics rendering system
EP1224622B1 (en) Method and apparatus for rapid visualization of three-dimensional scenes
US5986667A (en) Mechanism for rendering scenes using an object drawing subsystem
US6734852B2 (en) Using rendering molecules to manage scene-based rendering
US5561752A (en) Multipass graphics rendering method and apparatus with re-traverse flag
US20100289804A1 (en) System, mechanism, and apparatus for a customizable and extensible distributed rendering api
Reiners et al. Opensg: basic concepts
CA2631639C (en) A method to render a root-less scene graph with a user controlled order of rendering
JP4188962B2 (ja) グラフィック出力装置上に表示可能なシーンの表現を創成する方法、データ処理システム、及びグラフィック出力装置上に表示可能なシーンの表現を創成する装置
Reiners OpenSG: A scene graph system for flexible and efficient realtime rendering for virtual and augmented reality applications
Allard et al. A shader-based parallel rendering framework
Roth et al. Multi-threading and clustering for scene graph systems
GB2334869A (en) Adaptive graphics rendering system
Bethel et al. Combining a multithreaded scene graph system with a tiled display environment
Vo et al. Towards a flexible back-end for scenegraph-based rendering systems
Robinson et al. Graphics workstations: a European perspective
Encarnação et al. Dipl.-Inform. Dirk Reiners
Schulze-Döbold Interactive volume rendering in virtual environments
Karim et al. Design of an Extended 3D Graphics Engine
Wald Programming with OpenRT