(57)【要約】  対話型アバターディスプレイシステムは、センサによって検知されたユーザの移動に応じて仮想空間内を移動するアバターを含む仮想空間のコンピュータ生成図を提供する。検知された移動の数は、アバターの移動の自由度の数よりも少ない。対話型アバターディスプレイシステムは、アバターの可動身体部分に適用する加速度アレイを計算し、かつ可動身体部分の質量、ならびに可動身体部分の逆動力学力値アレイおよびバランス制御力値アレイまたは歩行制御力値アレイの一方または両方から計算された力アレイから運動方程式を解くことによって加速度アレイを計算し、アバターに対する一組の制約、および仮想空間内における可能な環境オブジェクトも考慮に入れる。
2020502709.tif 000002
【特許請求の範囲】
【請求項１】
ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する対話型アバターディスプレイシステムであって、前記視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、前記コンピュータ生成図は、前記ユーザの移動に応じて前記仮想空間内を移動するアバターを含み、前記対話型アバターディスプレイシステムは、
プロセッサと、
前記プロセッサに結合され、前記プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、
前記プロセッサに結合され、前記プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、
前記ユーザの現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、前記プログラムメモリは、
ａ）センサ出力から追跡された身体部分の位置および配向を判定するためのプログラムコードであって、追跡された身体部分は、前記センサのうちの１つ以上に影響を与えるユーザ身体部分である、プログラムコードと、
ｂ）前記アバターの追跡された要素の運動ターゲットを生成するためのプログラムコードであって、運動ターゲットは、前記追跡された身体部分のうちの１つ以上の前記ユーザの前記現実世界の座標系における位置または配向に対応する、前記仮想空間における位置または配向である、ブログラムコードと、
ｃ）力値の第１のアレイを計算するためのプログラムコードであって、前記第１のアレイ内の力値は、特定のアバター身体部分への力に対応する逆動力学力値であり、前記第１のアレイは、前記運動ターゲットによって特定されていない少なくとも１つの自由度を含む、複数のアバター自由度の逆動力学力値に対応する、プログラムコードと、
ｄ）第２のアレイの力値を計算するためのプログラムコードであって、前記第１のアレイの力値は、バランス制御力値または歩行制御力のいずれかであり、前記第２のアレイは、前記仮想空間内で前記アバターのバランスを維持するために必要なバランス制御力、または前記アバターを全体として移動させて前記運動ターゲットが与えられた前記アバターの前記追跡された要素の位置合わせを維持するために必要な歩行制御力のいずれかに対応する、プログラムコードと、
ｅ）前記第１のアレイおよび前記第２のアレイを合計力アレイに組み合わせるためのプログラムコードと、
ｆ）前記アバターに対する一組の制約を判定するためのプログラムコードと、
ｇ）前記合計力アレイおよび前記アバターに対する一組の制約を与えられた前記アバターの要素の運動方程式に対する解を計算するためのプログラムコードであって、前記解は、加速度アレイを含み、前記加速度アレイ内の加速度値は、剛体システムとして特定のアバター身体部分に適用される加速度である、プログラムコードと、ｈ）前記加速度アレイに基づいて、前記アバター身体部分の位置および／または速度を更新するプログラムコードと、を含む、対話型アバターディスプレイシステム。
【請求項２】
シミュレーションクロックを進めることと、
ビデオフレーム出力を生成することと、前記センサ出力から前記追跡された身体部分の位置および配向を判定するための前記プログラムコードで繰り返すことと、をさらに含む、請求項１に記載の対話型アバターディスプレイシステム。
【請求項３】
力アレイを組み合わせることは、構成要素ごとの追加を含む、請求項１または２に記載の対話型アバターディスプレイシステム。
【請求項４】
バランス制御力値および歩行制御力値について、前記力値の第２のアレイおよび前記力値の第３のアレイの両方を計算するためのプログラムコードをさらに含み、前記第１のアレイおよび前記第２のアレイを合計力アレイに組み合わせるための前記プログラムコードは、前記第３のアレイも合計力アレイに組み合わせる、請求項１〜３の何れか一項に記載の対話型アバターディスプレイシステム。
【請求項５】
前記合計力アレイは、シミュレートされた重力からの寄与を含む、請求項１〜４の何れか一項に記載の対話型アバターディスプレイシステム。
【請求項６】
前記合計力アレイは、前記アバターの対話からの寄与を含む、請求項１〜５の何れか一項に記載の対話型アバターディスプレイシステム。
【請求項７】
前記合計力アレイは、環境オブジェクトおよび／または他のアバターの対話からの寄与を含む、請求項６に記載の対話型アバターディスプレイシステム。
【請求項８】
前記一組の制約は、物理的制約、接触制約、関節的制約、および／または運動制約のうちの１つ以上を含む、請求項１〜７の何れか一項に記載の対話型アバターディスプレイシステム。
【請求項９】
ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する仮想現実システムであって、前記視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、前記視覚的出力は、前記ユーザの頭の移動と共に変化して、前記仮想空間の仮想座標系が、前記ユーザの現実世界の座標系に対して静止している外観を作成し、前記仮想現実システムは、
プロセッサと、
前記プロセッサに結合され、前記プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、
前記プロセッサに結合され、前記プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、
前記現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、前記プログラムメモリは、
ａ）前記仮想空間内に全身アバターを作成するためのプログラムコードであって、前記全身アバターは、前記センサによって検知された前記複数のユーザ身体部分の移動に対応する前記全身アバターの移動を表すのに十分な複数のアバター身体部分に対応する、プログラムコードと、ｂ）前記複数のアバター身体部分のうちの１つ以上のものに関して定義された関節的制約および物理的制約に従って、かつ前記複数のユーザ身体部分のうちの１つ以上の検知された移動に従って、前記複数のアバター身体部分のうちの１つ以上の移動および／または位置を判定するためのプログラムコードと、を含む、仮想現実システム。
【請求項１０】
前記複数のアバター身体部分は、頭、首、背中、骨盤、腰、膝、足首、足、肩、肘、手首、および手を含む、請求項９に記載の仮想現実システム。
【請求項１１】
前記関節的制約は、アバター身体部分の階層ツリーグラフ構造によって定義され、グラフの端部は、２つのアバター身体部分間の関節に対応し、各関節は、ソケット関節、ヒンジ関節、またはユニバーサル関節を含む、請求項９または１０に記載の仮想現実システム。
【請求項１２】
アバター身体部分のサイズは、較正データから判定され、前記較正データは、前記複数のユーザ身体部分の対応する部分の実際のサイズの推定値に対応する、請求項９〜１１の何れか一項に記載の仮想現実システム。
【請求項１３】
前記ユーザの特定のポーズを要求するためのプログラムコードと、
前記ユーザが前記特定のポーズにあるときに、センサデータを記録するためのプログラムコードと、
前記センサデータに基づいて、前記アバター身体部分に対する前記サイズを計算するためのプログラムコードと、前記アバター身体部分をアニメーション化する際に使用するためのアバター身体部分のサイズとして、計算されたサイズを記憶するためのプログラムコードと、をさらに含む、請求項１２に記載の仮想現実システム。
【請求項１４】
ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する仮想現実システムであって、前記視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、前記視覚的出力は、前記ユーザの頭の移動と共に変化して、前記仮想空間の仮想座標系が、前記ユーザの現実世界の座標系に対して静止している外観を作成し、前記仮想現実システムは、
プロセッサと、
前記プロセッサに結合され、前記プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、
前記プロセッサに結合され、前記プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、
前記現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、前記プログラムメモリは、
ａ）センサデータに基づいて、ユーザの手の軌跡を計算するためのプログラムコードと、
ｂ）前記ユーザの手の前記軌跡に対応する前記仮想空間内の仮想手の場所を判定するためのプログラムコードと、
ｃ）前記仮想手の軌跡を前記ユーザの手の前記軌跡と一致させることが前記仮想空間の制約に違反するかどうかを判定するためのプログラムコードと、ｄ）前記仮想手の前記場所における前記仮想手の表現、および制約のない位置における前記仮想手の別個の表現を表示するためのプログラムコードであって、前記制約されていない位置は、前記仮想手が、前記仮想空間の前記制約が取り除かれた状態で、前記ユーザの手の前記軌跡と位置合わせされている場合に、前記仮想空間内に存在しているであろう位置である、プログラムコードと、を含む、仮想現実システム。
【請求項１５】
前記仮想空間の前記制約は、固体オブジェクトが他の固体オブジェクトを貫通することができないという制約である、請求項１４に記載の仮想現実システム。
【請求項１６】
前記別個の表現は、前記カメラ位置と前記制約されていない位置との間にある前記仮想空間の任意の介在オブジェクトを通して半透明かつ可視的に示される、前記制約されていない位置における前記仮想手の表現である、請求項１４または１５に記載の仮想現実システム。
【請求項１７】
ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する仮想現実システムであって、前記視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、前記視覚的出力は、前記ユーザの頭の移動と共に変化して、前記仮想空間の仮想座標系が、前記ユーザの現実世界の座標系に対して静止している外観を作成し、前記仮想現実システムは、
プロセッサと、
前記プロセッサに結合され、前記プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、
前記プロセッサに結合され、前記プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、
前記現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、前記プログラムメモリは、
ａ）アバター身体部分に対する仮想力を判定するためのプログラムコードと、
ｂ）前記視覚的出力において、前記ユーザの一人称視点からの前記アバター身体部分を提示するためのプログラムコードであって、前記一人称視点において、前記仮想空間のシーンがレンダリングされるカメラ位置は、アバターの頭の目の位置と位置合わせされている、プログラムコードと、
ｃ）前記仮想力が前記アバターの頭を閾値量を超えて移動させるかどうかを判定するためのプログラムコードと、ｄ）前記カメラ位置および前記アバターの頭の前記目の位置をリンク解除するためのプログラムコードと、を含む、仮想現実システム。
【請求項１８】
前記アバター身体部分がカメラ視野内にあるときに、前記視覚的出力において、アバター身体部分を表示するためのプログラムコードをさらに含む、請求項１７に記載の仮想現実システム。
【請求項１９】
前記カメラ位置および前記アバターの頭の前記目の位置を再位置合わせし、再リンクするためのプログラムコードをさらに含む、請求項１７または１８に記載の仮想現実システム。
【請求項２０】
前記再位置合わせすることは、連続プロセスである、請求項１９に記載の仮想現実システム。
【請求項２１】
前記再位置合わせは、前記カメラ位置の非連続移動を伴う段階的プロセスである、請求項１９に記載の仮想現実システム。
【請求項２２】
ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する仮想現実システムであって、前記視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、前記視覚的出力は、前記ユーザの頭の移動と共に変化して、前記仮想空間の仮想座標系が、前記ユーザの現実世界の座標系に対して静止している外観を作成し、前記仮想現実システムは、
プロセッサと、
前記プロセッサに結合され、前記プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、
前記プロセッサに結合され、前記プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、
前記現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、前記プログラムメモリは、
ａ）取り付け条件が存在するかどうかを判定するためのプログラムコードと、
ｂ）アバターキャラクタモデルを修正して、手と把持されたオブジェクトとの間に新しい関節を挿入するためのプログラムコードと、
ｃ）切り離し条件が存在するかどうかを判定するためのプログラムコードと、
ｄ）前記アバターキャラクタモデルを修正して、前記手と前記把持されたオブジェクトとの間の前記新しい関節を削除するためのプログラムコードと、を含む、仮想現実システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１６年１２月１３日に出願された「ＶＩＲＴＵＡＬ  ＲＥＡＬＩＴＹ  ＳＹＳＴＥＭ」と題する米国仮特許出願第６２／４３３，７６４号の優先権を主張するものであり、参照によりその全体が本明細書に組み込まれる。
【０００２】
本開示は、概して、仮想現実に関する。本開示は、より具体的には、ユーザからの入力に基づいてユーザのための仮想現実環境を生成し提示するための装置および技術に関する。
【背景技術】
【０００３】
仮想現実環境では、ヘッドマウントディスプレイ（「ＨＭＤ」）またはハンドヘルドＶＲコントローラなどのＶＲ／ＡＲ（仮想現実／拡張現実）入力デバイスから検知される行動などのユーザの行動に応じて、しばしばコンピュータ生成される感覚入力がユーザに提示される。仮想現実コンピュータシステムの出力は、視覚的出力、音声出力、タッチ出力（触覚、圧力、温度など）、および他の出力を含み得る。出力は、ユーザを没入させる方法でユーザに提示される。例えば、ユーザは、ユーザを体験に没入させるためにユーザの目を覆うヘッドギアを着用し得る。ヘッドギアは、頭の移動に関するセンサ入力をプロセッサに提供し得る。視覚的出力を作成するプロセッサが、ユーザがその風景をユーザの頭の移動に対して安定していると知覚するように、センサ入力に基づいて、その視覚的出力を修正することができる場合、それは、体験を没入型にすることができる。視覚的出力は、見かけ上の三次元（３Ｄ）図を形成するためにユーザに提示される、２つのビデオフィード（片眼につき１つ）の形態であり得る。
【０００４】
プロセッサは、コンピュータ生成画像（ＣＧＩ）技術を使用して、視覚的出力を生成する。ＣＧＩ出力を生成するための１つのアプローチは、プロセッサが、オブジェクトの幾何学モデルおよびシーン記述を含むメモリにアクセスすることである。シーン記述は、様々なオブジェクトに対する仮想空間内の位置を示し得る。オブジェクトは、ＣＧＩの技術分野では一般に知られている固体オブジェクト、光源、背景、テクスチャなどとすることができる。プロセッサまたは別個のグラフィックスチップによって実行されるプログラムコードとして実装され得るレンダラは、これらのオブジェクト、それらの場所、および仮想「カメラ」のパラメータ（例えば、仮想カメラが「位置付け」されている仮想空間内の位置である指定の視点、仮想カメラのカメラアングルである指定されたビュー方向、および場合によってはカメラのビューイングウィンドウの境界なども）を取りこむ。それらの要素を表すデータから、レンダラは、シーン内のすべてがカメラパラメータに対して相対的である場所を（おそらく１／９０秒ごとに１回）判定し、（３Ｄビューイングの場合は、各眼に１つずつ）画像を生成する。
【０００５】
没入型体験のために、仮想空間の座標系は、ユーザによって占有されている現実世界の空間の座標系に対して固定されることがしばしば望まれる。ユーザがユーザの頭を回転させる場合、プロセッサは、ユーザの頭の移動に位置合わせしカメラアングルをシフトさせようとするので、その結果、ユーザは風景がユーザに対して移動していないと知覚する。ユーザが現実世界の空間内を移動する（またはユーザが実際に一箇所に固定されている場合でもユーザの移動を可能にする装置上で移動する）能力がある場合、プロセッサは、表示された風景がユーザの現実世界の空間におけるユーザ自身の移動の認識と一致して移動するように、仮想カメラの視点の位置をそれに応じてシフトさせようとする。
【０００６】
プロセッサがカメラの視点と視野角をどのように調整するかを知るために、プロセッサには、移動に関する情報が提供される。これは、ヘッドギアにマウントされた加速度計および／またはジャイロスコープ、ならびに移動を検出するための他のセンサからのセンサデータの形態であり得る。したがって、ＶＲリグは、回転センサを有するヘッドギア、他の運動／配向センサ、プロセッサ、必要な画像を生成するためのプログラムコードなどを含み得る。いくつかのＶＲ  ＨＭＤは、ＨＭＤおよび他のコントローラを部屋の規模の空間に位置決めするために他の技術を使用し得る。
【０００７】
従来のＶＲおよびアバターのアニメーションシステムにはそれらの用途があるが、依然として改善が望まれている。
【発明の概要】
【０００８】
対話型アバターディスプレイシステムは、センサによって検知されたユーザの移動に応じて仮想空間内を移動するアバターを含む仮想空間のコンピュータ生成図を提供する。検知された移動の数は、アバターの移動の自由度の数よりも少ない。対話型アバターディスプレイシステムは、アバターの可動身体部分に適用する加速度アレイを計算し、かつ可動身体部分の質量特性、ならびに可動身体部分の逆動力学力値アレイとバランス制御力値アレイおよび歩行制御力値アレイの一方または両方から計算された力アレイから運動方程式を解くことによって加速度アレイを計算し、アバターに対する一組の制約、および仮想空間内における可能な環境オブジェクトも考慮に入れる。
【図面の簡単な説明】
【０００９】
【図１】逆動的トルクを示す。
【図２】本体フレームに印加されるバランストルクを示す。
【図３】歩行トルクを示す。
【図４】力アレイベクトルの成分による総和を示す。
【図５】合計力アレイベクトルおよび制約を解決するためのソルバーを示す。
【図６】物理エンジンを使用してユーザと対話するＶＲシステムを示す。
【図７】本明細書に記載の機能を実行するためにプロセッサによって使用され得る構造を示す。
【図８】本明細書に記載されているプロセスを実行するために使用され得るコンピュータの一実施例を示す。
【発明を実施するための形態】
【００１０】
図面は、本明細書に記載の実施形態を理解するために必要ではない。
【００１１】
以下の説明では、様々な実施形態が説明される。説明を目的として、実施形態の完全な理解を提供するために特定の構成および詳細が説明される。しかしながら、実施形態が具体的な詳細なくとも実施することができることも当業者には明らかである。さらに、記載されている実施形態を曖昧にしないために、既知の特徴を省略または簡略化する場合がある。
【００１２】
実施形態が実行される基本ハードウェアは、ＶＲリグとすることができ、ユーザが自分の顔に装着するヘッドギア（ヘッドマウントディスプレイ、または「ＨＭＤ」）を含み得、かつヘッドギアおよびユーザの手に計装された手袋を装着したときにユーザによって視認可能な視覚的出力を含む。ＶＲリグ（またはより一般的には基本ハードウェア）は、コードを実行し、基本ハードウェアの機能を実行するために、必要に応じて、プロセッサ、プログラムストレージ、データ記憶メモリ、および通信要素を含む。基本ハードウェアの例には、Ｏｃｕｌｕｓ  Ｔｏｕｃｈ（ｔｍ）コントローラまたはＨＴＣ  Ｖｉｖｅ（ｔｍ）コントローラまたはＰＳＶＲのＭＯＶＥ（ｔｍ）コントローラなど、手袋の代わりにハンドヘルドＶＲ「コントローラ」を使用するユーザが含まれる。
【００１３】
ＶＲリグは、ユーザの頭の６自由度（ＤＯＦ）運動追跡、および手の配向の１つの手あたり少なくとも３ＤＯＦを有することができる。任意選択的に、各手について位置追跡もあり、その結果として、１つの手あたり６ＤＯＦとなる。このデータは、ＶＲ位置追跡センサから読み取られ、従来の方法でメモリに記憶することができる。いくつかの実施形態では、手の配向に対して３つのＤＯＦのみを有し、位置に対しては何も有しない可能性がある、簡略化されたコントローラが使用される。位置検知は、より困難であるが、ハイエンドのＶＲで行うことができる。
【００１４】
いくつかの実施形態では、ＶＲリグは、頭および両手以外に骨からのより包括的な位置感覚入力を提供するために、膝および足などのユーザの任意の身体部分に取り付けることができる追加のＶＲ位置トラッカを含むことができ、一般に、「位置」追跡は、並進位置と回転位置（配向とも称される）の両方を含むことができる。一部のＶＲリグは、３つの配向トラッカを有し、追加のトラッカを追加することができるため、アバターは、３〜６つのトラッカからのセンサ入力を使用してアニメーション化され得る。別途示されない限り、いくつかのトラッカを使用するここでの例では、異なる数のトラッカと共働することができる。
【００１５】
ＶＲリグがそのＶＲリグの機能を実行するために実行するコードを開発者が作成できる開発システムである、別個のハードウェアシステムもあり得る。以下で説明する機能では、コードは、ＶＲリグによって実行されるが、それらの機能の一部は、開発システムで作成される。開発システムは、開発者のユーザインターフェース、コンパイラや開発ツールなどのプログラム用ストレージ、および開発システムがコード更新をＶＲリグに送信できる通信リンクを有することになる。
【００１６】
いくつかの実施形態では、開発システムとＶＲリグとの間にプログラム配信プラットフォームがあり、それによってＶＲリグはプログラム配信プラットフォームと対話し、これは、オンラインアプリケーション配信ストアまたはサービスであってもよく、その上に、開発システムが以前にプログラム／アプリをロードし、および／またはそれを更新する。
【００１７】
いくつかの実施形態では、ＶＲリグの処理部分は分離しており、ワイヤを介してＨＭＤにつながれる。いくつかの実施形態では、ＶＲリグの処理部分は分離しており、ＨＭＤと無線で通信する。いくつかの実施形態では、ＶＲリグの処理部分は、ヘッドギアの内側に埋め込まれる。他の変形例も可能である。
【００１８】
ＶＲリグの視覚的出力は、仮想空間内に存在するようにモデリングされたオブジェクトによって定義の仮想空間のコンピュータ生成画像に対応する。ＶＲ効果では、仮想空間でモデリングされた視覚オブジェクトを含むシーンがユーザの物理的基準フレーム内で一定のままであるように見えるように、ユーザがヘッドギアを移動させるにつれて視覚的出力が変化する。
【００１９】
全身アバター
仮想空間内に存在するようモデリングされたオブジェクトは、ＶＲリグのユーザのための全身アバターのモデルを含むことができる。より一般的な場合では、全身アバターは、システムの出力が多数の入力に基づいて移動するアバターのシミュレーションまたは表現であるＶＲシステムまたは他のシステムの一部とし得るアニメーションプロセスで使用され、そのうちの１つは、人間または他のセンサ付き身体から検知された移動であり、その結果、アバターのアニメーションは、人間または他の身体の検知された移動に追従する、またはそれによって駆動される。別途示されない限り、より一般的な事例が適用されると理解されるべきであるが、本明細書における多くの実施例は、様々な概念を例示するためにＶＲリグを使用する。そのような図および実施例では、通常は人間であるユーザがおり、ユーザの頭がおそらくは並進、回転においてどのように移動しているか、を示すセンサを含むヘッドマウントディスプレイを装着した頭など、センサ付き身体部分を有し、かつユーザの手がおそらくは並進、回転ならびに手首や指の移動など、個々の関節の移動においてどのように移動しているか、を示すセンサを含むユーザの手に計装された手袋を有している。処理システム、ＶＲリグまたはその他は、それらのセンサ入力を使用して、本明細書ではアバターと称される関節型キャラクタをアニメーション化することが課されている。
【００２０】
アニメーションは、センサの読み取り値が記録および記憶された後に発生する場合があるが、アプリケーションは、しばしばセンサの読み取り後の時間遅延でアニメーションを生成できるなど、リアルタイムまたはほぼリアルタイムで発生するアニメーションを有し、ここで、時間遅延は、毎秒６０または９０フレーム（ＦＰＳ）のビデオシーケンスのうちの１フレームであるか、または処理システムが使用される用途にとって許容可能な遅延である少数のフレームである。ある場合には、フレームを生成するために必要なすべての処理を実行するために１／９０秒未満が利用可能である。ユーザの移動によってユーザがアバターをアニメーション化しており、アバターがアニメーション化されている仮想空間の環境とアバターを対話させる、という印象を作り出すように、アニメーションは、対話型システムにおいてリアルタイムまたはほぼリアルタイムでユーザに表示され得る。環境は、アバターが対話する環境オブジェクトを含むことができ、これは、ユーザの現実の世界に存在する要素を表すことができる。環境オブジェクトには、アバターが通過できない床環境オブジェクトによって表される、ユーザが立っている床などがあり、環境オブジェクトは、仮想空間には存在するがユーザの現実世界には存在しない仮想の壁、箱、ボール、道具などを含み得る。
【００２１】
本明細書で説明されているように、アバターは、センサの読み取り値よりもはるかに多くの自由度を有し得る。例えば、センサの読み取り値は、ユーザの頭の回転およびユーザの両手の回転および並進の指示のみを提供し得るが、アバターは、頭の回転、両手の回転、両手の並進だけでなく、胴体並進、肘、膝、足の配置、脚の回転などの自由度も有している。
【００２２】
アバターは、頭、首、背中、骨盤、腰、膝、足首、足、肩、肘、手首、手などの身体部分を有する、関節型キャラクタとしてモデリングすることができる。各身体部分は、位置的制約（例えば、それらは、それらが取り付けられた他の身体部分に取り付けられたままでなければならない）および関節制限制約（例えば、肘は限られた範囲の運動を有する）を有する。
【００２３】
全身アバターは、キャラクタモデルとしてメモリに表示される。そのキャラクタモデルには、ソケット関節、ヒンジ関節、ユニバーサル関節、プリズム関節、または別の関節タイプを使用して親となる身体部分にそれぞれ接続されている身体部分がある。キャラクタモデルは、（骨の場合のように）ある程度の剛性と（肌や筋肉の場合のように）ある程度の柔軟性を有する半剛体を含み得る。身体部分は、それぞれゼロ以外の定義可能な質量でモデリングされている（ただし、質量がゼロで、悪影響がないようにモデリングされているものもある）。
【００２４】
キャラクタモデルを処理する際に、基本ハードウェアは、他の身体部分の対話に従って身体部分の移動を制約する物理エンジンを実行し、制約を満たし、身体部分の移動を制御して、仮想世界の他の物理化されたオブジェクトと対話する物理に一致させる。
【００２５】
全身アバターの階層は固定されている場合があり、その結果、ＶＲリグは実行時に変更されない１つの階層の身体部分を操作する。他の実施形態では、ユーザが階層を切り替えることができる場合がある。例えば、ユーザは、身体部分および階層における対応する変化を用いて、仮想の人間から仮想の鳥または８本脚の生物へと変化させることができる。階層は、同じままであり得る（例えば、それぞれの肘に各々接続され、両方とも胴体に接続される２本の腕）が、身体部分のサイズは、ユーザごとに変わり得る。
【００２６】
全身アバターの移動は、（ユーザの頭や手の移動を示すセンサから読み取られたデータによって判定されるように）現実世界の頭や手の移動によって駆動することができる。通常、ユーザは、ＶＲリグのトラッカの真下にある身体部分の移動が、現実の世界での対応するユーザ身体部分の移動と合致すると期待する。しかしながら、ＶＲリグによって直接追跡されない身体部分の移動に対して、アバター追跡システムは、ＶＲディスプレイ出力においてユーザにレンダリングされるべきそれらの位置および配向を判定する。アバター追跡システムは、アバターキャラクタモデルの物理的制約を使用し、他の仮想世界の制約は、全身アバターを定義するのに使用される。これにより、仮想アバターは特定の歩行サイクルに追従し、所望のポーズを追跡し、依然としてバランスを保つ。これは、シミュレートされたアバターの骨格の各関節に特定のトルクを判定して適用することによって行うことができる。
【００２７】
ゴーストの手は、ＶＲ  ＨＭＤおよびハンドコントローラ／手袋によって追跡されるユーザの頭および手に対応するゴーストエンドエフェクタとして実装され得る。
【００２８】
「ゴーストの手」技術は、シミュレートされた手の位置とユーザの実際の手の位置の間の不一致を調整するために使用することができる。アバターシステムは、手のシミュレートされた位置に仮想世界の非常に詳細な手のモデルをレンダリングすることができる。同時に、ゴーストの手は、ＶＲ  ＨＭＤおよびハンドコントローラ／手袋で追跡されるユーザの頭および手に対応するエンドエフェクタに１対１で対応する、邪魔にならないゴーストスタイルとしてレンダリングされ得る。
【００２９】
全身アバター較正
ＶＲリグを使用する際に、ユーザは、所定の体の移動におけるユーザの移動を観察し、ユーザの身体部分についての身体部分の長さ（およびおそらくは他の特性）を計算し、それらの長さと特性を用いて全身アバターのキャラクタモデルを更新する較正プログラムを導入し得る。ＶＲリグは、仮想世界におけるユーザまたはユーザの一部の身体部分をシミュレートするときにその更新されたキャラクタモデルを使用する。したがって、ユーザが背の高い人であれば、ユーザのアバターは仮想世界でより高く立つだろうし、ユーザがより小さな腕の長さを有していれば、仮想世界のアバターはより小さなリーチを持つことになる。
【００３０】
較正プロセスでは、ユーザは特定のポーズを取るように求められる。例えば、以下である。
【００３１】
ａ）ユーザが胴体を直立させ、両脚を閉じ、両腕を前方にまっすぐかつ水平に保持した状態で、ＶＲリグは、基本ハードウェアの一部である位置検知に利用可能なセンサから、ユーザの頭、手などの位置を記録する。
【００３２】
ｂ）ユーザが胴体を直立させ、両脚を合わせ、上腕を前方にまっすぐ水平に保持し、まっすぐ水平なまま保ち、かつ下腕を直立に曲げた状態で、ＶＲリグはその位置を記録する。
【００３３】
ｃ）ユーザが胴体を直立させ、両脚を閉じ、両腕を体の側面に沿って自然に垂れ下げた状態で、ＶＲリグはその位置を記録する。
【００３４】
他のポーズが要求され得る。要求は、命令に追従するために視覚的出力上でユーザに提示することができる。ＶＲリグプロセッサは、アバター関節のおおよその相対位置を計算し、全身アバター骨格をより正確にユーザの体にフィットするように較正するためのプログラムコードを含む。
【００３５】
物理ソルバーと複数力アレイ
本明細書に記載の仮想現実システムは、高レベルにおいては、仮想現実ハードウェアまたは他のデバイスによって測定されるように、ユーザ身体部分の移動に対応するデータによって表すことができる入力を取り込む。致命的な遅延なく表示できるようにするためには、データは、１／９０秒以内または１／９０秒単位における数単位以内など、しばしばほぼリアルタイムで取得し、ほぼリアルタイムで処理する必要がある。ユーザ身体部分の移動は記録され、ある座標空間における位置「軌跡」と称され得る。速度軌跡は、時間経過に伴う位置軌跡から、微分または他の方法で得ることができ、加速度軌跡は、時間経過に伴う速度軌跡から、微分または他の方法で得ることができる。
【００３６】
本明細書に記載されるような物理エンジンは、ほんの少数のユーザ身体部分からの入力を使用して、自然に見える移動データ（またはアニメーションビデオ自体）を出力することができる。例えば、仮想現実システムにおけるアニメーション化されたアバターは、ユーザの右手、左手および頭の移動の入力のみに基づいて自然に移動させられ得、一方で、アバターの対応する身体部分をユーザ身体部分と（可能な場合は）合致させる。他の入力が提供され得る。一実施例として、ユーザは、ユーザの計装された右手を屈曲した運動で右上に移動させ得る。その後、物理エンジンは、アバターの右手と一致するためのターゲットとしてその位置軌跡を使用する。ターゲットがアバターのリーチを超えるほどユーザの手が十分に移動した場合、物理エンジンは、その後脚などのアバターの体の他の部分をどのように移動させるかを判定し、その結果、アバターは、たとえ物理エンジンが（移動していない場合さえあり得る）ユーザの脚の移動に関する入力を有していなくても、（アバターの手がアバターから外れることなく）右手がターゲット位置に到達できるように歩き始める。
【００３７】
センサ付きユーザ身体部分に対応するアバター身体部分を移動させること、例えばそれらのアバター身体部分をユーザの移動から判定されたターゲット場所／配向を追跡することに加えて、物理エンジンは、アバターの運動を自然に見せ、運動の法則が現実の世界でどのように操作するかと整合するようにも働く。例えば、アバターの重心がアバターの支持ポリゴン（例えば、アバターの両足を含む凸包である地面上のポリゴン）の外側に達するとき、運動の法則は（粘着性の足がない場合）アバターが倒れるべきだと規定する。代わりに、物理エンジンは、転倒するのではなくバランスを取り戻すためにアバターがそれに応じて脚をシャッフルすべきであると判断する。どのリバランスまたはシャッフリングが必要かを判定する処理は、バランスを保つために脚を駆動する物理エンジンのバランスコントローラによって行うことができる。アバター身体部分を追跡している間、アバターのキャラクタフレームの対応する移動があり得る。物理エンジンは、入力ＶＲデバイスの軌跡から、キャラクタフレームの所望の線速度および角速度を計算し、かつアバターの判定された「歩行ニーズ」を満たすのに必要なトルクを生成してユーザの高度な歩行意図に合致させる歩行コントローラを含む。本明細書に記載の物理エンジンは、アバターアニメーションを生成するための追跡ニーズ、バランスニーズおよび歩行ニーズを同時に合致させることができ、自然に見えるだけでなく、追跡されたエンドエフェクタがどこにあるべきかについてのユーザの期待にも合致させる。
【００３８】
従来技術の手法では、ユーザは、多くのデバイスまたはオブジェクトにセンサ付けされ、仮想現実システムが自然に見える移動のために運動キャプチャ（「モーキャップ」）を実行することを可能にしている。役者の全身の運動をキャプチャするため、モーキャップシステムは通常、役者のすべての重要な身体部分の位置を直接追跡するために、２０〜１００の範囲のかなりの数量のセンサを必要とする。モーキャップシステムでは物理シミュレーションは使用されていない。また、役者の身体部分の追跡された運動を、役者のヒューマノイドトポロジと同様のトポロジを持つ抽象骨格に再ターゲットするために、運動学的アプローチのみが使用される。これでは扱いにくい場合があるので、そのユーザからのわずかな入力からユーザの移動を追跡するアバター上で自然に見える移動を生成することができるという利点がある。
【００３９】
アニメーションは、関節型骨格データ構造を使用している。関節型骨格データ構造は、骨のリスト、関節が２つ以上の骨を接続する関節のリスト、関節の許容移動範囲をしばしば許容角度に関して特定する関節的制約を含む。この関節型骨格データ構造は、ツリー構造と見なすことができる。アニメーションが行われると、アニメーションプロセスは、ある骨が関節によって別の骨に接続されている場合、骨が非接続にならずに関節がその関節の許容運動範囲内でのみ移動するように制約に従う。
【００４０】
逆運動学（ＩＫ）は、一部の身体部分のターゲット位置を取り込み、アバター身体部分がターゲット時間にそれらのターゲット位置に衝突する結果をどの一組の関節の回転がもたらすかを判定する。ＩＫはアバターアニメーションシステムで一般的に使用されている。すべての身体部分が入力データで表されているわけではない場合、つまりそれらの軌跡が入力の一部ではない場合、ＩＫエンジンは、他の身体部分がターゲット位置の制約を満たしているときにそれらの身体部分がどこにあるかを推測することができる。しかし、これは時々不自然に見える。
【００４１】
ＩＫソルバーには、関節型多関節骨構造チェーンが与えられ、そこからエンドエフェクタ骨のいくつかのターゲット位置まで、多関節骨構造のベース部からエンドエフェクタまでの中間関節の中間関節回転を計算し、その結果エンドエフェクタ（ハードウェア位置トラッカに取り付けられたチェーンの最後のセグメント）が入力位置を追跡する。例えば、指先が特定の時間に特定の場所にある必要があるという制約の場合、ＩＫソルバーは、その時点でアバターの指先がその特定の時間その場所にあるという特性を有する骨構造の骨格ポーズおよび位置を判定し、一方で、中間関節タイプで必要とされる幾何学的制約には違反しない。ＩＫベースの追跡システムの制限は、その下にある骨格の運動を支配するすべての動力学および物理法則を無視するため、不自然なポーズ（「ひっくり返された肘」など）の生成を含み、多くの場合、物理的に現実的な方法で結果と不整合すると考えられる環境デジタルオブジェクトとうまく対話せず、より低い胴体の移動または散策などの歩行をうまく処理できない。例えば、ＩＫベースのＶＲアバターシステムの一般的な問題は、アバターの足および脚をどこに置くかがわからないことであり、下半身のキーフレームアニメーションとＩＫ追跡された上半身を溶け込ませるか、アバターの足が地面に固定して、固定された足から手および頭などの追跡されたエンドエフェクタまでＩＫチェーンを走らせることができるよう強制するか、どちらかの必要がある。
【００４２】
改良されたアバターアニメーションシステムおよびシミュレーションエンジンは、ユーザの生体力学的全身ヒューマノイドモデルのシミュレーションに基づくことができる。このモデルは、関節的制約（例えば、脚は腰と膝に接続したままにしておく必要がある）、関節的制限（例えば、肘は５度から１８０度まで曲がってもよい）、ならびに質量特性および身体部分の衝突形状を含むメモリに記憶される。例えば、「ヒンジ」関節は、肘の角度および回転を変更することで解決を可能にする肘をモデリングすることができる。データは、骨格の関節に及ぼされるトルクとしてシミュレートし得る筋肉の詳細も含むことができる。ユーザの生体力学的モデルは、アバターと対話することができるテーブル、壁、障害物などの他の動的にシミュレートされた環境オブジェクトと共に、地面衝突および重力を用いてリアルタイムでシミュレートされる。
【００４３】
シミュレーションエンジンが制限された数の骨（通常１〜６個の骨）のターゲット位置を受け取ると、それらをＩＫソルバーに渡して残りのユーザ骨がどこに位置付けられているかを推測する代わりに、エンジンはそれらのターゲット位置を複数の力アレイ生成器に入力する。いくつかの実施例では、２つの力アレイ生成器が使用され、他の実施例では、３つ以上が使用される。結果として得られるアバターの画像は、運動がより自然に見え、共有仮想空間内で他のシミュレートされた環境オブジェクトまたは他のユーザのアバターと対話することができる。シミュレーションエンジンはアバターのそれぞれの骨のターゲットを処理し、それらを力アレイ生成器に提供する。
【００４４】
１つの力アレイ生成器は、逆動力学プロセスを使用して、追跡された骨のターゲット位置を満たすようにアバターの全身骨格を駆動するために、アバターの各制御仮想筋肉によって及ぼされるのに必要な力を表す力アレイ（ＩＤ力アレイ）を計算する。状況に応じて、その力は、仮想筋肉が身体部分の特定の腱取り付け位置に印加されるトルクであり得る。したがって、力が身体部分上の特定の箇所に印加される場合、これはその身体部分の回転点に印加されるトルクと等価であり得る。
【００４５】
逆動力学を使用して、物理エンジンは、関節型の複数の剛体の下にあるツリー構造のエンドエフェクタを駆動してユーザの身体に取り付けられたＶＲ／ＡＲセンサからの入力位置を合致させる力アレイまたはトルクを計算することができる。
【００４６】
順動力学の計算では、骨格の身体部分に加速度や力が印加された場合に、それらの身体部分が新しい位置や角度にどのように移動するかを考慮する。逆動力学では、位置および角度は入力であり、出力は、適用された加速度および力から理想的な骨格の四肢の位置および角度の軌跡を求める一組の微分方程式を使用してそれらの位置および角度に到達するために必要な加速度および力である。逆動力学を使用して、特定の位置および角度の軌跡に到達するために必要な関節モーメントおよび加速度および力を導出する。
【００４７】
いくつかの実施形態では、物理エンジンは、ニュートン−オイラー運動方程式などのニュートン力学に基づく運動方程式を符号化するデータおよびプログラムコードの記憶された表現を使用し、ここで、オブジェクトに印加される力とオブジェクトの質量にオブジェクトの線形加速度を乗じたものの和は等しくなる。したがって、所望の加速度に必要な力は、加速度の値および記憶された質量の値から計算することができ、印加された力から生じる加速度は、オブジェクトの質量の記憶された値で割った力の値から計算することができる。ニュートン−オイラー方程式では、回転は、そのモーメントをオブジェクトの記憶された質量慣性モーメントに角加速度を乗じたものに等しくすることによって対処される。これらの方程式は、アバターの剛体の骨を数学的にモデリングしたものである。これらの方程式から、物理エンジンは、逆動力学を使用して取り付けられた骨または関節の影響を受ける骨の移動に基づいて各関節のトルク（モーメント）値を導出する。
【００４８】
別の実施形態では、物理エンジンは最初にＩＫプロセスを実行して、（手追跡などのＶＲ入力によって判定される）ターゲット位置を有するエンドエフェクタに至るＩＫチェーンの中間関節のターゲット角度位置に対応するターゲット角度アレイを計算して記憶し、その後物理エンジンは、ＰＤコントローラを使用して、ターゲット角度アレイからＩＤ力アレイを計算し得る。例えば、物理エンジンはＴｏｒｑｕｅ（ｉ）＝Ｋｐ（ｉ）＊（ＴａｒｇｅｔＡｎｇｌｅ（ｉ）−ＣｕｒｒｅｎｔＡｎｇｌｅ（ｉ））＋Ｋｄ＊（ＴａｒｇｅｔＡｎｇｕｌａｒＶｅｌｏｃｉｔｙ（ｉ）−ＣｕｒｒｅｎｔＡｎｇｕｌａｒＶｅｌｏｃｉｔｙ（ｉ））を計算し得、式中、Ｔｏｒｑｕｅ（ｉ）は、ＩＤ力アレイのｉ番目の値、ＴａｒｇｅｔＡｎｇｌｅ（ｉ）は、ＩＫプロセスによって計算されたターゲット角度アレイのｉ番目の値、ＣｕｒｒｅｎｔＡｎｇｌｅ（ｉ）は、関節の現在の配向のアレイのｉ番目の値である。ＴａｒｇｅｔＡｎｇｕｌａｒＶｅｌｏｃｉｔｙとＣｕｒｒｅｎｔＡｎｇｕｌａｒＶｅｌｏｃｉｔｙの値は、関節のターゲット角度および現在の角度を微分することで計算できる。Ｋｐ（ｉ）およびＫｄ（ｉ）は、関節でＩＤトルクを生成するために使用されるＰＤコントローラの剛性とダンパーの項を表すＰＤコントローラ定数である。
【００４９】
別の実施形態では、物理エンジンは、ＶＲ入力追跡の位置および配向を追跡するためにエンドエフェクタで単一のＰＤコントローラを実行してエンドエフェクタにおいて所望のトルク／力を計算し、その後ＰＤコントローラによって計算されたエンドエフェクタにおいて所望の力およびトルクを誘導するために、ヤコビアン転置変換プロセスを使用してすべての中間関節において必要とされるトルクを計算する。
【００５０】
別の力アレイ生成器は、追跡された位置からアバターの暗黙の歩行速度および方向方角を導出し、歩行制御プロセスを使用して、アバターを動かしてバランスを崩すことなく所望の方向に所望の速度で移動し自然に移動するのに必要なトルクを計算する。そのような歩行力アレイ生成器の一実施形態は、倒立振り子プロセスを使用して歩行ニーズに合致する所望の脚振り角度を生成し、その後上述のＩＤプロセスを実行して脚を所望の角度に駆動し歩行ニーズを満たすのに必要な一組のトルクを計算する。
【００５１】
さらに別の力アレイ生成器は、バランス制御プロセスを使用して、アバターの胴体を直立に維持し、足のバランスを取るために必要な力のバランスを計算する。バランス力アレイ生成器の一実施形態は、胴体を四肢に接続する関節を見つけるために関節を捜索し、以前のステップで計算されたこれらの関節についてのＩＤ力アレイおよび歩行力アレイを合計することによってこれらの関節によって及ぼされる胴体にかかる正味総トルクを計算する。次に、バランス力アレイ生成器は、ＰＤコントローラを使用して、Ｔｄ＝Ｋｐ＊（所望の胴体の配向−現在の胴体の配向）＋Ｋｄ＊胴体の角速度、を介して所望の正味バランストルクＴｄを計算することができ、式中、ＫｐとＫｄはＰＤコントローラの定数である。その後、生成器は、バランスを実現するために、所望の正味バランストルクＴｄからＩＤ力アレイおよび歩行力アレイによって及ぼされる胴体上の現在の正味トルクを減算して胴体の不足トルクＴｍを得る。最後に、生成器は、胴体を四肢に接続する関節にＴｍｏｖｅｒを割り当てることで胴体に不足トルクＴｍを印加する。
【００５２】
その後、ソルバーは、複数の別個に判定された力アレイを、例えば、説明したそれらの力アレイ生成器のうちの２つまたは３つを使用することによって、１つの力アレイに組み合わせる。接触力、重力などの他の力は、容易に加えることができる。次に、ソルバーは、質量を知って身体部分の運動方程式Ｆ＝ｍａを解き、アバターおよび他の環境オブジェクト上に構成されている接触的制約、関節的制約、運動的制約などのような物理的制約に対する制約方程式Ｃ（ａ）＝０も解く加速度値のアレイを見つけようとする。
【００５３】
既知の加速度値のアレイがあり、かつ前のフレームの位置および速度の値が記憶されば、シミュレーションエンジンは、加速度値を剛体システムで使用し、加速度を１ステップ進めて積分して新しい速度値を求めることができ、速度地をさらに積分してシミュレートされた環境内のアバター身体部分および他の動力学オブジェクトの新しい位置値を得る。
【００５４】
このプロセスは、通常１つのビデオフレームまたは設定された数のビデオフレームに対応して、各クロックサイクルについて繰り返すことができる。
【００５５】
シミュレーションエンジンは、役者が低コストのＶＲ／ＡＲデバイスを装着してデジタル環境で異なるシーンをすばやく演出する、映画の事前視覚化アプリケーションで使用することができる。シミュレーションエンジンは、高価な運動キャプチャ機器を使用せずに、デジタル環境でより自然かつ対話的に移動する役者のデジタル表現を提供することができる。
【００５６】
シミュレーションエンジンは、シミュレートされたアバターがユーザの入力トラッカ位置を追跡するだけでなく、異なるスタイルの運動のもとでのアバターの関節応力や圧力分布などの生体医療情報を表示し得る医療またはトレーニングアプリケーションに使用することができる。
【００５７】
いくつかの実施形態では、ＶＲ／ＡＲアバター追跡システムの縮小版は、全身骨格の代わりにユーザの部分骨格のみをシミュレートする。いくつかの実施形態では、ＶＲ／ＡＲアバター追跡システムは、ユーザの移動から、動物、ロボットまたは機械などの非ヒューマノイドアバターキャラクタに変換する。アバターは、ユーザの体型や骨格と１対１の対応を有し得るが、部分的または抽象的なものにつなげることができる。アバター追跡システムを使用して、非対称の体型およびスケールにわたって入力運動を再ターゲット化することもできる。
【００５８】
いくつかのＡＲおよびＭＲアプリケーションでは、アバター追跡システムは、シミュレートされたアバター上のユーザの全身または部分的な身体のレンダリングまたは撮像を含む。
【００５９】
アバター追跡システムは、アニメーターが現実的なキーフレームアニメーションを作成するための低コスト、軽量かつリアルタイムの運動キャプチャ（「モーキャップ」）代替システムとしても使用することができる。
【００６０】
図１は、逆動的トルクが表すものの一実施例を示す。それらは、右手がターゲットコントローラの位置および配向に到達するように３つの右腕関節（肩、肘、手首）を駆動するように計算することができる。対応する身体部分に取り付けられたＶＲ位置トラッカに向かってより多くのエンドエフェクタを追跡するために、左腕、首、および脚などの他の追跡肢に追加のトルクがあってもよい。
【００６１】
図２は、ヒューマノイドの本体フレームの直立配向を維持するために本体フレーム（ここでは、胴体および根骨を含む）に印加されるバランストルクの一実施例を示す。この図では、トルクＴ１、Ｔ４、Ｔ７、Ｔ８、およびＴ９が、車体フレームを直立させることに最も大きな影響を与える。バランサ制御プロセスの出力は、車体フレームの直立方向に影響を与えるこれらの関節に印加されるこれらの組のトルクとすることができる。
【００６２】
図３は、歩行トルクの一実施例を示す。これらは主に２本の脚（スイング脚とスタンス脚）の下半身のトルクに集中している。これらのトルクは、キャラクタ全体の線速度に重要な役割を果たすスイング脚の形状とスイング方向に影響を与える。スタンス脚（スタンス腰関節、膝関節、足首関節を含む）のトルクはキャラクタの回転速度を判定し、これは角速度であり、線速度にも影響を与える。全体として、歩行コントローラの出力は、キャラクタ全体を所望の線速度と角速度に駆動するための下半身関節の力アレイである。
【００６３】
図４は、力アレイベクトルの成分による総和を示す。
【００６４】
図５は、合計力アレイベクトルおよび制約を解決するためのソルバーを示しており、Ｆ、Ｍ（すべての骨の質量と慣性モーメントを含む質量特性行列で表される）、Ｃ（システム内の接触的制約と関節的制約の制約関数）を与えられて、Ａ（各関節の加速度ベクトルを含む加速度行列）の連立方程式を解く。これにより、ＩＤ、バランシングコントローラ、歩行コントローラ、またはＶＲ／ＡＲアバター追跡を行うためのサブセットの単純な組み合わせが可能になる。
【００６５】
いくつかの実施形態では、ＩＤモジュールが必要とされる。
【００６６】
ゴーストの手
いくつかの実施形態では、全身アバターの移動は、アバターの仮想の手の代わりにゴーストの手を使用する。例えば、アバターの移動（例えば、所望のポーズに対する関節回転）は、仮想の手の位置ではなく、ゴーストの手の位置を使用する。これらの位置を用いて、更新ティックにわたる逆運動学または逆動力学を使用し、その後所望のポーズを使用して必要な関節トルクを導出するなどの従来のキャラクタ制御を実行することができる。
【００６７】
ＶＲリグは全身アバターをモデリングし、物理エンジンでは、キャラクタモデルの要素は、仮想空間の物理的制約と一致して移動し、例えば、ユーザの手の移動が仮想世界の他のオブジェクトによる制約を受けてアバターの胴体の移動を引き起こし得る仮想空間などである。しかしながら、ユーザが自分の手をレンガ壁を通る位置に移動させることができる仮想レンガ壁のように、現実世界には存在しないいくつかの仮想世界の制約がある場合がある。
【００６８】
アバターの手は、基本ハードウェアの手袋など、現実世界の３自由度または６自由度の運動追跡デバイスによってキャプチャされた、ユーザの物理的な手の移動に基づいて位置決めされた視覚的出力（カメラビューである場合）に現れる。アバターの手は仮想空間の制約を受けて移動し、そのような制約は手が固体オブジェクトを通って移動することができないという制約である。ユーザの現実世界の手とアバターの手の位置が分岐する場合（現実世界の対応物の制約を持たない仮想世界の制約のためなど）、仮想の手は制約された位置に表示され、視覚的な出力には、現実世界の手の位置に対応する仮想世界の位置に表示される「ゴーストの手」が含まれる。これは両手で行うことができる。したがって、ゴーストの手は、ユーザの手の実際の位置および配向を反映している。
【００６９】
ゴーストの手はオブジェクトに制約されず、半透明としてレンダリングされる場合があり、一方で、仮想の手は非半透明で他のオブジェクトの衝突の制約に追従する。ゴーストの手と仮想の手の位置は、仮想の手がユーザの手が現実世界のオブジェクトに遭遇しない仮想空間内のオブジェクトに遭遇すると分岐する。ユーザが硬い壁において仮想の手をパンチする実施例では、ユーザの手がその衝突点を越えて移動し続けることができる場合、ゴーストの手は前方に続き、堅い壁の反対側に現れることになる。それらは半透明なので、それらはビューを完全に不明瞭にはしない。それらは、オブジェクトを介在させずにレンダリングすることもできるので、その結果、ユーザは、それらが固体オブジェクトまたは他のオブジェクトの後ろにいてもゴーストの手を見ることができる。
【００７０】
分岐は様々な方法で処理することができる。１つの方法は、すべての身体部分を制約し、衝突点で仮想の手を止めることである。これは、仮想の手が壁にあり、ゴーストの手が壁の向こう側にあるように、ユーザには見え、仮想の肘（そしておそらく仮想／制約およびゴースト／非制約の対応物を有する他の身体部分）は、ゴーストの肘よりやや後ろにある（その結果、両方の場合において、下腕身体部分の長さに対する制約が満たされる）。別のアプローチは、仮想の下腕が必ずしもゴーストの下腕と平行にならないように、いくつかの制約を緩和することである。
【００７１】
別のアプローチでは、具現化されたゴーストの手以外にゴーストの身体部分は存在しない。その場合、他の身体部分を考慮したりレンダリングしたり、関節的制約を考慮する必要はない。逆運動学／動力学コントローラを使用すると、ゴーストの手は仮想の手のターゲットとして扱われ、その結果コントローラによって生成された腕関節のトルクは、ゴーストの手に追従するために特定のポーズに仮想の腕を駆動しようとするが、同時に、仮想の手が壁に衝突して壁から力を受け、その力がアバターの骨格全体に伝搬する。最終的な振る舞いは物理エンジンによってシミュレートされる。壁が関節のトルクを釣り合わせるのに十分な摩擦を提供できない場合、仮想の手は壁の表面に沿って移動し、そうでなければ仮想の手は手と壁の接触場所に留まる。
【００７２】
ゴーストの手と現実世界の手の位置との間には、わずかな待ち時間が許容される。ゴーストの手は、仮想世界の他のオブジェクトの前に現れるのが好ましい。これは乗り物酔いなどの悪影響を減らすことができる。そのため、仮想世界の手を隠すオブジェクトがある場合でも、ゴーストの手は隠すオブジェクトを通して透けて見える。したがって、ゴーストの手は、仮想世界に溶け込むのではなく常に見えるように他のオブジェクトとは異なってレンダリングすることが好ましい。
【００７３】
ゴーストの手は、運動学的オブジェクトとしてモデリングすることができ、ゴーストの手が他のオブジェクトと対話しないように、他の仮想世界オブジェクト間の衝突を無効にする。このように、ゴーストの手は現実世界の運動センサによってキャプチャされたデータに追従するが、動的（可視、仮想）手は、表面の衝突などの仮想世界の物理的な法則に従う。ゴーストの手は、ハンドコントローラの位置を運動学的に追跡し、物理的にシミュレートされない「運動学的な手」とも称され得る。
【００７４】
現実世界からのアバターの転用、すなわち一人称から三人称への切り替え
ＶＲリグの視覚的出力では、キャラクタモデルは一人称として現れる。例えば、一人称視点では、仮想空間におけるカメラの視点は、ユーザの頭と目がどこにあるかに対応し、したがって、（アバターの頭に取り付けられている）キャラクタモデルの胴体は、カメラのすぐ下の仮想空間内に残る。胴体が十分な力で他のキャラクタやオブジェクトによって仮想世界内でぶつかると、ＶＲリグは、物理エンジンの出力に従って、その胴体を力の方向に移動させ、その後胴体に取り付けられた身体部分を移動させ、これは頭およびカメラ位置を含む。これはユーザにとってかなりの混乱を招く場合がある。
【００７５】
基本ハードウェアがアバターにかかる力がアバターの頭がある閾値を超えて移動する場合、そうでなければカメラの移動としてユーザに提示するのが望ましくないと判断した場合を扱うために、基本ハードウェアは、カメラ位置をアバターの頭の位置からリンク解除するようにプログラムされる。それが起こるとき、ユーザは三人称の視覚的出力にアバターを見ることになる。したがって、アバターが十分な力で当たり、物理エンジンがアバターは地面に落ちるべきであると判定する力であるとき、アバターは落ちるように見えるが、ユーザの視点が回転して地面に落ちることはない。
【００７６】
応答は、アバターの頭をカメラ位置への緩やかな再リンクであってもよい。例えば、少量の移動があると、アバターの頭がカメラ位置よりも前方に移動し得、ユーザは、自分のアバターの頭の後ろを見ることができるが、仮想の頭は、以前の位置に戻って移動し、カメラ位置に再位置合わせされる。転倒のような場合には、カメラ位置は、アバターの頭の位置を目指してゆっくりと向くこと、またはユーザによって１つのカメラから別のカメラへの切り替えとして解釈され得るカメラ位置の単一の不連続変化などの、移動するものであり得る。アバターの頭の位置とカメラ位置が再位置合わせされると、それらを再びリンクして、全身アバターが一人称に知覚されるようにすることができる。
【００７７】
関節の掴み／投げ
物理エンジンは、オブジェクトが衝突すると、それらが移動し、他のオブジェクトに取り付けられているオブジェクト（例えば、腕に取り付けられたままの手）およびオブジェクトに割り当てられた質量などの制約に従って衝突の推定力と一致して加速されるようにするなど、仮想空間に存在するオブジェクトのモデルを操作する。オブジェクトは、例えばオブジェクトを仮想の手の指オブジェクトで囲むことによって、仮想空間内で「掴む」ことができる。物理エンジンの制約に頼るだけでは、様々な理由からユーザにとって繊細なものになる場合があり、ユーザが仮想空間で掴んで投げる行動を実行するのに必要な運動を通じてＶＲリグを操ることを困難にする。これは特に、オブジェクトの把握を知らせるユーザへの触覚フィードバックがほとんどまたは全くない場合に当てはまる。
【００７８】
掴みと投げの操作を単純化するために、自然に見える対話を提供しながら「取り付け条件」が存在するときに、手および掴んで投げられたオブジェクトを手に取り付けたままにする新しい関節が追加される。アタッチメントを使用すると、物理エンジンは、物理エンジンが腕を肩に取り付けたままにするのとほぼ同じ方法で、オブジェクトが手の中にあるよう確実にする。取り付け条件の一実施例は、手の指がオブジェクトに触れ、オブジェクトが手のひらにも触れ、かつ指が閉じている場合である。
【００７９】
「切り離し条件」が存在するとき、関節は取り除かれる。切り離し条件の一実施例は、手が最低速度以上で移動しており、かつ指が開いている場合である。したがって、ユーザが仮想ボールを仮想的に投げるために、最初の掴みでボールを手に固定し、ユーザがワインドアップおよび投げ運動を行った後、関節が消え、その後物理エンジンは、投げられたオブジェクトが手から勢いを増して分離するときのオブジェクトの経路を提供し、自然な投げ運動を表す。
【００８０】
関節は、接続を維持するために無限のインパルスを提供する必要はなく、したがって物理的にもっともらしい方法で壊すことができる。投げは、物理シミュレーションの結果として関節が壊れたときに自然に発生することができ、アプリケーションイベントに接続されてプログラム的に制御することができる。後者の状況では、関節は取り除かれ、新しい線速度および角速度を掴みに設定することができる。
【００８１】
武器の振り回し
武器は一続きのオブジェクトとしてモデリングすることができ、１つ以上の関節を通じて仮想の手に取り付けることができる。あるいは、武器は、「３セグメントスティック」のような多関節ソフトボディとしてモデリングすることができ、アバター骨格の一部として取り付けることができる。後者の場合、武器が仮想世界でターゲットに当たったとき、その衝撃はすべての武器内関節および武器と仮想の手との間の関節に分散される。その後、力は手首、腕、肩および胴体をわたって伝播される。このように、武器およびアバターはそれが存在するという錯覚を壊すことなく物理的に仮想世界のオブジェクトと対話する。武器の衝突は仮想の手とゴーストの手に幾分の分岐をもたらす場合があるが、力が現実的に他の身体部分にわたって伝搬すると、分岐は減少する。
【００８２】
いくつかの実施形態では、武器は動的な手にしっかりと取り付けられている。他の実施形態では、武器は、曲がり得る動的な関節を用いて動的な手に接続される。後者は衝撃時の衝撃吸収に役立つ場合がある。
【００８３】
ハードウェア実装
一実施形態によれば、本明細書に記載の技術は、ファームウェア、メモリ、他のストレージ、またはそれらの組み合わせ内のプログラム命令に従ってその技術を実行するようにプログラムされた１つまたは汎用のコンピューティングシステムによって実装される。デスクトップコンピュータシステム、ポータブルコンピュータシステム、ハンドヘルドデバイス、ネットワーキングデバイス、または本技術を実装するためにハードワイヤードロジックおよび／またはプログラムロジックを組み込んだ他の任意のデバイスなど、特殊用途のコンピューティングデバイスを使用することができる。
【００８４】
実行のため１つ以上の命令の１つ以上のシーケンスをプロセッサに運ぶことにおいて、様々な形態の媒体が関与することができる。例えば、命令は、最初に磁気ディスクまたはリモートコンピュータのソリッドステートドライブ上で運ばれてもよい。リモートコンピュータはその命令をその動的メモリにロードすることができ、ネットワーク接続を介して命令を送信することができる。コンピュータシステムにローカルなネットワークインターフェースは、データを受信することができる。バスは、データをメインメモリに運び、プロセッサはそこから命令を取り出して実行する。メインメモリによって受信された命令は、プロセッサによる実行の前または後のいずれかに任意に記憶することができる。
【００８５】
ＶＲシステムは、ヘッドギア、計装された手袋、プロセッサ、メモリおよびケーブル接続などの基本ハードウェア、あるいはそれらの部分間でデータおよび／または電力を転送するための無線接続を含み得る。通信は、ローカルネットワークまたは内部チャネルに接続されたネットワークリンクに結合している双方向データ通信であり得る。無線リンクも実装することができる。
【００８６】
ネットワークリンクは通常、１つ以上のネットワークを通じて他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンクは、ローカルネットワークを通じてホストコンピュータまたはインターネットサービスプロバイダ（ＩＳＰ）によって操作されるデータ機器への接続を提供することができる。このようにして、ＶＲリグは、更新およびプログラミングを取得し、ならびにアップロード情報を提供し得る。コンピュータシステムは、ネットワーク、ネットワークリンク、および通信インターフェースを通じて、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの実施例では、サーバは、インターネットを通じて直接またはアプリケーションストアを通じて、アプリケーションプログラムの要求されたコードを送信し得る。受信されたコードは、本明細書のＶＲリグに起因する機能を実装するためにプロセッサによって実行することができる。そのコードは、シーンデザイナーやプログラマーによって開発ステーションで作成され得る。
【００８７】
図７は、本明細書に記載の機能を実行するためにプロセッサによって使用され、本明細書に記載の実施形態の要素を実装するためにプロセッサによって使用され得る構造を示す。例えば、機能ブロックが参照される場合、それはメモリに記憶されたプログラムコードとして実装され得る。図７は、コンピュータシステム内のプロセッサによってアクセスし実行することができるアプリケーションを有するストレージデバイス７０２の簡略化された機能ブロック図である。アプリケーションは、サーバ、クライアント、または他のプラットフォームもしくはデバイス上で実行する、本明細書に記載の１つ以上のアプリケーションとすることができ、他の場所に示されているクライアントおよび／またはサーバのうちの１つのメモリを表し得る。ストレージデバイス７０２は、プロセッサによってアクセスすることができる１つ以上のメモリデバイスとすることができ、ストレージデバイス７０２は、その上に１つ以上のプロセッサ可読命令を記憶するように構成し得るアプリケーションコード７１０を記憶することができる。アプリケーションコード７１０は、アプリケーションに関連するアプリケーションロジック７１２、ライブラリ機能７１４、およびファイルＩ／Ｏ機能７１６を含むことができる。
【００８８】
ストレージデバイス７０２は、入力変数７１４を受け取るように構成された１つ以上の記憶場所を含み得るアプリケーション変数７１２も含むことができる。アプリケーション変数７１２は、アプリケーションによって生成されるか、または他の方法でアプリケーションに対してローカルな変数を含むことができる。アプリケーション変数７１２は、例えば、ユーザまたは外部デバイスもしくはアプリケーションなどの外部ソースから取り出されたデータから生成することができる。プロセッサは、アプリケーションコード７１０を実行して、ストレージデバイス７０２に提供されたアプリケーション変数７１２を生成することができる。
【００８９】
アプリケーション変数７２０は、本明細書に記載されている機能を実行するために必要とされる操作の詳細を含み得る。アニメーションデータ７３０は、関節型キャラクタ骨格の要素、身体の構成要素、要素の質量、関節的制約、環境オブジェクト、および必要とされる他の詳細などの詳細を含み得る。
【００９０】
１つ以上のメモリ場所は、デバイスデータ７２２を記憶するように構成することができる。デバイスデータ７２２は、記録されたユーザＶＲ入力を含む、ユーザまたは外部デバイスなどの外部ソースによって供給されるデータを含むことができる。
【００９１】
ストレージデバイス７０２は、アプリケーションの結果またはアプリケーションに提供された入力を記憶するように構成された１つ以上の記憶場所７４４を有するログファイル７４０も含むことができる。例えば、ログファイル７４０は、行動履歴を記憶するように構成することができる。
【００９２】
図８は、例示的なコンピュータシステム８００を示す。そこに示されるように、コンピュータシステム８００は、バス８０２または情報を通信するための他の通信機構、およびプロセッサ８０４に提供されるデータおよびプログラム命令などの情報を処理するためにバス８０２に結合されたプロセッサ８０４を含む。プロセッサ８０４は、例えば、汎用マイクロプロセッサであってもよい。
【００９３】
コンピュータシステム８００は、プロセッサ８０４によって実行される情報および命令を記憶するためにバス８０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他の動的ストレージデバイスなどのメインメモリ８０６も含む。メインメモリ８０６はまた、プロセッサ８０４によって実行される命令の実行中に一時変数または他の中間情報を記憶するために使用することができる。そのような命令は、プロセッサ８０４にアクセス可能な非一時的記憶媒体に記憶されるとき、命令で指定された操作を実行するようにカスタマイズされた特殊用途機械にコンピュータシステム８００をレンダリングする。
【００９４】
コンピュータシステム８００は、静的情報およびプロセッサ８０４用の命令を記憶するためにバス８０２に結合された読み出し専用メモリ（ＲＯＭ）８０８または他の静的ストレージデバイスをさらに含む。磁気ディスクまたは光ディスクなどのストレージデバイス８１０が提供され、情報および命令を記憶するためにバス８０２に結合される。
【００９５】
コンピュータシステム８００は、情報を表示するために、バス８０２を介してコンピュータモニタまたはＶＲヘッドセットなどのディスプレイ８１２に結合することができる。入力デバイス８１４は、情報およびコマンド選択をプロセッサ８０４に通信するためにバス８０２に結合されており、ＶＲ入力の形態とすることができる。別の種類のユーザ入力デバイスは、マウス、トラックボール、または方向情報およびコマンド選択をプロセッサ８０４と通信し、ディスプレイ８１２上のカーソル移動を制御するためのカーソル方向キーなどのカーソル制御８１６である。
【００９６】
コンピュータシステム８００は、カスタマイズされたハードワイヤードロジック、１つ以上のＡＳＩＣまたはＦＰＧＡ、ファームウェアおよび／またはコンピュータシステムと組み合わせてコンピュータシステム８００を特殊用途機械にプログラムするプログラムロジックを使用して、本明細書に記載の技術を実装することができる。一実施形態によれば、本明細書の技術は、メインメモリ８０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するプロセッサ８０４に応答してコンピュータシステム８００によって実行される。そのような命令は、ストレージデバイス８１０のような他の記憶媒体からメインメモリ８０６に読み込まれてもよい。メインメモリ８０６に含まれる命令のシーケンスを実行すると、プロセッサ８０４は本明細書に記載のプロセスステップを実行する。別の実施形態では、ソフトウェア命令の代わりにまたはそれと組み合わせてハードワイヤード回路を使用することができる。
【００９７】
本明細書で使用される「記憶媒体」という用語は、機械を特定の方式で操作させるデータおよび／または命令を記憶する任意の非一時的媒体を指す。そのような記憶媒体は、不揮発性媒体および／または揮発性媒体を含むことができる。不揮発性媒体は、例えば、ストレージデバイス８１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ８０６などの動的メモリを含む。一般的な形態の記憶媒体は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または任意の他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光学データ記憶媒体、任意のホールパターンを有する物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップまたはカートリッジを含む。
【００９８】
記憶媒体は、伝達媒体とは異なるが伝達媒体と一緒に使用することができる。伝達媒体は、記憶媒体間で情報を転送することに携わる。例えば、伝達媒体は、バス８０２を含むワイヤを含む、同軸ケーブル、銅線、および光ファイバを含む。伝達媒体はまた、電波および赤外線データ通信中に生成されるものなどの音波または光波の形態を採ることもできる。
【００９９】
実行のため１つ以上の命令の１つ以上のシーケンスをプロセッサ８０４に運ぶことにおいて、様々な形態の媒体が関与することができる。例えば、命令は、最初に磁気ディスクまたはリモートコンピュータのソリッドステートドライブ上で運ばれてもよい。リモートコンピュータはその命令をその動的メモリにロードすることができ、ネットワーク接続を介して命令を送信することができる。コンピュータシステム８００にローカルなモデムまたはネットワークインターフェースは、データを受信することができる。バス８０２は、データをメインメモリ８０６に運び、プロセッサ８０４はそこから命令を取り出して実行する。メインメモリ８０６によって受信された命令は、プロセッサ８０４による実行の前または後のいずれかに、ストレージデバイス８１０に任意に記憶することができる。
【０１００】
コンピュータシステム８００は、バス８０２に結合された通信インターフェース８１８も含む。通信インターフェース８１８は、ローカルネットワーク８２２に接続されたネットワークリンク８２０に結合している双方向データ通信を提供する。無線リンクも実装することができる。任意のそのような実装において、通信インターフェース８１８は、様々な種類の情報を表すデジタルデータストリームを運ぶ電気信号、電磁気信号、または光信号を送受信する。
【０１０１】
ネットワークリンク８２０は通常、１つ以上のネットワークを通じて他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク８２０は、ローカルネットワーク８２２を通じてホストコンピュータ８２４またはインターネットサービスプロバイダ（ＩＳＰ）８２６によって操作されるデータ機器への接続を提供することができる。ＩＳＰ８２６は、次に、現在一般に「インターネット」８２８と称されるワールドワイドパケットデータ通信ネットワークを通じて、データ通信サービスを提供する。ローカルネットワーク８２２およびインターネット８２８は、両方ともデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を使用する。コンピュータシステム８００の間でデジタルデータをやり取りする、様々なネットワークを通る信号、ならびにネットワークリンク８２０上および通信インターフェース８１８を通る信号は、伝達媒体の形態の実施例である。
【０１０２】
コンピュータシステム８００は、ネットワーク、ネットワークリンク８２０、および通信インターフェース８１８を通じて、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの実施例では、サーバ８３０は、インターネット８２８、ＩＳＰ８２６、ローカルネットワーク８２２、および通信インターフェース８１８を通じてアプリケーションプログラムの要求コードを送信し得る。受信されたコードは、受信時にプロセッサ８０４によって実行され、および／または後で実行するためにストレージデバイス８１０もしくは他の不揮発性ストレージに記憶されてもよい。
【０１０３】
本明細書に記載の方法の操作は、本明細書に別途示されない限り、または別途文脈によって明らかに矛盾しない限り、任意の好適な順序で実行することができる。本明細書に記載のプロセス（またはその変形例および／または組み合わせ）は、実行可能命令で構成された１つ以上のコンピュータシステムの制御下で実行することができ、ハードウェアまたはその組み合わせによって、１つ以上のプロセッサ上で集合的に実行されるコード（例えば、実行可能命令、１つ以上のコンピュータプログラムまたは１つ以上のアプリケーション）として実装することができる。コードは、例えば、１つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ可読記憶媒体に記憶することができる。コンピュータ可読記憶媒体は、非一時的であってもよい。
【０１０４】
別途明記しない限り、または別途文脈と明確に矛盾しない限り、「Ａ、Ｂ、およびＣのうちの少なくとも１つ」または「Ａ、ＢおよびＣのうちの少なくとも１つ」という形の句などの接続的な文言は、他の点では、一般的に使用されている文脈で、項目、用語などを表すことが理解され、項目、用語などは、ＡまたはＢまたはＣ、あるいはＡおよびＢおよびＣのセットの空でないサブセットのいずれかであってもよい。例えば、３つのメンバーを有するセットの例示的な実施例では、「Ａ、Ｂ、およびＣのうちの少なくとも１つ」および「Ａ、ＢおよびＣのうちの少なくとも１つ」という接続的な句は、以下のセットのうちのいずれかを指す：｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ、Ｂ｝、｛Ａ、Ｃ｝、｛Ｂ、Ｃ｝、｛Ａ、Ｂ、Ｃ｝。したがって、そのような接続的な文言は、特定の実施形態が、少なくとも１つのＡ、少なくとも１つのＢ、および少なくとも１つのＣがそれぞれ存在することが必要であることを意味することを一般に意図しない。
【０１０５】
本明細書に提供されるありとあらゆる実施例、または例示的な文言（例えば、「など」）の使用は、単に本発明の実施形態をよりよく明瞭にすることを意図しており、特に請求しない限り本発明の範囲を限定しない。本明細書中のいかなる文言も、特許請求されていない要素を本発明の実施に必須であると示すと解釈されるべきではない。
【０１０６】
前述の明細書において、本発明の実施形態は、実装ごとに異なり得る多数の特定の詳細を参照して説明された。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で見なされるべきである。本発明の範囲の唯一かつ排他的な指標、および本発明の範囲であることが出願人によって意図されているものは、後続の訂正を含め、このような特許請求の範囲が発行する特定の形式における、本願から発行する一連の特許請求の範囲の文字通りの等価な範囲である。
【０１０７】
本開示の読後、当業者はさらなる実施形態を想定することができる。他の実施形態では、上記に開示された発明の組み合わせまたは副次的組み合わせが有利になされ得る。構成要素の例示的な構成は、例示の目的で示されており、本発明の代替の実施形態では、組み合わせ、追加、再構成などが企図されることを理解されたい。このように、本発明を例示的な実施形態に関して説明してきたが、当業者であれば、数多くの修正が可能であることを理解する。
【０１０８】
例えば、本明細書に記載のプロセスは、ハードウェア構成要素、ソフトウェア構成要素、および／またはそれらの任意の組み合わせを使用して実装することができる。したがって、明細書および図面は、限定的な意味ではなく、例示的な意味で見なされるべきである。しかしながら、より広い精神および範囲から逸脱することなく、様々な修正および変更を加えることができ、特許請求の範囲に記載された本発明の範囲、および本発明は特許請求の範囲の範囲内のすべての修正および均等物を包含することを意図していることは明らかである。
【０１０９】
ここで説明したように、本開示は、ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供する対話型アバターディスプレイシステムであって、視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、コンピュータ生成図は、ユーザの移動に応じて仮想空間内を移動するアバターを含み、対話型アバターディスプレイは、プロセッサと、プロセッサに結合され、プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、プロセッサに結合され、プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、ユーザの現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含む、対話型アバターディスプレイシステムを製造し使用することを提供する。プログラムメモリは、ａ）センサ出力から追跡された身体部分の位置および配向を判定するためのプログラムコードであって、追跡された身体部分は、センサのうちの１つ以上に影響を与えるユーザ身体部分である、プログラムコードと、ｂ）アバターの追跡された要素の運動ターゲットを生成するためのプログラムコードであって、運動ターゲットは、追跡された身体部分のうちの１つ以上のユーザの現実世界の座標系における位置または配向に対応する、仮想空間における位置または配向である、ブログラムコードと、ｃ）力値の第１のアレイを計算するためのプログラムコードであって、第１のアレイ内の力値は、特定のアバター身体部分への力に対応する逆動力学力値であり、第１のアレイは、運動ターゲットによって特定されていない少なくとも１つの自由度を含む、複数のアバター自由度の逆動力学力値に対応する、プログラムコードと、ｄ）第２のアレイの力値を計算するためのプログラムコードであって、第１のアレイの力値は、バランス制御力値または歩行制御力のいずれかであり、第２のアレイは、仮想空間内でアバターのバランスを維持するために必要なバランス制御力、またはアバターを全体として移動させて運動ターゲットが与えられたアバターの追跡された要素の位置合わせを維持するために必要な歩行制御力のいずれかに対応する、プログラムコードと、ｅ）第１のアレイおよび第２のアレイを合計力アレイに組み合わせるためのプログラムコードと、ｆ）アバターに対する一組の制約を判定するためのプログラムコードと、ｇ）合計力アレイおよびアバターに対する一組の制約を与えられたアバターの要素の運動方程式に対する解を計算するためのプログラムコードであって、解は、加速度アレイを含み、加速度アレイ内の加速度値は、剛体システムとして特定のアバター身体部分に適用される加速度である、プログラムコードと、ｈ）加速度アレイに基づいて、アバター身体部分の位置および／または速度を更新するプログラムコードと、を含み得る。
【０１１０】
いくつかの実施形態では、それらは、シミュレーションクロックを進めることと、ビデオフレーム出力を生成することと、センサ出力から追跡された身体部分の位置および配向を判定するためのプログラムコードで繰り返すことと、のうちの１つ以上を含み、力アレイを組み合わせることは、構成要素ごとの追加を含み、バランス制御力値および歩行制御力値について、力値の第２のアレイおよび力値の第３のアレイの両方を計算するためのプログラムコードを含み、第１のアレイおよび第２のアレイを合計力アレイに組み合わせるためのプログラムコードは、第３のアレイも合計力アレイに組み合わせる。合計力アレイは、シミュレートされた重力および／またはアバターの対話からの寄与、および／または環境オブジェクトおよび／または他のアバターの対話からの寄与を含むことができる。
【０１１１】
一組の制約は、物理的制約、接触制約、関節的制約、および／または運動制約のうちの１つ以上を含み得る。
【０１１２】
仮想現実システムは、ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供することができ、視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、視覚的出力は、ユーザの頭の移動と共に変化して、仮想空間の仮想座標系が、ユーザの現実世界の座標系に対して静止している外観を作成し、仮想現実システムは、プロセッサと、プロセッサに結合され、プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、プロセッサに結合され、プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み、プログラムメモリは、ａ）仮想空間内に全身アバターを作成するためのプログラムコードであって、全身アバターは、センサによって検知された複数のユーザ身体部分の移動に対応する全身アバターの移動を表すのに十分な複数のアバター身体部分に対応する、プログラムコードと、ｂ）複数のアバター身体部分のうちの１つ以上のものに関して定義された関節的制約および物理的制約に従って、かつ複数のユーザ身体部分のうちの１つ以上の検知された移動に従って、複数のアバター身体部分のうちの１つ以上の移動および／または位置を判定するためのプログラムコードと、を含む。
【０１１３】
複数のアバター身体部分は、頭、首、背中、骨盤、腰、膝、足首、足、肩、肘、手首、および手を含み得る。関節的制約は、アバター身体部分の階層ツリーグラフ構造によって定義され得、グラフの端部は、２つのアバター身体部分間の関節に対応し、各関節は、ソケット関節、ヒンジ関節、またはユニバーサル関節を含む。仮想現実システムは、較正データから判定され、較正データは、複数のユーザ身体部分の対応する部分の実際のサイズの推定値に対応するアバター身体部分のサイズと、ユーザの特定のポーズを要求するためのプログラムコードと、ユーザが特定のポーズにあるときに、センサデータを記録するためのプログラムコードと、センサデータに基づいて、アバター身体部分に対するサイズを計算するためのプログラムコードと、アバター身体部分をアニメーション化する際に使用するためのアバター身体部分のサイズとして、計算されたサイズを記憶するためのプログラムコードと、を有し得る。
【０１１４】
仮想現実システムは、ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供することができ、視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、視覚的出力は、ユーザの頭の移動と共に変化して、仮想空間の仮想座標系が、ユーザの現実世界の座標系に対して静止している外観を作成する。仮想現実システムは、プロセッサと、プロセッサに結合され、プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、プロセッサに結合され、プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み得る。プログラムメモリは、ａ）センサデータに基づいて、ユーザの手の軌跡を計算するためのプログラムコードと、ｂ）ユーザの手の軌跡に対応する仮想空間内の仮想手の場所を判定するためのプログラムコードと、ｃ）仮想手の軌跡をユーザの手の軌跡と一致させることが仮想空間の制約に違反するかどうかを判定するためのプログラムコードと、ｄ）仮想手の場所における仮想手の表現、および制約のない位置における仮想手の別個の表現を表示するためのプログラムコードであって、制約されていない位置は、仮想手が、仮想空間の制約が取り除かれた状態で、ユーザの手の軌跡と位置合わせされている場合に、仮想空間内に存在しているであろう位置である、プログラムコードと、を含み得る。
【０１１５】
仮想空間の制約は、固体オブジェクトが他の固体オブジェクトを貫通することができないという制約であり得る。別個の表現は、カメラ位置と制約されていない位置との間にある仮想空間の任意の介在オブジェクトを通して半透明かつ可視的に示される、制約されていない位置における仮想手の表現であり得る。
【０１１６】
仮想現実システムは、ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供し得、視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、視覚的出力は、ユーザの頭の移動と共に変化して、仮想空間の仮想座標系が、ユーザの現実世界の座標系に対して静止している外観を作成する。仮想現実システムは、プロセッサと、プロセッサに結合され、プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、プロセッサに結合され、プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み得る。プログラムメモリは、ａ）アバター身体部分に対する仮想力を判定するためのプログラムコードと、ｂ）視覚的出力において、ユーザの一人称視点からのアバター身体部分を提示するためのプログラムコードであって、一人称視点において、仮想空間のシーンがレンダリングされるカメラ位置は、アバターの頭の目の位置と位置合わせされている、プログラムコードと、ｃ）仮想力がアバターの頭を閾値量を超えて移動させるかどうかを判定するためのプログラムコードと、ｄ）カメラ位置およびアバターの頭の目の位置をリンク解除するためのプログラムコードと、を含み得る。
【０１１７】
仮想現実システムは、アバター身体部分がカメラ視野内にあるときに、視覚的出力において、アバター身体部分を表示するためのプログラムコード、および／またはカメラ位置およびアバターの頭の目の位置を再位置合わせし、再リンクするためのプログラムコードを含み得る。
【０１１８】
再位置合わせすることは、連続プロセス、またはカメラ位置の非連続移動を伴う段階的プロセスであり得る。
【０１１９】
仮想現実システムは、ユーザによって視認可能であるデバイス上に少なくとも視覚的出力を提供し得、視覚的出力は、カメラ位置およびカメラアングルからの仮想空間のコンピュータ生成図であり、視覚的出力は、ユーザの頭の移動と共に変化して、仮想空間の仮想座標系が、ユーザの現実世界の座標系に対して静止している外観を作成する。仮想現実システムは、プロセッサと、プロセッサに結合され、プロセッサによる実行のためのプログラム命令を含む、プログラムメモリと、プロセッサに結合され、プロセッサによってアクセス可能なデータを記憶するためのデータメモリと、現実世界の座標系における複数のユーザ身体部分の位置を検知するためのセンサと、を含み得、プログラムメモリは、ａ）取り付け条件が存在するかどうかを判定するためのプログラムコードと、ｂ）アバターキャラクタモデルを修正して、手と把持されたオブジェクトとの間に新しい関節を挿入するためのプログラムコードと、ｃ）切り離し条件が存在するかどうかを判定するためのプログラムコードと、ｄ）アバターキャラクタモデルを修正して、手と把持されたオブジェクトとの間の新しい関節を削除するためのプログラムコードと、を含む。
【０１２０】
本明細書で引用した刊行物、特許出願、および特許を含むすべての参考文献は、あたかも各参考文献が個別におよび具体的に参照により組み込まれることが示され、その全体が本明細書に記載されるのと同程度に参照により本明細書に組み込まれる。
【図１】
2020502709.tif 000003
【図２】
2020502709.tif 000004
【図３】
2020502709.tif 000005
【図４】
2020502709.tif 000006
【図５】
2020502709.tif 000007
【図６】
2020502709.tif 000008
【図７】
2020502709.tif 000009
【図８】
2020502709.tif 000010
【国際調査報告】
2020502709.tif 000011
2020502709.tif 000012