(57)【特許請求の範囲】
【請求項１】
メモリーと、
前記メモリーと作動可能に接続されるプロセッサーと、
１つ以上のクライアントに対応している前記メモリー中のユーザー空間であって、前記ユーザー空間が、少なくとも１つの三次元（３Ｄ）コマンド及び少なくとも１つの３Ｄオブジェクトを含んでいるデータトラフィックを監視するための抽象化プログラムモジュールを含んでおり、前記抽象化モジュールが更に、前記１つ以上のクライアントの内の第１のクライアントの１つ以上の処理能力と、少なくとも１つの前記３Ｄコマンド及び少なくとも１つの前記３Ｄオブジェクトに関連する３Ｄアプリケーションのタイプに基づいてフレーム転送レートを制限し、累進的なテクスチャレンダリング方法を用いて帯域幅を前記第１のクライアントに割り当てることによって、前記第１のクライアントによる帯域幅消費を規制するように構成されているものと、
を含み、
前記メモリー及びプロセッサーが、
前記ユーザー空間に関連する装置の切断情報を受け取り、当該切断情報を受け取った時に
前記ユーザー空間に関連するクライアント装置の切断又は再接続処理を起動するように構成されているサーバーコンピューター。
【請求項２】
前記メモリーが、前記３Ｄコマンド、前記３Ｄオブジェクト及びデータストリームをストアしているプログラムデータを含むことを特徴とする請求項１記載のサーバーコンピューター。
【請求項３】
前記ユーザー空間が、クライアント装置における、ディスプレイアダプターの利用可能性及び機能に関する問い合わせをするリモートアダプターを含むことを特徴とする請求項１記載のサーバーコンピューター。
【請求項４】
前記リモートアダプターが、前記抽象化プログラムモジュールと前記クライアント装置のプラグインとの間に通信チャネルを確立し、前記プラグインが、コマンド及び３Ｄオブジェクトを受信することと、を特徴とする請求項３記載のサーバーコンピューター。
【請求項５】
前記抽象化プログラムモジュールが、３Ｄアプリケーション中で３Ｄ画像をレンダリングする機能を含むアプリケーション・プログラム・インターフェース（ＡＰＩ）を介し、前記３Ｄアプリケーションから前記３Ｄコマンド及び３Ｄオブジェクトを受信するように構成されることを特徴とする請求項１記載のサーバーコンピューター。
【請求項６】
前記抽象化プログラムモジュールが、前記３Ｄオブジェクトに識別子を割り当てることを特徴とする請求項１記載のサーバーコンピューター。
【請求項７】
前記抽象化プログラムモジュールが、前記３Ｄコマンド及び３Ｄオブジェクトをデータストリームの中に抽象化し、前記データストリームを前記１つ以上のクライアントに送信することを特徴とする請求項１記載のサーバーコンピューター。
【請求項８】
前記抽象化プログラムモジュールが、圧縮及びデシメーションによる集中型符号化を実行することを特徴とする請求項１記載のサーバーコンピューター。
【請求項９】
メモリーと、
前記メモリーと作動可能に接続されるプロセッサーと、
３Ｄコマンド及び３Ｄオブジェクトをインクルードしたデータストリームを受信し、抽出する前記メモリー中の３Ｄプラグインであって、前記３Ｄコマンドはグラフィックレンダリングセッションにおいて前記３Ｄオブジェクトを用い、前記３Ｄプラグインの機能が、前記サーバーコンピューターとの対話用のフレームレートを決定するためにサーバーコンピューターに転送されるものと、
前記抽出した３Ｄコマンドをレンダリングするグラフィック・プロセッシング・ユニット（ＧＰＵ）と、
クライアントコンピューターがサーバーコンピューターとの接続を喪失した時に、前記サーバーコンピューターに通知する、装置切断通知ユニットであって、前記クライアントコンピューターとの切断時に、前記３Ｄプラグインが再接続までレンダリングセッションを維持するように構成されるものと、
を含むクライアントコンピューター。
【請求項１０】
前記３Ｄプラグインが、前記データストリームを解析し、３Ｄコマンドを抽出することを特徴とする請求項９記載のクライアントコンピューター。
【請求項１１】
前記３Ｄプラグインが、前記データストリーム中の前記３Ｄオブジェクトに関連付けられたハンドルを識別することによって３Ｄオブジェクトを生成することを特徴とする請求項９記載のクライアントコンピューター。
【請求項１２】
前記ハンドルが、グラフィックアプリケーションに関連付けられたリソースのアドレスを含んでいるエントリーを含むことを特徴とする請求項１１記載のクライアントコンピューター。
【請求項１３】
前記３Ｄプラグインが、３Ｄグラフィックをフルスクリーンのユーザーインタフェースに提示することを特徴とする請求項９記載のクライアントコンピューター。
【請求項１４】
前記３Ｄプラグインが、同期化情報をサーバーに送信することを特徴とする請求項９記載のクライアントコンピューター。
【請求項１５】
前記３Ｄプラグインが、クライアントサイド専用のレンダリングプロトコルに基づいて出力グラフィックをレンダリングすることを特徴とする請求項９記載のクライアントコンピューター。
【請求項１６】
前記ＧＰＵが、前記データストリームを送信するサーバーコンピューターのウィンドウに生じる幾何学的変化を生成するためのプロキシウィンドウを生成することを特徴とする請求項９記載のクライアントコンピューター。
【請求項１７】
プロセッサーで実行された時、計算機に方法を実行させる計算機可読命令を記憶する計算機記憶媒体であって、前記方法が、
１つ以上のグラフィックアプリケーションコマンドを受信し、識別するステップと、
前記１つ以上のグラフィックアプリケーションコマンドをグラフィックドライバーに伝達するステップと、
前記１つ以上のアプリケーションコマンド及び前記グラフィックドライバーによって生成されたオブジェクトを、前記１つ以上のアプリケーションコマンドに基づいてデータストリームに抽象化するステップと、
クライアントコンピューターから装置切断情報が受け取られた時に、コンピュータ上のサーバー状態とクライアントコンピューター上のクライアント状態とを再同期させるための装置切断復旧処理を起動するステップと、
前記クライアントコンピューターによる帯域幅消費を、前記アプリケーションコマンド及び前記オブジェクトに関連するアプリケーションのタイプと、前記クライアントデバイスの１つ以上の処理能力とに基づいてフレームレートを制限することによって規制するステップと、
を含む計算機記憶媒体。
【請求項１８】
伝達するステップが、アプリケーションプログラムインターフェースを介することを特徴とする請求項１７記載の計算機記憶媒体。
【請求項１９】
前記抽象化するステップが、生成されたコマンド及びオブジェクトを隠されたデータとして抽象化するステップ含むことを特徴とする請求項１７記載の計算機記憶媒体。
【請求項２０】
前記方法が更に、前記データストリームをネットワーク上の１つ以上のクライアントに送信するステップを含む請求項１７記載の計算機記憶媒体。
【請求項２１】
前記方法が更に、前記データストリームを圧縮するステップを含む請求項２０記載の計算機記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算システムにおけるグラフィック処理に関し、具体的には、リモート計算環境におけるグラフィック処理に関する。
【背景技術】
【０００２】
[0001]フォト編集、ゲームなどのように高性能グラフィックアプリケーションを生成するためのグラフィックソフトは、複雑な計算を利用する動画及びその他のツールを含み得る。通常、そのような高性能グラフィックアプリケーションは、複雑な計算を管理するためのグラフィックハードウェアの支援を提供する様々な技術を使用する。例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム上で実行されるグラフィックアプリケーションは、グラフィックハードウェアの支援を提供するＤｉｒｅｃｔ３Ｄレンダリング技術を使用し得る。Ｄｉｒｅｃｔ３Ｄは、グラフィックアプリケーションの中で３Ｄ画像をレンダリングするためのコマンドを含んでいる三次元（３Ｄ）グラフィック・アプリケーション・プログラミング・インターフェース（ＡＰＩ）である。
【０００３】
[0002] 今やほとんどのパーソナルコンピューター（ＰＣ）は、そのようなグラフィックハードウェアの支援を提供しているが、そのような技術を遠隔化する効率的な方法はどこにも存在しない。例えば、リモートセッションにおいて、グラフィックアプリケーションは、ウィンドウサイズもユーザー接続数も率に応じ増やすことができず、安定性問題ももたらし得る。更に、グラフィックス・アクセラレーションは、ビデオ・グラフィックス・アダプター（ＶＧＡ）を実行するサーバーコンピューターにおいても仮想計算機においても利用され得ない。結果として、リモートセッションを介し実行するグラフィックアプリケーションは、質の悪いエンドユーザー体験をもたらし得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、リモートクライアントにおいて、３Ｄグラフィック画像のレンダリングを可能にするＤｉｒｅｃｔ３Ｄ遠隔化アーキテクチャを用いた自己記述型データレンダリングを実装する技法を提供することである。
【課題を解決するための手段】
【０００５】
[0003]この概要は、以下の「発明を実施するための形態」において更に記載されているグラフィック遠隔化アーキテクチャに関連する簡易化した概念を紹介するために提供されている。この概要は、請求対象項目の本質的な特徴を特定することも意図されておらず、請求対象項目の範囲を決定する際に使用することも意図されていない。
【０００６】
[0004]実施形態において、サーバーコンピューター上にホスティングされる三次元（３Ｄ）アプリケーションは、リモートクライアントコンピューターによって使用される。３Ｄアプリケーションに関連付けられたグラフィックは、リモートサーバーにおいてデータストリームの中に抽象化され、クライアントコンピューターに送信されるグラフィックに対応している３Ｄコマンド及び３Ｄオブジェクトの使用によってリモートクライアントコンピューターにおいて生成され、レンダリングされる。３Ｄコマンド及び３Ｄオブジェクトがデータストリームから抽出され、実行され、クライアントコンピューターにグラフィック画像を生成する。
【０００７】
[0005]詳細な説明を添付の図を参照し説明する。図面において参照番号の最上位の桁は、参照番号が最初に出現する図面を識別している。異なる図面における同一の参照番号の使用は、同等又は同一の項目を示している。
【図面の簡単な説明】
【０００８】
【図１】[0006]３Ｄ遠隔化アーキテクチャを実装するための例示的ネットワーク環境を示すブロック図である。
【図２】[0007]３Ｄ画像のリモートレンダリングを実装するための例示的計算サーバーを示すブロック図である。
【図３】[0008]３Ｄ画像のリモートレンダリングを実装するための例示的クライアントを示すブロック図である。
【図４】[0009]３Ｄ遠隔化アーキテクチャの例示的実装を示すブロック図である。
【図５】[0010]３Ｄグラフィックアプリケーション中のコマンドを抽象化するための例示的プロセスを示す流れ図である。
【図６】[0011]３Ｄ画像をレンダリングするための例示的プロセスを示す流れ図である。
【発明を実施するための形態】
【０００９】
[0012]この開示は、リモートに位置するクライアントにおいて三次元又は３Ｄ画像のレンダリングを容易にし、リモートセッションにおいて、改善されたエンドユーザー体験を達成するための遠隔化アーキテクチャを実装する方法及びシステムに関連する。通常、Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅ（登録商標）環境のようなリモート環境において、Ｄｉｒｅｃｔ３Ｄ又はＤ３Ｄコマンドのような任意のグラフィックに集中したアプリケーションコマンドは、サーバーで実行される。コマンド実行後、グラフィック画像などの出力は、サーバーのグラフィックス・プロセッシング・ユニット（ＧＰＵ）の支援を用いてレンダリングされる。レンダリングされたグラフィック画像は、その後、ビットマップ画像としてクライアント装置に送信され、クライアントサイドにおいて、表示装置を介し表示される。そのような方法にて実行するＤｉｒｅｃｔ３Ｄ又は三次元アプリケーションは、サーバーの利用可能性、拡張性、サーバー安定性などアーキテクチャ上の要因によって制限され、質の悪いエンドユーザー体験をもたらす。具体的には、圧縮及びその他の特殊方法を使用しているとき、アーキテクチャ上の欠点は、フレームレート制御の欠如及び斬新的なテクスチャレンダリングの不適当性を含み得る。
【００１０】
[0013]リモートクライアントにおいて３Ｄグラフィック画像のレンダリングを可能にするためのＤｉｒｅｃｔ３Ｄ遠隔化アーキテクチャを実装する技法が、以下の説明に開示される。一実装において、サーバーコンピューターにおいてグラフィック画像をレンダリングして、その後、最終的なビットマップ画像をクライアント装置に送信する代わりに、Ｄ３Ｄコマンドが、その後Ｄ３Ｄコマンドを実行し得るクライアント装置に直接に送信され得る。クライアント端末装置のＧＰＵが、グラフィック画像などの出力をレンダリングし、クライアント端末に画像を表示する。かくしてグラフィック画像は、サーバー端末のＧＰＵを使用せずに、クライアント装置においてレンダリングされ得る。更に、フレームレート制御及び斬新的なテクスチャレンダリング方法を実装し、前述したアーキテクチャ上の欠点を克服するための技法が開示される。
【００１１】
[0014]クライアント装置において、３Ｄグラフィック画像をレンダリングするためのＤｉｒｅｃｔ３Ｄ遠隔化アーキテクチャを実装する方法及びシステムが、以下の説明に開示される。
【実施例】
【００１２】
例示的ネットワーク環境
[0015]図１は、本明細書に記載した技法を実装し、本明細書に記載したエレメントの全体又は一部を代表し得る３Ｄ又はＤｉｒｅｃｔ３Ｄ（Ｄ３Ｄ）遠隔化アーキテクチャを実装するための例示的ネットワーク又は計算環境（１００）を示している。計算環境（１００）は、計算環境の例であって、使用されている計算機及びネットワークアーキテクチャの使用範囲及び／又は機能性に対し、どのような制限も示すように意図されていない。
【００１３】
[0016]計算環境（１００）は、（クライアント（１０２）としてまとめて参照される）複数のクライアント装置（１０２−１，１０２−２，１０２−３，…，１０２−Ｎ）を含む。クライアント（１０２）は、ネットワーク（１０４）を介し、サーバーコンピューター又はサーバー（１０６）と通信可能に関連付けられる。クライアント（１０２）は、例えば、デスクトップＰＣ、ノートブックコンピューター、ポータブルコンピューター、個人情報端末（ＰＤＡ）、ワークステーション、携帯計算装置、又はインターネット接続専用端末など様々な従来の任意の計算装置であり得る。クライアント（１０２）それぞれは、レンダリング用の異なるプログラムモジュールをストアするメモリーを含む。例えば、クライアント（１０２−１）は、Ｄ３Ｄプラグイン（１１２）及びレンダリングを実行するための別のモジュールのような異なるプログラムモジュール（１１０）をストアし得るメモリー（１０８）を含む。
【００１４】
[0017]ネットワーク（１０４）は、無線ネットワーク若しくは有線ネットワーク又はその組み合わせであり得る。ネットワーク（１０４）は、お互いに相互接続された個別のネットワークの集まり及び単一の大規模ネットワーク（例えばインターネット又はイントラネット）としての機能性としても代表され得る。そのような個別のネットワークの例は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、及びメトロポリタンエリアネットワーク（ＭＡＮ）を含むがこれらに限定しない。更に、個別のネットワークは、無線ネットワーク若しくは有線ネットワーク又はその組み合わせでもあり得る。
【００１５】
[0018]サーバー（１０６）は、例えば、汎用計算装置、又はサーバークラスター及びメインフレームクラスターであり得る。サーバー（１０６）は、クライアント（１０２−１）などのクライアントに対応しているユーザー空間（１１６）を有するメモリー（１１４）を含む。ユーザー空間（１１６）は更に、Ｄ３Ｄ抽象化モジュール（１１８）及びリモートアダプター（１２０）を含む。サーバー（１０６）のリモートアダプター（１２０）は、クライアントとの接続を確立し、Ｄ３Ｄ抽象化モジュール（１１８）によって抽象化されたレンダリング用グラフィックコマンドを送信する。
【００１６】
[0019]一実装において、Ｄ３Ｄ抽象化モジュール（１１８）が、ターミナル・サーバー（ＴＳ）／Ｄ３Ｄ抽象化レイヤ上で実行する。Ｄ３Ｄ抽象化レイヤは、サーバー（１０６）の物理ハードウェアとＤ３Ｄアプリケーションのようなグラフィックアプリケーションとの間に実装される。抽象化レイヤは、ハードウェアの実装詳細をそのようなアプリケーションから隠す。
【００１７】
[0020]Ｄ３Ｄ抽象化モジュール（１１８）は、クライアント（１０２−１）などのクライアントが、リモートセッション中、サーバー（１０６）のＤ３Ｄアプリケーションを使用するとき、Ｄ３Ｄアプリケーションから１つ以上のＤ３Ｄコマンド及びＤ３Ｄオブジェクトを受信する。Ｄ３Ｄ抽象化モジュール（１１８）は更に、Ｄ３ＤアプリケーションとＤ３Ｄアプリケーションを実行するグラフィックハードウェアとの間の通信を抽象化する。
【００１８】
[0021]Ｄ３Ｄ抽象化モジュール（１１８）は、ネットワーク（１０４）上に送信され得るストリーミングデータの中にＤ３Ｄコマンド及びＤ３Ｄオブジェクトを抽象化する。Ｄ３Ｄ抽象化モジュール（１１８）は、かくして、サーバー（１０６）が、データストリームとして抽象化されたコマンド及びオブジェクトを１つ以上のクライアント（１０２）に送信可能にする。データストリームは、ネットワーク（１０４）を介し、リモート・デスクトップ・プロトコル（ＲＤＰ）、Ｄ３Ｄ遠隔化プロトコルなどのような異なる遠隔化プロトコルに基づいて送信される。
【００１９】
[0022]データストリームをサーバー（１０６）からクライアント（１０２−１）に送信するために、リモートアダプター（１２０）が、ネットワーク（１０４）上のクライアント（１０２−１）のＤ３Ｄプラグイン（１１２）と通信チャネルを確立する。リモートアダプター（１２０）は、Ｄ３Ｄプラグイン（１１２）からクライアント（１０２−１）のディスプレイアダプターの利用可能性及び機能をチェックする。Ｄ３Ｄプラグイン（１１２）からの確認を受信すると、リモートアダプター（１２０）は、Ｄ３Ｄ抽象化モジュール（１１８）とＤ３Ｄプラグイン（１１２）との間に通信チャネルを確立する。
【００２０】
[0023]Ｄ３Ｄ抽象化モジュール（１１８）は、クライアント（１０２−１）においてＤ３Ｄアプリケーションに関連付けられた抽象化Ｄ３Ｄコマンド及びＤ３ＤオブジェクトをＤ３Ｄプラグインに送信する。一実装において、Ｄ３Ｄ抽象化モジュール（１１８）は、抽象化されたＤ３Ｄコマンド及びＤ３ＤオブジェクトをＤ３Ｄプラグイン（１１２）に隠されたデータとして送信する。
【００２１】
[0024]クライアント端末（すなわちクライアント（１０２））において、データストリームが、Ｄ３Ｄプラグイン（１１２）のような１つ以上のＤ３Ｄプラグインによって受信され、処理される。Ｄ３Ｄプラグイン（１１２）は、データストリームを受信し、データストリームを解析し、Ｄ３Ｄコマンドを抽出する。更に、Ｄ３Ｄプラグインは、実際のＤ３Ｄオブジェクトを生成し、Ｄ３Ｄコマンドを実行し、クライアント端末におけるＧＰＵを使用しグラフィック画像などの出力をレンダリングする。
例示的サーバー
[0025]図２は、３Ｄ画像リモートレンダリングを実装するための例示的サーバー（１０６）である。サーバー（１０６）は、プロセッサー（２０２）、ネットワークインターフェース（単数又は複数）（２０４）、入力／出力インターフェース（単数又は複数）（２０６）、及びメモリー（１１４）を含む計算装置であり得る。ネットワークインターフェース（単数又は複数）（２０４）は、クライアント（１０２）又はサーバー（１０６）などの多くの計算装置と相互接続するための１つ以上のポートを含み得る。ネットワークインターフェース（単数又は複数）（２０４）は、有線ネットワーク（例えばＬＡＮネットワーク、ケーブルネットワークなど）並びに無線ネットワーク（例えばＷＬＡＮネットワーク、セルラーネットワーク、衛星ネットワークなど）を含む様々なネットワーク及びプロトコルタイプを用いた通信を容易にし得る。
【００２２】
[0026]入力／出力インターフェース（単数又は複数）（２０６）は、例えば、スキャナーポート、マウスポート、キーボードポートなどを含んでいて、データをクライアント（１０２）から受信するか又はそれに送信する。一実装において、サーバー（１０６）の入力／出力インターフェース（単数又は複数）（２０６）は、ネットワーク（１０４）上にＤ３Ｄコマンド及びＤ３Ｄオブジェクトなどのデータを送信する。サーバー（１０６）の入力／出力インターフェース（単数又は複数）（２０６）は、同期化のために、レンダリングされたグラフィック画像を代表とするデータ又はコンテンツなどのデータを１つ以上のクライアント（１０２）から受信する。
【００２３】
[0027]メモリー（１１４）は、ランダムアクセスメモリー（ＲＡＭ）のような揮発性メモリー、及び／又は読み出し専用メモリー（ＲＯＭ）、及びフラッシュＲＡＭのような不揮発性メモリー双方の形式の任意の計算機可読媒体であり得る。メモリー（１１４）は、通常、プロセッサー（２０２）によってそれに即座にアクセス可能なデータ及び／又はその上で間もなく作動されるプログラムモジュールを含む。
【００２４】
[0028]一実装において、メモリー（１１４）は、クライアント（１０２）それぞれに対応しているユーザー空間（１１６）及びプログラムデータ（２０８）を含む。ユーザー空間（１１６）それぞれは、その他のモジュール（２１０）に加えてＤ３Ｄ抽象化モジュール（１１８）及びリモートアダプター（１２０）を含む。プログラムデータ（２０８）は、Ｄ３Ｄコマンド（２１２）、Ｄ３Ｄオブジェクト（２１４）、データストリーム（２１６）、及びその他のプログラムデータ（２１８）を含むパラメータをストアし得る。
【００２５】
[0029]Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を含んでいるデータトラフィックを監視するように構成され得る。以下、更に詳細に説明されるように、Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３ＤアプリケーションからＤ３ＤＡＰＩを介しＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を受信するように構成され得る。Ｄ３ＤＡＰＩは、Ｄ３Ｄアプリケーション中の３Ｄ画像をレンダリングするために使用され得る機能を含む。別の実装において、Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３ＤアプリケーションからＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を直接に受信するように構成され得る。
【００２６】
[0030]一実装において、受信されるＤ３Ｄコマンド（２１２）は、高頻度のコマンドであって、クライアント（１０２）からの１つ以上のネットワークラウンドトリップを必要とする。そのようなネットワークラウンドトリップは、高頻度のコマンド実行時の遅れをもたらす。そのようなネットワークラウンドトリップを回避するために、Ｄ３Ｄ抽象化モジュール（１１８）が、抽象化レイヤにおいて、Ｄ３Ｄオブジェクトそれぞれにハンドル又は識別子を割り当てるように構成され得る。Ｄ３Ｄ抽象化モジュール（１１８）がその後、クライアント端末上でＤ３Ｄオブジェクトを生成するためのハンドルを、別のパラメータと一緒にデータストリーム（２１６）に記録する。ハンドルは、サーバー（１０６）のメモリー（１１４）中の別のプログラムデータ（２１８）にストアされ得る。
【００２７】
[0031]Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）をデータストリーム（２１６）の中に抽象化し、ネットワーク（１０４）を介しそれらを送信する。これに関連し、リモートアダプター（１２０）が、クライアント（１０２−１）のディスプレイアダプターの利用可能性及び機能に関する情報の問い合わせをする。クライアント（１０２−１）のＤ３Ｄプラグイン（１１２）から利用可能性及び機能の確認を受信すると、リモートアダプター（１２０）は、Ｄ３Ｄ抽象化モジュール（１１８）とＤ３Ｄプラグイン（１１２）との間に通信チャネルを確立する。Ｄ３Ｄ抽象化モジュール（１１８）は、通信チャネルを介し、抽象化したＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）をクライアント（１０２−１）のＤ３Ｄプラグイン（１１２）に送信する。
【００２８】
[0032]抽象化に加えてＤ３Ｄ抽象化モジュール（１１８）は、リソースの集中型符号化を実行するように構成され得る。リソースの集中型符号化は、当技術分野で周知のＤ３Ｄリソースを符号化するために利用可能な圧縮及びデシメーション方法を包含している。これは、複数のアプリケーション及び再接続に対して、サーバー（１０６）が効率的に帯域幅を使用できるようにする。例えば、Ｄ３Ｄアプリケーションは、テクスチャマッピング、メッシュデータ、又は利用可能な帯域幅よりもサイズがより大きな通常のビットマップ画像などのＤ３Ｄリソースを利用し得る。そのような場合、Ｄ３Ｄ抽象化モジュール（１１８）は、リソースサイズを低減するための周知の圧縮及び／又はデシメーション方法を使用する。システムの広範囲に渡って持続するキャッシュが実行され、サーバー（１０６）の帯域幅を効率的に使用するためにリソース符号化プロセスが集中化され得る。
例示的クライアント
[0033]図３は、３Ｄ画像のリモートレンダリングを実装するための例示的クライアント（１０２）を示す。例示的クライアント（１０２）は、任意のクライアント（１０２）、例えば、クライアント（１０２−１）であり得、プロセッサー（３０２）、ネットワークインターフェース（単数又は複数）（３０４）、入力／出力インターフェース（単数又は複数）（３０６）、メモリー（１０８）、及び入力／出力装置（単数又は複数）（３１０）を含む。ネットワークインターフェース（単数又は複数）（３０４）は、ネットワーク（１０４）を介しクライアント（１０２）間の通信を容易にする。
【００２９】
[0034]例示的実装において、ネットワークインターフェース（３０４）は、クライアント（１０２−１）をサーバー（１０６）又はクライアント（１０２−１）以外のクライアント（１０２）に接続するための１つ以上のポートを含む。ネットワークインターフェース（単数又は複数）（３０４）は、有線ネットワーク（例えばＬＡＮネットワーク、ケーブルネットワークなど）並びに無線ネットワーク（例えばＷＬＡＮネットワーク、セルラーネットワーク、衛星ネットワークなど）を含む様々なネットワークタイプ及びプロトコルタイプを用いた通信を容易にし得る。
【００３０】
[0035]入力／出力インターフェース（単数又は複数）（３０６）は、例えば、スキャナーポート、マウスポート、キーボードポートなどを含んでいて、データをクライアント（１０２）から受信するか又はそれに送信し得る。一実装において、クライアント（１０２−１）の入力／出力インターフェース（単数又は複数）（３０６）は、例えば、ネットワーク（１０４）を介しＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）などのデータを受信する。
【００３１】
[0036]クライアント（１０２−１）の入力／出力インターフェース（単数又は複数）（３０６）は、同期化のためにレンダリングされるグラフィック画像を代表とするデータ又はコンテンツなどのデータをサーバー（１０６）に送信する。入力／出力インターフェース（単数又は複数）（３０６）は、入力／出力装置（３１０）によってレンダリングされたグラフィック画像などのデータを表示し得る。
【００３２】
[0037]メモリー（１０８）は、ランダムアクセスメモリー（ＲＡＭ）のような揮発性メモリー、及び／又は読み出し専用メモリー（ＲＯＭ）、及び／又はフラッシュＲＡＭのような不揮発性メモリー双方の形式の任意の計算機可読媒体であり得る。メモリー（１０８）は、プロセッサー（３０２）によってそれに即座にアクセス可能なデータ及び／又はその上で作動されるプログラムモジュールを含む。例示的実装において、メモリー（１０８）は、プログラムモジュール（１１０）及びプログラムデータ（３０８）を含む。プログラムモジュール（１１０）は、Ｄ３Ｄプラグイン（１１２）及びその他のモジュール（３１２）を含み得る。プログラムデータ（３０８）は、データストリーム（３１４）、グラフィック画像（３１６）、及びその他のプログラムデータ（３１８）を含むパラメータをストアし得る。
【００３３】
[0038]Ｄ３Ｄプラグイン（１１２）は、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を含むデータストリーム（３１４）を受信し、Ｄ３Ｄコマンド（２１２）を抽出する。更に、Ｄ３Ｄプラグイン（１１２）は、Ｄ３Ｄコマンド（２１２）を実行し、クライアント端末のＧＰＵを使用することによって出力グラフィック画像をレンダリングする。一実装において、クライアント（１０２−１）のＤ３Ｄプラグイン（１１２）が、ネットワーク（１０４）を介しサーバーからデータストリーム（３１４）を受信するように構成され得る。Ｄ３Ｄプラグイン（１１２）は、当技術分野において周知の任意の解析方法を使用しデータストリーム（３１４）解析し、データストリーム（３１４）からＤ３Ｄコマンド（２１２）を抽出するように構成され得る。
【００３４】
[0039]Ｄ３Ｄプラグイン（１１２）は、データストリーム（３１４）と一緒に受信したハンドルを使用しＤ３Ｄオブジェクト（２１４）を生成するように構成され得る。前述したように、ハンドルは、Ｄ３Ｄアプリケーションのようなグラフィックアプリケーションに関連付けられたリソースアドレスを含むエントリーを有していて、Ｄ３Ｄオブジェクト（２１４）などのオブジェクトが識別され、検査され、生成され、及び／又は変更され得る。従ってＤ３Ｄオブジェクトは、ハンドルを割り当てられていて、Ｄ３Ｄプラグイン（１１２）によってクライアント端末において実際のＤ３Ｄオブジェクト（２１４）を生成し得る。Ｄ３Ｄプラグイン（１１２）が、その後、Ｄ３Ｄコマンド（２１２）を実行し、クライアントのＧＰＵを使用しグラフィック画像（３１６）をレンダリングし得る。グラフィック画像（３１６）のレンダリングは、当技術分野で周知のレンダリング方法によって実行され得る。
【００３５】
[0040]レンダリングに加えてＤ３Ｄプラグイン（１１２）は、サーバー（１０６）のデスクトップ上に表示されるウィンドウ形状における変化をトラッキングし、サーバーのデスクトップ表示に従って、クライアント（１０２−１）において変化するように構成される。ウィンドウ形状の変化は、ウィンドウのリサイズ、ウィンドウの移動若しくは位置、及び／又はサーバー（１０６）のデスクトップの可視領域の変化を含み得る。
【００３６】
[0041]ウィンドウ形状の変化を支援するためのプロキシウィンドウが、クライアント（１０２−１）において使用され得、サーバー（１０６）のウィンドウにおいて発生する幾何学的変化を再生成する。プロキシウィンドウは、サーバー（１０６）におけるウィンドウ及びクライアント（１０２）におけるウィンドウのような、同一セッションにおいて起動された任意のウィンドウとの相互運用性を保証する。プロキシウィンドウは、例えばデスクトップ構成機能が利用できないとき、クライアント（１０２）において確立され得る。デスクトップ構成は、クライアントのディスプレイ画面上にグラフィック画像の画素が表示される方法を変更する機能であって、サーバー（１０６）のデスクトップ・ウィンドウ・マネージャーによって制御され得る。
【００３７】
[0042]Ｄ３Ｄプラグイン（１１２）は、クライアントサイド（１０２）、例えばクライアント（１０２−１）上にＤｉｒｅｃｔ３Ｄグラフィックをフルスクリーン占有モードで提示するようにも構成される。フルスクリーン表示占有モードは、ユーザーから介入をせずに、画面解像度及びピクセルフォーマットを自動的にキャプチャし、設定／リストアする。クライアントウィンドウは、画像を表示するために使用される簡素なウィンドウであり得る。しかしながら、Ｄｉｒｅｃｔ３Ｄアプリケーションは、簡素なウィンドウフォーマットによって支援され得ないフルスクリーン表示占有モード下で実行する。Ｄ３Ｄプラグイン（１１２）は、クライアントのウィンドウにフルスクリーン表示を用いたフルスクリーン占有モードのグラフィックを提示し、ユーザー体験を改善する。
【００３８】
[0043]Ｄ３Ｄプラグイン（１１２）は、サーバーが同期化するための情報を必要とする場合、レンダリングされたグラフィック画像（３１６）に関連する情報をサーバー（１０６）に送信するように構成される。一実装において、Ｄ３Ｄプラグイン（１１２）は、クライアントサイド専用のレンダリングプロトコルに基づいてクライアント（１０２−１）のウィンドウに出力グラフィック画像をレンダリングする。そのような場合、レンダリングされたコンテンツが、デフォルトによってクライアント（１０２）にストアされていて、また、サーバーがコンテンツを必要とする場合、サーバー（１０６）に送信され得る。従って、Ｄ３Ｄプラグイン（１１２）は更に、認識済のサーバー（１０６）の不可視のデスクトップと、サーバー（１０６）のデスクトップに関するクライアントサイド（１０２）の可視表示との間のトラッキング及び同期化が可能なように構成され得る。
【００３９】
[0044]更に、同期化及びコンテンツの一貫性を達成するためにＤ３Ｄプラグイン（１１２）は、サーバー（１０６）から発行される様々なＤｉｒｅｃｔ３Ｄコマンド（２１２）と、クライアント（１０２）のデスクトップに実行される読み出しアクセス／書き込みアクセスと、をトラッキングするように構成され得る。Ｄ３Ｄプラグイン（１１２）は更に、サーバー（１０６）及びクライアント（１０２−１）などのクライアント（１０２）双方によって送信／受信される画素それぞれに関する更新情報を維持し得る。例えば、デスクトップ構成が利用できないとき同期化するために、画素に関する情報が更新され得る。
例示的アーキテクチャ
[0045]図４は、Ｄｉｒｅｃｔ３Ｄ（Ｄ３Ｄ）遠隔化アーキテクチャ（４００）の例示的実装を示している。アーキテクチャ（４００）は、Ｄ３Ｄ遠隔化アーキテクチャの論理的ビューであって、リモートセッション内でグラフィック画像をレンダリングするために使用される関連コンポーネントを表示する。アーキテクチャ（４００）は、サーバーサイド（４０２）（例えばサーバー（１０６））において作動するコンポーネントグループを含み得る。サーバーサイド（４０２）のコンポーネントは、Ｄ３ＤアプリケーションからＤ３Ｄコマンドを受信し、ネットワーク上のクライアントサイド（４０４）（例えばクライアント（１０２））に送信されるストリームデータとしてＤ３Ｄコマンド及びＤ３Ｄオブジェクトを抽象化する。クライアントサイド（４０４）は、クライアント（１０２−１）などのクライアント（１０２）と関係するコンポーネントグループを含む。クライアントサイド（４０４）のコンポーネントが、データストリームを受信し、Ｄ３Ｄコマンドを抽出し、実際のＤ３Ｄオブジェクトを生成し、Ｄ３Ｄコマンドを実行し、クライアント端末において、出力グラフィック画像をレンダリングする。本アーキテクチャ（４００）は更に、サーバー（１０６）又はクライアント（１０２）によってセッション空間（４０６）として参照される同一セッション内においてアクセスされるコンポーネントと、サーバー（１０６）又はクライアント（１０２）によってグローバル空間（４０８）として参照される別のセッション内においてアクセスされるコンポーネントと、を含む。
【００４０】
[0046]一実装において、サーバーサイド（４０２）のＤ３Ｄアプリケーション（４１０）が、ユーザーからの入力として１つ以上のＤ３Ｄコマンド（２１２）を受信する。Ｄ３Ｄアプリケーション（４１０）は、ゲームアプリケーションのような複雑な計算を含む高性能グラフィックアプリケーションであり得る。そのようなアプリケーションに対しＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）は、Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｅｒ（登録商標）ＴＳ／Ｄ３Ｄ抽象化レイヤ（４１２）においてデータストリーム（２１６）として抽象化される。一実装において、Ｄ３Ｄ抽象化モジュール（１１８）が、Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｅｒ（登録商標）ＴＳ／Ｄ３Ｄ抽象化レイヤ（４１２）上でオブジェクトを抽象化するためのコマンドを実行する。更に、Ｄ３Ｄ抽象化モジュール（１１８）が１つ以上のＤ３Ｄオブジェクト（２１４）にハンドルを割り当て、実際のＤ３Ｄオブジェクト（２１４）がクライアント端末において、ハンドルを使用し生成され得る。
【００４１】
[0047]Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクトの抽象化に関し、Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３ＤＡＰＩ（４１４）と通信するが、場合によってＧＰＵが利用可能である場合、アプリケーションは、サービスサイドにＧＰＵ（すなわちローカルＧＰＵドライバー（４１６））を実装し得る。この場合、（又はＯＳポリシーごとのデフォルトで）ＧＰＵドライバー（４１６）が、サーバー（１０６）にローカルに存在し得、Ｗｉｎ３２ｋプロセス（４１８）と通信し得る。言い換えると、クライアント（例えばクライアント（１０２−１）などのクライアント（１０２））においてリモートＧＰＵを提示しているリモートアダプター（１２０）は、存在しているローカルＧＰＵドライバー（４１６）と協力し実行され得るが、ローカルＧＰＵドライバー（４１６）は、この遠隔化アーキテクチャが機能するように存在し得ない。ローカルＧＰＵドライバー（４１６）は、遠隔化アーキテクチャが既存のローカルグラフィックアーキテクチャとどのように統合されるか示す。
【００４２】
[0048]Ｗｉｎ３２ｋプロセス（４１８）は、メモリー、プロセッサー（単数又は複数）、及び入力／出力装置のような計算リソースに対し最小レベルの抽象化を提供するＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのカーネルプロセスである。Ｗｉｎ３２ｋプロセス（４１８）は、グラフィック関連タスクを実行するグラフィック・デバイス・インターフェース（ＧＤＩ）のＧＤＩアプリケーション（４２０）と通信する。ＧＤＩアプリケーション（４２０）は、グラフィックオブジェクトを表示し、モニター及びプリンターなどの出力装置にグラフィックオブジェクトを送信するために使用されるＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのインターフェースであり得る。ＧＤＩアプリケーション（４２０）は、直線、曲線、及びレンダリングフォントなどを描画するようなグラフィック関連タスクを実行し得る。
【００４３】
[0049]一実装において、そのようなグラフィック関連タスクを実行するためにＧＤＩアプリケーション（４２０）は、ＧＤＩ３２プロセス（４２２）を使用する。ＧＤＩ３２プロセス（４２２）は、サーバーのＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのＧＤＩに関する機能を含んでいて、クライアント（１０２）のディスプレイウィンドウ上に画像を表示するためのオブジェクト及びプロセス情報を生成する。ＧＤＩ３２プロセス（４２２）は、Ｄ３Ｄアプリケーション（４１０）に対しＤ３Ｄオブジェクト（２１４）の生成のようなグラフィック関連機能を実行する。
【００４４】
[0050]Ｄ３Ｄオブジェクト（２１４）の生成後、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）は、Ｄ３Ｄアプリケーション（４１０）及びＤ３ＤＡＰＩ（４１４）に連絡される。連絡の間、Ｄ３Ｄ抽象化レイヤ（４１２）において、Ｄ３Ｄ抽象化モジュール（１１８）が、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）をデータストリーム（２１６）の中に抽象化する。Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３Ｄオブジェクト（２１４）のハンドルもデータストリーム（２１６）の中に抽象化する。
【００４５】
[0051]Ｄ３Ｄ抽象化モジュール（１１８）は、ネットワーク（１０４）を介し、クライアント（１０２）にデータストリーム（２１６）を送信する。これに関連し、リモートアダプター（１２０）は、クライアント（１０２−１）などのクライアント（１０２）のディスプレイアダプターの利用可能性及び機能に関する問い合わせをする。クライアント（１０２−１）のＤ３Ｄプラグイン（１１２）から確認を受信すると、リモートアダプター（１２０）は、ネットワーク（１０４）を介しデータストリーム（２１６）を送信するための通信チャネルを確立する。
【００４６】
[0052]クライアントサイド（４０４）において、Ｄ３Ｄプラグイン（１１２）が、リモートアダプター（１２０）によって確立される通信チャネルを介しデータストリーム（３１４）を受信する。Ｄ３Ｄプラグイン（１１２）によって受信されるデータストリーム（３１４）は、Ｄ３Ｄコマンド（２１２）、Ｄ３Ｄオブジェクト（２１４）、及び実際のＤ３Ｄオブジェクト（２１４）を再生成するためのハンドルを含む。Ｄ３Ｄプラグイン（１１２）は、当技術分野で周知の任意の解析方法を使用し、受信したデータストリーム（３１４）を解析し、Ｄ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を抽出する。
【００４７】
[0053]Ｄ３Ｄプラグイン（１１２）は、その後、Ｄ３Ｄコマンド（２１２）を実行し、Ｄ３Ｄアプリケーション（４１０）に関連付けられたグラフィックを表示する。これに関連し、Ｄ３Ｄプラグイン（１１２）は、クライアント（１０２−１）などのクライアント（１０２）のＤ３ＤＡＰＩ（４２４）と通信する。Ｄ３ＤＡＰＩ（４２４）は、Ｄ３Ｄプラグイン（１１２）とグラフィックハードウェアとの間においてＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を通信し、グラフィックアプリケーションを実行する。Ｄ３ＤＡＰＩ（４２４）は、グラフィックを表示するために使用され得るグラフィック画像をレンダリングするコマンドも含む。
【００４８】
[0054]Ｄ３ＤＡＰＩ（４２４）は更に、ハンドルを使用した実際のＤ３Ｄオブジェクト（２１４）生成のようなグラフィック関連タスクを実行するために、Ｗｉｎ３２ｋプロセス（４２６）とインタラクションする。Ｗｉｎ３２ｋプロセス（４２６）（Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのカーネルプロセス）は、サーバー（１０６）のＷｉｎ３２ｋプロセス（４１８）と同様であり得る。実際のＤ３Ｄオブジェクト（２１４）の生成に関しＷｉｎ３２ｋプロセス（４２６）は、実際のＤ３Ｄオブジェクト（２１４）を生成するグラフィック・デバイス・インターフェースプロセスのＧＤＩ３２プロセス（４２８）とインタラクションする。
【００４９】
[0055]実際のＤ３Ｄオブジェクト（２１４）の生成後、クライアントサイド（４０４）のＧＤＩ３２プロセス（４２８）は、Ｄ３ＤＡＰＩ（４２４）を介しＤ３Ｄプラグイン（１１２）にＤ３Ｄオブジェクト（２１４）を連絡する。更に、Ｄ３Ｄプラグイン（１１２）は、Ｄ３Ｄオブジェクト（２１４）を使用し、Ｄ３Ｄコマンド（２１２）を実行し、グラフィック画像（３１６）をレンダリングする。Ｄ３Ｄプラグイン（１１２）は、ＧＰＵドライバーと同様にグラフィック画像（３１６）をレンダリングする。レンダリングされたグラフィック画像（３１６）は、その後、クライアント（１０２−１）の入力／出力装置（３１０）を介し表示される。実装において、クライアント（１０２）それぞれは、リモートターミナルサーバークライアント（４３０）であり得る。クライアント（１０２）のＤ３Ｄプラグインは、クライアント（１０２）が切断され、後で再接続しようとするときも、レンダリングプロセス中のセッションにおいてＤ３Ｄオブジェクト（２１４）を持続し得る。再接続の成功後、サーバー（１０６）及びクライアント（１０２）は、Ｄ３Ｄアプリケーション（４１０）の実行を再開する。
【００５０】
[0056]実装において、Ｄ３Ｄアプリケーション（４１０）のグラフィック表示は、１つ以上のクライアント（１０２）によって共有され得るテクスチャマッピング、ノーマルマッピングなどのような１つ以上のＤ３Ｄリソースを使用することを含む。リソースを共用するためにＤ３Ｄプラグイン（１１２）は、Ｄ３Ｄリソースそれぞれにハンドル又は識別子を割り当てるように構成され得るが、ハンドルの使用は、１つ以上のクライアント（１０２）からのネットワークラウンドトリップを必要とする。絶え間のないネットワークラウンドトリップを回避するために、集中型サーバーコンポーネントは、クライアント（１０２）に割り当てられたプロキシとして使用されるハンドルを提供する。例えば、ＲＤＰＤＤ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ  Ｄｅｖｉｃｅ  Ｄｒｉｖｅｒ）（４３２）又はＲＤＰＷＤ（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ  Ｗｉｎ３２ｋ  Ｄｒｉｖｅｒ）（４３４）がそれぞれ、クライアント（１０２）に対するプロキシとしてセッション空間（４０６）又はグローバル空間（４０８）において使用され得る。
【００５１】
[0057]更に、累進的なテクスチャレンダリング方法、フレームレート制御方法及び自動再接続方法のような１つ以上の方法が、Ｄ３Ｄ遠隔化アーキテクチャにおいて実装され得る。一実装において、Ｄ３Ｄアプリケーション（４１０）は、より良いエンドユーザー体験を達成するために、より多くのネットワーク回線容量を消費するメッシュ及びテクスチャなどのＤ３Ｄリソースも処理する。そのような場合、累進的なテクスチャレンダリング方法が効率的に帯域幅を割り当て、より良いエンドユーザー体験を達成するように構成され得る。
【００５２】
[0058]更に、Ｄ３Ｄ抽象化モジュール（１１８）が、Ｄ３Ｄアプリケーション（４１０）のタイプに基づいてフレーム転送レートを制限することによって、サーバー（１０６）が帯域幅消費を規制可能なフレームレート制御方法を使用し得る。そのようなフレームレート制御方法は、複数の接続並びにアプリケーション間の拡張性及び一貫性を改善し得る。
【００５３】
[0059]加えてＤ３Ｄアプリケーション（４１０）からシームレスなリモート自動再接続体験を提供する自動再接続方法が実装され得る。例えば、クライアント（１０２）がＤ３Ｄアプリケーション（４１０）の実行中に切断されたとき、実行中のＤ３Ｄアプリケーション（４１０）を支援可能な新しいクライアントが接続され得る。一実装において、新しいクライアントの再接続中、Ｄ３Ｄアプリケーション（４１０）は、ＤＥＶＩＣＥ＿ＬＯＳＴ又はＤＥＶＩＣＥ＿ＲＥＭＯＶＥＤなどのメッセージを受信する。Ｄ３Ｄ抽象化モジュール（１１８）は、その後、Ｄ３Ｄアプリケーション（４１０）を切断前のステータスにリストアし、Ｄ３Ｄアプリケーション（４１０）実行をレジュームする。別の実装において、新しいクライアントに再接続中、Ｄ３Ｄ抽象化モジュール（１１８）は、サーバーサイド（４０２）において、オブジェクトコンテンツを再生成するために必要とされるＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクトの完全な抽象化を実行する。
【００５４】
[0060]サーバー（１０６）は、切断セッション中、無限数のＤ３Ｄコマンド（２１２）を蓄積しないことを保証するための更なる方法が使用され得る。本実装において、サーバー（１０６）において、無限数のＤ３Ｄコマンド（２１２）を回避するために、Ｄ３Ｄアプリケーション（４１０）を呼び出す１つ以上のカーネルのスレッドが遮断され得る。
例示的プロセス
[0061]Ｄｉｒｅｃｔ３Ｄ遠隔化アーキテクチャを実装する例示的方法を以下に説明する。これらの方法のいくつか又はすべては必要でないが、図１〜４に示されるようなアーキテクチャの少なくとも一部は実装され得る。また、本方法のいくつかの動作は、説明した順番で実行される必要性はなく、状況によって変更され、及び／又は完全に省略されることを理解されたい。
【００５５】
[0062]図５は、サーバー端末におけるＤ３Ｄグラフィックアプリケーション中の抽象化コマンドに関する例示的プロセス（５００）を示している。例示的プロセス（５００）が説明される順番は、制限として理解されるように意図されておらず、説明したどのような方法のブロックも本方法又は代替方法を実装するために順不同に接続され得る。更に、個々のブロックは、本明細書に記載した対象項目の趣旨及び範囲から逸脱せずに本方法から削除され得る。更に、本方法は、適切な任意のハードウェア、ソフトウェア、ファームウェア、又はその組み合わせで実装され得る。
【００５６】
[0063]ブロック（５０２）において、１つ以上のグラフィックアプリケーションコマンドが識別され、グラフィックアプリケーションから受信され得る。Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３Ｄ抽象化レイヤ（４１２）においてグラフィックアプリケーションコマンドを監視していて、Ｄ３Ｄアプリケーション（４１０）から受信し得る。
【００５７】
[0064]ブロック（５０４）において、アプリケーションコマンドが、ＡＰＩを介しグラフィックハードウェアドライバーに連絡される。Ｄ３Ｄ抽象化モジュール（１１８）は、Ｄ３ＤＡＰＩ（４１４）を介し、受信したコマンド（２１２）をグラフィックハードウェアドライバーに連絡し得る。
【００５８】
[0065]ブロック（５０６）において、グラフィックハードウェアドライバーによって生成されたアプリケーションコマンド及びオブジェクトが、データストリームの中に抽象化される。Ｄ３Ｄ抽象化モジュール（１１８）が、生成されたＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）をデータストリーム（２１６）の中に隠されたデータとして抽象化し得、それらがネットワーク（１０４）上に送信される。更に、Ｄ３Ｄ抽象化モジュール（１１８）が、１つ以上のＤ３Ｄオブジェクトにハンドル又は識別子を割り当てる。Ｄ３Ｄ抽象化モジュール（１１８）は、クライアント（１０２−１）においてＤ３Ｄオブジェクト（２１４）を生成するために使用され得るハンドルを別のパラメータと一緒にデータストリーム（２１６）の中に記録する。
【００５９】
[0066]ブロック（５０８）において、データストリームが、クライアントにネットワークを介し送信される。Ｄ３Ｄ抽象化モジュール（１１８）は、１つ以上のクライアント（１０２）、例えばクライアント（１０２−１）にデータストリーム（２１６）を送信し得る。データストリーム（２１６）がその後、クライアント（１０２−１）のＤ３Ｄプラグイン（１１２）によって、データストリーム（３１４）として受信される。
【００６０】
[0067]一実装において、データストリーム（２１６）中のＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）は、当技術分野で周知の任意の圧縮及びデシメーション方法を使用し圧縮され得る。例えば、Ｄ３Ｄリソースが、テクスチャ、メッシュデータなどのようにサイズが大きく、ネットワーク（１０４）の帯域幅に適合することが不可能な場合、そのような技法が使用され得る。圧縮されたＤ３Ｄリソースは、その後、リモートアダプター（１２０）を介しネットワーク（１０４）上に送信され得る。
【００６１】
[0068]リモートアダプター（１２０）は、Ｄ３Ｄ抽象化モジュール（１１８）をクライアント（１０２−１）のＤ３Ｄプラグイン（１１２）と通信可能にする。これに関連し、リモートアダプター（１２０）は、クライアント（１０２−１）のディスプレイアダプターの利用可能性及び機能ステータスをチェックする。確認がＤ３Ｄプラグイン（１１２）から一旦、受信されると、リモートアダプター（１２０）は、Ｄ３Ｄ抽象化レイヤ（４１２）とＤ３Ｄプラグイン（１１２）との間に通信チャネルを確立する。Ｄ３Ｄ抽象化モジュール（１１８）は、確立した通信チャネルを介し、ネットワーク（１０８）上のクライアント（１０２）にデータストリーム（２１６）を送信する。
【００６２】
[0069]図６は、３Ｄ画像をレンダリングするための例示的プロセスを示す。例示的プロセス（６００）が説明されている順番は、制限として理解されるように意図されておらず、本方法又は代替方法を実装するために説明した方法のブロックがどれでも順不同に接続され得る。更に、個々のブロックは、本明細書に記載した対象項目の趣旨及び範囲から逸脱せずに本方法から削除され得る。更に、本方法は、適切な任意のハードウェア、ソフトウェア、ファームウェア、又はその組み合わせにて実装され得る。
【００６３】
[0070]ブロック（６０２）において、データストリームがサーバーから受信される。クライアント（１０２−１）のＤ３Ｄプラグイン（１１２）が、サーバー（１０６）のＤ３Ｄ抽象化モジュール（１１８）からデータストリーム（３１４）を受信する。
【００６４】
[0071]ブロック（６０４）において、Ｄ３Ｄコマンド及びＤ３Ｄオブジェクトが、データストリームから抽出される。Ｄ３Ｄプラグイン（１１２）が、データストリーム（３１４）からＤ３Ｄコマンド（２１２）及びＤ３Ｄオブジェクト（２１４）を抽出し得る。更に、Ｄ３Ｄプラグイン（１１２）は、クライアント（１０２−１）のＧＰＵの支援を用いてＤ３Ｄコマンド（２１２）を実行し得る。
【００６５】
[0072]ブロック（６０６）において、グラフィック画像形式の出力は、クライアントにおける入力／出力装置を介しレンダリングされる。３Ｄグラフィック画像（３１６）のようなＤ３Ｄアプリケーション（４１０）の出力は、当技術分野で周知の任意のレンダリングアルゴリズムを使用し、クライアント（１０２−１）の入力／出力装置（３１０）を介し、レンダリングされ得る。
【００６６】
[0073]前述した任意の方法に関する動作のいくつかはプロセッサー又はその他の計算装置によって、１つ以上の計算機可読媒体上にストアされている命令に基づいて実装される。計算機可読媒体は、リソースモデリングアプリケーションによって利用可能なローカル又はリモートにアクセスされ得る任意の媒体であり得る。非限定の例として計算機可読媒体は、計算機記憶媒体及び通信媒体を含む。計算機記憶媒体は、計算機読込可能命令、データ構造、プログラムモジュール、又はその他のデータなどの情報記憶に関する任意の方法若しくは技術で実装された揮発性及び不揮発性並びに取り外し可能及び取り外し不可能媒体を含む。計算機記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリー、若しくはその他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、若しくはその他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、若しくはその他の磁気記憶装置、又は所望した情報をストアするために使用され、アプリケーションをモデル化するリソースによってアクセスされ得る別の任意の媒体、を含むがこれらに限定しない。通信媒体は、通常、任意の情報伝達媒体に対する計算機可読命令、データ構造、プログラムモジュール、又はその他のデータを具体化する。いくつかの上記の組み合わせも計算機可読媒体の範囲内に含まなくてはならない。
【００６７】
結論
[0074]本発明は、自己記述型データレンダリングを実装するための構造的特徴及び／又は方法論の動作に対し特定の言語で説明しているが、本発明が必ずしも説明した特定の特徴又は動作に限定されるわけではないことが理解されよう。むしろ、特定の特徴及び動作は、本発明を実装する例示的形式として開示されている。
【符号の説明】
【００６８】
１００      例示的ネットワーク計算環境
１０２      クライアント
１０２−１  クライアント
１０２−２  クライアント
１０２−３  クライアント
１０２−Ｎ  クライアント
１０４      ネットワーク
１０６      サーバー
１０８      メモリー
１１０      プログラムモジュール
１１２      Ｄ３Ｄプラグイン
１１４      メモリー
１１６      ユーザー空間
１１８      Ｄ３Ｄ抽象化モジュール
１２０      リモートアダプター
２０２      プロセッサー
２０４      ネットワークインターフェース
２０６      入力／出力インターフェース
２０８      プログラムデータ
２１０      その他のモジュール
２１２      Ｄ３Ｄコマンド
２１４      Ｄ３Ｄオブジェクト
２１６      データストリーム
２１８      その他のプログラムデータ
３０２      プロセッサー
３０４      ネットワークインターフェース
３０６      入力／出力インターフェース
３０８      プログラムデータ
３１０      入力／出力装置
３１２      その他のモジュール
３１４      データストリーム
３１６      グラフィック画像
３１８      その他のプログラムデータ
４００      遠隔化アーキテクチャ
４０２      サーバーサイド
４０４      クライアントサイド
４０６      セッション空間
４０８      グローバル空間
４１０      Ｄ３Ｄアプリケーション
４１２      Ｄ３Ｄ抽象化レイヤ
４１４      Ｄ３Ｄアプリケーションプログラミングインターフェース
４１６      ローカルＧＰＵドライバー
４１８      Ｗｉｎ３２ｋプロセス
４２０      ＧＤＩアプリケーション
４２２      ＧＤＩ３２プロセス
４２４      Ｄ３Ｄアプリケーションプログラミングインターフェース
４２６      Ｗｉｎ３２ｋプロセス
４２８      ＧＤＩ３２プロセス
４３０      リモートターミナルサーバークライアント
４３２      ＲＤＰＤＤ（リモート・デスクトップ・プロトコル・デバイス・ドライバー）
４３４      ＲＤＰＷＤ（リモート・デスクトップ・プロトコル・Ｗｉｎ３２ｋ・ドライバー）
【図１】
0005455930.tif 000002
【図２】
0005455930.tif 000003
【図３】
0005455930.tif 000004
【図４】
0005455930.tif 000005
【図５】
0005455930.tif 000006
【図６】
0005455930.tif 000007