(57)【特許請求の範囲】
【請求項１】
複数の第２コンピュータシステムに接続された第１コンピュータシステムであって、前記複数の第２コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第１コンピュータシステムにより、それぞれが前記複数の第２コンピュータシステムの１つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
前記第１コンピュータシステムが、前記複数の第２コンピュータシステムの各々の表示能力を決定する段階と、
前記複数の第２コンピュータシステムの各々に、前記複数の第２コンピュータシステムの各々の前記表示能力に基づいて、複数のレンダリングターゲットユニットの少なくとも１つを割り当てる段階と、
前記第１コンピュータシステムにより、前記複数のレンダリングパラメータのセットに基づいて、前記複数の第２コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、前記複数の画像それぞれは前記複数の第２コンピュータシステムの１つについて、前記複数の第２コンピュータシステムの前記１つに対応する前記複数のレンダリングパラメータのセットの１つに基づいてレンダリングされ、前記レンダリングターゲットに格納される段階と、
前記第１コンピュータシステムにより、前記複数の画像それぞれを、前記画像がレンダリングされている前記複数の第２コンピュータシステムのうち対応するものに送信する段階と
を備える方法。
【請求項２】
前記複数のレンダリングターゲットユニットのそれぞれは、少なくとも１つの画素を格納し、
前記複数の画像それぞれは、前記画像がレンダリングされた前記複数の第２コンピュータシステムの１つに割り当てられた前記複数のレンダリングターゲットユニットの前記少なくとも１つ内にレンダリングされる、請求項１に記載の方法。
【請求項３】
前記第１コンピュータシステムにより、送信前に前記複数の画像を同時に符号化する段階をさらに備える、請求項１または２に記載の方法。
【請求項４】
前記複数の画像それぞれは、複数のビデオストリームの１つの現在のフレームとして符号化され、
前記複数のビデオストリームそれぞれは、前記複数の第２コンピュータシステムの１つに対応している、請求項３に記載の方法。
【請求項５】
前記第１コンピュータシステムにより、前記画像がレンダリングされた前記複数の第２コンピュータシステムの前記１つに対して前記複数の画像それぞれを送信する段階は、
前記第１コンピュータシステムにより、前記複数のビデオストリームそれぞれを、前記複数の第２コンピュータシステムの対応するものに送信する段階を有する、請求項４に記載の方法。
【請求項６】
前記第１コンピュータシステムにより、前記複数のレンダリングパラメータのセットを更新する段階をさらに備える、請求項１から５の何れか１項に記載の方法。
【請求項７】
前記複数の第２コンピュータシステムそれぞれの上で、特定のコンピュータプログラムのインスタンスが実行され、
前記複数の第２コンピュータシステムそれぞれの上で実行されている前記特定のコンピュータプログラムの前記インスタンスの現在の状態によって、当該第２コンピュータシステムに対応する前記複数のレンダリングパラメータのセットのうちの対応するものが決定される、請求項６に記載の方法。
【請求項８】
前記複数のレンダリングパラメータのセットそれぞれが、少なくとも１つのシェーダ定数を含む、請求項１から７の何れか１項に記載の方法。
【請求項９】
複数の第２コンピュータシステムに接続され、前記複数の第２コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第１コンピュータシステムであって、
それぞれが前記複数の第２コンピュータシステムの１つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
前記複数の第２コンピュータシステムの各々の表示能力を決定する段階と、
前記複数の第２コンピュータシステムの各々に、前記複数の第２コンピュータシステムの各々の前記表示能力に基づいて、複数のレンダリングターゲットユニットの少なくとも１つを割り当てる段階と、
前記複数のレンダリングパラメータのセットに基づいて、前記複数の第２コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、前記複数の画像それぞれは前記複数の第２コンピュータシステムの１つについて、前記複数の第２コンピュータシステムの前記１つに対応する前記複数のレンダリングパラメータのセットの１つに基づいてレンダリングされ、前記レンダリングターゲットに格納される段階と、
前記複数の画像それぞれを、前記画像がレンダリングされている前記複数の第２コンピュータシステムのうち対応するものに送信する段階と
を実行する第１コンピュータシステム。
【請求項１０】
複数の第２コンピュータシステムに接続され、前記複数の第２コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第１コンピュータシステムにより実行されるプログラムであって、当該プログラムは前記第１コンピュータシステムに、
それぞれが前記複数の第２コンピュータシステムの１つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
前記複数の第２コンピュータシステムの各々の表示能力を決定する段階と、
前記複数の第２コンピュータシステムの各々に、前記複数の第２コンピュータシステムの各々の前記表示能力に基づいて、複数のレンダリングターゲットユニットの少なくとも１つを割り当てる段階と、
前記複数のレンダリングパラメータのセットに基づいて、前記複数の第２コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、前記複数の画像それぞれは前記複数の第２コンピュータシステムの１つについて、前記複数の第２コンピュータシステムの前記１つに対応する前記複数のレンダリングパラメータのセットの１つに基づいてレンダリングされ、前記レンダリングターゲットに格納される段階と、
前記複数の画像それぞれを、前記画像がレンダリングされている前記複数の第２コンピュータシステムのうち対応するものに送信する段階と
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。
【背景技術】
【０００２】
一般に、クライアント−サーバアーキテクチャは、サーバ（「サービスプロバイダ」と考えることもできる）と、クライアント（「サービス要求者」または「サービス消費者」ととらえることもできる）と間でタスクまたはワークロードを分割する分散コンピューティングアーキテクチャである。しばしば、サーバとクライアントとはコンピュータネットワークを介して接続されており、様々な種類のデータが、個々のサーバと個々のクライアントとの間で、コンピュータネットワークを介して双方向送信される。
【０００３】
通常サーバは、クライアントより多くのリソースを有し、性能機能が高い。１つのサーバは、１以上のクライアントとの間でリソースを共有する場合があり、例えば、これらクライアントのために一定のタスクを実行する（つまり、これらクライアントにサービスを提供する）。サーバは通常の場合、クライアントよりも多くのリソースを有することから、タスクを（特にリソースを多く必要とするタスク）を、クライアントよりも早く完成することができることが多い。
【０００４】
サーバおよびクライアント間で交換されるデータは、任意の適切なデータフォーマットを利用して表すことができ、任意の適切な通信プロトコルを利用して送信することができる。例えば、あるアプリケーションがクライアントのためのサーバで実行されている場合を考えると、アプリケーションの出力は、ハイパーテキストマークアップ言語（ＨＴＭＬ）文書または拡張可能マークアップ言語（ＸＭＬ）文書等の構造化された文書を利用して表される場合がある。サーバはクライアントに、アプリケーションの出力を表すデータを含むＨＴＭＬまたはＸＭＬ文書を、サーバとクライアントとの間のハイパーテキスト転送プロトコル（ＨＴＴＰ）接続を介して送信することができる。クライアントは、このＨＴＭＬまたはＸＭＬ文書を受け取ると、クライアントで実行されているウェブブラウザ等においてローカルにＨＴＭＬまたはＸＭＬ文書を利用して、文書を消費してアプリケーションの出力をレンダリングすることができる。
【発明の概要】
【０００５】
本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。一部の実施形態では、コンピュータシステムは複数のアプリケーションインスタンスをホストしており、各アプリケーションインスタンスが１つの遠隔のクライアントアプリケーションに対応している。コンピュータシステムは、アプリケーションインスタンスがホストされている各遠隔クライアントアプリケーションへのネットワーク接続を維持する。コンピュータシステムは、少なくとも２つの遠隔クライアントアプリケーション間で、コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる。コンピュータシステムは、コンピュータシステムのグラフィックプロセッシングユニットのリソースを利用して、少なくとも２つの遠隔クライアントアプリケーションに対応するアプリケーションインスタンスのグラフィック出力を同時にレンダリングする。そしてコンピュータシステムは、レンダリングしたグラフィック出力を、銘々のネットワーク接続を介して少なくとも２つの遠隔クライアントアプリケーションに送信する。
【０００６】
一部の実施形態では、第１コンピュータシステムが複数のレンダリングパラメータのセットにアクセスするが、第１コンピュータシステムは複数の第２コンピュータシステムに接続されており、各レンダリングパラメータのセットは、複数の第２コンピュータシステムの対応する１つに対応しており、第１コンピュータシステムは、画像を格納するためのレンダリングターゲットを含み、このレンダリングターゲットは、複数の複数の第２コンピュータシステムで共有される。第１コンピュータシステムは、複数のレンダリングパラメータのセットに基づいて、複数の第２コンピュータシステムのための複数の画像を同時にレンダリングするが、複数の画像それぞれは複数の第２コンピュータシステムの１つについて、複数の第２コンピュータシステムの１つに対応する複数のレンダリングパラメータのセットの１つに基づいてレンダリングされ、レンダリングターゲットに格納される。第１コンピュータシステムは、複数の画像それぞれを、画像がレンダリングされている複数の第２コンピュータシステムのうち対応するものに対して送信する。
【０００７】
記載した、または記載していない開示の特徴、側面、および利点は、添付図面とともに、以下の詳細な記載に詳述される。
【図面の簡単な説明】
【０００８】
【図１】複数のクライアントにサーバのリソースを割り当てるためのクライアント−サーバシステムの一例を示す。
【図２】複数の対象ユニットに分割するサーバのレンダリングターゲットの一例を示す。
【図３】複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。
【図４】ネットワーク環境の一例を示す。
【図５】コンピュータシステムの一例を示す。
【発明を実施するための形態】
【０００９】
本開示を、添付図面を参照しつつ、一部の実施形態に基づいて記載する。以下の記載では、特定の詳細を述べて、本開示の完全な理解を促す。しかし、当業者には、本開示がこれら特定の詳細の一部または全てがなくても実施可能であることが明らかである。他の場合には、本開示を不当に曖昧にしないために、公知のステップおよび／または構造は、詳しく示さない。加えて、本開示は、特定の実施形態との関連で記載されるが、この記載は、記載される実施形態に開示を限定する意図はないことを理解されたい。逆に、記載は、添付請求項で定義される開示の精神および範囲内に含まれている代替例、変更例、および均等物を含むことを意図している。
【００１０】
クライアント−サーバアーキテクチャは、サーバに、１以上のクライアントとリソースを共有させる。このアーキテクチャは様々な利点を有している。例えば通常のサーバはクライアントよりも多くのリソース（例えばプロセッサまたはメモリ）を有し、性能機能が高いことから、サーバは、クライアントよりもタスクを早くすることができることが多い。このような性能面での違いは、タスクがリソースを多く必要とする場合、または、クライアントのリソース量が限られている場合に特に顕著となる。同時に、サーバがクライアントの代わりに、またはクライアントのためにタスクを行っている間、クライアントのリソース占有を解除して、クライアントでローカルに実行する必要のあるタスク等の他のタスク（例えば、クライアントのユーザとのやりとり）を行わせる、といったこともできる。
【００１１】
サーバで実行されるのに適していると思われるタスクの一種に、サーバがホストするアプリケーションを、クライアントに対する送信用のビデオ出力としてレンダリングする、というものがある。コンピュータグラフィックの分野では、レンダリングは、通常はコンピュータプログラムを利用して、あるモデルから画像を生成するプロセスとして理解されている。モデルは、通常、三次元（３Ｄ）オブジェクトの記述であり、厳密に定義された言語またはデータ構造で表すことができるようなものである。モデルは、幾何学、視点、テクスチャ、照明、シェーディング、動き、その他の適切な種類の情報を含んでよい。モデルがレンダリングされる画像は、デジタル画像またはラスターグラフィック画像であってよく、画素群により形成することができる。本開示では、レンダリングの思想を、任意のアプリケーションの任意の出力を表す画像を生成することへと拡張する。レンダリングは、２次元（２Ｄ）データおよび３Ｄデータを含む任意のデータに基づいて実行されてよい。あくまで例示であり限定ではないが、特定の実施形態では、３Ｄモデルに基づいて画像を生成することに加えて、ウェブのブラウジングアプリケーション、ワード処理アプリケーション、スプレッドシートアプリケーション、マルチメディアアプリケーション、科学および医療用のアプリケーション、およびゲームアプリケーション等のアプリケーションの出力を表す画像もレンダリングする。
【００１２】
レンダリングは、高解像度および高画質をレンダリングされる画像に求める場合には特に、非常に計算量が多いことからリソースを多く必要とするプロセスであるので、サーバでの実行に適した種類のタスクといえる。これまでの古いコンピュータシステムでは、３次元のモデルを単純な２Ｄ画像にレンダリングするのに数時間または数日間かかっていた。コンピュータハードウェア（特にコンピュータグラフィックアプリケーション（例えばゲーム、マルチメディア、娯楽、またはマッピング）専用に設計されたコンピュータハードウェア）の開発、進歩により、現在のコンピュータシステムは、各画像を数秒間または数ミリ秒間にレンダリングすることができるようになった。実際、モデルを単一の画像にレンダリングするためにサーバで利用可能なリソース全てが占有されるという事態もあまりなくなってきている。一部の実施形態では、サーバで利用可能なリソースを有効活用するために、サーバが複数のクライアントに対して複数のレンダリングを同時に実行して（例えば、複数の３Ｄモデルを複数の２Ｄ画像に同時にレンダリングして）、且つ、各クライアントに対してレンダリングをそれぞれ実行する。一部の実施形態では、サーバの利用可能なリソースが、複数のクライアントに割り当てられたり、複数のクライアントにより共有されたりする場合がある。従って、各クライアントには、サーバで利用可能なリソースの一部が割り当てられる。より詳しくは、一部の実施形態では、サーバのグラフィックプロセッシングユニット（ＧＰＵ）をクライアント間で共有する。特定のクライアントについて実行されるレンダリングはそれぞれ、そのクライアントに対して特に割り当てられたリソースの持分を利用して実行されてよい。一部の実施形態では、レンダリングプロセスで生じた出力である各レンダリングされた画像を、レンダリング画像が取得された対応するクライアントに送信してもよい。
【００１３】
図１は、単一のサーバ１２０が複数のクライアント１３０に同時に複数のレンダリングを行うシステムの一例を示す。図１には、図示をしやすくする目的から４つのクライアント１３０Ａ、１３０Ｂ、１３０Ｃ、１３０Ｄしか示していない。実際には、サーバは、任意の数のクライアントに対してレンダリングを同時に行ってよく、任意の時点においてあるサーバがサポートするクライアント数には理論的には制限がない。同様に、図１には、図示をしやすくする目的から１つのＧＰＵ１２１および１つのＣＰＵ１２２しか示していない。実際には、サーバは、任意の数のＧＰＵおよびＣＰＵを有してよい。
【００１４】
一部の実施形態では、サーバ１２０は各クライアント１３０とそれぞれ別の接続１５０を介して接続する。一部の実施形態では、サーバ１２０とクライアント１３０との間の接続１５０は、コンピュータネットワークを介したネットワーク接続であってよく、このコンピュータネットワークとは、あくまで例示であり限定ではないが、インターネット、イントラネット、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、無線ネットワーク、またはこれらコンピュータネットワークの２以上の組み合わせであってよい。一部の実施形態では、各ネットワーク接続１５０が、トランスポート制御プロトコル（ＴＣＰ）接続、ユーザデータグラムプロトコル（ＵＤＰ）接続、または任意の他の適切な接続であってよい。一部の実施形態では、サーバ１２０は複数のＴＣＰソケット１２４を有してよく、各クライアント１３０が、別個のＴＣＰ接続１５０を介して異なるＴＣＰソケット１２４に接続されていてよい。例えばクライアント１３０Ａは、ＴＣＰ接続１５０Ａを介してサーバ１２０のＴＣＰソケット１２４Ａに接続されてよい。一部の実施形態では、データがサーバ１２０と各クライアント１３０との間で双方向に、対応する接続１５０を介して交換されてよい。例えばサーバ１２０とクライアント１３０Ａとは、接続１５０Ａを介して双方向にデータを交換してよい。データは任意の適切なフォーマットであってよい。例えばサーバ１２０は、ビデオストリームの形態でデータをクライアント１３０に送信することができ、各クライアント１３０が、データをサーバ１２０に送信してよい。サーバ１２０とクライアント１３０との間の通信では、任意の適切なプロトコルが利用されてよい。例えば、アプリケーション１３１Ａのインスタンスが、クライアント１３０Ａのためにサーバ１２０で実行されている場合を想定する。サーバ１２０で実行されているアプリケーション１３１Ａのインスタンスのレンダリングされた出力が、ビデオストリームの形態でサーバ１２０からクライアント１３０Ａに送信されてよく、各レンダリングされた画像は、アプリケーション１３１Ａのインスタンスの出力を、ビデオストリームの特定のフレームで表したものである。クライアント１３０Ａが受け取った入力は（特に、サーバ１２０で実行されているアプリケーション１３０Ａのインスタンスの状態を変えさせる入力は）、クライアント１３０Ａからサーバ１２０に送信するとよい。
【００１５】
一部の実施形態では、サーバ１２０は、１以上の中央処理装置（ＣＰＵ）１２２と１以上のグラフィックプロセッシングユニット（ＧＰＵ）１２１とを有していてよい。ＣＰＵおよびＧＰＵは、コンピュータ分野でよく知られている。簡単に説明すると、ＣＰＵは、コンピュータの機能およびコンピュータプログラムの命令を実行するコンピュータシステムの部分のことである。ＧＰＵは、マイクロプロセッサ（例えばＣＰＵ）からのグラフィックレンダリングをオフロードするための専用プロセッサである。一般的には、ＧＰＵは、コンピュータグラフィックを操作する際に非常に効率がよく、その高度な並列構造によって、広範囲の複雑なアルゴリズムにおいて（例えばグラフィック関連のアルゴリズムにおいて）、汎用ＣＰＵよりも効果が高い。一部の実施形態では、ＧＰＵ１２１は、ビデオカードの一部であってよく、またはサーバ１２０のマザーボードにあってもよい。
【００１６】
一部の実施形態では、ＧＰＵ１２１はレンダリングターゲットを含んでよい。一部の実施形態では、レンダリングプロセスは、１以上のアプリケーションの出力を、レンダリングターゲットに対する１以上の画像としてレンダリングする。一部の実施形態では、レンダリングされた２Ｄ画像が、ＧＰＵ１２１のレンダリングターゲット内に格納されてよい。一部の実施形態では、レンダリングターゲットは、ＧＰＵ１２１内のフレームバッファまたは任意の種類のメモリまたはストレージであってよい。図２は、ＧＰＵ（例えばＧＰＵ１２１）のレンダリングターゲット２００の一例を示す。この例では、レンダリングターゲット２００がＧＰＵ１２１内のメモリストレージ（例えばフレームバッファ）である。一部の実施形態では、レンダリングターゲットは、１以上のアプリケーションのレンダリングされた出力を表す最大２５６メガピクセルまでを格納することができる。従って、例えばレンダリングターゲットは、それぞれ１メガピクセルのブロック（１０２４ｘ１０２４画素）の１６ｘ１６格子に分割されてよい。レンダリングターゲットは、他の表示アスペクト率に対応するように分割されてもよい。
【００１７】
一部の実施形態では、レンダリングターゲットは、複数の部分に分割されてよい。図２では、レンダリングターゲット２００は、４×４の格子という１６個の部分に分割されており、各部分を、レンダリングターゲット２００のユニットまたはレンダリングターゲットのユニットと称することができる。ここでも、レンダリングターゲット２００を１６個のレンダリングターゲットに分割したのは、説明の便宜上である。一部の実施形態には、レンダリングターゲットは、任意の数のユニットに分割することができ、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に関しては理論上の制限はない。同様に、各レンダリングターゲットユニットのサイズおよび大きさは、レンダリングターゲットのサイズおよび大きさに応じて決定してもよいし、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に応じて定めてもよい。例として、各レンダリングターゲットユニットは、２５６画素×２５６画素であってもよいし、５１２画素×５１２画素であってもよいし、１０２４画素×１０２４画素であってもよい。もちろん、レンダリングターゲットユニットの幅と高さとが同じである必要はない。例えば、レンダリングターゲットユニットが２５６画素×５１２画素であっても、５１２画素×２５６画素であっても構わない。
【００１８】
一部の実施形態では、サーバ１２０のＧＰＵ１２１のレンダリングターゲット２００が４つのクライアント１３０間で分散されており、各クライアント１３０が１以上のレンダリングターゲットユニットを割り当てられても良い。各クライアント１３０に割り当てられるべきレンダリングターゲットユニットの数は、クライアント１３０の実際の要件およびシステムアーキテクチャに応じて定められて良い。一部の実施形態では、特定のクライアント１３０のディスプレイの解像度、大きさ、および向きによって、そのクライアント１３０に割り当てるレンダリングターゲットユニットの数が決定されてもよい。
【００１９】
例えば、図２の各レンダリングターゲットユニットを、１０２４画素×１０２４画素とする。さらに、クライアント１３０Ａが、比較的低解像度（例えば１０２４画素×７６８画素）のディスプレイを持つノートブックコンピュータであるとする。この場合には、１つのレンダリングターゲットユニットが、１０２４画素×７６８画素以下のレンダリング画像を格納するために十分なメモリスペースを有していることになる。従って、クライアント１３０Ａには、１つのレンダリングターゲットユニット（例えばレンダリングターゲットユニット２１１）が割り当てられて良い。他方で、クライアント１３０Ｂが、１９２０画素×１６８０画素のディスプレイを有するデスクトップコンピュータであると想定する。この場合には、１９２０画素×１６８０画素の画像を格納するために４つのレンダリングターゲットユニットが必要となるだろう。従ってクライアント１３０Ｂは、４つのレンダリングターゲットユニットを割り当てられることになる（例えばレンダリングターゲットユニット２１２，２１３、２２２、および２２３）。
【００２０】
一部の実施形態では、特定のクライアント１３０に割り当てられているレンダリングターゲットユニットの向きを、そのクライアント１３０のディスプレイのサイズおよび向きに応じて定めて良い。例えばクライアント１３０Ｃが、ディスプレイの幅がディスプレイの高さよりずっと小さい長尺状のディスプレイを持つ場合を想定する。この場合には、同じ列にある３つのレンダリングターゲットユニット２２１、２３１、２４１をクライアント１３０Ｃに割り当てることで、長尺状のディスプレイをサポートすることができる（つまり、レンダリングターゲットユニット２２１、２３１、２４１を合わせることで、クライアント１３０Ｃのディスプレイのサイズおよび向きをシミュレーションする）。最後に、クライアント１３０Ｄが高解像度のディスプレイを有しており、この高解像度のレンダリング画像を格納するために、６つのレンダリングターゲットユニット２３２、２３３、２３４、２４２、２４３、２４４をクライアント１３０Ｄに割り当てる場合を想定する。
【００２１】
もちろん、任意のある時点に、全ての利用可能なレンダリングターゲットユニットが個々のクライアントに割り当てられる必要はない。一定のレンダリング中に、複数のレンダリングターゲットユニット（例えばレンダリングターゲットユニット２１４、２２４）を未割り当てにしておいて、後でクライアント１３０に割り当てることもできる。同様に、あるクライアント１３０に既に割り当てたレンダリングターゲットユニットを、不要になった時点で（例えばこのクライアント１３０がサーバ１２０から切断された場合等）、割り当て解除することもできる。
【００２２】
一部の実施形態では、各クライアント１３０が、アプリケーションと称されることもある１以上のコンピュータプログラムに関連付けられてよい。図１では、説明を簡単にするべく、１つのアプリケーション１３１を、各クライアント１３０に関連付けられているものとして示している。例えばアプリケーション１３１Ａがクライアント１３０Ａに関連付けられているとする。しかしながらこの思想は、各クライアント１３０に複数のアプリケーションが関連付けられている場合であっても通用する。
【００２３】
一部の実施形態では、サーバ１２０は、１以上のクライアント１３０のための１以上のアプリケーション１３１の１以上のインスタンスをホストするよう構成されている。アプリケーション１３１のインスタンスのレンダリングされた出力が、対応するクライアント１３０へと送信されて、クライアント１３０の１以上のユーザに対して表示される。一部の実施形態では、クライアント１３０に関するアプリケーション１３１のインスタンスを、クライアント１３０のために、サーバ１２０で実行することができる。サーバ１２０で実行されるアプリケーション１３１のインスタンスの出力は、サーバ１２０によって、画像としてレンダリングされてよい。一部の実施形態では、アプリケーション１３１のインスタンスのレンダリングされた出力は、ビデオデータとして符号化されて、ビデオストリームとして対応するクライアント１３０に送信されてよい。各クライアント１３０は、対応するアプリケーション１３１のレンダリング出力を表すビデオストリームを受信すると、ビデオデータを復号して、対応するアプリケーション１３１のレンダリング出力を表示することができる。例えば、アプリケーション１３１Ａのインスタンスを、クライアント１３０Ａのサーバ１２０上で実行する。アプリケーション１３１Ａのインスタンスの出力は、サーバ１２０によって１以上の画像としてレンダリングされてよい。アプリケーション１３１Ａのインスタンスのレンダリングされた出力は、ビデオストリームとして符号化されて、クライアント１３０Ａへ送信されてよい。クライアント１３０Ａがビデオストリームを受信すると、ビデオストリームを復号して、アプリケーション１３１Ａのレンダリング出力を取得して、この出力をクライアント１３０Ａに表示することができる。一部の実施形態では、各クライアント１３０が、１以上のＣＰＵ（不図示）と１以上のＧＰＵ（不図示）とを含んでよい。一部の実施形態では、各クライアント１３０が、ビデオストリーム（符号化されたビデオフレーム）をそのＧＰＵのメモリにロードして、符号化されたビデオデータを復号することで、対応するアプリケーション１３１のレンダリング出力を表示することができる。
【００２４】
クライアント１３０でコンピュータプログラム１３１のインスタンスが実行されると、様々なレンダリングを実行する必要がでてくる。例えば、プログラムインスタンス１３１Ａがゲームアプリケーションであると想定する。ゲームのビデオは、毎秒６０フレームのレートで進むようなものであり、各フレームでは、ゲームシーンの新たな３Ｄモデルを画像にレンダリングする必要がでてくる。従って、プログラムインスタンス１３１Ａが、毎秒６０回のレンダリングを必要とする場合がある。プログラムインスタンス１３１Ｂが動画像であるとすると、ビデオは毎秒３０フレームの速度で進む。ここでも、各フレームでは、動画のシーンを画像に新たにレンダリングする必要がある場合がある。従ってプログラムインスタンス１３１Ｂは、毎秒３０回のレンダリングを必要とする。さらに、画像をそのプログラムインスタンス１３１の３Ｄモデルからレンダリングする方法を示すレンダリングパラメータが一式、各プログラムインスタンス１３１に対して存在する。一部の実施形態では、レンダリングパラメータに、あくまで一例であり限定ではないが、レンダリングするモデル、ビューポートまたはカメラアングル、照明、テクスチャ、シェーディング、または画像の解像度を含めることができる。さらに、レンダリングパラメータは、フレームごと、つまりレンダリングごとに変化することがある。例えば、プログラムインスタンス１３１Ａ等のゲームアプリケーションでは、クライアント１３０Ａのプレーヤがそのゲームシーンの間に動くと、そのゲームシーンの３Ｄモデルのオブジェクト、ひいては、カメラアングル、照明、およびシェーディングも変わる場合がある。この結果、各レンダリングが、ゲームの現在の状態（例えば、そのレンダリングのための特定のシーン、視点の位置、カメラアングル、照明、またはシェーディング）に対応するレンダリングパラメータの別のセットを有することがある。
【００２５】
一部の実施形態では、サーバ１２０が、サーバ１２０に現在接続しているクライアント１３０ごとに異なるレンダリングパラメータのセット１２３を有している。例えば、レンダリングパラメータのセット１２３Ａは、クライアント１３０Ａに対応している。各レンダリングパラメータのセット１２３は、コンピュータプログラム１３１の対応するインスタンスから取得されてよく、当該コンピュータプログラム１３１のインスタンスのレンダリング方法を記述していてよい。例えば、レンダリングパラメータのセット１２３Ａは、プログラム１３１Ａについてのレンダリング方法を記述したレンダリングパラメータを含んで良く、レンダリングパラメータは、プログラムインスタンス１３１Ａの現在の状態に基づいて更新することができてよい。
【００２６】
場合によっては、複数のクライアント１３０が、同じコンピュータプログラムの複数のインスタンスを実行しつつ、異なるレンダリングパラメータ１２３を有していてもよい。例えば、クライアント１３０Ａおよび１３０Ｄが、同じゲームアプリケーションの２つのインスタンスを実行する場合を想定する。クライアント１３０Ａおよび１３０Ｄにおける２人のプレーヤは、独立して、または相互作用しつつ同じゲームをプレイすることができる（例えば、同じゲームにおける２つの異なるキャラクターとして）。２人のプレーヤがある時点で同じゲームを独立してプレイする場合には、ゲームの異なる段階にある場合があるので、この２人のプレーヤがクライアント１３０Ａおよび１３０Ｄのディスプレイ上で見る画像は異なる。もしも２人のプレーヤがある時点で同じゲームを相互作用しつつプレイする場合には、同じゲームシーン中であっても、２人のプレーヤは、そのゲームシーンを異なる位置且つ異なる角度から見ることになる。この場合にも、２人のプレーヤは、クライアント１３０Ａおよび１３０Ｄのディスプレイ上でそれぞれ別の画像を見ることになる。いずれの場合にも、２人のプレーヤがある時点で別の画像を見ているために、レンダリングパラメータは、同じゲームアプリケーションの２つのインスタンス間で異なるものとなる。
【００２７】
一回のレンダリングパスにおいて、ピクセルシェーダ（および／または他のレンダリング機能）は、とりわけ、画像をレンダリングする視点などを画定するレンダリングパラメータのセットによって動作する。一部の実施形態では、一回のレンダリングパスにおいて、サーバ１２０が、４つのレンダリングパラメータのセット１２３にそれぞれ基づいて、クライアント１３０上で実行される４つのプログラムインスタンス１３１について４回のレンダリングを同時に行うことができる。一部の実施形態では、ＧＰＵ１２１は、実際のレンダリング機能を実行することができる。一部の実施形態では、各レンダリングにおいて、各クライアントに対するレンダリングされた画像フレームが同時に出力される。一部の実施形態では、４つのレンダリングされた画像それぞれを、対応するクライアント１３０に対して割り当てたＧＰＵ１２１内のレンダリングターゲット２００の特定の部分に格納する。例えば、第１レンダリングは、レンダリングパラメータのセット１２３Ａに基づいてクライアント１３０Ａ上で実行されているプログラムインスタンス１３１Ａについて実行されて、この第１レンダリングの画像がレンダリングターゲットユニット２１１に格納される。第２レンダリングが、レンダリングパラメータのセット１２３Ｂに基づいてクライアント１３０Ｂ上で実行されているプログラムインスタンス１３１Ｂについて実行されて、この第２レンダリングの画像がレンダリングターゲットユニット２１２、２１３、２２２、２２３に格納される。第３のレンダリングが、レンダリングパラメータのセット１２３Ｃに基づいてクライアント１３０Ｃ上で実行されているプログラムインスタンス１３１Ｃについて実行されて、この第３のレンダリングの画像がレンダリングターゲットユニット２２１、２３１、２４１に格納される。第４のレンダリングが、レンダリングパラメータのセット１２３Ｄに基づいてクライアント１３０Ｄ上で実行されているプログラムインスタンス１３１Ｄについて実行されて、この第４のレンダリングの画像がレンダリングターゲットユニット２３２、２３３、２３４、２４１、２４２、２４３、２４４に格納される。
【００２８】
一部の実施形態では、一回の符号化パスにおいて、サーバ１２０が、レンダリングターゲット２００に格納されている４つのレンダリング画像を同時に符号化することができる。一部の実施形態では、ＧＰＵ１２１が実際の符号化を実行する。例えば、レンダリング画像それぞれを、別のビデオストリームの１つのフレームとして符号化することができる。一部の実施形態では、サーバ１２０は、今は４つのビデオストリームに符号化されている４つのレンダリング画像を、それぞれ４つのクライアント１３０に送信することができる。より詳しくは、第１レンダリング画像を、第１ビデオストリームのフレームとして符号化して、クライアント１３０Ａに送信することができる。第２レンダリング画像は、第２ビデオストリームのフレームとして符号化して、クライアント１３０Ｂに送信することができる。第３のレンダリング画像は、第３のビデオストリームのフレームとして符号化して、クライアント１３０Ｃに送信することができる。第４のレンダリング画像は、第４のビデオストリームのフレームとして符号化して、クライアント１３０Ｄに送信することができる。各クライアント１３０は、対応するビデオストリームを受信すると、このビデオストリームを復号して、自身のディスプレイ上にレンダリング画像を表示することができる。
【００２９】
一部の実施形態では、サーバ１２０は、ビデオコーデック機能を実装するものであってよい。ビデオコーデックは、サーバ１２０で実行されているアプリケーション１３１のインスタンスの出力を表すレンダリングされた画像を符号化するのに利用されてよい。一部の実施形態では、ビデオコーデックは、レンダリングターゲット２００に格納されているレンダリングされている画像にアクセスして、これら画像をマクロブロックに分割することができる。一実装例では、各マクロブロックのサイズが、１６画素×１６画素であってよい。一部の実装例では、後述するように、離散コサイン変換（ＤＣＴ）演算を８ｘ８の分割部分に実行してもよい。このようにして、４：２：０というダウンサンプリングのために、各マクロブロックが４つの８ｘ８の輝度部分、４つの４ｘ４Ｃｂ部分、および４つの４ｘ４Ｃｒ部分を含む。しかし他のマクロブロックサイズを利用することもできる。次にビデオコーデックは、以下のように各マクロブロックの輝度および色度の分割部分に対して一定の変換および量子化演算を行う。これら演算は直列で行っても並列で行っても良い。符号処理がＧＰＵに行われる場合には、マクロブロックに対する処理は、並列で行うことで処理時間を短くして、高いスループットを得ることができる。
【００３０】
コーデックは、２Ｄ平面を、その画素の輝度値を最もよくモデルしている各マクロブロックに適合させる。平面は、ｚ＝ａｘ＋ｂｙで定義され、ａおよびｂは、平面の勾配パラメータを定義している。コーデックは、次に、平面の勾配パラメータに基づいてマクロブロックの画素の輝度値を調節する。一実装例では、各画素のコーデックは、平面の等式の対応する値を、その位置の画素値から減算する。構想上は、これは、適合後の画素（ｘ，ｙ）＝画素（ｘ，ｙ）−ｚで定義される。一実装例では、コーデックは、色値の分割部分の値は調節しない。
【００３１】
次に、コーデックは、マクロブロックにＤＣＴを適用する。一実装例では、コーデックは、４つの８ｘ８画素の輝度部分および８つの４ｘ４の色度部分にＤＣＴを別個に適用する。コーデックは、次に、２ｘ２のアダマール変換を、各輝度部分および各色度部分に対応して設定された各ＤＣＴ係数のＤＣ成分に適用して、ＤＣ係数値間の相関性を見つける。別の実装例では、コーデックは、これら部分のサイズを動的に決定する。例えば、コーデックは、各部分の選択に対する比率および歪みに基づいて、４ｘ４、８ｘ８、または１６ｘ１６の部分からの選択を行う。
【００３２】
コーデックは、マクロブロックのＤＣＴ係数を、一次（１Ｄ）アレイへと順序を付け直す。一実装例では、４つの色度部分のＤＣＴ係数をジグザグの順序で走査してから、ＤＣＴ係数を飛び越し走査して、ＤＣ成分の値と、他の対応するＤＣＴ成分の値とをまとめる。一実装例では、輝度部分は、色度部分とは別に符号化される。一実装例では、色度部分は、輝度チャネル同様の、まとめる方法により飛び越し走査される。他の実装例では、ジグザグに順序を付け直す以外の方法をとってもよい。
【００３３】
コーデックはさらに、各選択肢のための結果であるコスト（符号化に必要なビット数）と、各選択肢に関する誤りまたは歪みに基づいて、例えば、整数値またはゼロのいずれかに四捨五入するかを判断する量子化プロセスであるレート歪み最適化を利用して、１ＤアレイのＤＣＴ係数を量子化する。一実装例では、レート歪み最適化は、本質的にはビデオ品質メトリックを適用して、ソースからのずれと、各可能性のある決定結果についてのビットコストとを両方計測する。ビットは、その品質レベルに対するビットコストと品質との間の関連性を表す値であるラグランジュでビットコストを乗算することで数学的に計測される。ソースからのずれは、ピーク信号対雑音比（ＰＳＮＲ）ビデオ品質メトリックを最大化するべく、平均二乗誤差として計測することができる。ビットコストの計算は、テストするための各ビデオブロックを、エントロピー符号器に渡して、実際のビットコストを計測することで、行うことができる。
【００３４】
一実装例では、次にコーデックは、各マクロブロックのＤＣ予測値を計算して、そのマクロブロックのＤＣ係数からＤＣ予測値を減算することで、ＤＣ予測値に基づいて各マクロブロックのＤＣ係数を調節する。一実装例では、ＤＣ予測値Ｘは、近隣のブロックのＤＣ係数に基づいて決定されてよい。言い換えると、ブロックＸのＤＣ予測値が、ブロックｃのＤＣ係数値より小さいブロックａおよびｂのＤＣ係数の合計に基づいて決定される、ということである。一実装例では、ＤＣ予測値の調節は、輝度および色度チャネルの両方に対して実行される。
【００３５】
次にコーデックは、量子化された係数を各ブロックについて保留されているメモリスペースへと符号化する。一実装例では、コーデックは、可変長符号化の一形態を利用して、各ブロックについて量子化された係数を圧縮する。一実装例では、コーデックは、ホフマン符号化の次にランレングス符号化（ＲＬＥ）を用いる。各マクロブロックについて量子化されたＤＣＴ係数を符号化すると、マクロブロックの符号化ビットとビット長とが得られる。ビット長が分かったので、コーデックは並列プレフィックス合計操作（parallel prefix sum）を実行して、最終的な出力であるビットストリームにおける各マクロブロックの開始位置を得る。
【００３６】
次にコーデックは、ＧＰＵ１２１に、符号化されたデータを出力ストリームに書き込ませて、ラスター方式同様の順序で各マクロブロックのデータを書き込むことで、メインシステムメモリにバッファさせる。一実装例では、データは、並列処理演算を利用してＧＰＵ１２１によってＣＰＵメモリに書き込むことができる。例えばコーデックは、データを収集操作（gather operation）で１以上の出力ストリームに書き込む。例えば、１つのデータワード（１または２バイト）を書き込むタスクを持つプロセスまたは関数は、各マクロブロックの開始ビット位置とそのフレームの出力ストリームのデータワードの位置とを利用して、データワードを構築してメモリに書き込むためのデータビットにアクセスする留保されているメモリ位置を決定する。収集操作によって、ＧＰＵ１２１のリソースを利用する並列処理演算における出力を書き込むことができるので、さらにスループットを向上させることができる。例えば一実装例では、メモリ内のデータまたはマシンワードの位置を、出力ストリームを書き込む入力として受け取るものとして、関数を定義することができる。この関数は、データまたはマシンワードおよびマクロブロックの開始ビット値の位置に基づいて１以上のマクロブロックから選択されたビット部分から、マシンワードをアセンブルして、マシンワードのデータをメモリに書き込むことができる。この関数は、並列実装することで、クライアント１３０にネットワーク経由で送信するための、ＧＰＵ１２１のメモリ（例えばレンダリングターゲット２００）からの出力のメインメモリへの書き込みを加速して行わせることができる。他の実装例では、ＧＰＵ１２１のメモリは、送信データを、ソケットまたはその他の接続アブストラクションに書き込むために直接アクセスすることができる。
【００３７】
一部の種類のアプリケーションでは、その出力を代表的な画像に連続してレンダリングする必要がある場合がある。例えば上述したように、ゲームアプリケーションは毎秒６０回のレンダリングを必要とするものも多い。他の種類のアプリケーションでは、ユーザ入力があったときのみに新たなレンダリングが必要となる。例えば、ワード処理アプリケーションであれば、ユーザが入力したときのみに、クライアントのスクリーンに表示されている文書をリフレッシュする必要があるだろう（文書の画像のレンダリング）。さらに、クライアントで実行されているアプリケーションインスタンスの各レンダリングは、アプリケーションインスタンスの現在の状態が時間とともに変化することがあるような場合には異なるレンダリングパラメータに基づいて決定されてよい。一部の実施形態では、各クライアント１３０が、クライアント１３０で実行されているプログラムインスタンス１３１、および、必要であれば最近のレンダリングパラメータに基づく３Ｄモデルその他のデータをサーバ１２０に送信してよい。サーバ１２０は、各クライアント１３０から受け取る情報を格納することができる。一部の実施形態では、サーバ１２０は、各クライアント１３０から受け取った情報に基づいて、特定のクライアントに対していつレンダリングを実行するべきかを決定し、このレンダリングでは、３Ｄモデルおよびレンダリングパラメータが、他の適切な情報とともに利用される。一部の実施形態では、ＣＰＵ１２２が実際の決定を行うことができる。一部の実施形態では、各レンダリングパスにおいて、ＣＰＵ１２２がＧＰＵ１２１に、ＧＰＵ１２１がそのレンダリングパス中に同時に複数のレンダリングを実行するために必要となる全てのデータ（例えばモデル、レンダリングパラメータのセット）を提供してよい。
【００３８】
図３は、複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。一部の実施形態では、サーバのＧＰＵ内のレンダリングターゲットを、複数のレンダリングターゲットユニットに分割してよい（ステップ３０１）。一部の実施形態では、レンダリングターゲットは、レンダリングされた画像が格納されうるＧＰＵ内のフレームバッファまたはその他の適切な種類のメモリまたはストレージであってよい。一部の実施形態では、レンダリングターゲットユニットは、全てが同じサイズであってよい（例えば各レンダリングターゲットユニットが同じ画素数を有してよい）。
【００３９】
任意の時点において、サーバは、任意の数のクライアントに接続されてよく、これらクライアントの代わりにこれらクライアントのために（より詳しくは、これらクライアントで実行されているコンピュータプログラムのインスタンスのために）レンダリングを実行してよい。一部の実施形態では、１以上のレンダリングターゲットユニットを、サーバに現在接続されておりサポートされている各クライアントに対して割り当ててよい（ステップ３０２）。１クライアントに実際に割り当てるレンダリングターゲットユニット数およびどのレンダリングターゲットユニットを割り当てるかは、そのレンダリングターゲットユニットが利用可能であるか、および、そのクライアントのシステムアーキテクチャ（一例であり限定ではないが、ビデオフレームバッファまたはクライアントのディスプレイの解像度、サイズ、大きさ、および向き）に応じて決定されてよい。例えば、新たなクライアントがサーバに接続されると、サーバは、現在利用可能なレンダリングターゲットユニット（つまり、その時点でどのクライアントにも割り当てられていないレンダリングターゲットユニット）のうち１以上をこのクライアントに対して割り当てる。逆に、サーバからあるクライアントが切断された場合には、サーバは、このクライアントに割り当てていたレンダリングターゲットユニットの割り当てを解除して（de-allocate）（つまり占有を解除する：free up）、当該レンダリングターゲットユニットを将来他のクライアントに割り当てることができるようにする。１人のクライアントに割り当てられるレンダリングターゲットユニット数は、そのクライアントのビデオフレームバッファまたはディスプレイのサイズまたは解像度に応じて定められて良い（例えば、高い解像度のディスプレイを有するクライアントには、低解像度のディスプレイを有するクライアントよりも多くの数のレンダリングターゲットユニットが割り当てられて良い）。
【００４０】
一部の実施形態では、コンピュータプログラムのインスタンスが、サーバに接続されているクライアント上で実行され始めると、サーバがこのプログラムインスタンスにレンダリングを行う場合、クライアントは、プログラムインスタンスのサーバに通知を行い、プログラムインスタンスのレンダリングを行うようサーバに要求する。クライアントは、レンダリングにおいて利用するプログラムインスタンスのモデルをサーバに送る。サーバは、プログラムインスタンスのレンダリングを行う期間は、このプログラムインスタンスのモデルを格納していてよい。一部の実施形態では、サーバは複数のクライアントに対してレンダリングを実行する場合があるので、各モデルを、どのクライアントに該モデルが関連付けられているかを示す固有識別子（ＩＤ）で特定することができる。
【００４１】
もちろん、１クライアント上で、同じまたは異なるコンピュータプログラムの複数のインスタンスを実行することができる。一部の実施形態では、クライアントは、サーバに対して、このクライアントで実行中の複数のプログラムインスタンスのレンダリングの実行を要求することができる。この場合、クライアントは、サーバに対して、複数のプログラムインスタンスに対応する複数のモデルを送信することができる。例えばプログラムインスタンスがクライアントで実行を開始するたびに、クライアントは、そのプログラムインスタンスのモデルをサーバに送信することができる。サーバはこれらモデルを格納してよく、各モデルは、当該モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有ＩＤで特定されてよい。
【００４２】
一部の実施形態では、サーバに現在接続されてサポートされている各クライアントについて１以上のレンダリングパラメータのセットを維持することができる（ステップ３０３）。一部の実施形態では、各レンダリングパラメータのセットが、あるクライアントで実行されているコンピュータプログラムのインスタンスに対応して、この特定のプログラムインスタンスについて実行されるレンダリング法を示している。従って、プログラムインスタンスの表示が時間が経って変わると、レンダリングパラメータも時間の推移とともに（例えばレンダリングごとに）変わる。一部の実施形態では、各レンダリングパラメータのセットが、モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有ＩＤで特定されてよい。
【００４３】
世の中には数多くのレンダリング技術が存在しており、本開示は、適したレンダリング技術のいずれをも対象としている。例えば、レイトレーシングは、レンダリング後の画像において非常に高度なフォトリアリズムを達成可能な、公知且つよく利用されているレンダリング技術である。簡単にいうと、レイトレーシングは、画像平面における画素間の光路を追跡することで、モデルから画像を生成する技術のことである。レイトレーシングには共に利用可能なアルゴリズムが様々存在している。レイトレーシングは、現実的には３Ｄオブジェクトに対する照明の効果をシミュレーションするものではあるが、計算量が多いのでサーバでの実行に適していると思われる。一部の実施形態では、レイトレーシングアルゴリズムをサーバで実行して、レイトレーシングを利用してレンダリングを実行してよい。
【００４４】
コンピュータグラフィック分野では、シェーダは、一義的には、高度な柔軟性をもってグラフィックハードウェアに対するレンダリング効果を計算するために利用されるソフトウェア命令セットのことである。一部の実施形態では、シェーダは、サーバのＧＰＵプログラム可能レンダリングパイプラインをプログラミングするために利用することができ、この技術は、既に固定機能パイプライン（fixed-function pipeline）に取って代わったと見られる向きもある。シェーダには様々な種類があり、本開示では適したシェーダをいずれも対象としている。例えば、バーテックスシェーダは、ＧＰＵに与えられる各頂点に一度実行されて、各頂点の仮想空間における３Ｄの位置を、表示スクリーンまたはレンダリングされる２Ｄ画像の２Ｄ座標およびＺバッファの深さ値に変換することができる。バーテックスシェーダは、位置、色、およびテクスチャ座標等の特性を操作することができる。ジオメトリシェーダは、バーテックスシェーダの後のレンダリングパイプラインの次段に置かれ、メッシュから頂点を加減算し、手続きとして配置を生成したり、容量分析的な詳細（volumetric details）を既存のメッシュに与えたりするために利用されてよい。ピクセルシェーダは、フラグメントシェーダとも称され、個々の画素の色を計算し、通常はシーンの照明および関連する効果について（例えばバンプマッピングおよびカラー調節）利用される。一部の実施形態では、各レンダリングパラメータのセットが、ＧＰＵのレンダリングパイプラインの様々な種類のシェーダに対応するシェーダ定数を含んでいて良い。シェーダ定数は、ＧＰＵに対して、レンダリングの実行方法を指示する。従って、実際には、シェーダ定数を利用して、レンダリングの結果（レンダリングされた画像）が制御されることになる。
【００４５】
上述したように、プログラムインスタンスが異なれば表示される画像も異なるために、各レンダリングパラメータのセット（例えばシェーダ定数）は、対応するプログラムインスタンスについてレンダリングごとに変化することが考えられる。一部の実施形態では、必要に応じて、サーバが維持しているレンダリングパラメータのセットを、レンダリングパスの前に更新してもよい（ステップ３０４）。各クライアントは、クライアントで実行されておりサーバでサポートされているプログラムインスタンスの現在の状態をサーバに送信してよい。一部の実施形態では、サーバは、クライアントから受け取った情報に基づいてレンダリングパラメータのセットを更新してよい。
【００４６】
一部の実施形態では、サーバは、１回のレンダリングパスにおいて、現在サーバでサポートされている複数のクライアントについて複数の画像を同時にレンダリングすることができる（つまり複数のレンダリングを行うことができる）（ステップ３０５）。一部の実施形態では、一回のレンダリングパスで、ＧＰＵレンダリングパイプラインにおいて一度移動が可能である。１つのレンダリングパイプライン内には様々な段階が存在する場合がある。例えば、先ずサーバのＣＰＵが、命令と配置データとを、サーバのＧＰＵに送信するとする。当該命令およびデータは、対応するモデルおよびレンダリングパラメータのセットに基づいて判断することができる。第２に、バーテックスシェーダ内で、配置を変換して照明計算を実行してよい。第３に、ジオメトリシェーダを利用する場合には、シーンにおける配置をいくらか変更してよい。第４に、計算した配置を三角形に分けてよい（triangulate）。そして最後に、得られた三角を画素に変換してよい。
【００４７】
一回のレンダリングパス中に複数の画像を同時にレンダリングするためには、ＧＰＵのリソースを複数のレンダリングプロセスで共有する必要がある。一部の実施形態では、生成されるレンダリング画像それぞれ、より詳しくは、レンダリング画像の画素値を、レンダリング画像に対応してクライアントに割り当てられた特定のレンダリングターゲットユニット内に格納する。
【００４８】
一部の実施形態では、サーバは、ビデオストリームを利用して現在サポートしている各クライアントにレンダリングされた画像を送信して、各レンダリング画像がビデオストリームのフレームとなるようにしてよい。一部の実施形態では、サーバは、一回の符号化パスで、レンダリングターゲットに格納されている複数のレンダリング画像を、複数のクライアントに対応する複数のビデオストリームに同時に符号化してよい（ステップ３０６）。例えば、第１レンダリング画像が、第１クライアントのための第１ビデオストリームの現在のフレームとして符号化され、第２レンダリング画像が、第２クライアントのための第２ビデオストリームの現在のフレームとして符号化され、・・・といった具合であってよい。
【００４９】
一部の実施形態では、次にサーバは、今ではビデオストリーム内でフレームとして符号化されているレンダリング画像をクライアントに送信してよい（ステップ３０７）。各ビデオストリームは、対応するクライアントに送信される。例えば、第１ビデオストリームが第１クライアントに送信され、第２ビデオストリームが第２クライアントに送信され、・・・といった具合であってよい。各クライアントは、ビデオストリームで新たなデータを受け取ると、このビデオストリームを復号して、サーバがレンダリングした画像である現在のフレームを抽出する。クライアントは、次に、表示スクリーンに現在のフレーム（つまりレンダリング画像）を表示してよい。
【００５０】
各クライアントで実行されている各プログラムインスタンスについて複数のレンダリングを実行することがよくある。従ってステップ３０４から３０７を繰り返すことができる。各レンダリングパスは、１人のクライアントに１枚のレンダリング画像が割り当てられるよう、サーバが現在サポートしている複数のクライアントに対して複数のレンダリング画像を生成することができる。各レンダリング画像は、対応するビデオストリームの別個のフレームとして符号化されて、対応するクライアントに送信されてよい。
【００５１】
一部の実施形態は、ネットワーク環境で実装されてよい。図４は、ネットワーク環境４００の一例を示す。ネットワーク環境４００は、１以上のサーバ４２０と１以上のクライアント４３０とを互いに連結するネットワーク４１０を含む。一部の実施形態では、ネットワーク４１０は、イントラネット、エクストラネット、仮想プライベートネットワーク（ＶＰＮ）、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（ＷＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク４１０、または２以上のネットワーク４１０の組み合わせを含む。本開示は、適切な任意のネットワーク４１０を想定している。１以上のリンク４５０が、サーバ４２０またはクライアント４３０をネットワーク４１０に連結する。一部の実施形態では、１以上のリンク４５０それぞれが、１以上の有線、無線、または光リンク４５０を含む。一部の実施形態では、１以上のリンク４５０それぞれが、イントラネット、エクストラネット、仮想プライベートネットワーク（ＶＰＮ）、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（ＷＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク４５０、または２以上のネットワーク４５０の組み合わせを含む。本開示は、サーバ４２０およびクライアント４３０をネットワーク４１０に連結する任意の適切なリンク４５０を含む。
【００５２】
一部の実施形態では、各サーバ４２０は、中央型サーバであってもよいし、または、複数のコンピュータまたは複数のデータセンタを包括する分散型サーバであってもよい。サーバ４２０は、様々な種類のものであってよく、例示であって限定ではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、交換サーバ、データベースサーバ、またはプロキシサーバであってよい。一部の実施形態では、各サーバ４２０が、サーバ４２０が実装してサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、埋め込まれた論理部品、または、これら部品の２以上の組み合わせを含んでよい。例えばウェブサーバは、一般的に、ウェブページまたはウェブページの特定の部分を含むウェブサイトをホストすることができる。より詳しくは、ウェブサーバは、ＨＴＭＬファイルその他のファイルの種類をホストすることができ、または、要求に応じてファイルを動的に作成または構成することができ、ＨＴＴＰまたはクライアント４３０からの他の要求に応じて、クライアント４３０にこれらを通信することができる。メールサーバは、一般的に、電子メールサービスを様々なクライアント４３０に提供する機能を有している。データベースサーバは、一般的にいって、１以上のデータストア内に格納されているデータを管理するためのインタフェースを提供する機能を有している。
【００５３】
一部の実施形態では、各クライアント４３０は、クライアント４３０が実装またはサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、うめこまれた論理部品、または、これら部品の２以上の組み合わせを含む電子デバイスであってよい。例示であって限定ではないが、クライアント４３０は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス、または移動電話器であってよい。クライアント４３０は、クライアント４３０におけるネットワークユーザをネットワーク４１０にアクセスさせることができる。クライアント４３０は、ウェブブラウザ（例えばＭｉｃｒｏｓｏｆｔ社のＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、またはＭｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ）を有してよく、ＧｏｏｇｌｅのＴｏｏｌｂａｒまたはＹａｈｏｏのＴｏｏｌｂａｒ等のアドオン、プラグイン、その他の拡張機能を有してよい。クライアント４３０は、ユーザに、他のクライアント４３０における他のユーザと通信させることができる。本開示は、任意の適切なクライアント４３０を含むこととする。
【００５４】
一部の実施形態では、１以上のデータストレージ４４０が、１以上のサーバ４２０に１以上のリンク４５０を介して通信可能に連結されていてよい。一部の実施形態では、データストレージ４４０を利用して、様々な種類の情報を格納することができる。一部の実施形態では、データストレージ４４０に格納されている情報を、特定のデータ構造に従って組織化することもできる。一部の実施形態では、サーバ４２０またはクライアント４３０に、データストレージ４４０に格納されている情報を管理させる（例えば取得、修正、追加、または削除を行わせる）インタフェースを提供することもできる。
【００５５】
一部の実施形態では、各サーバ４２０が、１以上のクライアント４３０に同時にサービス提供してよく、サポートしているクライアント４３０にレンダリングを実行してよい。サーバ４２０は、ビデオストリーム内の複数のレンダリング画像（各レンダリング画像が１つのフレームである）を符号化することで、サポートしている特定のクライアント４３０のレンダリング画像を送信することができ、ビデオストリームをクライアント４３０に送信することができる。クライアント４３０は、ビデオストリームを受信すると、ビデオストリームを復号して、表示用の画像フレームを抽出することができる。米国特許出願第１２／５７９，３００号、および、１２／７０９，３４３号明細書は（両方とも全ての目的でここに参照として組み込まれる）、１以上のクライアント４３０に、圧縮したビデオストリームを配信するために利用されてよいビデオコーデックを開示している。加えて、前述した各出願明細書は、各サーバ４２０がＧＰＵの並列処理リソースを利用して、ビデオをクライアント４３０用に生成してストリーミングする方法を開示している。
【００５６】
一部の実施形態は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせとして実装されてよい。あくまで例示であり限定ではないが、１以上のコンピュータシステムが、ここで記載され図示される１以上のプロセスの１以上のステップを実行する特定の論理またはソフトウェアを実行することができる。コンピュータシステムのうち１以上は、中央型であっても分散型であってよく、適宜、複数のコンピュータシステムまたは複数のデータセンタを包括していてよい。本開示は、任意の適切なコンピュータシステムを含むことができる。一部の実施形態では、ここで記述され図示される１以上のプロセスの１以上のステップの実行が、必ずしも１以上の地理的位置に限定されず、時間的な制約を持たなくてもよい。一例であり限定ではないが、１以上のコンピュータシステムは、自身の機能を「リアルタイムで」、「オフラインで」、「バッチモードで」、または、適宜、上述したものの任意の組み合わせで実行することができる。コンピュータシステムのうち１以上は、適宜、機能の１以上の部分を異なる時点に、異なる場所で、異なる処理を利用して実行することができる。ここでは、論理という場合、適切な場合には、１以上のソフトウェアを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、１以上のコンピュータプログラムを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、データ、命令、または両方を含むことができ、この逆もしかりである。同様に、データという場合には、適切な場合には、命令を含むことができ、この逆もしかりである。
【００５７】
１以上のコンピュータ可読媒体は、特定の実施形態を実装するソフトウェアを格納したり、具現化したりすることができる。コンピュータ可読媒体は、適宜、ソフトウェアを搬送したり、通信したり、含んだり、保持したり、維持したり、伝播させたり、保有したり、格納したり、送信したり、伝送したり、または具現化することができる。コンピュータ可読媒体は、生物学的、化学的、電子的、電磁的、赤外線、磁気、光、量子、その他の適切な媒体または２以上の媒体の組み合わせであってよい。コンピュータ可読媒体は、１以上のナノメートル単位のコンポーネントを含んでよく、または、ナノメートル単位の設計または製造物を具現化してもよい。一例であるコンピュータ可読格納媒体には、これらに限定はされないが、コンパクトディスク（ＣＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、フロッピー（登録商標）ディスク、光ディスク（floptical disk）、ハードディスク、ホログラフィック記憶デバイス、集積回路（ＩＣ）（用途特定集積回路（ＡＳＩＣ）等）、磁気テープ、キャッシュ、プログラム可能論理デバイス（ＰＬＤ）、ランダムアクセスメモリ（ＲＡＭ）デバイス、読み取り専用メモリ（ＲＯＭ）デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。
【００５８】
特定の実施形態を実装するソフトウェアは、任意の適切なプログラミング言語（プロシージャ言語であってもオブジェクト指向型言語であってもよい）またはこれらプログラミング言語の組み合わせで書き込まれて良い。適宜、任意の適切な種類のコンピュータシステム（例えばシングルまたはマルチプロセッサコンピュータシステム）またはシステムが、特定の実施形態を実装するソフトウェアを実行することができる。適切な場合には、汎用コンピュータシステムが、特定の実施形態を実装するソフトウェアを実行することができる。
【００５９】
例えば図５は、特定の実施形態の一以上の部分を実装するのに適したコンピュータシステム５００の一例を示す。本開示は、特定の構成の特定のコンポーネントを有する特定のコンピュータシステム５００を記載または例示しているが、本開示は、任意の適切な構成の任意の適切なコンポーネントを含む任意の適切なコンピュータシステムを含むこともできる。さらにコンピュータシステム５００は、例えば１以上の集積回路（ＩＣ）、１以上のプリント配線基板（ＰＣＢ）、１以上のハンドヘルドまたはその他のデバイス（例えば移動電話またはＰＤＡ）、１以上のパーソナルコンピュータ、または１以上のスーパーコンピュータ等の任意の適切な物理的形態をとることができる。
【００６０】
システムバス５１０は、コンピュータシステム５００のサブシステム同士を連結することができる。ここでは、バスという概念は、共通の機能を果たす１以上のデジタル信号線を含んでよい。本開示は、任意の適切なバスアーキテクチャを有する任意の適切なバス構造（例えば1以上のメモリバス、１以上の周辺バス、１以上のローカルバス、または上述したものの組み合わせ）を有する任意の適切なシステムバス５１０を含むことができる。一例であるバスアーキテクチャには、これらに限定はされないが、ＩＳＡ（Industry Standard Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ＶＬＢ（Video Electronics Standards Association local）バス、ＰＣＩ（Peripheral Component Interconnect）バス、ＰＣＩエクスプレスバス（ＰＣＩ−Ｘ）、およびＡＧＰ（Accelerated Graphics Port）バスが含まれる。
【００６１】
コンピュータシステム５００は、１以上のプロセッサ５２０（または中央処理装置（ＣＰＵ））を含む。プロセッサ５２０は、命令、データ、またはコンピュータアドレスを一時的にローカルに格納するためのキャッシュ５２２を含んでいてよい。プロセッサ５２０は、メモリ５３０を含む１以上の格納デバイスに連結される。メモリ５３０は、ランダムアクセスメモリ（ＲＡＭ）５３２および読み取り専用メモリ（ＲＯＭ）５３４を含んでよい。データおよび命令は、プロセッサ５２０とＲＡＭ５３２との間を双方向に伝送されてよい。データおよび命令は、ＲＯＭ５３４からプロセッサ５２０へと一方向で伝送されてよい。ＲＡＭ５３２およびＲＯＭ５３４は、任意の適切なコンピュータ可読格納媒体を含んでよい。
【００６２】
コンピュータシステム５００は、双方向的にプロセッサ５２０に連結された固定ストレージ５４０を含む。固定ストレージ５４０は、格納制御ユニット５５２を介してプロセッサ５２０に連結されてよい。固定ストレージ５４０は、さらなるデータ格納キャパシティを提供してよく、任意の適切なコンピュータ可読格納媒体を含んでよい。固定ストレージ５４０は、オペレーティングシステム（ＯＳ）５４２、１以上の実行可能ファイル５４４、１以上のアプリケーションまたはプログラム５４６、データ５４８等を格納してよい。固定ストレージ５４０は、通常は、一次ストレージより遅い二次格納媒体（例えばハードディスク）である。適宜、固定ストレージ５４０に格納される情報が仮想メモリとしてメモリ５３０に組み込まれても良い。
【００６３】
プロセッサ５２０は、例えばグラフィック制御５５４、ビデオインタフェース５５８、入力インタフェース５６０、出力インタフェース５６２、および格納インタフェース５６４等の様々なインタフェースに連結されてよく、これらはそれぞれ適切なデバイスと連結されていてよい。入力デバイスおよび出力デバイスの例には、これらに限定はされないが、ビデオディスプレイ、トラックボール、マウス、キーボード、マイクロフォン、タッチセンサー式のディスプレイ、トランスデューサーカードリーダ、磁気または紙テープリーダ、タブレット、スタイラスペン、音声または手書き認識器、生体認証リーダ、またはコンピュータシステムが含まれる。ネットワークインタフェース５５６は、プロセッサ５２０を、別のコンピュータシステムまたはネットワーク５８０に連結してよい。ネットワークインタフェース５５６を利用することで、プロセッサ５２０は、特定の実施形態のステップを実行する間に、情報をネットワーク５８０に対して送受信することができる。実施形態によってはプロセッサ５２０上でのみ実施されるものもある。実施形態によっては、プロセッサ５２０上と、同時に実行されている１以上の遠隔プロセッサ上とで実施可能なものもある。
【００６４】
コンピュータシステム５００がネットワーク５８０に接続されたネットワーク環境では、コンピュータシステム５００は、ネットワーク５８０に接続されている他のデバイスと通信することができる。コンピュータシステム５００は、ネットワークインタフェース５５６を介してネットワーク５８０と通信してよい。例えば、コンピュータシステム５００は、ネットワーク５８０から情報（例えば別のデバイスからの要求または応答）を、ネットワークインタフェース５５６に入ってくる１以上の入力パケットという形式で受信してよく、メモリ５３０は、後の処理のために入力パケットを格納することができる。コンピュータシステム５００は、ネットワーク５８０に、情報（例えば別のデバイスへの要求または応答）を、ネットワークインタフェース５５６からの１以上の出力パケットという形式で送信してよく、この出力パケットは、送信前にはメモリ５３０が格納していてよい。プロセッサ５２０は、メモリ５３０内の入力パケットまたは出力パケットにアクセスして、特定要件に従って処理する。
【００６５】
コンピュータシステム５００は、１以上の入力デバイス５６６（キーパッド、キーボード、マウス、スタイラスペン等を含みうる）、１以上の出力デバイス５６８（１以上のディスプレイ、１以上のスピーカ、１以上のプリンタ等を含みうる）、１以上の格納デバイス５７０、および１以上の格納媒体５７２を有しうる。入力デバイス５６６は、コンピュータシステム５００の外部にあっても内部にあってもよい。出力デバイス５６８も、コンピュータシステム５００の外部にあっても内部にあってもよい。格納デバイス５７０も、コンピュータシステム５００の外部にあっても内部にあってもよい。格納媒体５７２も、コンピュータシステム５００の外部にあっても内部にあってもよい。
【００６６】
一部の実施形態では、ここに記載または例示した１以上のプロセスの１以上のステップを実行するためのソフトウェアを具現化する１以上のコンピュータ可読格納媒体を含む１以上のコンピュータ可読プロダクトを含む。一部の実施形態では、媒体の１以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示した１以上のプロセスの１以上のステップの実行専用に設計および製造されたものであってよい。これらに加えて、または、これらに代えて、一部の実施形態では、媒体の１以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示したプロセス特有の設計、製造されたものではなく、一般的に利用可能なものであってもよい。コンピュータ可読格納媒体の例には、これらに限定はされないが、ＣＤ（例えばＣＤ−ＲＯＭ）、ＦＰＧＡ，フロッピー（登録商標）ディスク、光ディスク（floptical disk）、ハードディスク、ホログラフィック記憶デバイス、集積回路（ＩＣ）（用途特定集積回路（ＡＳＩＣ）等）、磁気テープ、キャッシュ、プログラム可能論理デバイス（ＰＬＤ）、ランダムアクセスメモリ（ＲＡＭ）デバイス、読み取り専用メモリ（ＲＯＭ）デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。一部の実施形態では、ソフトウェアは、コンパイラが生成することのできるマシンコード、または、コンピュータが解釈プログラムを利用して実行することができる高レベルのコードを含む１以上のファイルを生成してよい。
【００６７】
一例であり限定ではないが、メモリ５３０は、ソフトウェアを具現化する１以上のコンピュータ可読格納媒体を含むことができ、コンピュータシステム５００は、プロセッサ５２０がソフトウェアを実行する結果、ここに記載され例示された特定の機能を提供することができる。メモリ５３０はソフトウェアを格納して、プロセッサ５２０はソフトウェアを実行することができる。メモリ５３０は、ソフトウェアを具現化する大容量格納デバイス５３０のコンピュータ可読格納媒体から、または、１以上の他のソースからネットワークインタフェース５５６経由で、ソフトウェアを読み出すことができる。ソフトウェアの実行時には、プロセッサ５２０は、ここに記載され例示された１以上のプロセスの１以上のステップを実行することができ、これには、特定の要求に応じて、ソフトウェアの１以上の部分の命令に応じて、メモリ５３０への格納のために１以上のデータ構造を定義して、データ構造の１以上を修正することを含みうる。これに加えて、またはこの代わりに、コンピュータシステム５００は、回路内にハードウェアとして組み込まれている、または具現化された論理の結果として、ここに記載または例示した特定の機能を提供することができ、これらはソフトウェアの代わりに、またはソフトウェアと協働して動作することで、ここに記載または例示した１以上のプロセスの１以上のステップを実行することができる。本開示は、特定の要求に応じて、ハードウェアおよびソフトウェアの任意の適切な組み合わせを含む。
【００６８】
一部の実施形態では、コンピュータシステム５００は、１以上のグラフィックプロセッシングユニット（ＧＰＵ）５２４を含んでよい。一部の実施形態では、ＧＰＵ５２４は、グラフィックレンダリング分野でよく利用される数学的演算に対する１以上の集積回路および／またはプロセッサコアを含んでよい。一部の実施形態では、ＧＰＵ５２４は、特別なグラフィックユニット命令セットを利用してよく、他の実装例では、ＧＰＵがＣＰＵ同様の命令セット（例えば修正後のｘ８６）命令セットを利用してよい。グラフィック処理セット５２４は、転送（blitting）、テクスチャマッピング、ピクセルシェーディング、フレームバッファリング等の複数のグラフィック上のプリミティブな操作を実装してよい。一部の実施形態では、ＧＰＵ５２４は、グラフィックアクセラレータ、汎用ＧＰＵ（ＧＰＧＰＵ）、または任意の他の適切な処理ユニットであってよい。
【００６９】
一部の実施形態では、ＧＰＵ５２４は、ハードウェアシステムアーキテクチャをカードスロットを通って取り付けられるグラフィックまたはディスプレイカードに実装されてよい。他の実装例では、ＧＰＵ５２４は、コンピュータシステムアーキテクチャのマザーボード上に集積されてもよい。適切なグラフィックプロセッシングユニットには、Advanced Micro Devices（登録商標）AMD R7XX ベースの GPUデバイス (Radeon（登録商標） HD 4XXX), AMD R8XX ベースのGPUデバイス(Radeon（登録商標） HD 5XXX), Intel（登録商標） LarabeeベースのGPUデバイス(まだリリースされていない), nVidia（登録商標） 8シリーズのGPU, nVidia（登録商標） 9シリーズのGPU、nVidia（登録商標） 100 シリーズのGPU、nVidia（登録商標） 200シリーズのGPU、およびその他のDX1 1を利用可能なGPUが含まれる。
【００７０】
本開示は、特定の順序で特定の動作を記載または例示してきたが、本開示では、任意の適切な動作を任意の適切な順序で行うことができる。さらに本開示は、任意の適切な処理を、任意の適切な順序で１以上の回数繰り返すこともできる。本開示は特定の動作を一連の作業として記載または例示しているが、本開示では、適宜、任意の適切な動作を略同時に行っても良い。ここに記載または例示した適切な１つの動作または一連の動作は、適宜、別のプロセス（例えばオペレーティングシステムまたはカーネル）によって中断、停止、または制御されてもよい。動作は、システム処理の全てまたは実質的な部分を占拠するオペレーティングシステム環境または独立型のルーチンとして行うことができる。
【００７１】
本開示は、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。同様に、適切な場合には、添付請求項も、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。
［項目１］
コンピュータシステム上で、各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストする段階と、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持する段階と、
上記遠隔クライアントアプリケーションのうち少なくとも２つの間に、上記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階と、
上記コンピュータシステムの上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも２つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングする段階と、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも２つに、銘々のネットワーク接続を介して送信する段階とを備える方法。
［項目２］
上記グラフィックプロセッシングユニットの上記リソースはメモリストレージを有し、
上記遠隔クライアントアプリケーションのうち少なくとも２つの間に、上記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階は、
上記メモリストレージの特定の部分を、上記遠隔クライアントアプリケーションの上記少なくとも２つのそれぞれに割り当てる段階を有する、項目１に記載の方法。
［項目３］
各レンダリングされたグラフィック出力は、対応する遠隔クライアントアプリケーションに割り当てられた上記メモリストレージの上記部分に格納される、項目２に記載の方法。
［項目４］
上記コンピュータシステムの上記グラフィックプロセッシングユニットの上記リソースを利用して、送信前に、上記レンダリングされたグラフィック出力を同時に符号化する段階をさらに備える、項目１に記載の方法。
［項目５］
上記レンダリングされたグラフィック出力のそれぞれは、対応する遠隔クライアントアプリケーションへのビデオストリーム内に符号化されて送信される、項目４に記載の方法。
［項目６］
上記アプリケーションインスタンスの上記グラフィック出力は、一回のレンダリングパスでレンダリングされ、
上記アプリケーションインスタンスの上記レンダリングされたグラフィック出力は、一回の符号化パスで符号化される、項目４に記載の方法。
［項目７］
複数の第２コンピュータシステムに接続された第１コンピュータシステムであって、上記複数の第２コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第１コンピュータシステムにより、それぞれが上記複数の第２コンピュータシステムの１つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
上記第１コンピュータシステムにより、上記複数のレンダリングパラメータのセットに基づいて、上記複数の第２コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、上記複数の画像それぞれは上記複数の第２コンピュータシステムの１つについて、上記複数の第２コンピュータシステムの上記１つに対応する上記複数のレンダリングパラメータのセットの１つに基づいてレンダリングされ、上記レンダリングターゲットに格納される段階と、
上記第１コンピュータシステムにより、上記複数の画像それぞれを、上記画像がレンダリングされている上記複数の第２コンピュータシステムのうち対応するものに送信する段階とを備える方法。
［項目８］
上記レンダリングターゲットは、複数のレンダリングターゲットユニットに分割され、
上記複数のレンダリングターゲットユニットそれぞれは、少なくとも１つの画素を格納し、
上記複数の第２コンピュータシステムそれぞれは、上記複数のレンダリングターゲットユニットの少なくとも１つを割り当てられ、
上記複数の画像それぞれは、上記画像がレンダリングされた上記複数の第２コンピュータシステムの１つに割り当てられた上記複数のレンダリングターゲットユニットの上記少なくとも１つ内にレンダリングされる、項目７に記載の方法。
［項目９］
上記第１コンピュータシステムにより、送信前に上記複数の画像を同時に符号化する段階をさらに備える、項目７に記載の方法。
［項目１０］
上記複数の画像それぞれは、複数のビデオストリームの１つの現在のフレームとして符号化され、
上記複数のビデオストリームそれぞれは、上記複数の第２コンピュータシステムの１つに対応している、項目９に記載の方法。
［項目１１］
上記第１コンピュータシステムにより、上記画像がレンダリングされた上記複数の第２コンピュータシステムの上記１つに対して上記複数の画像それぞれを送信する段階は、
上記第１コンピュータシステムにより、上記複数のビデオストリームそれぞれを、上記複数の第２コンピュータシステムの対応するものに送信する段階を有する、項目１０に記載の方法。
［項目１２］
上記第１コンピュータシステムにより、上記複数のレンダリングパラメータのセットを更新する段階をさらに備える、項目７に記載の方法。
［項目１３］
上記複数の第２コンピュータシステムそれぞれの上で、特定のコンピュータプログラムのインスタンスが実行され、
上記複数の第２コンピュータシステムそれぞれの上で実行されている上記特定のコンピュータプログラムの上記インスタンスの現在の状態によって、当該第２コンピュータシステムに対応する上記複数のレンダリングパラメータのセットのうちの対応するものが決定される、項目１２に記載の方法。
［項目１４］
上記複数のレンダリングパラメータのセットそれぞれが、少なくとも１つのシェーダ定数を含む、項目７に記載の方法。
［項目１５］
システムであって、
１以上のプロセッサが実行可能な命令を有するメモリと、
グラフィックプロセッシングユニットと、
上記メモリに連結され、上記命令を実行する１以上のプロセッサとを備え、
上記１以上のプロセッサは、上記命令を実行するときに、
各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
上記遠隔クライアントアプリケーションのうち少なくとも２つの間に、上記グラフィックプロセッシングユニットのリソースを割り当て、
上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも２つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも２つに、銘々のネットワーク接続を介して送信する、システム。
［項目１６］
ソフトウェアを格納する１以上のコンピュータ可読有形格納媒体であって、上記ソフトウェアは１以上のコンピュータシステムにより実行されると、
各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
上記遠隔クライアントアプリケーションのうち少なくとも２つの間に、グラフィックプロセッシングユニットのリソースを割り当て、
上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも２つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも２つに、銘々のネットワーク接続を介して送信する、１以上のコンピュータ可読有形格納媒体。
【図１】
0005627771.tif 000002
【図２】
0005627771.tif 000003
【図３】
0005627771.tif 000004
【図４】
0005627771.tif 000005
【図５】
0005627771.tif 000006