(57)【特許請求の範囲】
【請求項１】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成部と、
生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換部と、
オブジェクトを描画するためのモデルデータを変更することによってグラフィックス演算に係るハードウェアが受ける負荷を表す遷移コストを計算する遷移コスト計算部と、
前記遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがって各モデルデータにソートキーを付与するソートキー付与部と、
前記中間コマンド生成部により生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えるソーティング部とを含み、
前記グラフィックスコマンド変換部は、
前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定部と、
前記同一性判定部により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成部とを含み、
前記グラフィックスコマンド変換部は、前記ソーティング部により実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスコマンド列に変換することを特徴とするグラフィックスコマンド生成装置。
【請求項２】
前記グラフィックスコマンド変換部は、前記グラフィックスコマンド生成部により生成されたグラフィックスコマンドのステートをキャッシュするステートキャッシュをさらに含み、
前記同一性判定部は、前記中間コマンドから生成されるべきグラフィックスコマンドのステートについて前記ステートキャッシュを参照し、キャッシュヒットした場合は、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であると判定し、キャッシュヒットしない場合は、前記中間コマンドから生成されるべきグラフィックスコマンドのステートによってキャッシュを更新することを特徴とする請求項１に記載のグラフィックスコマンド生成装置。
【請求項３】
前記ソートキー付与部は、ある一つのモデルデータから開始して、前記遷移コストの小さい順にモデルデータを巡回することにより、モデルデータを遷移させる順序を決定することを特徴とする請求項１または２に記載のグラフィックスコマンド生成装置。
【請求項４】
前記ソーティング部は、表示される画面領域を最も占有するモデルデータを先頭にして、前記遷移コストの小さい順にモデルデータを巡回することにより、モデルデータを遷移させる順序を決定することを特徴とする請求項１または２に記載のグラフィックスコマンド生成装置。
【請求項５】
グラフィックスコマンド生成装置において実行されるグラフィックスコマンド生成方法であって、
中間コマンド生成部が、オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成ステップと、
グラフィックスコマンド変換部が、生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換ステップと、
遷移コスト計算部が、オブジェクトを描画するためのモデルデータを変更することによってグラフィックス演算に係るハードウェアが受ける負荷を表す遷移コストを計算する遷移コスト計算ステップと、
ソートキー付与部が、前記遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがって各モデルデータにソートキーを付与するソートキー付与ステップと、
ソーティング部が、前記中間コマンド生成ステップにより生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えるソーティングステップとを含み、
前記グラフィックスコマンド変換ステップは、
同一性判定部が、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定ステップと、
グラフィックスコマンド生成部が、前記同一性判定ステップにより、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成ステップとを含み、
前記グラフィックスコマンド変換ステップは、前記ソーティングステップにより実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスコマンド列に変換することを特徴とするグラフィックスコマンド生成方法。
【請求項６】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成機能と、
生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換機能と、
オブジェクトを描画するためのモデルデータを変更することによってグラフィックス演算に係るハードウェアが受ける負荷を表す遷移コストを計算する遷移コスト計算機能と、
前記遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがって各モデルデータにソートキーを付与するソートキー付与機能と、
前記中間コマンド生成機能により生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えるソーティング機能とをコンピュータに実現させ、
前記グラフィックスコマンド変換機能は、
前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定機能と、
前記同一性判定機能により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成機能とを含み、
前記グラフィックスコマンド変換機能は、前記ソーティング機能により実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスコマンド列に変換することを特徴とするグラフィックスコマンド生成プログラム。
【請求項７】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成部と、
オブジェクトを描画するためのモデルデータを変更することによってグラフィックス演算に係るハードウェアが受ける負荷を表す遷移コストを計算する遷移コスト計算部と、
前記遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがって各モデルデータにソートキーを付与するソートキー付与部と、
前記中間コマンド生成部により生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えさせるために、生成された中間コマンドをモデルデータに付与されたソートキーとともにクライアント装置に送信する通信部とを含むことを特徴とするサーバ装置。
【請求項８】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドをモデルデータに付与されたソートキーとともにサーバ装置から受信する通信部と、
受信された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換部と、
前記通信部により受信された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えるソーティング部とを含み、
前記グラフィックスコマンド変換部は、
前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定部と、
前記同一性判定部により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成部とを含み、
前記グラフィックスコマンド変換部は、前記ソーティング部により実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスコマンド列に変換することを特徴とするクライアント装置。
【請求項９】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成部と、
オブジェクトを描画するためのモデルデータを変更することによってグラフィックス演算に係るハードウェアが受ける負荷を表す遷移コストを計算する遷移コスト計算部と、
前記遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがって各モデルデータにソートキーを付与するソートキー付与部と、
前記中間コマンド生成部により生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えさせるために、生成された中間コマンドをモデルデータに付与されたソートキーとともにサーバ装置に送信する通信部とを含むことを特徴とするクライアント装置。
【請求項１０】
オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドをモデルデータに付与されたソートキーとともにクライアント装置から受信する通信部と、
受信された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換部と、
前記通信部により受信された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替えるソーティング部とを含み、
前記グラフィックスコマンド変換部は、
前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定部と、
前記同一性判定部により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成部とを含み、
前記グラフィックスコマンド変換部は、前記ソーティング部により実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスコマンド列に変換することを特徴とするサーバ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、グラフィックスコマンドを生成する技術、特に中間コマンドからグラフィックスコマンドを生成する技術に関する。
【背景技術】
【０００２】
パーソナルコンピュータやゲーム専用機において、高品質な３次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
【０００３】
一般に、グラフィックス処理は、ＣＰＵとグラフィックスプロセッシングユニット（ＧＰＵ）が連携することで実行される。ＣＰＵが汎用的な演算を行う汎用プロセッサであるのに対して、ＧＰＵは高度なグラフィックス演算を行うための専用プロセッサである。ＣＰＵはオブジェクトの３次元モデルにもとづいて投影変換などのジオメトリ演算を行い、ＧＰＵはＣＰＵから頂点データなどを受け取ってレンダリングを実行する。ＧＰＵはラスタライザやピクセルシェーダなどの専用ハードウェアから構成され、パイプライン処理でグラフィックス処理を実行する。最近のＧＰＵには、プログラムシェーダと呼ばれるように、シェーダ機能がプログラム可能なものもあり、シェーダプログラミングをサポートするために、一般にグラフィックスライブラリが提供されている。
【０００４】
オブジェクトをレンダリングする際、ＣＰＵは、ＧＰＵのハードウェアにより実行されるグラフィックスコマンドを生成してＧＰＵに渡す必要がある。このグラフィックスコマンドの生成処理には多くのＣＰＵ時間を要するため、中間コマンドを導入し、グラフィックスコマンドの生成処理を中間コマンドの生成と中間コマンドからグラフィックスコマンドへの変換の２段階に分けることがある。中間コマンドの生成と中間コマンドからグラフィックスコマンドへの変換を別のスレッドにより実行することで、中間コマンドの生成後、中間コマンドをグラフィックスコマンドに変換する処理と、次のフレームを描画するための物理モデル計算などのグラフィックス以外の処理とを並列に実行することが可能になり、ＣＰＵの使用効率を向上させることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１２３５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、複数の中間コマンドをグラフィックスコマンドに変換すると、生成されたグラフィックスコマンドのシーケンスでは、ステートが変更されていないにもかかわらず同じグラフィックスコマンドが繰り返し実行されることがあり、その冗長性のゆえに、実行効率が低下する。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、中間コマンドから生成されるグラフィックスコマンドの実行効率を向上させることのできる技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様のグラフィックスコマンド生成装置は、オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成部と、生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換部とを含む。前記グラフィックスコマンド変換部は、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定部と、前記同一性判定部により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成部とを含む。
【０００９】
本発明の別の態様は、グラフィックスコマンド生成方法である。この方法は、オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成ステップと、生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換ステップとを含む。前記グラフィックスコマンド変換ステップは、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定ステップと、前記同一性判定ステップにより、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成ステップとを含む。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、中間コマンドから生成されるグラフィックスコマンドの実行効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態に係るグラフィックス処理システムの構成図である。
【図２】グラフィックスコマンド生成装置の構成図である。
【図３】図３（ａ）〜（ｄ）は、中間コマンドからグラフィックスコマンドが生成される様子を説明する図である。
【図４】図４（ａ）は、図２の遷移コスト計算部によるモデルデータの遷移コストの計算方法を説明する図であり、図４（ｂ）は、図２のソートキー付与部によるモデルデータへのソートキーの付与方法とを説明する図である。
【図５】実施の形態に係るグラフィックスコマンド生成装置によるグラフィックコマンド生成処理の手順を示すフローチャートである。
【図６】図２のグラフィックスコマンド変換部によって実行されるステップＳ６０のグラフィックスコマンドへの変換処理の詳細な手順を示すフローチャートである。
【図７】複数のプロセスによりレンダリングの中間コマンド列が生成され、一つのレンダリングプロセスでソーティングと冗長性削除が行われるシステムを説明する図である。
【図８】複数のサーバによりレンダリングの中間コマンド列が生成され、サーバと通信するクライアントでソーティングと冗長性削除が行われるシステムを説明する図である。
【図９】複数のクライアントによりレンダリングの中間コマンド列が生成され、複数のクライアントと通信するサーバでソーティングと冗長性削除が行われるシステムを説明する図である。
【発明を実施するための形態】
【００１３】
図１は、実施の形態に係るグラフィックス処理システムの構成図である。このグラフィックス処理システムは、メインプロセッシングユニット１００と、グラフィックスプロセッシングユニット１４０と、システムメモリ１８０と、ローカルメモリ１６０とを含む。
【００１４】
メインプロセッシングユニット１００は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを１個のパッケージに集積したマルチコアプロセッサであってもよい。ここでは、一例として、メインプロセッシングユニット１００は、メインプロセッサ１０１と複数のサブプロセッサ１１０とを含むヘテロジニアス（Heterogeneous:異種混合）マルチコアプロセッサである。メインプロセッサ１０１と複数のサブプロセッサ１１０はバス１２０に接続されており、バス１２０にはメモリインタフェース１７０を介してシステムメモリ１８０が接続されている。メインプロセッサ１０１と複数のサブプロセッサ１１０はバス１２０を介してシステムメモリ１８０に対してデータを読み書きすることができる。
【００１５】
バス１２０には入出力インタフェース（以下、「ＩＯＩＦ」と呼ぶ）１３０を介して外部デバイス１９０が接続されている。ここでは、一例であり、これに限定するものではないが、外部デバイス１９０は、グラフィックスプロセッシングユニット１４０とローカルメモリ１６０を含む。
【００１６】
グラフィックスプロセッシングユニット（以下、単に「ＧＰＵ」という）１４０は、グラフィックプロセッサコアを搭載したグラフィックチップであり、ローカルバス１５０を介してローカルメモリ１６０に対してデータを読み書きすることができる。
【００１７】
メインプロセッシングユニット１００とＧＰＵ１４０は、ＩＯＩＦ１３０で接続されており、メインプロセッシングユニット１００とＧＰＵ１４０は互いにＩＯＩＦ１３０を介してデータをやりとりすることができる。
【００１８】
メインプロセッシングユニット１００は、オブジェクトを描画するための描画コマンドを生成し、システムメモリ１８０内に設けられたコマンドバッファにキューイングする。ＧＰＵ１４０は、コマンドバッファに蓄積された描画コマンドを順次読み出して処理する。
【００１９】
メインプロセッシングユニット１００は、オブジェクトの３次元モデルにもとづいて、ポリゴンの頂点座標値、頂点カラー、法線ベクトル、ＵＶ値などのジオメトリデータを生成し、システムメモリ１８０に格納する。また、メインプロセッシングユニット１００は、ポリゴン表面にマッピングするためのテクスチャをシステムメモリ１８０に格納する。さらに、メインプロセッシングユニット１００は、ハードディスクなどの記録媒体からシェーダプログラムを読み込み、システムメモリ１８０に格納する。
【００２０】
システムメモリ１８０のメモリ領域はＩ／Ｏアドレス空間にメモリマッピングされており、ＧＰＵ１４０は、Ｉ／Ｏアドレス空間にメモリマップされたシステムメモリ１８０のメモリ領域をＩＯＩＦ１３０経由で読み取ることができる。
【００２１】
ジオメトリデータ、テクスチャおよびシェーダプログラムが格納されたシステムメモリ１８０内のメモリ領域は、ＩＯＩＦ１３０のコントローラに設けられたメモリ内のＩ／Ｏアドレス空間にメモリマッピングされる。ＧＰＵ１４０は、ＩＯＩＦ１３０を介して、Ｉ／Ｏアドレス空間にメモリマッピングされたジオメトリデータ、テクスチャおよびシェーダプログラムを読み出す。ＧＰＵ１４０は、システムメモリ１８０から読み出したジオメトリデータ、テクスチャなどグラフィックス演算に必要なデータをローカルメモリ１６０に格納することができる。
【００２２】
ＧＰＵ１４０は、シェーダプログラムにしたがって、ジオメトリデータを用いてポリゴンのラスタライズデータを生成し、ピクセルデータをローカルメモリ１６０内のフレームバッファに書き込む。さらに、ＧＰＵ１４０は、ポリゴン表面にテクスチャをマッピングし、テクスチャマッピング後のピクセルデータをフレームバッファに書き込む。
【００２３】
図２は、グラフィックスコマンド生成装置２００の構成図である。グラフィックスコマンド生成装置２００は、メインプロセッシングユニット１００に実現される機能構成である。メインプロセッシングユニット１００がマルチコアプロセッサである場合、メインプロセッサ１０１または少なくとも一つのサブプロセッサ１１０上のスレッドにより、グラフィックスコマンド生成装置２００の各機能構成が実行される。
【００２４】
グラフィックスコマンド生成装置２００は、遷移コスト計算部１０、ソートキー付与部２０、中間コマンド生成部３０、モデルデータ記憶部３２、ワークデータ記憶部３４、ソーティング部４０、およびグラフィックスコマンド変換部５０を含み、グラフィックスコマンド変換部５０は、同一性判定部６０、グラフィックスコマンド生成部７０、およびステートキャッシュ８０を含む。
【００２５】
中間コマンドは、オブジェクトをレンダリングするためのデータとしてモデルデータとワークデータを有する。モデルデータは、ジオメトリデータ、テクスチャ、シェーダプログラムなどフレーム間で更新されない情報であり、モデルデータ記憶部３２に記憶される。ワークデータは、オブジェクトの位置・姿勢などフレームごとに更新される情報であり、ワークデータ記憶部３４に記憶される。
【００２６】
遷移コスト計算部１０は、モデルデータ記憶部３２からモデルデータを読み出し、二つの中間コマンド間でモデルデータが遷移する際の遷移コストを計算し、遷移コストをモデルデータ記憶部３２に格納する。
【００２７】
ソートキー付与部２０は、遷移コストにもとづいてモデルデータを遷移させる順序を決定し、その遷移順序にしたがってモデルデータにソートキーを付与し、モデルデータ記憶部３２に記憶する。ソートキー付与部２０は、ある一つのモデルデータ、たとえば、表示される画面領域を最も占有するモデルデータから開始して、遷移コストの小さい順にモデルデータを巡回することにより、モデルデータを遷移させる順序を決定し、その遷移順序にしたがってモデルデータにソートキーを付与する。
【００２８】
中間コマンド生成部３０は、レンダリングするオブジェクトの情報を含むシーングラフから、フレームごとに、モデルデータ記憶部３２からモデルデータを、ワークデータ記憶部３４からワークデータを読み出し、モデルデータとワークデータを有する中間コマンドを生成する。
【００２９】
ソーティング部４０は、中間コマンド生成部３０により生成された複数の中間コマンドの実行順序を各中間コマンドのモデルデータに付与されたソートキーにもとづいて入れ替える。
【００３０】
グラフィックスコマンド変換部５０は、ソーティング部４０により実行順序が入れ替えられた複数の中間コマンドのそれぞれをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換する。
【００３１】
グラフィックスコマンド変換部５０において、同一性判定部６０は、中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する。グラフィックスコマンド生成部７０は、同一性判定部６０により、ステートが同一でないと判定されたグラフィックスコマンドを生成するが、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しない。
【００３２】
より具体的には、グラフィックスコマンド生成部７０により生成されたグラフィックスコマンドのステートはステートキャッシュ８０にキャッシュされる。同一性判定部６０は、中間コマンドから生成されるべきグラフィックスコマンドのステートにもとづいてステートキャッシュ８０を参照し、キャッシュヒットした場合は、中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であると判定し、キャッシュヒットしない場合は、中間コマンドから生成されるべきグラフィックスコマンドのステート値によってステートキャッシュ８０にキャッシュされたステート値を更新する。グラフィックスコマンド生成部７０は、キャッシュヒットした場合は、そのグラフィックスコマンドは冗長なコマンドであるとして生成しないが、キャッシュヒットしない場合は、グラフィックスコマンドを生成する。
【００３３】
グラフィックスコマンド生成部７０により生成されたグラフィックスコマンドは、ＧＰＵ１４０に渡され、ＧＰＵ１４０のハードウェア機能を用いて実行され、オブジェクトがレンダリングされる。
【００３４】
図３（ａ）〜（ｄ）は、中間コマンドからグラフィックスコマンドが生成される様子を説明する図である。
【００３５】
図３（ａ）は、中間コマンド生成部３０により生成された中間コマンド列を示す。ここでは、中間コマンドとしてDrawPacket1、DrawPacket2、DrawPacket3がこの順で生成されている。図３（ｂ）は、ソーティング部４０によりソートされた中間コマンド列を示す。ここでは、ソーティングの結果、２つの中間コマンドDrawPacket1、DrawPacket2の実行順序が入れ替わり、中間コマンドの実行順序はDrawPacket2、DrawPacket1、DrawPacket3の順になる。ソーティング部４０によって生成される中間コマンドの実行順序で中間コマンドを実行すると、中間コマンド生成部３０によって生成された実行順序で中間コマンドを実行した場合よりもモデルデータの遷移コストが小さくなる。
【００３６】
図３（ｃ）および図３（ｄ）は、グラフィックスコマンド変換部５０が中間コマンドからグラフィックスコマンドへ変換する様子を示す。
【００３７】
まず、比較のために、図３（ｃ）を参照して、同一性判定部６０を動作させなかった場合に中間コマンドから変換されるグラフィックスコマンド列を説明する。
【００３８】
グラフィックスコマンド生成部７０が、ソーティング部４０によりソートされた中間コマンド列において最初の中間コマンドDrawPacket2をグラフィックスコマンド列に変換すると、
SetTexture(A);
SetVertexShader(P);
SetFragmentShader(X);
DrawIndexArray(J);
となる。これを第１グラフィックスコマンド列と呼ぶ。ここで、SetTextureはテクスチャを設定するグラフィックスコマンド、SetVertexShaderは頂点シェーダプログラムを設定するグラフィックスコマンド、SetFragmentShaderはフラグメントシェーダを設定するグラフィックスコマンドであり、DrawIndexArrayは設定されたパラメータやプログラムにもとづいてレンダリングを実行するグラフィックスコマンドである。括弧内のA、P、X、Jはステートである。たとえば、関数SetTexture()の引数AはテクスチャＩＤ、SetVertexShader()の引数PはシェーダＩＤまたはメモリ上のプログラムのアドレスである。
【００３９】
次に、グラフィックスコマンド生成部７０が、ソーティング部４０によりソートされた中間コマンド列において２番目の中間コマンドDrawPacket1をグラフィックスコマンド列に変換すると、
SetTexture(B);
SetVertexShader(P);
SetFragmentShader(Y);
DrawIndexArray(K);
となる。これを第２グラフィックスコマンド列と呼ぶ。
【００４０】
さらに、グラフィックスコマンド生成部７０が、ソーティング部４０によりソートされた中間コマンド列において３番目の中間コマンドDrawPacket3をグラフィックスコマンド列に変換すると、
SetTexture(B);
SetVertexShader(P);
SetFragmentShader(Y);
DrawIndexArray(L);
となる。これを第３グラフィックスコマンド列と呼ぶ。
【００４１】
次に、図３（ｄ）を参照して、同一性判定部６０を動作させた場合に中間コマンドから変換されるグラフィックスコマンド列を説明する。
【００４２】
同一性判定部６０は、第１グラフィックスコマンド列と第２グラフィックスコマンド列を比較し、同じステート値で同じグラフィックスコマンドが繰り返し生成されているかどうかを判定する。第２グラフィックスコマンド列におけるSetTexture(B)は、第１グラフィックスコマンド列におけるSetTexture(A)と同じグラフィックスコマンドであるが、ステート値が異なる（Ｂ≠Ａ）。第２グラフィックスコマンド列におけるSetVertexShader(P)は、第１グラフィックスコマンド列におけるSetVertexShader(P)と同じグラフィックスコマンドであり、ステート値も同じである（どちらもＰ）。第２グラフィックスコマンド列におけるSetFragmentShader(Y)は、第１グラフィックスコマンド列におけるSetFragmentShader(X)と同じグラフィックスコマンドであるが、ステート値が異なる（Ｙ≠Ｘ）。第２グラフィックスコマンド列におけるDrawIndexArray(K)は、第１グラフィックスコマンド列におけるDrawIndexArray(J)と同じグラフィックスコマンドであるが、ステート値が異なる（Ｋ≠Ｊ）。
【００４３】
第２グラフィックスコマンド列におけるSetVertexShader(P)は、第１グラフィックスコマンド列におけるSetVertexShader(P)と同一ステートの同一コマンドであるから、冗長なコマンドであり、実行する必要がない。そこで、グラフィックスコマンド生成部７０は、同一性判定部６０の判定結果にもとづき、第２グラフィックスコマンド列におけるSetVertexShader(P)は生成せず、残りのSetTexture(B)、SetFragmentShader(Y)、DrawIndexArray(K)を生成する。すなわち、同一性判定部６０が動作する場合、グラフィックスコマンド生成部７０が生成する第２グラフィックスコマンド列は以下のようになる。
SetTexture(B);
SetFragmentShader(Y);
DrawIndexArray(K);
【００４４】
同様に、同一性判定部６０は、第２グラフィックスコマンド列と第３グラフィックスコマンド列を比較し、同じステート値で同じグラフィックスコマンドが繰り返し生成されているかどうかを判定する。第３グラフィックスコマンド列におけるSetTexture(B)は、第２グラフィックスコマンド列におけるSetTexture(B)と同じグラフィックスコマンドであり、ステート値も同じである（どちらもＢ）。第３グラフィックスコマンド列におけるSetVertexShader(P)は、第２グラフィックスコマンド列におけるSetVertexShader(P)と同じグラフィックスコマンドであり、ステート値も同じである（どちらもＰ）。第３グラフィックスコマンド列におけるSetFragmentShader(Y)は、第２グラフィックスコマンド列におけるSetFragmentShader(Y)と同じグラフィックスコマンドであり、ステート値も同じである（どちらもＹ）。第３グラフィックスコマンド列におけるDrawIndexArray(L)は、第２グラフィックスコマンド列におけるDrawIndexArray(K)と同じグラフィックスコマンドであるが、ステート値が異なる（Ｌ≠Ｋ）。
【００４５】
第３グラフィックスコマンド列におけるSetTexture(B)、SetVertexShader(P)、SetFragmentShader(Y)は、第２グラフィックスコマンド列におけるSetTexture(B)、SetVertexShader(P)、SetFragmentShader(Y)と同一ステートの同一コマンドであるから、冗長なコマンドであり、実行する必要がない。そこで、グラフィックスコマンド生成部７０は、同一性判定部６０の判定結果にもとづき、第３グラフィックスコマンド列におけるSetTexture(B)、SetVertexShader(P)、SetFragmentShader(Y)は生成せず、残りのDrawIndexArray(L)を生成する。すなわち、同一性判定部６０が動作する場合、グラフィックスコマンド生成部７０が生成する第３グラフィックスコマンド列は以下のようになる。
DrawIndexArray(L);
【００４６】
以上をまとめると、本実施の形態のグラフィックスコマンド変換部５０によれば、同一性判定部６０がグラフィックスコマンドのステートの同一性を判定し、グラフィックスコマンド生成部７０は同一性判定結果にもとづいて、ソーティング部４０によってソートされた中間コマンド列から、冗長性を削除した以下のグラフィックスコマンド列を生成する。
SetTexture(A);
SetVertexShader(P);
SetFragmentShader(X);
DrawIndexArray(J);
SetTexture(B);
SetFragmentShader(Y);
DrawIndexArray(K);
DrawIndexArray(L);
【００４７】
図３（ｃ）の同一性判定部６０が動作しなかった場合と比べれば、生成されるグラフィックスコマンドの数は１２から８に減っており、処理効率が向上する。
【００４８】
ここで、ソーティング部４０が、図３（ａ）に示した中間コマンド生成部３０が生成した中間コマンド列を図３（ｂ）に示すようにソーティングすることの意義を説明する。
【００４９】
仮にソーティング部４０によるソーティングが行われなかったとすると、図３（ａ）の中間コマンド列の順序でグラフィックコマンド列が生成される。その場合、同一性判定部６０が動作しないとすると、中間コマンド列は以下のグラフィックコマンド列に変換されることになる。
SetTexture(B);
SetVertexShader(P);
SetFragmentShader(Y);
DrawIndexArray(K);
SetTexture(A);
SetVertexShader(P);
SetFragmentShader(X);
DrawIndexArray(J);
SetTexture(B);
SetVertexShader(P);
SetFragmentShader(Y);
DrawIndexArray(L);
【００５０】
ここで、同一性判定部６０が動作すると、上記のグラフィックスコマンド列の６番目のSetVertexShader(P)はそれより前に実行される２番目のSetVertexShader(P)と同一ステートであり、１０番目のSetVertexShader(P)はそれより前に実行される６番目のSetVertexShader(P)と同一ステートであるから冗長であるとして削除することができる。しかし、他のグラフィックスコマンドは、それより前に実行される同一のグラフィックスコマンドとステートが異なるから、冗長ではない。たとえば、５番目のSetTexture(A)はそれより前に実行される１番目のSetTexture(B)とステートが異なり、９番目のSetTexture(B)はそれより前に実行される５番目のSetTexture(A)とステートが異なるため、それぞれ実行を省くことはできないものである。
【００５１】
したがって、同一性判定部６０の同一判定の結果、冗長であるとして削除できるグラフィックスコマンドは２つだけであり、グラフィックスコマンド生成部７０により生成される冗長性を削除したグラフィックスコマンド列は以下のようにグラフィックスコマンドの数が１０になる。
【００５２】
SetTexture(B);
SetVertexShader(P);
SetFragmentShader(Y);
DrawIndexArray(K);
SetTexture(A);
SetFragmentShader(X);
DrawIndexArray(J);
SetTexture(B);
SetFragmentShader(Y);
DrawIndexArray(L);
【００５３】
このように、ソーティング部４０によって中間コマンド列の実行順序をソーティングすることによって、同一性判定部６０が冗長であると判定するグラフィックスコマンドの数を増やすことができ、グラフィックスコマンド生成部７０によって冗長性を削除して最適化したグラフィックスコマンド列を生成して、グラフィックス処理の効率を高めることができる。
【００５４】
以下、遷移コストにもとづく中間コマンド列のソーティング処理について、詳しく説明する。
【００５５】
図４（ａ）は、遷移コスト計算部１０によるモデルデータの遷移コストの計算方法を説明する図であり、図４（ｂ）は、ソートキー付与部２０によるモデルデータへのソートキーの付与方法とを説明する図である。
【００５６】
遷移コスト計算部１０は、あるモデルデータから別のモデルデータへ遷移した場合、グラフィックス演算に係るハードウェアが受ける処理負荷を示す遷移コストを計算する。たとえば、モデルデータが遷移することにより、テクスチャが変更される場合、遷移コストを１０ポイントとし、フラグメントシェーダが変更される場合、遷移コストを３０ポイントとし、頂点シェーダが変更される場合、遷移コストを２０ポイントとする。これらのポイントは、グラフィックスハードウェアにおいて、テクスチャ、フラグメントシェーダ、頂点シェーダを変更する際の負荷を相対的に表したものである。
【００５７】
たとえば、モデルデータＡからモデルデータＢに遷移するとき、テクスチャが３枚、フラグメントシェーダが１個変更になるとすると、遷移コストは合計すると、１０×３＋３０＝６０ポイントとなる。
【００５８】
遷移コスト計算部１０は、各フレームでレンダリングされるすべてのオブジェクトのモデルデータについて、２つのモデルデータ間を遷移するときの遷移コストを計算する。図４（ａ）は、４つのモデルデータＡ〜Ｄについて、任意の２つのモデルデータ間の遷移コストを計算した例を示す。モデルデータＡからモデルデータＢへの遷移コストは１０、モデルデータＡからモデルデータＣへの遷移コストは３０、モデルデータＡからモデルデータＤへの遷移コストは５０、モデルデータＢからモデルデータＣへの遷移コストは４０、モデルデータＢからモデルデータＤへの遷移コストは２０、モデルデータＣからモデルデータＤへの遷移コストは１０である。
【００５９】
ソートキー付与部２０は、表示される画面領域を最も占有するモデルデータ、たとえば、画面の中心を占めるであろうモデルデータを開始点として、遷移コストが最も小さいモデルデータを次に選択することを繰り返すことにより、すべてのモデルデータを巡回する。これにより、モデルデータを遷移させる順序を決定し、その遷移順序にしたがってモデルデータにソートキーを付与する。
【００６０】
画面の中心を占めるであろうモデルデータから始めるのは、そのモデルデータを最初に描画することで、後続する中間コマンドの生成するピクセルがその後ろに隠れ、カリングにより処理をスキップできる可能性が高まり、処理効率が向上するからである。
【００６１】
ここでは、モデルデータＡが画面の中心を占めると想定し、モデルデータＡから開始する。図４（ｂ）に示すように、モデルデータＡを起点として、モデルデータＢに遷移すると遷移コストは１０ポイント、モデルデータＣに遷移すると遷移コストは３０ポイント、モデルデータＤに遷移すると遷移コストは５０ポイントであるから、３つのモデルデータＢ、Ｃ、Ｄの中から遷移コストが最小であるモデルデータＢを２番目として選択する。
【００６２】
同様に、モデルデータＢから、モデルデータＣに遷移すると遷移コストは４０ポイント、モデルデータＤに遷移すると遷移コストは２０ポイントであるから、残り２つのモデルデータＣ、Ｄの中から遷移コストが最小であるモデルデータＤを３番目として選択する。最後に、モデルデータＤから残りのモデルデータＣに遷移する。４番目のモデルデータＣへの遷移コストは１０である。
【００６３】
このようにして、ソートキー付与部２０は、モデルデータ間の遷移コストにもとづいてモデルデータＡ、Ｂ、Ｄ、Ｃの順にモデルデータを遷移させる順序を決定し、この順にモデルデータＡ、Ｂ、Ｄ、Ｃにそれぞれソートキー０、１、２、３を割り当てる。
【００６４】
ここでは、任意の２つのモデルデータ間の遷移コストを計算して、あるモデルデータを起点として、最小遷移コストを探索することにより、モデルデータの遷移順序を決定し、ソートキーを付与したが、遷移コストにもとづいて別の探索アルゴリズムを用いてモデルデータの遷移順序を決定してもよい。また、任意の２つのモデルデータ間の遷移コストをすべて計算することが処理負荷になる場合は、モデルデータの一部の組み合わせについて遷移コストを求め、モデルデータを巡回するパスを遷移コストを求めた範囲に限定してもよい。
【００６５】
中間コマンド生成部３０がモデルデータとワークデータを有する中間コマンドを生成するとき、モデルデータにはソートキーが割り当てられており、ソーティング部４０はソートキーの順に中間コマンド生成部３０が生成した中間コマンド列をソーティングする。これにより、モデルデータが似ている中間コマンドがクラスタリングされて連続して実行されるようになる。
【００６６】
モデルデータの遷移コストが小さい順にモデルデータを遷移させると、中間コマンド列からグラフィックスコマンド列を生成したとき、繰り返し実行されるグラフィックスコマンドのステートが一致することが多くなる。たとえば、遷移コストが小さいということは、テクスチャやシェーダの変更が少ないということであり、グラフィックスコマンドのステートが変更されることも少なくなる。そのため、モデルデータの遷移コストが小さい順に中間コマンド列をソーティングした上で、中間コマンド列をグラフィックスコマンド列に変更すると、同一性判定によって削除できるグラフィックスコマンドの数を増やすことができる。
【００６７】
図５は、実施の形態に係るグラフィックスコマンド生成装置２００によるグラフィックコマンド生成処理の手順を示すフローチャートである。
【００６８】
レンダリングされるすべてのオブジェクトのモデルデータを生成する（Ｓ１０）。遷移コスト計算部１０は、モデルデータ間を遷移するときの遷移コストを計算する（Ｓ２０）。ソートキー付与部２０は、遷移コストにもとづいてモデルデータを遷移する順序を決定し、その順序にしたがってモデルデータにソートキーを付与する（Ｓ３０）。ステップＳ１０〜Ｓ３０の処理はオフラインで実行され、モデルデータ記憶部３２にはソートキー付きのモデルデータが記憶される。
【００６９】
各フレームについて、以下のステップＳ４０〜Ｓ７０が繰り返し実行される。まず、中間コマンド生成部３０は、モデルデータとワークデータを有する中間コマンドを生成する（Ｓ４０）。ソーティング部４０は、モデルデータに付与されたソートキーの順に中間コマンド生成部３０が生成した中間コマンドをソーティングする（Ｓ５０）。グラフィックスコマンド変換部５０は、ソーティング後の中間コマンドをグラフィックスコマンドに変換する（Ｓ６０）。次のフレームのレンダリングをする場合（Ｓ７０のＹ）は、ステップＳ４０に戻ってステップＳ４０〜Ｓ６０の処理を繰り返し、現フレームでレンダリングを終える場合（Ｓ７０のＮ）、グラフィックスコマンド生成処理を終了する。
【００７０】
図６は、グラフィックスコマンド変換部５０によって実行されるステップＳ６０のグラフィックスコマンドへの変換処理の詳細な手順を示すフローチャートである。
【００７１】
グラフィックスコマンド変換部５０において、同一性判定部６０は、中間コマンドからこれから生成されようとしているグラフィックスコマンドのステートとその設定値にもとづいてステートキャッシュ８０を参照し、当該ステート値がキャッシュされているかどうかを調べる（Ｓ８０）。
【００７２】
ステートキャッシュ８０において当該ステート値がキャッシュヒットした場合（Ｓ８２のＹ)、既に同一のステート値のグラフィックスコマンドが実行されていることから、同一性判定部６０は、中間コマンドから生成されようとしているグラフィックスコマンドが冗長であると判定し、グラフィックスコマンド生成部７０は、このグラフィックスコマンドを生成しないで終了する。
【００７３】
一方、ステートキャッシュ８０において当該ステート値がキャッシュヒットしなかった場合（Ｓ８２のＮ)、中間コマンドからこれから生成されようとしているグラフィックスコマンドが以前は異なるステート値で実行されていたか、そのグラフィックスコマンドはまだ実行されたことがない。この場合、同一性判定部６０は、中間コマンドから生成されようとしているグラフィックスコマンドは冗長ではないと判定し、当該ステート値によってステートキャッシュ８０を更新し（Ｓ８４）、グラフィックスコマンド生成部７０は、中間コマンドからグラフィックスコマンドを生成する（Ｓ８６）。
【００７４】
同一性判定部６０とグラフィックスコマンド生成部７０は、ステートキャッシュ８０を用いて、ステップＳ８０〜Ｓ８６の処理を繰り返し、中間コマンド列をグラフィックスコマンド列に変換する。これにより、同一の設定を行う冗長なグラフィックスコマンドを削除したグラフィックスコマンド列が生成される。
【００７５】
以下、ステートキャッシュ８０にキャッシュされるステートの種類の具体例を挙げる。
【００７６】
（１）フラグメントシェーダ／頂点シェーダのプログラムＩＤ
フラグメントシェーダ／頂点シェーダのプログラムの生成時に、ユニークＩＤをふっておき、ステートキャッシュ８０にそのＩＤを保持し、同一性判定部６０は、同一のＩＤの場合はプログラム設定コマンドは冗長であると判定し、グラフィックスコマンド生成部７０はそのプログラム設定コマンドの生成をスキップする。このＩＤは、シェーダが一つの論理アドレス空間内に存在する場合はその先頭アドレスでもよい。
【００７７】
（２）テクスチャＩＤ
テクスチャ生成時に、ユニークＩＤをふっておき、ステートキャッシュ８０にそのＩＤをテクスチャユニット毎に保持する。同一性判定部６０は、レンダリング時にテクスチャユニットのＩＤをチェックし同一であれば、テクスチャ設定コマンドは冗長であると判定し、グラフィックスコマンド生成部７０は、そのテクスチャ設定コマンドの生成をスキップする。このＩＤは、テクスチャ一つの論理アドレス空間内に存在する場合はその先頭アドレスでもよい。
【００７８】
（３）デプステスト／ブレンド／ステンシルテストの設定値
デプステスト、ブレンド、ステンシルテストを行うか行わないか（enable/disable）の設定をＢｏｏｌ値でステートキャッシュ８０に保持し、同一性判定部６０は、設定値が同一の場合はこれらの処理を行うか行わないかを設定するコマンドは冗長であると判定し、グラフィックスコマンド生成部７０はその設定コマンドの生成をスキップする。
【００７９】
（４）デプステスト関数／ブレンド関数／ステンシルテストオペレータ
設定した各関数を意味する定数をステートキャッシュ８０にキャッシュする。デプステスト関数であれば、そのデプス関数がイコール（＝）、ｌｅｓｓ  ｔｈａｎ（＜）、ｇｒｅａｔｅｒ  ｔｈａｎ（＞）のいずれであるかを識別する定数、ブレンド関数であれば、ブレンド比率を識別する定数、ステンシルテストオペレータであれば、インクリメント／デクリメントのいずれであるかを識別する定数がステートキャッシュ８０に保持される。同一性判定部６０は、各関数を識別する定数が同一の場合はこれらの関数の設定コマンドは冗長であると判定し、グラフィックスコマンド生成部７０はその設定コマンドの生成をスキップする。
【００８０】
（５）各種行列
各種行列にＩＤをふっておき、ステートキャッシュ８０にそのＩＤを保持する。同一性判定部６０は、同一のＩＤの場合は、行列の設定コマンドは冗長であると判定し、グラフィックスコマンド生成部７０はその行列の設定コマンドの生成をスキップする。たとえば、Ｖｉｅｗ行列やＰｒｏｊｅｃｔｉｏｎ行列は、レンダリングを通して切り替わるのはシャドウマップレンダリング時と通常レンダリングの時ぐらいでおおよそ変わらないから、多くの場合、行列の設定コマンドの生成はスキップすることができる。
【００８１】
ステートキャッシュ８０にキャッシュされるステートをまとめると、以下のようになる。
View Matrix ID
Projection Matrix ID
Model Matrix ID
Fragment Shader ID
Vertex Shader ID
Texture ID
Depth Test (Enable / Disable)
Depth Test Function
Stencil Test(Enable / Disable)
Stencil Test Function
Blend (Enable / Disable)
Blend Function
【００８２】
以上述べたように、本実施の形態のグラフィックスコマンド生成装置２００によれば、モデルデータの遷移コストにもとづいてソートされた中間コマンドを順次グラフィックスコマンドに変換する。グラフィックスコマンドに変換する際、グラフィックスコマンドによって設定したステートの値をキャッシュしておき、ステートの設定値が変化した場合のみグラフィックスコマンドを生成することで、生成されるグラフィックスコマンドの数を減らすことができ、処理効率を高めることができる。ＧＰＵハードウェアは深いパイプライン動作を行うようになっており、一部のステートが変化する場合、パイプラインの上段でストールしてステートの更新を待つことになるが、本実施の形態では、ＧＰＵハードウェア内部のコンテキスト切り替えに伴う性能低下を抑えることができるため、より多くのデータをレンダリング可能である。
【００８３】
図７〜図９を参照して、実施の形態のグラフィックスコマンド生成装置２００の応用例をいくつか説明する。
【００８４】
図７は、複数のプロセスによりレンダリングの中間コマンド列が生成され、一つのレンダリングプロセスでソーティングと冗長性削除が行われるシステムを説明する図である。
【００８５】
複数のプロセスＡ〜Ｃが並列にレンダリングの中間コマンド列を生成するが、テクスチャ、シェーダなどの各種リソースに対してＩＤをふって管理するユニーク管理プロセスが存在し、システム全体でリソースのＩＤがユニークになるように管理する。各プロセスＡ〜Ｃは、ユニークＩＤ管理プロセスに各種リソースのＩＤを問い合わせ、モデルデータにソートキーを付与する。各プロセスＡ〜Ｃが生成した中間コマンド列は一つのレンダリングプロセスに渡され、最終的にレンダリングプロセスがソートキーによる中間コマンド列のソーティング、中間コマンド列からグラフィックコマンド列への変換、ステートにもとづく同一性判定による冗長性削除を行う。
【００８６】
この場合、グラフィックスコマンド生成装置２００の遷移コスト計算部１０、ソートキー付与部２０、中間コマンド生成部３０の機能は、各プロセスＡ〜Ｃに実装されるが、ソーティング部４０、同一性判定部６０、グラフィックスコマンド生成部７０の各機能は、１つのレンダリングプロセスに実装される。
【００８７】
この応用例では、複数のプロセスを用いて処理を分散化し、処理効率を上げることができるという効果を奏する。
【００８８】
図８は、複数のサーバによりレンダリングの中間コマンド列が生成され、サーバと通信するクライアントでソーティングと冗長性削除が行われるシステムを説明する図である。
【００８９】
サービス提供者側でテクスチャ、シェーダなどの各種リソースに対してＩＤをふって管理し、各サーバＡ〜Ｃが並列にレンダリングの中間コマンド列を生成し、モデルデータのソートキーをコンテンツとともにクライアントのアプリケーションに配信することで、クライアントは中間コマンドをソートし、冗長性を削除したグラフィックスコマンドを生成することができる。
【００９０】
この場合、グラフィックスコマンド生成装置２００の遷移コスト計算部１０、ソートキー付与部２０、中間コマンド生成部３０の機能は、各サーバＡ〜Ｃに実装されるが、ソーティング部４０、同一性判定部６０、グラフィックスコマンド生成部７０の各機能は、クライアントに実装される。
【００９１】
この応用例では、クライアントの描画負荷を削減でき、クライアントの描画効率を高められ、また、クライアントの消費電力を削減することができるという効果を奏する。
【００９２】
図９は、複数のクライアントによりレンダリングの中間コマンド列が生成され、複数のクライアントと通信するサーバでソーティングと冗長性削除が行われるシステムを説明する図である。
【００９３】
クライアントは、サービス提供側が事前に作成したモデルデータを組み合わせたモデルを作成し、レンダリング中間コマンドをサーバへ送付する。サーバは、複数のクライアントＡ〜Ｃが作成した中間コマンドを受けつけ、それらを一つの画面にレンダリングする。たとえば、大きな画像をレンダリングする場合、複数のクライアントが並列に中間コマンドを生成し、サーバが複数のクライアントＡ〜Ｃから中間コマンドを受信して、レンダリングをすることがある。
【００９４】
サーバは、複数のクライアントＡ〜Ｃから受信した中間コマンドのソーティングを行い、グラフィックスコマンド列に変換する際、冗長なグラフィックスコマンドを削減してレンダリングを行う。
【００９５】
最後に、サーバはレンダリングした画像を各クライアントＡ〜Ｃに配信する。この画像には、他クライアントが送信したモデルデータが含まれている。
【００９６】
この場合、グラフィックスコマンド生成装置２００の遷移コスト計算部１０、ソートキー付与部２０、中間コマンド生成部３０の機能は、各クライアントＡ〜Ｃに実装されるが、ソーティング部４０、同一性判定部６０、グラフィックスコマンド生成部７０の各機能は、サーバに実装される。
【００９７】
この応用例では、サーバーの消費電力、計算資源を削減することができる。
【００９８】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【００９９】
１０  遷移コスト計算部、  ２０  ソートキー付与部、  ３０  中間コマンド生成部、  ３２  モデルデータ記憶部、  ３４  ワークデータ記憶部、  ４０  ソーティング部、  ５０  グラフィックスコマンド変換部、  ６０  同一性判定部、  ７０  グラフィックスコマンド生成部、  ８０  ステートキャッシュ、  １００  メインプロセッシングユニット、  １０１  メインプロセッサ、  １１０  サブプロセッサ、  １２０  バス、  １３０  ＩＯＩＦ、  １４０  ＧＰＵ、  １５０  ローカルバス、  １６０  ローカルメモリ、  １７０  メモリインタフェース、  １８０  システムメモリ、  １９０  外部デバイス、  ２００  グラフィックスコマンド生成装置。
【図１】
0005436526.tif 000002
【図２】
0005436526.tif 000003
【図３】
0005436526.tif 000004
【図４】
0005436526.tif 000005
【図５】
0005436526.tif 000006
【図６】
0005436526.tif 000007
【図７】
0005436526.tif 000008
【図８】
0005436526.tif 000009
【図９】
0005436526.tif 000010