(57)【要約】      （修正有）【課題】リアルタイムビデオアプリケーションで使用するための、コード上で接続された三つ以上のボディの動きをシミュレーションする方法を提供する。【解決手段】方法は、コードで接続されたボディの位置、速度、方向を、反復することなく単一パスで決定する。与えられたタイムステップ及び該タイムステップでのボディ状態に関して、接続されたボディについてのヤコビ行例を演算する。コードの張力を該ヤコビ行例に基づいて演算する。該張力から、次のタイムステップでのボディの状態を求める。【選択図】図５
2019149153.tif 000002
【特許請求の範囲】
【請求項１】
接続されたボディの動きをシミュレーションする方法であって、該方法は、
（ａ）コードで接続された三つ以上のボディの物理的特性に関連した制約を表す制約パラメータを受け取る；
（ｂ）現在のタイムステップでのボディの位置、線速度、角速度、質量、慣性テンソル、及び方向のうち、少なくとも一つを含むボディの状態を受け取る；
（ｃ）外力パラメータ又は外部衝撃パラメータを受け取る、前記外力パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外力を表し、外部衝撃パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外部衝撃を表す；
（ｄ）現在のタイムステップでのボディ状態と制約パラメータに基づいて、前記接続されたボディについてのヤコビ行例を決定する；
（ｅ）現在のタイムステップでの外力パラメータ又は外部衝撃パラメータと前記ヤコビ行例に基づいて、現在のタイムステップでの前記コードに作用する張力を決定する；
（ｆ）決定された現在のタイムステップでの張力に基づいて、前記現在のタイムステップに引き続く次のタイムステップでの前記ボディの状態をアップデートする；
ことからなることを特徴とする方法。
【請求項２】
請求項１記載の方法において、該方法は、更に、
（ｇ）前記アップデートされた状態に基づき、次のタイムステップでの前記コード及びボディの表示を、ディスプレイ装置に表示する；
ことを含む。
【請求項３】
請求項１記載の方法において、該方法は、更に、
（ｇ）現在のタイムステップとして、次のタイムステップをアップデートし、
ステップ（ｃ）から（ｆ）を該アップデートされた現在のタイムステップで繰り返す、
ことを特徴とする。
【請求項４】
請求項１記載の方法において、前記制約パラメータは、（１）前記コードで接続されたボディの数、（２）各ボディ間の距離、及び（３）各ボディは前記コードに沿ってスライド可能か否か、の内少なくとも一つを含む。
【請求項５】
請求項１記載の方法において、前記制約パラメータは、前記コードの質量、該コードの柔軟性及び該コードの剛性のうち、少なくとも一つを含む。
【請求項６】
請求項１記載の方法において、各ステップ（ｃ）から（ｆ）は、記現在のタイムステップの間、一度実行される。
【請求項７】
請求項１記載の方法において、該方法は、更に、
（ｇ）次のタイムステップについてのボディのアップデートされた状態が少なくとも一つの追加的な制約を満足するか否かを決定し；
（ｈ）次のタイムステップについてのボディのアップデートされた状態が前記少なくとも一つの追加的な制約を満足しないと決定された場合に、現在のタイムステップでの前記ボディの状態を変えて、（ｅ）と（ｆ）を反復する、
ことを特徴とする。
【請求項８】
請求項１記載の方法において、前記外力パラメータ又は外部衝撃パラメータのうち少なくとも一つは、入力装置を介してユーザから受け取った入力に基づいて決定され、（ｃ）と（ｆ）をリアルタイムで実行する、ことを特徴とする。
【請求項９】
請求項１記載の方法において、前記現在のタイムステップにおいて、前記コードに作用する張力は衝撃である、ことを特徴とする。
【請求項１０】
処理装置により実行された際に、該プロセッサに以下の処理を行わせる指示が格納されたコンピュータ可読記録媒体であって、該指示は、
（ａ）コードで接続された三つ以上のボディの物理的特性に関連した制約を表す制約パラメータを受け取る；
（ｂ）現在のタイムステップでのボディの位置、線速度、角速度、質量、慣性テンソル、及び方向のうち、少なくとも一つを含むボディの状態を受け取る；
（ｃ）外力パラメータ又は外部衝撃パラメータを受け取る、前記外力パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外力を表し、外部衝撃パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外部衝撃を表す；
（ｄ）現在のタイムステップでのボディ状態と制約パラメータに基づいて、前記接続されたボディについてのヤコビ行例を決定する；
（ｅ）現在のタイムステップでの外力パラメータ又は外部衝撃パラメータと前記ヤコビ行例に基づいて、現在のタイムステップでの前記コードに作用する張力を決定する；
（ｆ）決定された現在のタイムステップでの張力に基づいて、前記現在のタイムステップに引き続く次のタイムステップでの前記ボディの状態をアップデートする；
ことから構成されることを特徴とする。
【請求項１１】
請求項１０記載のコンピュータ可読記録媒体であって、前記指示は、更に、
（ｇ）前記アップデートされた状態に基づき、次のタイムステップでの前記コード及びボディの表示を、ディスプレイ装置に表示する；
ことを含む。
【請求項１２】
請求項１０記載のコンピュータ可読記録媒体であって、前記指示は、更に、
（ｇ）現在のタイムステップとして次のタイムステップをアップデートし、
ステップ（ｃ）から（ｆ）を該アップデートされた現在のタイムステップで繰り返す、
ことを含む。
【請求項１３】
請求項１０記載のコンピュータ可読記録媒体であって、前記制約パラメータは、（１）前記コードで接続されたボディの数、（２）各ボディ間の距離、及び（３）各ボディは前記コードに沿ってスライド可能か否か、の内少なくとも一つを含む。
【請求項１４】
請求項１０記載のコンピュータ可読記録媒体であって、前記指示は、更に、
（ｇ）次のタイムステップについてのボディのアップデートされた状態が少なくとも一つの追加的な制約を満足するか否かを決定し；
（ｈ）次のタイムステップについてのボディのアップデートされた状態が前記少なくとも一つの追加的な制約を満足しないと決定された場合に、現在のタイムステップでの前記ボディの状態を変えて、（ｅ）と（ｆ）を反復する、
ことを含む。
【請求項１５】
請求項１０記載のコンピュータ可読記録媒体であって、前記外力パラメータ又は外部衝撃パラメータのうち少なくとも一つは、入力装置を介してユーザから受け取った入力に基づいて決定され、（ｃ）と（ｆ）をリアルタイムで実行する指示を含む、ことを特徴とする。
【請求項１６】
以下の手順で生成されるビデオシーケンスを少なくとも部分的に有するビデオシーケンスであって、該手順は、
（ａ）コードで接続された三つ以上のボディの物理的特性に関連した制約を表す制約パラメータを受け取る；
（ｂ）現在のタイムステップでのボディの位置、線速度、角速度、質量、慣性テンソル、及び方向のうち、少なくとも一つを含むボディの状態を受け取る；
（ｃ）外力パラメータ又は外部衝撃パラメータを受け取る、前記外力パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外力を表し、外部衝撃パラメータは、現在のタイムステップにおいて、接続されたボディに作用する外部衝撃を表す；
（ｄ）現在のタイムステップでのボディ状態と制約パラメータに基づいて、前記接続されたボディについてのヤコビ行例を決定する；
（ｅ）現在のタイムステップでの外力パラメータ又は外部衝撃パラメータと前記ヤコビ行例に基づいて、現在のタイムステップでの前記コードに作用する張力を決定する；
（ｆ）決定された現在のタイムステップでの張力に基づいて、前記現在のタイムステップに引き続く次のタイムステップでの前記ボディの状態をアップデートする；
ことからなることを特徴とする。
【請求項１７】
請求項１６記載のビデオシーケンスであって、前記手順は、更に、
（ｇ）前記アップデートされた状態に基づき、次のタイムステップでの前記コード及びボディの表示を、ディスプレイ装置に表示する；
ことを含む。
【請求項１８】
請求項１６記載のビデオシーケンスであって、前記手順は、更に、
（ｇ）現在のタイムステップとして次のタイムステップをアップデートし、
ステップ（ｃ）から（ｆ）を該アップデートされた現在のタイムステップで繰り返す、
ことを特徴とする。
【請求項１９】
請求項１６記載のビデオシーケンスであって、前記制約パラメータは、（１）前記コードで接続されたボディの数、（２）各ボディ間の距離、及び（３）各ボディは前記コードに沿ってスライド可能か否か、の内少なくとも一つを含む。
【請求項２０】
請求項１６記載のビデオシーケンスであって、前記手順は、更に、
（ｇ）次のタイムステップについてのボディのアップデートされた状態が少なくとも一つの追加的な制約を満足するか否かを決定し；
（ｈ）次のタイムステップについてのボディのアップデートされた状態が前記少なくとも一つの追加的な制約を満足しないと決定された場合に、現在のタイムステップでの前記ボディの状態を変えて、（ｅ）と（ｆ）を反復する、
ことを特徴とする。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、物理システムのシミュレーションに関わり、特に、リアルタイムゲームアプリケーションにおける接続されたボディの動きをモデリングすることに関する。
【背景技術】
【０００２】
コンピュータシミュレーションは、数学モデルを用いて物理システムの挙動を再現することができる。コンピュータシミュレーションは物理学（計算物理学）、天体物理学、気候学、化学及び生物学、経済における人間のシステム、心理学、社会科学及び技術において、多数の自然システムの数学モデルに関する有効なツールとなった。物理システムのシミュレーションは、計算の集中したものとなっている。特に、これらのシミュレーションのいくつかは正確で合理的な結果を得るために反復ループを用いた計算を行っている。ループ及び関連するパラメータの増加は、シミュレーションを行う上で必要なリソース及び／又は時間を増加させている。
【０００３】
従来こうした反復ループを使用したシミュレーションの一つに、コードで接続された３個以上のボディのシミュレーションがある。合理的で正確なシミュレーション結果を得るために、結果が収束するまで、接続されたボディのグループから、異なる二つのボディのセットをシミュレーションする、マルチボディシミュレーションが反復的におこなわれる。しかしながら、こうした従来のアプローチは、演算的に非効率であり、演算リソースと時間を消費し、リアルタイムなアプリケーションには向かないものである。
【発明の概要】
【０００４】
実施例は、コード上の３個以上のボディの動きを、接続されたボディについてのヤコビ行例を決定し、最新のヤコビ行例に基づいて、現在のタイムステップにおけるコードに作用する張力を決定し、現在のタイムステップに引き続く次のタイムステップについてボディのアップデートされた状態を決定することで、シミュレートすることに関する。ヤコビ行例は、制約パラメータ及び現在のタイムステップのボディの状態に基づく。制約パラメータは、コードで接続された３個以上のボディの物理的特性を示すものである。
【０００５】
一つ以上の実施例で、張力は、ヤコビ行例と共に、現在のタイムステップでの外力パラメータ又は外部衝撃パラメータに基づくものである。外力パラメータは、現在のタイムステップにおいて接続されたボディに作用する外力を表す。外部衝撃パラメータは、現在のタイムステップにおいて接続されたボディに作用する外部衝撃を表す。ボディのアップデートされた状態は、現在のタイムステップで決定された張力に基づいている。
【０００６】
一つ以上の実施例では、現在のタイムステップでのボディ状態はヤコビ行例が決定される前に受け取る。現在のタイムステップでのボディ状態は、ボディの位置、線速度、角速度、質量、方向及び慣性テンソルの内、少なくとも一つを含む。
【０００７】
一つ以上の実施例では、次のタイムステップでのボディとコードの表示は、ディスプレイ装置に表示される。
【０００８】
一つ以上の実施例では、次のタイムステップは、現在のタイムステップでアップデートされ、ステップはアップデートされた現在のタイムステップで置き換えられ、引き続くタイムステップでのボディ状態が得られる。
【０００９】
一つ以上の実施例では、制約パラメータは、以下のうち、少なくとも一つを含む。（１）コードにより接続されたボディの数、（２）各ボディ間の距離、（３）各ボディがコードに沿ってスライド可能かどうか。一つ以上の実施例では、制約パラメータは、コードの質量、コードの柔軟性、コードの剛性のうち、少なくとも一つを含む。
【図面の簡単な説明】
【００１０】
【図１】図１は、１実施例に基づいた、ゲーム環境を生成し、表示するように構成されたコンピュータ装置のブロック図である。
【００１１】
【図２】図２は、１実施例に基づいた、図１のコンピュータ装置のメモリにおけるソフトウェアモジュールのブロック図の一例である。
【００１２】
【図３】図３は、１実施例に基づいた、コードで接続されたボディの概念図である。
【００１３】
【図４】図４は、１実施例に基づいた、図３のｎ−ボディ制約モジュールのモジュールを示すブロック図である。
【００１４】
【図５】図５は、１実施例に基づいた、接続されたボディの動きをシミュレーションする方法を示すフローチャートである。
【００１５】
図は、本発明の実施例を開示する、図示する目的のみのものである。
【発明を実施するための形態】
【００１６】
以下の実施例の記述では、より深い理解のために特定の詳細な事項が述べられるが、実施例は、これらの特定の詳細な事項にとらわれるものではない。また、不要で煩雑な記述を避けるために、周知の事項はその詳細を述べていない。
【００１７】
実施例は、リアルタイムビデオアプリケーションで使用する、コードで繋がった３個以上のボディの動きをシミュレートすることに関する。コードで接続されたボディの位置、速度及び方向のようなボディ状態は、繰り返すことの無い単一パスで決定される。与えられたタイムステップ及び該タイムステップ内でのボディ状態に関して、接続されたボディに関するヤコビ行例を演算する。コードの張力はヤコビ行例により演算することができる。得られた張力から次のタイムステップに関するボディの状態を得ることができる。
【００１８】
他の利点の中では、実施例は、コードで接続された三つ以上のボディのシミュレーションを正確に、またシミュレーションにおける演算リソース（例えば、プロセッササイクル又はメモリ空間）を増加させることなく効率的に行うことが可能となる。接続されたボディについて、ヤコビ行例を決定し演算することで、コードの張力の繰り返し処理を行うことなく、単一の処理過程で演算することが出来る。
【００１９】
図面に基づいて実施例を説明するが、同一又は機能的に類似した素子には同様の参照番号が付される。また数字で、図面中の各参照数字の最も左側の数字は、当該参照数字が最初に使用された図面に対応している。
【００２０】
図１は、実施例に基づいて、ゲーム環境を生成し表示する演算装置１００のブロック図である。ここでのゲーム環境とは、物理環境をエミュレーションすることを含む。ゲーム環境内のオブジェクトは、それらが物理環境内にあたかもあるように動作するようにモデル化される。ある実施例では、ゲーム環境内のオブジェクトは、人間又は生物キャラクタを含む。更に、ゲーム環境は、ビデオゲーム内でプレイ可能な環境である。例えば、ユーザはゲーム環境内のオブジェクトと交流するキャラクタを制御する。
【００２１】
図１では、中央処理ユニット（ＣＰＵ）１０２、グラフィック処理ユニット（ＧＰＵ）１０４、メモリ１０６、ディスプレイコントローラ１０８、ユーザインターフェース１１０及びサウンドコントローラ１１２が示されている。これらのモジュール１０２から１１２はバス１２０を介して相互接続される。演算装置１００の他の実施例では、これと異なる又は図１に示した以外の他の構成があることもある。
【００２２】
演算装置１００は、パーソナルコンピュータ（ＰＣ）、ビデオゲームコンソール、タブレットＰＣ、スマートフォン、又はそれらの装置で取られるアクションを特定する（シーケンシャルな、又その他の）指令を実行することの出来る何らかのマシンであれば良い。演算装置１００は、スタンドアロン又は他のマシンに接続する接続（例えば、ネットワーク化された）装置として動作することが出来る。更に、ここでは単一の装置だけが示されているが、ここで「装置」とは、個別に又は協働して指令を実行し、ここで述べる方法論を実行することの出来る何らかの集積された装置も当然含まれるものである。
【００２３】
メモリ１０６は、ここで述べる一つ以上の方法論又は機能を実現する指示（例えば、ソフトウェア）を格納する装置可読媒体である。例えば、メモリ１０６は、ＣＰＵ１０２による実行されると、ＣＰＵ１０２が、図５を参照して詳細に以下に述べられる方法５００を実行するように構成される指令を格納することができる。指令は、また、演算装置１００によって実行中の処理装置１０２、１０４内（例えば、処理装置のキャッシュメモリ内）に、少なくとも一部又は全部が存在しうる。
【００２４】
「装置可読媒体」という言葉は、指令を格納することの出来る単一媒体又は複数媒体（例えば、集中又は分散データベース又は、関連するキャッシュ及びサーバ）を含んだものである。「装置可読媒体」という言葉は、また、装置で実行される指令を格納することが出来、該装置にここで開示される方法論を実行させる全ての媒体を含むものと解釈される。「装置可読媒体」という言葉は、個体メモリ、光学メディア及び磁気メディアの形のデータ収納場所を含むが、これに限定されるものではない。
【００２５】
ＣＰＵ１０２は、メモリ１０６に格納された指令を実行するように構成された処理回路である。ＣＰＵ１０２は、何らかの種類の命令セットアーキテクチャ（ＩＳＡｓ）を用いる汎用又は組み込みプロセッサとすることが出来る。図１では、単一のＣＰＵが設けられているが、演算装置１００は、マルチＣＰＵ１０２で構成することも出来る。マルチ処理システムでは、各ＣＰＵ１０２は、同じＩＳＡを実行するが、これに限定されるものではない。
【００２６】
ＧＰＵ１０４はグラフィック画像を効率よく処理するために特別に設計された処理回路である。ＧＰＵ１０４は、表示すべきオブジェクトをＣＰＵ１０２からの指令に基づいてフレームバッファ（例えば、全体フレームについてのピクセルデータを含むもの）内にレンダーすることが出来る。ＧＰＵ１０４は、グラフィックソフトウェアを実行して、グラフィック処理の一部又は全部を行う一つ以上のグラフィックプロセッサを有することができる。
【００２７】
ディスプレイコントローラ１０８は、ＧＰＵ１０４からのグラフィックデータを用いてビデオ信号を生成する回路である。例えば、ディスプレイコントローラ１０８は、表示装置（例えば、液晶ディスプレイ（ＬＣＤ）及びプロジェクター）を駆動する。こうして、ゲーム環境はディスプレイコントローラ１０８を介して画像又はビデオシーケンスとして表示され得る。
【００２８】
サウンドコントローラ１１２は、演算装置１００から又は演算装置１００への入力又は出力オーディオ信号を供給する回路である。ゲーム環境の目的のために、サウンドコントローラ１１２は、該ゲーム環境内での動作やオブジェクトに伴ったオーディオ信号を提供することが出来る。
【００２９】
ユーザインターフェース１１０は、ハードウェア、ソフトウェア、ファームウェア又はそれらの組み合わせであり、ユーザに演算装置１００との対話を可能とする。ユーザインターフェース１１０は、英数字入力装置（例えば、キーボード）及びカーソル制御装置（例えば、マウス、トラックボール、ジョイスティック、モーションセンサー又は他のポインティング装置）を含むものである。例えば、ユーザは、キーボードとマウスを用いて、演算装置１００により生成されたゲーム環境内でキャラクタのアクションを制御する。
【００３０】
演算装置１００は、ここで機能的に述べるコンピュータプログラムモジュールを実行する。ここで、「モジュール」とは、コンピュータプログラム指令及び／又は特定の機能を得るために用いられるロジックを意味する。モジュールは、ハードウェア、ファームウェア及び／又はソフトウェアで実行される。ある実施例では、実行可能なコンピュータプログラム指令からなるプログラムモジュールは、メモリ１０６にロードされ、ＣＰＵ１０２又はＧＰＵ１０４で実行される。例えば、ここで述べる方法のプログラム指令はメモリ１０６へロードされ、ＣＰＵ１０２及びＧＰＵ１０４で実行される。
【００３１】
図２に、本発明による、演算装置１００のメモリ１０６内の、ソフトウェアモジュールのブロック図を示す。メモリ２００は、他のモジュールの他に、ゲームシステム２１０，物理システム２２０，アニメーションシステム２３０，サウンドモジュール２４０，グラフィックレンダリングモジュール２５０及びオペレーティングシステム（ＯＳ）２６０を格納する。物理システム２２０，アニメーションシステム２３０，サウンドモジュール２４０及びグラフィックレンダリングモジュール２５０は集合的にゲームエンジンを形成する。メモリ２００は、図２に示さない、他のモジュールを含むことが出来る。
【００３２】
ゲームシステム２１０は、オペレーション２１２Ａ〜２１２Ｎ（集合的に、「オペレーション２１２」と称する）を実行してゲーム環境を生成する。特に、ゲームシステム２１０は、これらのオペレーションを実行することで、多様なオブジェクトをインスタンス化し、ゲーム環境内のオブジェクト間の作用をシミュレートする。オペレーション２１２は、演算オペレーションに関わり、それはあるイベント（例えば、ゲーム内で生じるユーザの作用、時間経過及びトリガー）に基づいた多様なパラメータ（例えば、オブジェクトやユーザステータス）における結果としての変化を演算する、演算オペレーションに関わるものである。いくつかのオペレーションは、環境内の一つ以上のオブジェクト及び／又は該オブジェクトに関わる一つ以上のアクションと関連している。オペレーションの例としては、岩を射出するカタパルト、キャラクタの走り、液体の流れ、矢の飛翔、ドアの開放等を含むものである。いくつかのオペレーション２１２は相対的に単純なレスポンス（例えば、ドアの開放）であり、また他のものは、物理システム２２０によるシミュレーションが必要となることもある（例えば、具体的な物体の動き）。オペレーション２１２を実行する際には、ゲームシステム２１０は、アプリケーションプログラムインターフェース（ＡＰＩｓ）を介してゲームエンジンのコンポーネント（例えば、物理システム２２０）と通信する。これらのオペレーション２１２の少なくとも一つは、コードで繋がった三つ以上のボディをシミュレートすることを含むものである。これら繋がったボディの状態は、該ボディに加わる力又は衝撃により変化する。
【００３３】
物理システム２２０は、ゲーム環境内のオブジェクトにおける力学をモデル化し、シミュレートする。ゲームシステム２１０内でオペレーション２１２が開始されると、物理システム２２０はアクションがオペレーション２１２に関連したオブジェクトにどのように影響するかをモデル化する。例えば物理システム２２０は、岩が丘を転がり落ちるようにモデル化する。該アクション及びオブジェクトによって、他のオブジェクト及びアクションが該オブジェクト及びアクションに関連しうる。例えば、投げた岩が他のオブジェクトをひっくり返すかもしれない。このことは、該オブジェクトが岩と当たった際に、新たなオペレーション２１２のトリガーとなる。
【００３４】
このため、物理システム２２０は、他のモジュールの他に、ｎ−ボディ制約モジュール２２２，２−ボディ制約モジュール２２４及び衝突システム２２６を有する。物理システム２２０は、多様な特定のシミュレーションタスクを行うための他のモジュールも、また含むものである。
【００３５】
２−ボディ制約モジュール２２４は、コードで互いに影響し合う二つのオブジェクトをエミュレートするために使用される。例えば、２−ボディ制約モジュール２２４は、振り子をモデル化することができる。２−ボディ制約モジュール２２４は、コード上で互いに影響し合う三つ以上のボディを、各シミュレーションタイムステップで、接続されたボディのグループ内で、二つのボディの異なるセットの相互作用を相互的にモデリングすることで、シミュレートすることが出来る。シミュレーションタイムステップ毎に反復モデリングするために、２−ボディ制約モジュールで三つ以上のボディをシミュレートする場合、ｎ−ボディ制約モジュール２２２よりも演算リソース及び時間がより多くかかる。
【００３６】
ｎ−ボディ制約モジュール２２２は、一つのシミュレーションタイムステップにつき一つの処理パスを使用するコードによって接続された三つ以上のボディの動きをモデル化し、シミュレートする。ｎ−ボディ制約モジュール２２２は、ボディ又はコードが外力又は衝撃を受けると、シミュレーションタイムステップ毎にボディの状態を決定する。ボディの状態には、各ボディの、位置、線速度、角速度、質量、慣性テンソル及び方向を含む。また、ｎ−ボディ制約モジュール２２２は、空間内で一つ以上のボディを固定して、ボディをコードに沿ってスライドさせる等の、多様な制約のものとで、シミュレーションを行うことが出来る。ｎ−ボディ制約モジュール２２２については、図４を参照しながら、更に説明する。
【００３７】
衝突システム２２６は、ゲーム環境内でのオブジェクトの衝突をシミュレートする。衝突システム２２６は、ｎ−ボディ制約モジュール２２２によってモデル化されたボディをシミュレートすることができる。例えば、衝突システム２２６は、コードで制約された複数のボディへ岩が当たる際の衝突力学を決定することができる。
【００３８】
ゲームシステム２１０のいくつかのオペレーション２１２は、物理システム２２０内の一つ以上のモジュールを呼び出すことができる。例えば、オペレーション２１２は、一列にスライドしながら互いに衝突する三個以上のオブジェクトを扱うとき、オペレーション２１２は、ｎ−ボディ制約モジュール２２２及び衝突システム２２６を使用して、ｎ−ボディの衝突前後の動きをシミュレートする。このオペレーション２１２は、単一のシミュレーションタイムステップについて、ｎ−ボディ制約モジュール２２２と衝突システム２２６の間で反復的な処理を行う。
【００３９】
アニメーションシステム２３０は、ゲームシステム２１０からのオペレーション２１２に基づいて、オブジェクト又はゲーム環境の運動学的なアニメーションを実行するモジュールである。例えば、オペレーション２１２がロボットアームが動いていることを特定すると、アニメーションシステム２３０は該アームの動きの運動をアニメート（アニメ化）する。
【００４０】
アニメーションシステム２３０は、ポーズ特性モジュール２３２，クロスシステム２３３のようないくつかの特別なモジュールを有し、特別なアニメーションタスクを実行する。ポーズ特性モジュール２３２は、ゲーム環境内でのキャラクタの外見や動きをアニメートする。クロスシステム２３３は、ゲーム環境内での衣服の動きをアニメートする。ここでクロスとは、キャラクタが着るものやオブジェクトに装着されたものを含む。ポーズ特性モジュール２２２及びクロスシステム２３３は（他のアニメーションモジュール内で）、布と相互作用する接続されたボディのような、ゲーム環境内のオブジェクト間の相互作用をアニメートする。
【００４１】
サウンドモジュール２４０は、ゲーム環境内で生じるアクションに対応する音を生成する。アニメーションシステム２３０からのアニメーションデータはサウンドモジュール２４０へ送られ、サウンドモジュール２４０は音を生成することが可能となる。
【００４２】
グラフィックレンダリングモジュール２５０は、アニメーションシステム２３０からのグラフィックを表現して、ゲーム環境の画像を生成する。例えば、グラフィックレンダリングモジュール２５０は、アニメーションシステム２３０からシーンファイルを受け取る。グラフィックレンダリングモジュール２５０は、グラフィックデータをＧＰＵ１０４に送り、ディスプレイコントローラ１０８を介してディスプレイ装置にイメージを表示する。
【００４３】
オペレーティングシステム（ＯＳ）２６０は、コンピュータハードウェア及びソフトウェアモジュールを管理する。特にＯＳ２６０は、プログラムとコンピュータハードウェア間の介在物として作用する。例えば、ＯＳ２６０は、ユーザインターフェース１１０からの入力を認識してディスプレイコントローラ１０８に出力する等の基本的なタスクを行う。
【００４４】
図３は、本発明の実施例による、ボディＢ１からＢｎがコード３０２により接続された概念的な図である。接続されたボディの数は三つ以上である（即ち、ｎ≧３）。各ボディは、Ｂｉ（１≦ｉ≦ｎ）で示す。各ボディは、ゲーム環境内のどのようなオブジェクトでもよく、コード３０２は、ロープや紐など、ボディ同士を接続するどのような材料でもよい。図３では、端部ボディＢ１及びＢｎが空間内に固定されたものとして示されているが、一方、又は両方のボディＢ１及びＢｎが動くことも出来る。
【００４５】
コード３０２の張力は、（１）式で求めることが出来る。
【数１】
2019149153.tif 000003
ここで、λはコード３０２の張力であり、Ｊはヤコビ行例であり、Ｖは速度行例であり、ｔはタイムステップ、Ｍは質量行例である。Ｖは、各ボディについて、線速度νｉ、角速度ωｉとして、例えば、（２）式で表すことが出来る。
【数２】
2019149153.tif 000004
Ｍは各ボディの質量Ｍｉ及び各ボディの慣性テンソルＩｉを含んだ疎行列であり、例えば、３ボディは、（３）式で表すことができる。
【数３】
2019149153.tif 000005
このように、各ボディは、他のボディと同じか異なる質量を持ちうる。
【００４６】
接続されたボディＢ１からＢｎについてのヤコビ行例を決定するために、正規化された方向ベクトルを（４）式で求めることができる。
【数４】
2019149153.tif 000006
ここで、Ｐｉｊは、位置ベクトルであり、ｉはボディを区別するための添え字であり、ｊは、コード３０２が位置するボディ上の位置を特定する添え字である。例えば、ｉ＝１の時、（４）式は、（５）式のように表される。
【数５】
2019149153.tif 000007
ｎ個のボディでは、（ｎ−１）個の正規化方向ベクトルがある。
【００４７】
ｎ個のボディが長さＬ（例えば、図３にあるように）のコード３０２で接続されていると、全長は、ボディの位置を用いて以下のように計算することが出来る。
【数６】
2019149153.tif 000008
微分すると、（６）式は、
【数７】
2019149153.tif 000009
となる。
ここで、Ｖｉｊ＝ｖｉ＋ωｉｘｒｉｊであり、ｒｉｊはｉ番目のボディの中央から位置Ｐｉｊに向いた位置ベクトル（例えば、図３のベクトルｒ４１及びｒ４２参照）である。その結果、式（７）は、以下のようになる。
【数８】
2019149153.tif 000010
線速度と角速度を分離すると、式は以下のようになる。
【数９】
2019149153.tif 000011
ここで、Ｒｉｊは、ｒｉｊの反転された外積の歪対称行列である。
【数１０】
2019149153.tif 000012
【００４８】
こうしてｎ個のボディのヤコビ行例は以下のようになる。
【数１１】
2019149153.tif 000013
ここで、１＜ｍ＜ｎ
例えば、３個の接続されたボディ（ｎ＝３）の場合、ヤコビ行例は、以下のようになる。
【数１２】
2019149153.tif 000014
従って、（１）式によれば、コード３０２の張力は、質量行列Ｍと速度行例Ｖが既知であって、ヤコビ行例Ｊが、ｎ個のボディの線形成分ｄ１、ｄ２、…、ｄｎ−１及び角度成分
【数１３】
2019149153.tif 000015
を演算することで決定されれば、計算することが出来る。
【００４９】
モデル化された物理システムにより、追加的な制約をヤコビ行例に含むことができる。追加的な制約には、例えば、コードの柔軟性、コードの剛性、コード上の固定ボディ、コードに沿ったスライド可能なボディ、空間に固定されたコード上のボディ又は点の数、及びコードの体積などがある。例えば、
【数１４】
2019149153.tif 000016
は、６個の連結されたボディのセット上での制約で有り、ここで、Ｂ３は、コード上に拘束され、Ｌ１はＢ１からＢ２のコードの長さであり、Ｌ２は、Ｂ３からＢ６のコードの長さである。
【００５０】
図４は、本発明による図３のｎ個のボディの制約モジュール２２２をモデル化したブロック図である。図２で述べたように、接続されたボディの初期状態及びボディに作用する衝撃及び／又は力に基づいて、ｎ−ボディ制約モジュール２２２は、上述した式（１）から（１２）を参照してシミュレーションすることで、ボディの状態をアップデートする。ｎ−ボディ制約モジュール２２２は、他のモジュールの中でも、初期化モジュール４０８及びアップデートモジュール４１０を含む。更に、ｎ−ボディ制約モジュール２２２は、ゲームシステム２１０から制約パラメータ４０２及び外力４０４を受け取り、出力４０６を生成する。他の実施例では、ｎ−ボディ制約モジュール２２２は、図４に示した以外の異なる及び／又は他のモジュールを有する。
【００５１】
受け取った制約パラメータ４０２及び外力４０４（又は衝撃）を用いて、初期化モジュール４０８はアップデートモジュール４１０で使用する変数に初期値を決定して割り当て、ボディのアップデートされた状態を決定する。初期化モジュール４０８はまた、ボディの初期状態を受け取る（図４には不図示）。他の実施例では、初期化モジュール４０８は、アップデートモジュール４１０からボディの状態を受け取る。図３を参照して述べたように、ボディの状態は、速度行例Ｖ、位置ベクトルＰｉｊ、正規化方向ベクトルｄｉ、質量行列Ｍ及び慣性テンソルＩｉの値を取り得る。
【００５２】
制約パラメータ４０２には接続されたボディの物理的特性が含まれる。制約パラメータ４０２は、例えば、以下に示すパラメータの内の一つ以上である。コードで接続されたボディの数、コードの長さ、コード上の各ボディ間の距離、各ボディがコード上で固定又はスライド可能か、コードの柔軟性、コードの構成など。例えば、図３で述べたように、制約パラメータ４０２は、ｎ及びＬに関する値を示す。一般的に、これらのパラメータは時間的に不変であるが、時間的に可変なパラメータもまた使用することが出来る。時間的に可変なパラメータとしては、例えば、ボディがコードに固定されていない時、コードが変わった場合の各ボディ間の距離などである。
【００５３】
外力４０４は、接続されたボディが受ける衝撃（即ち、運動量の伝達）又は力を含む。例えば、ボディが重力で一定の下方への力を受けているところに、ある時間ステップで、キャラクタがボディと衝突して、いくつかのボディが衝撃を受けるような場合である。外力４０４は、各シミュレーションタイムステップで時間的に可変である。力は、例えば、風や水及び重力からのものが含まれる。衝撃は、例えば、オブジェクトとの衝突又は相互作用である。ある場合には、外力４０４は、速度行例Ｖの値に影響をあたえる。
【００５４】
初期化モジュール４０８から割り当てられた値を用いて、アップデートモジュール４１０はボディ状態をアップデートする。特に、アップデートモジュール４１０は入力４０２，４０４で表される物理システムに関するヤコビ行例を決定し、式（１）を満足するコードの張力を決定する。ある実施例では、コード３０２の張力は、瞬間的なものである。コードの張力を用いることで、ボディの状態は計算され、アップデートされる。
【００５５】
出力４０６はボディのアップデートされた状態を示す。出力４０６はメモリ１０６中の多くのシステム又はモジュールで使用される。例えば、出力４０６はアニメーションシステム２３０へ送られ、ボディ及びコードの動きは、ゲーム環境でアニメーションされる。また、出力４０６は衝突システム２２６へ送られ、接続されたボディ間又は他のオブジェクト間の衝突が生じるか否かが決定される。
【００５６】
図５は、一実施例に基づいた、接続されたボディの動きをシミュレーションする方法を示すフローチャートである。ｎ−ボディ制約モジュールはコードによって接続されたｎ個のボディのセットに関する制約パラメータを受け取る（５０２）。制約パラメータは、ボディの動きなどのボディの物理特性を示すものである。これらは、コードによって接続されたボディの数、コードの長さ、コード上の各ボディの距離、各ボディはコードに沿ってスライド可能か又は固定か、コードの柔軟性及びコードの剛性などである。
【００５７】
ｎ−ボディ制約モジュールは現在のタイムステップについてのボディの状態を受け取る（５０４）。ボディの状態は、少なくとも、各ボディの位置、線速度、角速度、質量、慣性テンソル及び方向のうち一つである。現在のタイムステップは、ゲーム環境内で可変の別個の時間である。接続されたボディの動きをモデル化するためには、ボディ状態を次のタイムステップのためにアップデートする必要がある。
【００５８】
ｎ−ボディ制約モジュールは、現在のタイムステップでの外力パラメータ又は外部衝撃パラメータを受け取る（５０６）。外力パラメータは接続されたボディへ作用する外力を示す（例えば、風）。外部衝撃パラメータは接続されたボディへ作用する外部衝撃を示す。
【００５９】
ｎ−ボディ制約モジュールはヤコビ行例を決定する（５０８）。ヤコビ行例は、前に受け取った制約パラメータと現在のタイムステップでのボディ状態に基づいて、決定される。他の実施例では、ヤコビ行例の値は、各タイムステップでアップデートされる。
【００６０】
ｎ−ボディ制約モジュールは、現在のタイムステップでのコードの張力を決定する（５１０）。張力は外力パラメータ、外部衝撃パラメータ及びヤコビ行例に基づいている。別の実施例では、コードの張力は、衝撃による。また、ある実施例では、張力は、式（１）を満足することで決定される。
【００６１】
ｎ−ボディ制約モジュールは、現在のタイムステップに引き続く次のタイムステップについてボディ状態をアップデートする（５１２）。ボディのアップデート状態は、現在のタイムステップで決定された張力に基づいている。
【００６２】
ある実施例では、次のタイムステップでのボディとコードの表現は、ディスプレイ装置の上に表示される。また、ある実施例では、次のタイムステップが現在のタイムステップに対してアップデートされ、「５０６の外力パラメータの受け取り」から「次のタイムステップについてボディ状態をアップデートする５１２」が繰り返される。またある実施例では、こうした繰り返しは、リアルタイムで行われる。
【００６３】
図５に示したステップは、異なる順序で実行されることもあり、例えばステップ５０６はステップ５１２の後に行うことが出来る、更に、この方法は、図５に示したものとは、異なるステップで構成したり、追加的なステップを加えたり又はより少ないステップで構成したりすることもできる。説明した実施例は、ゲームシステムを参照して主に行ったが、コードで接続されたｎ個のボディのシミュレーションは、エンジニアリングソフトウェア、教育ソフトウェア、航空及び宇宙訓練ソフトウェア又は外科シミュレーションソフトウェアなどの他のアプリケーションに応用が可能である。また、実施例は、分子動力学、タンパク質フォールディング等の研究部門への適用も可能である。
【００６４】
ここでは特定の実施例及び応用例が述べられたが、本発明はここで開示された構成や構造に限られることなく、ここで開示された処理、方法の詳細及び装置における多様な変形、応用は、本発明の精神及び範囲を離れない限り、当業者にとって自明である。
【図１】
2019149153.tif 000017
【図２】
2019149153.tif 000018
【図３】
2019149153.tif 000019
【図４】
2019149153.tif 000020
【図５】
2019149153.tif 000021