(57)【要約】【課題】既存の３次元表示アプリケーションソフトウエアの表示を、１つの空間に合成して表示し、その合成表示に対して対話的な３次元幾何変換操作をする。【解決手段】２つの３次元CGソフトＡ、Ｂは、OpenGLコマンドを使って、３次元CG画像を描画する。合成処理ソフトである３次元CG合成プログラムにより、ソフトＡからのOpenGLコマンドと、ソフトＢからのOpenGLコマンドを取り込む。３次元CG合成プログラムは、ソフトＡからのOpenGLコマンドと、ソフトＢからのOpenGLコマンドとに基づいて、合成指示データに従って合成処理を行い、その結果のOpenGLコマンドを発行して、合成画像を描画する。合成指示データは、対話操作により入力し、入力が無ければ既定値を使う。【選択図】図１
2007080029.tif 000002
【特許請求の範囲】
【請求項１】
３次元描画コマンドを取得するコマンド取得手段と、取得した３次元描画コマンドを格納するバッファ手段と、３次元画像合成に関する合成指示データを取得する合成指示手段と、バッファ手段に格納された異なる３次元描画コマンドのデータに基づいて、前記合成指示データに従って合成処理を行い、合成３次元描画コマンドを生成するコマンド合成手段と、前記合成３次元描画コマンドを処理して３次元画像を表示する表示手段とを具備することを特徴とする３次元ＣＧ合成装置。
【請求項２】
第１の３次元描画コマンドを取得する第１コマンド取得手段と、第１の３次元描画コマンドを格納する第１バッファ手段と、第２の３次元描画コマンドを取得する第２コマンド取得手段と、第２の３次元描画コマンドを格納する第２バッファ手段と、３次元画像合成に関する合成指示データを取得する合成指示手段と、前記第１バッファ手段に格納された第１の３次元描画コマンドのデータと前記第２バッファ手段に格納された第２の３次元描画コマンドのデータとに基づいて、前記合成指示データに従って合成処理を行い、第３の３次元描画コマンドを生成するコマンド合成手段と、第３の３次元描画コマンドを処理して３次元画像を表示する表示手段とを具備することを特徴とする３次元ＣＧ合成装置。
【請求項３】
３次元描画コマンドを取得するコマンド取得手段とバッファ手段を、それぞれ３つ以上備え、前記コマンド合成手段は、３つ以上の３次元描画コマンドのデータに基づいて合成処理を行う手段を有することを特徴とする請求項１記載の３次元ＣＧ合成装置。
【請求項４】
取得した３次元描画コマンドを、ネットワークを介して転送して、前記バッファ手段に格納する手段を備えたことを特徴とする請求項１〜３のいずれかに記載の３次元ＣＧ合成装置。
【請求項５】
取得した３次元描画コマンドを、記録媒体を介してオフラインで前記バッファ手段に格納する手段を備えたことを特徴とする請求項１〜３のいずれかに記載の３次元ＣＧ合成装置。
【請求項６】
前記合成指示手段は、３次元画像合成に関する指示を入力するための操作入力手段であることを特徴とする請求項１〜３のいずれかに記載の３次元ＣＧ合成装置。
【請求項７】
前記合成指示手段は、３次元画像合成に関する指示の既定値を記憶手段から取得する手段であることを特徴とする請求項１〜３のいずれかに記載の３次元ＣＧ合成装置。
【請求項８】
第１の３次元描画コマンドを取得して、第１バッファ手段に格納し、第２の３次元描画コマンドを取得して、第２バッファ手段に格納し、第１バッファ手段に格納された第１の３次元描画コマンドのデータと第２バッファ手段に格納された第２の３次元描画コマンドのデータとに基づいて、既定値の合成指示データまたは入力された合成指示データに従って合成処理を行い、第３の３次元描画コマンドを生成し、第３の３次元描画コマンドを処理して３次元画像を表示することを特徴とする３次元ＣＧ合成方法。
【請求項９】
第１のOpenGLアプリケーションからの３次元描画OpenGL APIコールを、OpenGLグラバドライバを介して取得して、第１バッファ手段に格納し、第２のOpenGLアプリケーションからの３次元描画OpenGL APIコールを、OpenGLグラバドライバを介して取得して、第２バッファ手段に格納し、第１バッファ手段に格納された第１の３次元描画OpenGL APIコールのデータと第２バッファ手段に格納された第２の３次元描画OpenGL APIコールのデータとに基づいて、既定値の合成指示データまたは入力された合成指示データに従って合成処理を行い、第３の３次元描画OpenGL APIコールを生成し、第３の３次元描画OpenGL APIコールを処理して３次元画像を表示することを特徴とする３次元ＣＧ合成方法。
【請求項１０】
複数の３次元描画コマンドを取得してバッファ手段に格納し、前記バッファ手段に格納された異なる３次元描画コマンドのデータに基づいて、既定値の合成指示データまたは入力された合成指示データに従って合成処理を行い、合成３次元描画コマンドを生成し、前記合成３次元描画コマンドを処理して３次元画像を表示することを特徴とする３次元ＣＧ合成方法。
【請求項１１】
請求項８〜１０のいずれかに記載の３次元ＣＧ合成方法をコンピュータで実行するための処理手順を記述したコンピュータプログラム。
【請求項１２】
請求項１１記載のコンピュータプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３次元CG合成システムに関し、特に、OpenGLを用いる複数の３次元CG出力を、１つの３次元シーンに合成する３次元CG合成システムに関する。
【背景技術】
【０００２】
従来のソフトウエアで、３次元CG画像を合成する方法の概要を説明する。従来のOpenGLアプリケーションの３次元画像出力のブロック図は、図10のようになる。OpenGLアプリケーションは、OpenGL APIをコールする。その命令は、OpenGLインターフェースドライバを介して、グラフィックスカードに渡され、最終的に映像出力装置に画像として提示される。これに関連する従来技術の例を、以下にいくつかあげる。
【０００３】
特許文献１に開示された「別々に生成された３次元イメージを合成するグラフィックス・システム」は、コンピュータ・グラフィックス・システムの２次元グラフィックス・イメージ処理パイプラインにおいて、複数の３次元イメージを合成して、合成したイメージを表示画面に最終的にレンダリングすることを可能にするものである。2Dイメージ処理パイプラインを制御するグラフィックス・アプリケーションを含むグラフィックス・システムである。アプリケーションはパイプラインを制御して、第１の3Dイメージを、第１のイメージとは別に生成された第２の3Dイメージと合成する。パイプラインは、両方のイメージのＺ座標データを処理して、合成されたイメージにおける各ピクセルに関して、第１または第２のイメージのどちらが画面の視点に近接しているかを決定し、その決定に基づいて、表示画面上への後のレンダリングに備えて、近接している方のイメージのカラー・データをフレーム・バッファに記憶する。
【０００４】
特許文献２に開示された「合成動画像生成装置」は、３次元物体の写る実写画像から、その物体の３次元形状モデルを対話的に容易に作成する装置である。実写画像から、その特徴情報を対話的に入力する。特徴情報に関する知識情報を入力する。その情報から、実写画像のカメラパラメータを算出する。そのカメラパラメータと、画像の特徴情報と、その情報に関する知識情報から、３次元ＣＧモデルデータを作成する。１枚のカメラパラメータ未知の実写画像から、視覚的に結果を確認しながら、容易に３次元モデルを作成することができる。
【０００５】
特許文献３に開示された「３次元形状モデルの表示方法」は、コンピュータグラフィックスと実写映像との合成を操作性良く行わせる方法である。コンピュータグラフィックスと実写映像とを合成する画像合成装置である。実写映像中の特定の領域を抽出する。抽出した領域に、３次元形状の情報を付加する。抽出領域の情報及び３次元形状の情報に基づき、抽出領域に係る情報を、コンピュータグラフィックスモデル化する。
【０００６】
特許文献４に開示された「画像合成装置」は、簡易な操作でCG画像の前景とすべき被写体の色情報を登録可能とする装置である。画像合成装置は、ビデオカメラからの撮影画像に、画像生成部で生成されるCG画像を重畳して表示する。被写体色情報登録部には、画像生成部で生成されるCG画像よりも前景とすべき被写体画像の色情報が保持される。被写体領域抽出部は、被写体色情報登録部に保持された色情報に基づいて、撮影画像より被写体画像の領域である被写体領域を抽出する。画像合成部は、抽出された被写体領域に対してはCGの描画を禁止しながら、撮影画像上にCG画像を描画する。被写体色保持情報登録部は、被写体画像を構成する被写体を含む第１撮影画像と、被写体を含まない第２撮影画像を、ビデオカメラより得る。それぞれの撮影画像における色情報に基づいて、被写体画像の色情報を決定し、保持する。
【０００７】
特許文献５に開示された「立体画像表示システム」は、使い勝手を改善した立体画像表示システムである。OpenGL中間層インターフェースドライバは、OpenGLインターフェースからの座標データを、VRビューワに供給する。VRビューワは、６自由度センサを介して入力される視点位置情報に応じて、OpenGL中間層インターフェースドライバからの座標データから、左眼画像と右眼画像の画像データを生成する。
【０００８】
非特許文献１に開示された「画像処理装置」は、ワークステーションのクラスタ上で、対話的にレンダリングを行う装置である。クラスタの各ノードに、周知のOpenGL APIを設ける。それは、複数の画像処理器を基にして、並列インターフェースを有するソート優先型の並列レンダリング手段を、仮想的に構成するものである。クラスタ上に分散した１組のタイルから、出力画像を再構成することができる。仮想画像処理能力と、OpenGLの有用性と、クラスタの自由度を結合することにより、時間的に変化する映像を生成できる。16の計算ノードと16のレンダリングノードを使って、対話的に毎秒７千万以上の三角形を処理することができる。
【特許文献１】特開2001-357410号公報
【特許文献２】特開2002-312810号公報
【特許文献３】特開2003-77011号公報
【特許文献４】特開2005-10797号公報
【特許文献５】特開2005-11275号公報
【非特許文献１】Greg Humphreys, Matthew Eldridge, Ian Buck, Gordon Stoll, Matthew Everett, Pat Hanrahan: "WireGL: A Scalable Graphics System for Cluster" Proc. of SIGGRAPH 2001, Aug. 2001, pp.129-140.
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、従来の画像合成装置では、以下のような問題がある。特許文献１に開示されたハードウエアによる画像合成による画像レベルでの複数CGの合成では、幾何的な操作（回転、ズーム、移動）に対して遅いという問題がある。すべての基アプリケーションに、画素値として一致するように指示を出さなければならない。例えば、同じ画面の大きさ、同じ視点、同じ画角で描画するように、指示する必要がある。また、NS Viewer (Micro CAD)や、CALSVIEW (Inter data access)や、3D View (Actify Inc.)などのファイル変換による合成表示では、完全に再現できる共通のファイル書式が無いという問題がある。
【００１０】
また、特許文献２や特許文献３や特許文献４に開示されたような実写とCGの合成では、基本的には画素レベルでの合成であり、３次元CG同士の合成には利用できないという問題がある。また、ソフトウエアによる画像合成（Chromium）では、全ての基アプリケーションに、合成用のコードが埋め込まれていなくてはならないという問題がある。
【００１１】
本発明の目的は、上記従来の問題を解消して、既存の３次元表示アプリケーションソフトウエアの表示を、１つの空間に合成して表示することである。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、本発明では、３次元CG合成装置を、３次元描画コマンドを取得するコマンド取得手段と、取得した３次元描画コマンドを格納するバッファ手段と、３次元画像合成に関する合成指示データを取得する合成指示手段と、バッファ手段に格納された異なる３次元描画コマンドのデータに基づいて、合成指示データに従って合成処理を行い、合成３次元描画コマンドを生成するコマンド合成手段と、合成３次元描画コマンドを処理して３次元画像を表示する表示手段とを具備する構成とした。
【発明の効果】
【００１３】
上記のように構成したことにより、既存の３次元表示アプリケーションソフトウエアの表示を、１つの空間に合成して表示することができ、対話的な３次元幾何変換操作も可能になる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明を実施するための最良の形態について、図１〜図９を参照しながら詳細に説明する。
【実施例】
【００１５】
本発明の実施例は、２つ以上のOpenGLアプリケーションのOpenGL APIコールを、OpenGLグラバドライバを介して取得してバッファに保存し、OpenGL APIバッファの内容を基にOpenGL APIコールを行い、合成画像を表示する３次元CG合成システムである。
【００１６】
図１は、本発明の実施例における３次元CG合成システムの機能的概念図である。図２は、３次元CG合成システムの機能ブロック図である。図１と図２において、ソフトＡは、OpenGLコマンドを使って、３次元CG画像を描画する３次元CGソフトである。ソフトＢは、OpenGLコマンドを使って、３次元CG画像を描画する３次元CGソフトである。合成ソフト３は、複数のOpenGLコマンドから、合成画像のOpenGLコマンドを生成する３次元CGソフトである。グラバドライバ４は、OpenGLコマンドを取り込むドライバである。インターフェースドライバ５は、OpenGLコマンドを描画コマンドに変換するドライバである。グラフィックカード６は、描画コマンドに従って描画を行うハードウエアである。表示装置７は、通常の表示装置である。OpenGL APIバッファA1とA2は、ソフトＡ用のバッファＡである。OpenGL APIバッファB1とB2は、ソフトＢ用のバッファＢである。図３は、合成アプリケーションの合成描画時のフロー図である。図４は、合成システムの応用概念図である。図５〜図９は、応用例の概念図である。
【００１７】
上記のように構成された本発明の実施例における３次元CG合成システムの機能と動作を説明する。最初に、図１を参照しながら、３次元CG合成システムの機能の概要を説明する。３次元描画コマンドとして、OpenGLコマンドの例を説明するが、同機能の他のコマンドも同様である。図１（ａ）に示すように、２つの３次元CGソフトＡ、Ｂがある。このソフトＡは、OpenGLコマンドを使って、３次元CG画像を描画する。ソフトＢも、OpenGLコマンドを使って、３次元CG画像を描画する。従来の方法では、ソフトＡに対するマウス装置などの入力装置からのイベントはソフトＡへ、ソフトＢに対するイベントはソフトＢへ、それぞれ通知されることで、３次元CG画像に対して対話的な操作が実施される。
【００１８】
本発明では、図１（ｂ）に示すように、合成処理ソフトである３次元CG合成プログラムにより、ソフトＡからのOpenGLコマンドと、ソフトＢからのOpenGLコマンドを、グラバドライバを介して取り込み、既定値または操作指示に従って合成処理を行い、その結果のOpenGLコマンドを発行して合成画像を描画する。合成後の画像データに対しても、既定値または操作指示により同様に操作を加えることができる。合成後の画像データに対しては、何の操作も加えなくても正常な画像を得ることができる。
【００１９】
３次元CG合成プログラムに対するマウス装置などの入力装置からのイベントは、３次元CG合成プログラムへ通知されることで、３次元合成画像に対して対話的な操作が実施される。このイベントは、３次元CG合成プログラムの一部である切替・分配機能によってソフトＡ、ソフトＢに通知することも可能で、これによって、ソフトＡおよびＢの持つ対話的な操作を実施することもできる。
【００２０】
次に、図２を参照しながら、合成アプリケーションの動作を説明する。合成アプリケーションは、２つ以上のOpenGLアプリケーションのOpenGL APIコールを、OpenGLグラバドライバを介して取得して、バッファに保存する。OpenGLグラバドライバは、OpenGLアプリケーションに動的リンクされ、OpenGL APIコールを受け取る。OpenGLグラバドライバは、OpenGLインターフェースドライバを動的にリンクし、アプリケーションから受け取ったOpenGLコールをそのまま流す一方、合成アプリケーションにも、その内容を受け渡す。
【００２１】
合成アプリケーションは、OpenGL APIコールの内容を受け取り、バイナリデータとして、OpenGL APIバッファに保存する。OpenGL APIバッファは、OpenGLアプリケーションごとに２つ用意され、交代バッファを構成している。１つは、OpenGLアプリケーションから流れてくるOpenGL APIコールの内容を蓄積するバッファである。もう１つは、合成アプリケーションが合成画像を描画するときに利用される。２つのバッファは、OpenGLアプリケーションが画面をスワップしたとき（＝OpenGLアプリケーションの１フレームの描画が終わったタイミング）にスワップされる（図２のA1とA2が入れ替わる）。合成アプリケーションは、現在蓄積途中でない描画用のOpenGL APIバッファの内容を基に、OpenGL APIコールを行い、合成画像を表示する。
【００２２】
この例では、２つのOpenGLアプリケーションのOpenGL APIコールを取得して合成する場合を説明したが、３つ以上の場合も同様にして実現可能である。また、OpenGLアプリケーションに限らず、同様の機能をもつソフトウエアであれば、同じようにして合成することができる。さらに、合成したOpenGL APIコールと他のOpenGL APIコールから、次のOpenGL APIコールを合成することも同様にして可能である。複数のOpenGLアプリケーションのOpenGL APIコールをリアルタイムに取得して合成することを想定した例を示したが、OpenGL APIコールを記録媒体に格納して、オフラインで取得するように構成することもできる。また、ネットワークを介して遠隔地から取得することもできる。
【００２３】
次に、図３の合成描画時のフローを参照しながら、処理手順を説明する。図３に出てくる「状態値」とは、OpenGLが持つ描画のためのグローバルなパラメータである。例えば、現在の色や、現在のテクスチャ、現在のシェーディング方法といった情報である。これらは、OpenGL APIコール時に逐次更新されるものである。アプリケーションＡとＢとでは異なるOpenGL APIコールを行うのが普通であり、状態値は当然異なる。そのため、合成画像を連続して描画する場合（Ａ→Ｂ→Ａ→Ｂ・・・）には、それぞれの描画の前に状態値を元に戻す必要がある。この他のOpenGL APIコールに関する処理方法などは周知のものであるので、詳しい説明は省略する。必要ならば、上記の特許文献などを参照されたい。
【００２４】
図３の処理を開始する前に、アプリケーションＡとＢから、OpenGL APIコールを取得して、バッファＡとＢに格納する。その後、以下の処理を行いながら、次々にOpenGL APIコールを取得していく。バッファＡにあるOpenGL APIコールのデータに基づいて描画するためのOpenGL状態値を復元する。バッファＡのデータから、OpenGL APIコールを再生成して、OpenGL APIコールを実行する。この処理を、バッファＡのデータすべてについて繰り返す。これが終了したら、バッファＡにあるOpenGL APIコールのデータに基づいて描画するためのOpenGL状態値を保存する。バッファＢにあるOpenGL APIコールのデータに基づいて描画するためのOpenGL状態値を復元する。バッファＢのデータから、OpenGL APIコールを再生成して、OpenGL APIコールを実行する。この処理を、バッファＢのデータすべてについて繰り返す。これが終了したら、バッファＢにあるOpenGL APIコールのデータに基づいて描画するためのOpenGL状態値を保存する。これらの処理を繰り返すことにより、アプリケーションＡとＢから取得したOpenGL APIコールのデータを次々に処理していく。
【００２５】
次に、図４を参照しながら、３次元CG合成方法の利点を説明する。第１に、OpenGL DLLリプレース方式を採用したので、アプリケーションソフトウエアを変更する必要がない。リコンパイルやリリンクなしに、合成が可能である。すなわち、既存のアプリケーションソフトウエアの出力をそのまま利用できる。第２に、OpenGLコマンドレベルでの合成であるので、全体の幾何学的変換は、合成アプリケーションで実行可能である。VR空間では、ヘッドトラッキング時は、アプリケーションソフトウエアへのフィードバックが不要である。視点の変更などは、合成アプリケーションで行うことができる。すなわち、異なる視点の画像などを合成アプリケーションでリアルタイムに統合することができる。第３に、入力イベントをアプリケーション及び合成ソフトへ分配するので、入力装置からのイベントを、空間位置などにより、アプリケーションソフトウエア及び合成ソフトウエアへ適正に戻すことで、あたかも１つのアプリケーションを利用している環境を利用者に提供できる。このようにして、VR空間に、たくさんのアプリケーションソフトを混在させることができる。すなわち、複数の異なるアプリケーションを１つのアプリケーションのように操作することができる。
【００２６】
図５を参照しながら、応用例１を説明する。実験結果と数値計算結果を合成する例である。遠隔地にある実験結果表示システムから、表示コマンドをキャプチャする。これをインターネットかイントラネットで、合成システムに転送する。一方、遠隔地にある数値解析システムから、表示コマンドをキャプチャする。これをインターネットかイントラネットで、合成システムに転送する。合成システムにおいて、２つの画像を合成して表示する。
【００２７】
図６を参照しながら、応用例２を説明する。高品質レンダリングソフトウエアのCG画像に、モデリングソフトウエアのCG画像を合成する例である。高品質レンダリングソフトウエアにより、CG画像を作成する。一方、モデリングソフトウエアにより、人間のCG画像を作成する。この表示コマンドをキャプチャして、レンダリングソフトウエアのCG画像の表示コマンドをキャプチャした結果と合成して、合成画像を表示する。
【００２８】
図７を参照しながら、応用例３を説明する。実験結果と数値計算結果を互いに合成する例である。遠隔地にある実験結果表示システムから、表示コマンドをキャプチャする。これをインターネットかイントラネットで、数値解析システムに転送する。数値解析システムにおいて、２つの画像を合成して表示する。一方、遠隔地にある数値解析システムから、表示コマンドをキャプチャする。これをインターネットかイントラネットで、実験結果表示システムに転送する。実験結果表示システムにおいて、２つの画像を合成して表示する。互いに、遠隔地からのCG画像を自分の画像に合成することができる。
【００２９】
図８を参照しながら、応用例４を説明する。多段階でCG画像を合成する例である。遠隔地にある実験結果表示システムから、表示コマンドをキャプチャする。これをインターネットかイントラネットで、合成システムに転送する。文字・注釈表示ソフトで、文字などを合成する。この表示コマンドをキャプチャして、合成システムに転送する。一方、数値解析システムから、表示コマンドをキャプチャする。これを合成システムに転送して、合成して表示する。
【００３０】
図９を参照しながら、応用例５を説明する。時系列の複数画像を合成する例である。時系列の複数のCG画像を合成する。形状表示ソフトウエアのCG画像の表示コマンドをキャプチャして、時系列合成画像と合成して表示する。
【００３１】
上記のように、本発明の実施例では、３次元CG合成システムを、２つ以上のOpenGLアプリケーションのOpenGL APIコールを、OpenGLグラバドライバを介して取得してバッファに保存し、OpenGL APIバッファの内容を基にOpenGL APIコールを行い、合成画像を表示する構成としたので、対話的な３次元幾何変換操作ができ、既存の３次元表示アプリケーションソフトウエアの表示を、１つの空間に合成して表示することができる。
【産業上の利用可能性】
【００３２】
本発明の３次元CG合成方法は、複数の３次元コンピュータグラフィックスを合成して１つに統合する方法として最適である。
【図面の簡単な説明】
【００３３】
【図１】本発明の実施例における３次元CG合成システムの機能的概念図である。
【図２】本発明の実施例における３次元CG合成システムのブロック図である。
【図３】本発明の実施例における３次元CG合成システムの合成描画時のフロー図である。
【図４】本発明の実施例における３次元CG合成システムの応用概念図である。
【図５】本発明の実施例における３次元CG合成システムの応用例１の概念図である。
【図６】本発明の実施例における３次元CG合成システムの応用例２の概念図である。
【図７】本発明の実施例における３次元CG合成システムの応用例３の概念図である。
【図８】本発明の実施例における３次元CG合成システムの応用例４の概念図である。
【図９】本発明の実施例における３次元CG合成システムの応用例５の概念図である。
【図１０】従来のOpenGLアプリケーションの３次元画像出力のブロック図である。
【符号の説明】
【００３４】
１・・・ソフトＡ、２・・・ソフトＢ、３・・・合成ソフト、４・・・グラバドライバ、５・・・インターフェースドライバ、６・・・グラフィックカード、７・・・表示装置
【図１】
2007080029.tif 000003
【図２】
2007080029.tif 000004
【図３】
2007080029.tif 000005
【図４】
2007080029.tif 000006
【図５】
2007080029.tif 000007
【図６】
2007080029.tif 000008
【図７】
2007080029.tif 000009
【図８】
2007080029.tif 000010
【図９】
2007080029.tif 000011
【図１０】
2007080029.tif 000012