(57)【要約】【課題】ゲームエンジンが所定の時間間隔で指定する描画コマンドからハイフレームレートの画像を生成する。【解決手段】視点設定部２０は、描画コマンドに含まれる視点設定命令により視点を設定する。頂点計算部３０は、設定された視点にもとづいて、描画コマンドに含まれる頂点データからオブジェクトの頂点の計算結果を生成する頂点。画素計算部４０は、設定された視点にもとづいて、各オブジェクトの頂点の計算結果から画素を計算し、描画結果を生成して描画バッファに格納する。視点補間部９０は、異なる２つの時刻における描画コマンドに含まれる視点設定命令により設定される２つの視点を補間する。頂点補間部８０は、異なる２つの時刻におけるオブジェクトの頂点の計算結果を補間し、補間された頂点の計算結果を求める。画素計算部４０は、補間された頂点の計算結果にもとづいて描画処理を行い、補間された描画結果を描画バッファに格納する。【選択図】図２
2014153893.tif 000002
【特許請求の範囲】
【請求項１】
描画コマンドにもとづいてオブジェクトの頂点の計算結果を生成し、各オブジェクトの頂点の計算結果にもとづいて描画処理を行い、描画結果を描画バッファに格納する描画処理部と、
異なる２つの時刻における描画コマンドの設定値と各オブジェクトの頂点の計算結果にもとづいて、各オブジェクトの補間された頂点の計算結果を生成する描画コマンド補間部とを含み、
前記描画処理部は、補間された頂点の計算結果にもとづいて描画処理を行い、補間された描画結果を前記描画バッファに格納することを特徴とする描画処理装置。
【請求項２】
前記描画処理部は、
前記描画コマンドに含まれる視点設定命令により視点を設定する視点設定部と、
設定された視点にもとづいて、前記描画コマンドに含まれる頂点データからオブジェクトの頂点の計算結果を生成する頂点計算部と、
設定された視点にもとづいて、各オブジェクトの頂点の計算結果から画素を計算し、描画結果を生成して前記描画バッファに格納する画素計算部とを含み、
前記描画コマンド補間部は、
異なる２つの時刻における描画コマンドに含まれる視点設定命令により設定される２つの視点を補間する視点補間部と、
異なる２つの時刻におけるオブジェクトの頂点の計算結果を補間し、前記補間された頂点の計算結果を求める頂点補間部とを含み、
前記画素計算部は、補間された頂点の計算結果にもとづいて描画処理を行い、補間された描画結果を前記描画バッファに格納することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記描画処理部は、異なる２つの時刻の間でオブジェクトのモデルの対応が取れない場合、描画コマンド補間部による補間処理の代わりに、異なる２つの時刻のフレームの画素を補間することを特徴とする請求項１または２に記載の描画処理装置。
【請求項４】
前記描画処理部は、オブジェクトの頂点の計算結果にもとづき、オブジェクトのエッジの方向とエッジの動き情報を求め、静止しているエッジに対してエッジの方向に沿ったアンチエイリアスフィルターを施すことを特徴とする請求項１から３のいずれかに記載の描画処理装置。
【請求項５】
前記描画処理部は、オブジェクトの頂点の計算結果にもとづき、オブジェクトの動きの方向に沿ってぼけ成分を付加するフィルターを施すことを特徴とする請求項１から４のいずれかに記載の描画処理装置。
【請求項６】
描画コマンドにもとづいてオブジェクトの頂点の計算結果を生成し、各オブジェクトの頂点の計算結果にもとづいて描画処理を行い、描画結果を描画バッファに格納する描画処理ステップと、
異なる２つの時刻における描画コマンドの設定値と各オブジェクトの頂点の計算結果にもとづいて、各オブジェクトの補間された頂点の計算結果を生成する描画コマンド補間ステップとを含み、
前記描画処理ステップは、補間された頂点の計算結果にもとづいて描画処理を行い、補間された描画結果を前記描画バッファに格納することを特徴とする描画処理方法。
【請求項７】
描画コマンドにもとづいてオブジェクトの頂点の計算結果を生成し、各オブジェクトの頂点の計算結果にもとづいて描画処理を行い、描画結果を描画バッファに格納する描画処理機能と、
異なる２つの時刻における描画コマンドの設定値と各オブジェクトの頂点の計算結果にもとづいて、各オブジェクトの補間された頂点の計算結果を生成する描画コマンド補間機能とをコンピュータに実現させ、
前記描画処理機能は、補間された頂点の計算結果にもとづいて描画処理を行い、補間された描画結果を前記描画バッファに格納することを特徴とする描画処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、描画処理技術、特に描画コマンドを生成する技術に関する。
【背景技術】
【０００２】
パーソナルコンピュータやゲーム専用機において、高品質な３次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
【０００３】
一般に、グラフィックス処理は、ＣＰＵとグラフィックスプロセッシングユニット（ＧＰＵ）が連携することで実行される。ＣＰＵが汎用的な演算を行う汎用プロセッサであるのに対して、ＧＰＵは高度なグラフィックス演算を行うための専用プロセッサである。ＣＰＵはオブジェクトの３次元モデルにもとづいて投影変換などのジオメトリ演算を行い、ＧＰＵはＣＰＵから頂点データなどを受け取ってレンダリングを実行する。ＧＰＵはラスタライザやピクセルシェーダなどの専用ハードウェアから構成され、パイプライン処理でグラフィックス処理を実行する。最近のＧＰＵには、プログラムシェーダと呼ばれるように、シェーダ機能がプログラム可能なものもあり、シェーダプログラミングをサポートするために、一般にグラフィックスライブラリが提供されている。
【０００４】
オブジェクトをレンダリングする際、ＣＰＵは、ＧＰＵのハードウェアにより実行されるグラフィックスコマンドを順次生成してＧＰＵに渡す必要がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１２３５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＧＰＵのグラフィックス処理能力が高くなり、従来のフレームレートよりも高いフレームレートで動画を生成することができるようになってきたが、ゲームなどのアプリケーションでは、ゲームエンジンはグラフィックスコマンドをあらかじめ想定された所定の時間間隔で生成してＧＰＵに渡している。ＧＰＵのグラフィックス性能が十分にある場合でも、あらかじめ作り込まれたゲームアプリケーションでは、ゲームエンジンが従来のフレームレートに合わせた時間間隔でグラフィックスコマンドを指定するため、ハイフレームレートでグラフィックスを生成することはできない。
【０００７】
ハイフレームレートの動画を生成するために、画像ベースのＨＦＲ（High Frame Rate）化技術が利用されることがあるが、この方法では、複数のフレーム間でブロックマッチングなどによって動きベクトルを求め、画素の補間を行うため、演算量が大きくなる。また、物体の境界部分にハローなどの画質劣化が発生しやすいなど、補間されたフレームの画質に問題が生じやすい。さらに、フレーム補間はオブジェクトのオクルージョンに対応することができない。
【０００８】
また、２次元ゲーム画像を生成するゲームアプリケーションに対して、視点を仮想的に設定することで２次元ゲーム画像を３次元ゲーム画像に変換する仮想視点生成技術も利用されている。しかし、この方法では、視点情報を変更するだけであり、個々のオブジェクトの動きを表現することができないため、オブジェクトの動きが非連続になるという問題点がある。
【０００９】
本発明はこうした課題に鑑みてなされたものであり、その目的は、中間コマンドから生成されるグラフィックスコマンドの実行効率を向上させることのできる技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のある態様のグラフィックスコマンド生成装置は、オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成部と、生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換部とを含む。前記グラフィックスコマンド変換部は、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定部と、前記同一性判定部により、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成部とを含む。
【００１１】
本発明の別の態様は、グラフィックスコマンド生成方法である。この方法は、オブジェクトを描画するためのモデルデータを有する中間的な描画コマンドである中間コマンドを生成する中間コマンド生成ステップと、生成された中間コマンドをグラフィックスプロセッサに実行させるためのグラフィックスコマンド列に変換するグラフィックスコマンド変換ステップとを含む。前記グラフィックスコマンド変換ステップは、前記中間コマンドから生成されるべきグラフィックスコマンドのステートが以前に生成されたグラフィックスコマンドのステートと同一であるかどうかを判定する同一性判定ステップと、前記同一性判定ステップにより、ステートが同一でないと判定されたグラフィックスコマンドを生成し、ステートが同一であると判定されたグラフィックスコマンドは冗長なコマンドであるとして生成しないグラフィックスコマンド生成ステップとを含む。
【００１２】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１３】
本発明によれば、中間コマンドから生成されるグラフィックスコマンドの実行効率を向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態に係るグラフィックス処理システムの構成図である。
【図２】実施の形態に係る描画処理装置の構成図である。
【図３】図２の描画処理装置による描画処理の流れを示すダイアグラムである。
【図４】実施の形態に係る描画処理装置による描画コマンドの補間処理の手順を示すフローチャートである。
【図５】モデル、視点、注視点、および描画範囲の移動を説明する図である。
【図６】視点補間処理の詳細を説明する図である。
【図７】頂点補間処理の詳細を説明する図である。
【図８】表示タイミングを説明するダイアグラムである。
【図９】図９（ａ）、（ｂ）は、ポストアンチエイリアスフィルターの適応制御処理を説明する図である。
【図１０】図１０（ａ）〜（ｃ）は、画素ベースのフレーム補間処理を説明する図である。
【図１１】動きぼけの付加処理を説明する図である。
【図１２】オブジェクト毎のエンコード処理を説明する図である。
【発明を実施するための形態】
【００１５】
図１は、実施の形態に係るグラフィックス処理システムの構成図である。このグラフィックス処理システムは、メインプロセッサ１００と、グラフィックスプロセッシングユニット１４０と、システムメモリ１８０と、ローカルメモリ１６０とを含む。
【００１６】
メインプロセッサ１００は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを１個のパッケージに集積したマルチコアプロセッサであってもよい。メインプロセッサ１００はメインバス１２０に接続されており、メインバス１２０にはメモリインタフェース１７０を介してシステムメモリ１８０が接続されている。メインプロセッサ１００はメインバス１２０を介してシステムメモリ１８０に対してデータを読み書きすることができる。
【００１７】
グラフィックスプロセッシングユニット（以下、単に「ＧＰＵ」という）１４０は、グラフィックプロセッサコアを搭載したグラフィックチップであり、ローカルバス１５０を介してローカルメモリ１６０に対してデータを読み書きすることができる。
【００１８】
メインプロセッサ１００とＧＰＵ１４０は、メインバス１２０で接続されており、メインプロセッサ１００とＧＰＵ１４０は互いにメインバス１２０を介してデータをやりとりすることができる。
【００１９】
メインプロセッサ１００は、オブジェクトを描画するための描画コマンドを生成し、システムメモリ１８０内に設けられたコマンドバッファにキューイングする。ＧＰＵ１４０は、コマンドバッファに蓄積された描画コマンドを順次読み出して処理する。
【００２０】
メインプロセッサ１００は、オブジェクトの３次元モデルにもとづいて、ポリゴンの頂点座標値、頂点カラー、法線ベクトル、ＵＶ値などのジオメトリデータを生成し、システムメモリ１８０に格納する。また、メインプロセッサ１００は、ポリゴン表面にマッピングするためのテクスチャをシステムメモリ１８０に格納する。さらに、メインプロセッサ１００は、ハードディスクなどの記録媒体からシェーダプログラムを読み込み、システムメモリ１８０に格納する。
【００２１】
システムメモリ１８０のメモリ領域はＧＰＵ１４０からもアクセスできるようにＧＰＵ１４０が参照するアドレス空間にメモリマッピングされており、ＧＰＵ１４０は、システムメモリ１８０からプログラムやデータを読み取ることができる。たとえば、ＧＰＵ１４０は、ジオメトリデータ、テクスチャおよびシェーダプログラムをシステムメモリ１８０から読み出し、読み出したジオメトリデータ、テクスチャなどグラフィックス演算に必要なデータをローカルメモリ１６０に格納することができる。
【００２２】
ＧＰＵ１４０は、シェーダプログラムにしたがって、ジオメトリデータを用いてポリゴンのラスタライズデータを生成し、ピクセルデータをローカルメモリ１６０内のフレームバッファに書き込む。さらに、ＧＰＵ１４０は、ポリゴン表面にテクスチャをマッピングし、テクスチャマッピング後のピクセルデータをフレームバッファに書き込む。
【００２３】
図２は、実施の形態に係る描画処理装置２００の構成図である。描画処理装置２００の機能ブロックは、図１のＧＰＵ１４０、ローカルメモリ１６０、およびローカルメモリ１６０にロードされたソフトウエアの連携によって実現される。これらの機能ブロックはハードウエアのみ、ソフトウエアのみ、またはそれらの組み合わせによっていろいろな形で実現することができる。
【００２４】
描画処理装置２００は、描画コマンド入力部１０、描画リソース記憶部６０、描画処理部２１０、頂点計算データ記憶部５０、描画バッファ７０、描画コマンド補間部２２０、および表示制御部２３０を含む。
【００２５】
描画コマンド入力部１０は、メインプロセッサ１００により実行されるゲームエンジンから描画コマンド３００を受け取り、描画コマンド３００を描画リソース記憶部６０に保持する。
【００２６】
描画処理部２１０は、描画リソース記憶部６０から描画コマンド３００を読み出し、描画コマンド３００を実行してレンダリングを実行し、描画結果３７０を描画バッファ７０に格納する。
【００２７】
描画処理部２１０の構成をより詳細に説明する。描画処理部２１０は、視点設定部２０、頂点計算部３０、および画素計算部４０を含む。描画コマンド３００は、視点設定命令３１０、頂点計算プログラム３２０、画素計算プログラム３３０、および頂点データ３４０を含む。
【００２８】
視点設定部２０は、視点設定命令３１０にもとづいて視点を頂点計算部３０および画素計算部４０に設定する。
【００２９】
頂点計算部３０は、頂点計算プログラム３２０を用いて、視点設定部２０により設定された視点にもとづいて、各オブジェクトの頂点データ３４０から頂点位置、テクスチャ位置、法線ベクトルなどの頂点パラメータを計算し、頂点計算結果３５０として頂点計算データ記憶部５０に格納する。
【００３０】
画素計算部４０は、画素計算プログラム３３０を用いて、視点設定部２０により設定された視点にもとづいて、各オブジェクトの頂点計算結果３５０から画素を計算し、描画結果３７０として描画バッファ７０に格納する。
【００３１】
描画コマンド補間部２２０は、描画コマンド入力部１０が描画リソース記憶部６０に保持する異なる２つの時間の描画コマンド３００の設定値と頂点計算結果を用いて描画コマンド３００を補間し、頂点を補間し、補間頂点計算結果３６０として頂点計算データ記憶部５０に保持する。
【００３２】
描画コマンド補間部２２０の構成をより詳細に説明する。描画コマンド補間部２２０は、視点補間部９０および頂点補間部８０を含む。
【００３３】
視点補間部９０は、描画リソース記憶部６０から異なる２つの時間の視点設定命令３１０を読み出し、異なる２つの時間の視点を補間し、補間された視点を視点設定部２０に供給する。視点設定部２０は、補間された視点を画素計算部４０に設定する。
【００３４】
頂点補間部８０は、頂点計算データ記憶部５０から異なる２つの時間の頂点計算結果３５０を読み出し、異なる２つの時間の頂点計算結果を補間し、補間頂点計算結果３６０として頂点計算データ記憶部５０に保持する。
【００３５】
画素計算部４０は、描画コマンド３００に含まれる画素計算プログラム３３０を用いて、補間された視点にもとづいて、各オブジェクトの補間頂点計算結果３６０から画素を計算し、補間描画結果３８０を描画バッファ７０に格納する。
【００３６】
表示制御部２３０は、描画バッファ７０に格納された描画結果３７０と補間描画結果３８０を表示タイミングに同期させながら交互にディスプレイに表示する。
【００３７】
図３は、図２の描画処理装置２００による描画処理の流れを示すダイアグラムである。
【００３８】
ゲームエンジンによって、ある時刻ｔでの描画コマンド（ｔ）が順次設定される。描画コマンドには、各モデルＭ（Ｍはモデル番号）の視点設定命令（ｔ，Ｍ）、頂点計算プログラム（ｔ，Ｍ）、画素計算プログラム（ｔ，Ｍ）、および頂点データ（ｔ，Ｍ）が含まれる。
【００３９】
（１）視点設定命令（ｔ，Ｍ）にもとづいて頂点計算プログラム（ｔ，Ｍ）および画素計算プログラム（ｔ，Ｍ）に視点が設定される。
【００４０】
（２）頂点計算プログラム（ｔ，Ｍ）と頂点データ（ｔ，Ｍ）は描画コマンド（ｔ）によって紐付けられている。頂点計算プログラム（ｔ，Ｍ）は、視点設定命令（ｔ，Ｍ）によって設定された視点にもとづいて、頂点データ（ｔ，Ｍ）から頂点計算結果を生成する。
【００４１】
（３）画素計算プログラム（ｔ，Ｍ）は、視点設定命令（ｔ，Ｍ）によって設定された視点にもとづいて、この頂点計算結果から描画結果（ｔ）を生成する。
【００４２】
このようにして、まず、描画コマンド（ｔ）にもとづいて時刻ｔにおける通常の描画結果（ｔ）が生成される。
【００４３】
（４）この後、保存されていた一つ前の時刻ｔ−１の描画コマンド（ｔ−１）に含まれる視点設定命令（ｔ−１，Ｍ）、および時刻ｔで指定された視点設定命令（ｔ，Ｍ）にもとづいて、２つの時刻ｔと時刻ｔ−１の視点を補間し、補間描画で使用する補間視点を生成する。この補間視点は時刻ｔの画素計算プログラム（ｔ，Ｍ）に設定される。
【００４４】
（５）また、保存されていた一つ前の時刻ｔ−１の頂点計算結果（ｔ−１，Ｍ）、および時刻ｔの頂点計算結果（ｔ，Ｍ）にもとづいて、２つの時刻ｔと時刻ｔ−１の頂点を補間し、補間頂点計算結果を生成する。この補間頂点計算結果は時刻ｔの画素計算プログラム（ｔ，Ｍ）に入力される。
【００４５】
（６）時刻ｔにおける画素計算プログラム（ｔ，Ｍ）は、設定された補間視点にもとづいて、補間頂点計算結果から補間描画結果を生成する。
【００４６】
上記の（１）〜（６）の処理を、時刻ｔでの描画コマンドに含まれる全モデルＭに対して行い、最終的な描画結果（ｔ）と補間描画結果を得る。
【００４７】
描画結果（ｔ）と補間描画結果を交互に表示することで、２つの異なる時刻ｔ−１と時刻ｔの間に、補間描画結果を表示することができる。
【００４８】
図４は、実施の形態に係る描画処理装置２００による描画コマンドの補間処理の手順を示すフローチャートである。図５から図７を参照しながら説明する。
【００４９】
描画コマンド入力部１０により、ゲームエンジンから入力された時刻ｔの描画コマンドが順次設定される（Ｓ１０）。Ｍ番目（Ｍはモデル番号）の描画開始命令が実行される（Ｓ１２)。
【００５０】
図５は、モデル、視点、注視点、および描画範囲の移動を説明する図である。ワールド座標系において、現時刻ｔにおける視点Ｖ（ｔ）、描画範囲Ｓ(ｔ)、注視点Ｇ(ｔ)、モデルＭの頂点ｖ０（ｔ）、ｖ１（ｔ）、ｖ２（ｔ）、一つ前の時刻ｔ−１における視点Ｖ（ｔ−１）、描画範囲Ｓ(ｔ−１)、注視点Ｇ(ｔ−１)、モデルＭの頂点ｖ０（ｔ−１）、ｖ１（ｔ−１）、ｖ２（ｔ−１）の位置関係を示す。
【００５１】
視点設定部２０は、視点設定命令（ｔ，Ｍ）を設定する（Ｓ１４）。これにより、時刻ｔにおける視点Ｖ（ｔ）が設定される。頂点計算部３０は、頂点計算プログラム（ｔ，Ｍ）を利用して、時刻ｔにおけるモデルＭの頂点計算結果（ｔ，Ｍ）を生成する（Ｓ１６)。これにより、時刻ｔにおけるモデルＭの各頂点の頂点座標、テクスチャ座標、法線ベクトルの値が生成される。
【００５２】
画素計算部４０は、画素計算プログラム（ｔ，Ｍ）を利用して、頂点計算結果（ｔ，Ｍ）にもとづいた画素結果（ｔ）を生成する（Ｓ１８）。これにより、時刻ｔにおいて視点Ｖ（ｔ）が見たモデルＭの描画結果が生成される。
【００５３】
現時刻ｔと一つ前の時刻ｔ−１の間でモデルの対応関係を確認する（Ｓ２０）。描画コマンドには全モデルの命令がまとめられている。時刻ｔにおける描画コマンド（ｔ）から各モデルＭに関する命令を抜き出す必要があるが、このためには、ある描画開始命令から次の描画開始命令までを１つの区切りとして、１つのモデルに対応させればよい。現時刻ｔと一つ前の時刻ｔ−１の間でモデルの対応づけは、現時刻ｔと一つ前の時刻ｔ−１の間で、描画コマンドの設定順序が等しいかどうか、頂点計算結果の導出に利用された頂点データにおける頂点数とサイズが等しいかどうか、頂点結果自体の頂点数が等しいかどうかにもとづいて判定される。この対応づけは、視点補間および頂点補間で利用される。
【００５４】
現時刻ｔと一つ前の時刻ｔ−１でモデルの対応が取れた場合（Ｓ２２のＹ）、視点補間部９０は、現時刻ｔと一つ前の時刻ｔ−１の間で視点を補間し、視点設定部２０は、補間された視点を頂点計算部３０および画素計算部４０に設定する。
【００５５】
図６は、視点補間処理の詳細を説明する図である。視点補間処理では、視点位置、注視点位置、および描画範囲の補間を行う。ゲームエンジンから指定されるgluLookAt()やglviewport()などのグラフィックスコマンドにより、視点位置、注視点位置、描画範囲がコマンド引数として得られる。視点位置、注視点位置、描画範囲のそれぞれについて、一つ前の時刻ｔ−１と現時刻ｔの設定情報値を補間することで補間値を得る。
【００５６】
具体的には、現時刻ｔの視点Ｖ（ｔ）と一つ前の時刻ｔ−１の視点Ｖ（ｔ−１）の設定情報値の平均値を計算することで、補間視点位置Ｖｐの設定値を求める。同様に、現時刻ｔの視点Ｇ（ｔ）と一つ前の時刻ｔ−１の視点Ｇ（ｔ−１）の設定情報値の平均値を計算することで、補間注視点位置Ｇｐの設定値を求める。現時刻ｔの描画範囲Ｓ（ｔ）と一つ前の時刻ｔ−１の描画範囲Ｓ（ｔ−１）の設定情報値の平均値を計算することで、補間描画範囲Ｓｐの設定値を求める。
【００５７】
次に、頂点補間部８０は、現時刻ｔと一つ前の時刻ｔ−１の間で頂点を補間し、補間頂点計算結果を生成し、頂点計算データ記憶部５０に保存する。各モデルの頂点補間では、一つ前の時刻ｔ−１の頂点計算結果と現時刻ｔの頂点計算結果の間で、対応する頂点毎に頂点位置の補間が行われる。頂点位置を補間する際、線形補間ではモデルの回転を考慮に入れることができないため、線形補間ではなく回転を考慮した補間を行うことが好ましい。一方、テクスチャの貼り付け位置や頂点に紐付けされる法線ベクトルについては、一つ前の時刻ｔ−１と現時刻ｔの間で平均値を取ればよい。
【００５８】
図７は、頂点補間処理の詳細を説明する図である。ゲームエンジンから指定される頂点計算プログラムによって、各モデルの頂点毎に、頂点位置、テクスチャ位置、法線ベクトルの値が得られる。現時刻ｔと一つ前の時刻ｔ−１の頂点位置、テクスチャ位置、法線ベクトルの設定値を補間することにより、各補間頂点での補間頂点計算結果が得られる。
【００５９】
具体的には、現時刻ｔの各頂点ｖ０（ｔ）、ｖ１（ｔ）、ｖ２（ｔ）の頂点位置Ｐ（ｔ）、テクスチャ位置Ｔ（ｔ）、法線ベクトルＮ（ｔ）と、一つ前の時刻ｔ−１の各頂点ｖ０（ｔ−１）、ｖ１（ｔ−１）、ｖ２（ｔ−１）の頂点位置Ｐ（ｔ−１）、テクスチャ位置Ｔ（ｔ−１）、法線ベクトルＮ（ｔ−１）の補間値を求める。ここで、時刻ｔの頂点位置Ｐ（ｔ）と時刻ｔ−１のＰ（ｔ−１）の補間をする際、モデルＭの回転を考慮して補間する。回転行列により、２つの時刻ｔ、ｔ−１の間の中間時点におけるモデルＭの回転を計算し、補間頂点位置Ｐｓを得る。一方、補間テクスチャ位置Ｔｐは、２つの時刻のテクスチャ位置Ｔ（ｔ）とテクスチャ位置Ｔ（ｔ−１）の平均値とする。同様に、補間法線ベクトルＮｐは、２つの時刻の法線ベクトルＮ（ｔ）と法線ベクトルＮ（ｔ−１）の平均値とする。
【００６０】
ステップＳ２２において、現時刻ｔと一つ前の時刻ｔ−１の間でモデルの対応が取れない場合（Ｓ２２のＮ）、時刻ｔの視点設定命令（ｔ，Ｍ）を実行して補間視点を設定する（Ｓ２８）。これは、時刻ｔにおける視点をそのまま補間視点として用いることを意味する。次に、頂点計算プログラム（ｔ，Ｍ）によって補間頂点結果を生成する（Ｓ３０）。これは、時刻ｔの頂点計算結果をそのまま補間頂点結果として利用することを意味する。
【００６１】
画素計算部４０は、補間頂点計算結果にもとづいて、画素計算プログラム（ｔ，Ｍ）により補間描画結果を生成する（Ｓ３２）。
【００６２】
モデル番号Ｍに１を足す（Ｓ３４）。未処理のモデルがある場合（Ｓ３６のＮ）、ステップＳ１２に戻り、次のモデルについて描画コマンドの補間処理を行う。
【００６３】
すべてのモデルについて処理が終われば（Ｓ３６のＹ）、一つ前の時刻ｔ−１で保持していた頂点補間結果、頂点データ、視点設定命令を現時刻ｔの頂点補間結果、頂点データ、視点設定命令で上書きする。
【００６４】
出力の同期時間が過ぎたら、補間描画結果を出力し（Ｓ４０）、その後、出力同期時間経過後に時刻ｔの描画結果（ｔ）を出力する（Ｓ４２）。この処理によって、遅延を最小に抑えながら、仮想的にフレームを増やしてハイフレームレートで描画することが可能になる。
【００６５】
図８は、表示タイミングを説明するダイアグラムである。ゲームエンジンは、時刻ｔで描画コマンドを補間処理プログラムに対して設定し、表示更新待ちになり、補間処理プログラムから更新の終了通知を受け取る。
【００６６】
補間処理プログラムは、ゲームエンジンから時刻ｔの描画コマンドを設定されると、現時刻ｔと一つ前の時刻ｔ−１の描画コマンドから、時刻ｔの描画結果と補間描画結果を作成する。補間処理は、補間描画結果をディスプレイに対して設定し、表示側同期期間の経過度、時刻ｔの描画結果をディスプレイに対して設定する。
【００６７】
ディスプレイは、補間処理プログラムから設定された補間描画結果を、表示側同期期間が経過するまで表示する。ディスプレイは、表示側同期期間が経過した後、時刻ｔの描画結果を表示する。
【００６８】
図４に戻り、時刻ｔに１を足し（Ｓ４４）、描画停止条件を満たさない場合（Ｓ４６のＮ）、ステップＳ１０に戻り、次の時刻の描画コマンドを投入して各モデルについて描画コマンドの補間処理を行う。描画停止条件が満たされた場合（Ｓ４６のＹ）、終了する。
【００６９】
以上述べたように、本実施の形態の描画処理装置２００によれば、あらかじめ作成されたゲームアプリケーションにおいて、ゲームエンジンから一定の時間間隔で指定される描画コマンドをもとに、その時間間隔内の異なる時間における描画コマンドを補間して作り出すことができる。ある時刻ｔと一つ前の時刻ｔ−１の描画コマンドによって指定される設定値とその描画コマンドによる描画結果にもとづいて、時刻ｔ−１と時刻ｔの間の時刻ｔｐにおける中間的な頂点情報として、頂点位置、テクスチャ位置、法線ベクトル、動き情報などを取得して、補間描画結果を生成することができる。
【００７０】
本実施の形態では、このように描画コマンドを補間することでハイフレームレートの画像を生成することができる。これにより、既存のゲームプログラムを変更せずに、プラットフォームに合わせて最適なフレームレートで映像を表示できる。ハイフレームレートの画像を生成する際、中間的に生成される動き情報とモデル毎の映像をもとにして映像の時間方向に補間するため、低コストで映像の時間解像度を向上することができる。
【００７１】
また、サーバから送信される描画コマンドをクライアントで受信してレンダリングするリモートレンダリングにおいて、送信されるコマンドに欠損が生じ、レンダリングできない場合でも、描画コマンドの補間処理により、欠損したコマンドを仮想的に再生することができる。
【００７２】
以上、描画コマンドの補間処理により、動画像のハイフレームレート化を行う場合を説明したが、ハイフレームレート化処理と併用される別の処理をいくつか説明する。
【００７３】
図９（ａ）、（ｂ）は、ポストアンチエイリアスフィルターの適応制御処理を説明する図である。補間処理において頂点を求める際、カメラ座標系において２つの頂点を結ぶエッジの傾き求める。
【００７４】
図９（ａ）は、カメラ座標系における、ある時刻の頂点ｖ０、ｖ１、ｖ２の位置を示す。頂点ｖ０とｖ１を結ぶエッジはカメラ座標系のｙ軸に対して角度θ１の傾きを有し、頂点ｖ１とｖ２を結ぶエッジはｙ軸に対して角度θ２の傾きを有する。図９（ｂ）は、別の時刻の頂点ｖ０、ｖ１、ｖ２の位置を示す。図９（ａ）と比べて、頂点ｖ０、ｖ１は移動していないため、頂点ｖ０とｖ１を結ぶエッジがｙ軸に対してなす角度θ１は変化していないが、頂点ｖ２は移動しているため、頂点ｖ１とｖ２を結ぶエッジがｙ軸に対してなす角度θ２は変化している。このように頂点モデルには動きのあるエッジと動きのないエッジが存在する。
【００７５】
頂点位置の移動量からエッジの動き量を求め、動きのあるエッジにはアンチエイリアスフィルターをかけないようにする。一方、静止しているエッジにはアンチエイリアスフィルターをかける。この際、アンチエイリアス処理はエッジの方向に沿って、エッジにのみフィルターをかけるようにする。
【００７６】
従来は、画像全体で一律にポストアンチエイリアスフィルターをかけていたため、テクスチャなどエイリアシングが発生しにくい領域がぼけてしまうという問題があり、強いアンチエイリアスをかけられなかった。それに対して、本実施の形態のポストアンチエイリアスフィルターでは、ハイフレームレート化処理を行った際でも、補間処理により得られた頂点間を結ぶエッジに対して、エッジの方向情報と動き情報にもとづいて、アンチエイリアスフィルターをかけるかどうかを適応的に制御することができる。
【００７７】
また、携帯電話端末であればアンチエイリアスフィルターをかけないようにしたり、有機ＥＬディスプレイや大画面テレビディスプレイに対してはアンチエイリアスをかけるなど、画像を表示する端末の特性にもとづいて適応制御することもできる。
【００７８】
図１０（ａ）〜（ｃ）は、画素ベースのフレーム補間処理を説明する図である。一つ前の時刻ｔ−１と現時刻ｔの間にモデルが急に出現した場合やモデルの頂点数が合わない場合など、描画コマンドの補間が難しい状況では、描画コマンドの補間を行わず、動き情報のみを利用して画素を補間する処理に切り替える。
【００７９】
頂点位置の移動量からオブジェクト毎の動き量を求める。たとえば、図１０（ａ）のように、頂点ｖ０、ｖ１、ｖ２の動き量を重み付け補間することにより、ポリゴンの動き量を求める。次に、オブジェクト毎の動き量を重ね合わせることにより、描画フレーム全体での動き量を求める。描画フレーム全体での動き量にもとづいて、図１０（ｂ）に示す現時刻ｔの描画フレームと、図１０（ｃ）に示す一つ前の時刻ｔ−１の描画フレーム間で補間処理を行い、画素を補間する。
【００８０】
描画コマンドの補間処理が困難である場合に、画素ベースのフレーム補間処理に切り替えることで、モデルデータが欠損しているなど、描画コマンドの補間が難しい場合でもフレームを補間することができる。これにより、描画コマンドの補間処理ができない場合にハイフレームレート化ができない事態を避けることができ、描画コマンドの補間処理にエラー耐性をもたせることができる。
【００８１】
また、フレーム補間に切り替えた後も、描画コマンド補間の中間結果の動き情報を用いることで、低コスト、かつ正確な動き情報を求めることができるため、フレーム補間結果の画質が上がる。
【００８２】
図１１は、動きぼけの付加処理を説明する図である。頂点の移動量からオブジェクト毎の動き量を求める。カメラ座標系において、図１１のオブジェクト４００は動きがあるが、オブジェクト４１０は動き量がゼロであり、静止している。この場合、動いているオブジェクト４００には動きの方向に沿ってフィルターをかけてぼけ成分を付加するが、静止しているオブジェクト４１０にはぼけ成分を付加しない。その際、フィルター強度は、表示のフレームレートに合わせて調整する。
【００８３】
頂点補間結果を用いることで、オブジェクトの動きを正確に追跡できるため、モデルの動きに合わせて動きぼけを適切に付加することができ、ハイフレームレート化して動きが不自然になるのを防ぐことができる。
【００８４】
また、通常の低フレームレート描画では、低フレームレートの映像を有機ＥＬなど応答速度の速い表示デバイスで表示すると、動きがカクカクして目立つという問題があった。表示デバイスが、応答速度の速いものであり、かつ高フレームレートで表示できない場合でも、動きのある領域に動きぼけを付加することで、動きがカクカクするのを防ぐことができる。一方、静止している箇所にはぼけ処理を施さないため、エッジの先鋭感が失われず、くっきりと表示される。
【００８５】
図１２は、オブジェクト毎のエンコード処理を説明する図である。頂点の移動量からオブジェクト毎の動き量を求める。サーバ側でオブジェクト毎に描画処理を行い、オブジェクト毎の画像を生成する。オブジェクト毎に画像と動き量を符号化し、符号化ストリームを生成する。符号化ストリームの付加情報としてオブジェクトの重なり情報を生成し、各オブジェクトの符号化ストリームと重なり情報を送信する。クライアント側で複数のストリームを受信して復号し、重なり情報にもとづいて復号されたオブジェクトの画像を重ね合わせる。
【００８６】
図１２の例では、動きのあるオブジェクト４００の画像、静止しているオブジェクト４１０の画像、これらのオブジェクトの重なり情報４２０をそれぞれ別個にエンコードして送信する。受信側では、動きのあるオブジェクト４００の画像のストリーム、静止しているオブジェクト４１０の画像の符号化ストリーム、重なり情報４２０を復号し、動きのあるオブジェクト４００の画像と静止しているオブジェクト４１０の画像を重なり情報にもとづいて重ね合わせる。
【００８７】
動きのあるオブジェクト４００に対しては描画コマンドの補間処理によってハイフレームレート化し、静止しているオブジェクト４１０に対してはフレームレートを落とすことで全体の符号量を減らすことができる。このように動き情報を利用してオブジェクト毎に描画コマンドの補間処理をするかどうかを選択したり、オブジェクト毎の動き量によってフレームレートを変えることで、画像全体をハイフレームレート化処理する場合に比べて、符号量を抑制することができる。
【００８８】
通常のエンコード処理では、動きベクトルを求め、動きベクトルに応じて、フレーム間およびフレーム内で画像情報を圧縮する。この際、動きベクトルの検出は高コストな処理であり、処理負荷が問題となる。また、あるオブジェクトが動いている場合、別のオブジェクトとの境界部分の情報を表現するために多くのビットを割く必要があり、全体の圧縮効率が落ちてしまう。それに対して、本実施の形態のエンコード処理では、動き情報とモデル毎の映像をもとに、オブジェクト毎にエンコードすることで、オブジェクト間の重なり部分にビットを割く必要がなくなるため、全体としてのビット量が削減できる。描画コマンドを補間して動き量を求めているため、オブジェクト毎のエンコードが低コストで実現できる。画面のうち中心に配置されるなどの重要な要素部分に多くのビットを割り振るなどの処理を入れることで、主観品質を保ちつつ、全体のビット量を削減するなどの調整も可能となる。
【００８９】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【符号の説明】
【００９０】
１０  描画コマンド入力部、  ２０  視点設定部、  ３０  頂点計算部、  ４０  画素計算部、  ５０  頂点計算データ記憶部、  ６０  描画リソース記憶部、  ７０  描画バッファ、  ８０  頂点補間部、  ９０  視点補間部、  １００  メインプロセッサ、  １２０  メインバス、  １４０  ＧＰＵ、  １５０  ローカルバス、  １６０  ローカルメモリ、  １７０  メモリインタフェース、  １８０  システムメモリ、  ２００  描画処理装置、  ２１０  描画処理部、  ２２０  描画コマンド補間部、  ２３０  表示制御部、  ３００  描画コマンド、  ３１０  視点設定命令、  ３２０  頂点計算プログラム、  ３３０  画素計算プログラム、  ３４０  頂点データ、  ３５０  頂点計算結果、  ３６０  補間頂点計算結果。
【図１】
2014153893.tif 000003
【図２】
2014153893.tif 000004
【図３】
2014153893.tif 000005
【図４】
2014153893.tif 000006
【図５】
2014153893.tif 000007
【図６】
2014153893.tif 000008
【図７】
2014153893.tif 000009
【図８】
2014153893.tif 000010
【図９】
2014153893.tif 000011
【図１０】
2014153893.tif 000012
【図１１】
2014153893.tif 000013
【図１２】
2014153893.tif 000014