(57)【特許請求の範囲】
【請求項１】
以下の工程を含む、仮想世界内の一つまたは複数のアバターについての位置移動情報を伝えるための方法：
処理手段により、第1のアバターについての位置移動情報を報告するための格子分解能を決定する工程であって、該格子分解能が、異なる格子分解能を有する複数の格子の中から一つの格子を選択することに基づくものであり、各格子が仮想世界に対応する、工程;
処理手段により、第1のアバターの位置移動情報を、選択された格子内の該アバターの現在位置と選択された格子内の該アバターの前の位置とを比較することにより決定する工程;および
伝送手段により、第1のアバターの位置移動情報をクライアントに伝送する工程。
【請求項２】
選択された格子が、仮想世界における第1のアバターと第2のアバターとの間の距離に基づいて選択されており、該第2のアバターが、位置移動情報の伝送先のクライアントに対応する、請求項1記載の方法。
【請求項３】
格子を選択することが、
距離が高分解能範囲閾値を下回るかどうかを決定する工程;
距離が高分解能範囲閾値以下であると決定したことに応答して、第1の分解能を有する第1の格子を選択する工程;および
距離が高分解能範囲閾値を上回ると決定したことに応答して、第1の分解能より低い第2の分解能を有する第2の格子を選択する工程
を含む、
請求項2記載の方法。
【請求項４】
位置移動情報を決定する工程が、選択された格子内の第1のアバターについての移動オフセットを生成することを含む、請求項1記載の方法。
【請求項５】
処理手段により、決定された格子分解能に基づいて、位置移動情報を表すビットコードを生成する工程をさらに含む、請求項1記載の方法。
【請求項６】
処理手段により、位置移動情報を伝送するのに用いる時間分解能を決定する工程;および
処理手段により、決定された時間分解能に基づいて位置移動情報の伝送をスケジュール設定する工程
をさらに含む、請求項1記載の方法。
【請求項７】
処理手段により、第2のアバターについての位置移動情報を報告するための第2の格子分解能を決定する工程であって、第2の格子分解能が、複数の格子の中から第2の格子を選択することに基づくものである、工程;
処理手段により、第2のアバターの位置移動情報を、第2の選択された格子内の第2のアバターの現在位置と第2の選択された格子内の第2のアバターの前の位置とを比較することにより決定する工程;および
伝送手段により、第2のアバターの位置移動情報をクライアントに伝送する工程
をさらに含む、請求項1記載の方法。
【請求項８】
クライアントに伝送する工程が、位置移動情報を、複数のアバターの位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送することを含む、方法であって、
処理手段により、対応する2つ以上のアバターのセットの位置に変更がないことを示す2つ以上の連続するビットコードのセットを特定する工程;および
処理手段により、該2つ以上の連続するビットコードのセットを短縮ビットコードへと圧縮する工程
をさらに含む、請求項1記載の方法。
【請求項９】
格子を選択することが、
分解能範囲を特定する工程;
クライアントに対応する第2のアバターから分解能範囲内にあるアバターの数を決定する工程;
分解能範囲内のアバターの数がアバター閾値を上回るかどうかを決定する工程;および
分解能範囲内のアバターの数がアバター閾値を上回ると決定したことに応答して、該分解能範囲内の該アバターの数が該アバター閾値内になるまで該分解能範囲を変更する工程
を含む、
請求項1記載の方法。
【請求項１０】
分解能範囲内のアバターについての位置移動情報が、選択された格子に基づいて報告され、かつ分解能範囲外のアバターの位置移動情報が、第1の格子より低い分解能を有する第2の格子に基づいて報告される、請求項9記載の方法。
【請求項１１】
位置移動情報が、複数のアバターについての位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送される、請求項1記載の方法。
【請求項１２】
複数のアバターについての位置移動情報が、前の伝送においてクライアントに提供された過去の位置移動情報の分解能および種類に従って伝送ストリームにおいてソートされる、請求項11記載の方法。
【請求項１３】
複数のアバターが、仮想世界内のすべてのアバターを含む、請求項11記載の方法。
【請求項１４】
以下の工程を含む、仮想世界内の複数のアバターについての位置情報を提供するための方法：
処理手段により、仮想世界内のすべてのアバターを含む該仮想世界内の複数のアバターのそれぞれの現在位置を仮想世界サーバで決定する工程;
処理手段により、仮想世界に対応する第1の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第1の位置オフセットデータを生成する工程;
処理手段により、仮想世界に対応する第2の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第2の位置オフセットデータを生成する工程であって、第1の格子と第2の格子は異なる分解能を有する、工程;
処理手段により、複数のアバターのそれぞれについて、第1の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程;および
伝送手段により、複数のアバターの少なくともすべてについての選択された位置オフセットデータを、第1の仮想世界クライアント機器に伝送する工程。
【請求項１５】
処理手段により、複数のアバターのそれぞれについて、第2の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程であって、第2の仮想世界クライアント機器に伝送するために選択された位置オフセットデータは、第1の仮想世界クライアント機器に伝送するために選択された位置オフセットデータとは異なる、工程;および
伝送手段により、第2の仮想世界クライアント機器に、該第2の仮想世界クライアント機器に対応するアバターを除く複数のアバターの少なくともすべてについての選択された位置オフセットデータを伝送する工程
をさらに含む、請求項14記載の方法。
【請求項１６】
各位置オフセットデータがビットコードを含み、かつ該ビットコードの形式がアバターの位置変更の種類に基づくものである、請求項14記載の方法。
【請求項１７】
仮想世界が3次元の仮想世界であり、かつアバターの位置変更の種類が、該仮想世界におけるアバターの垂直の位置変更を含む、請求項16記載の方法。
【請求項１８】
位置変更の種類が、移動なしを含む、請求項16記載の方法。
【請求項１９】
処理手段により、第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していたかどうかを決定する工程;
処理手段により、第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していなかったと決定したことに応答して、第1の仮想世界クライアント機器が位置オフセットデータを最後に受信して以来のアバター移動に基づく個別仕様の位置オフセットデータのセットを生成する工程;および
伝送手段により、個別仕様の位置データのセットを第1の仮想世界クライアント機器に伝送する工程
をさらに含む、請求項14記載の方法。
【請求項２０】
個別仕様の位置オフセットデータのセットが、複数のアバターのそれぞれについてのデフォルトである前の位置に基づいて生成される、請求項19記載の方法。
【請求項２１】
受信手段により、仮想世界クライアント機器において、仮想世界内の複数のアバターについての位置オフセット情報を受信する工程;
位置オフセット情報が受信されているアバターごとに、
処理手段により、位置オフセット情報の分解能を決定する工程;および
処理手段により、決定された分解能に基づいて、受信された位置オフセット情報を適用し、該位置オフセット情報に対応するアバターの新しい位置を決定する工程
を含む方法であって、
第1のアバターに対応する位置オフセット情報が第1の分解能で受信され、かつ第2のアバターに対応する位置オフセット情報が第2の分解能で受信される、
方法。
【請求項２２】
複数のアバターが、仮想世界内のすべてのアバターを含む、請求項21記載の方法。
【請求項２３】
処理手段により、受信されたビットコードに基づいて、第3のアバターに対応する位置オフセット情報が第1の分解能から第2の分解能へと変更されていると決定する工程をさらに含む、請求項21記載の方法。
【請求項２４】
第1の分解能が第2の分解能より低い、方法であって、
処理手段により、受信されたビットコードと共に受信された追加の精密情報を使って第3のアバターの位置を決定する工程をさらに含む、請求項23記載の方法。
【請求項２５】
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報のセットの分解能に基づいてソートされる、請求項22記載の方法。
【請求項２６】
複数のアバターの位置オフセット情報がさらに、直前に受信された位置オフセット情報において示された位置変更の種類に基づいてソートされる、請求項25記載の方法。
【請求項２７】
一つまたは複数のプロセッサ;
一つまたは複数のネットワークインターフェース;および
実行可能命令を記憶するコンピュータメモリ
を含む仮想世界サーバシステムであって、
該実行可能命令は、一つまたは複数のプロセッサにより実行されると、一つまたは複数のネットワークインターフェースを介して仮想世界サーバシステムと通信する一つまたは複数のクライアント機器に、仮想世界内の一つまたは複数のアバターについての位置移動情報を伝えるための方法を実行し、該方法が、
第1のアバターについての位置移動情報を報告するための格子分解能を決定する工程であって、該格子分解能が、異なる格子分解能を有する複数の格子の中から一つの格子を選択することに基づくものであり、各格子が仮想世界に対応する、工程;
第1のアバターの位置移動情報を、選択された格子内の該アバターの現在位置と選択された格子内の該アバターの前の位置とを比較することにより決定する工程;および
第1のアバターの位置移動情報をクライアントに伝送する工程
を含む、
仮想世界サーバシステム。
【請求項２８】
選択された格子が、仮想世界における第1のアバターと第2のアバターとの間の距離に基づいて選択されており、第2のアバターが、位置移動情報の伝送先のクライアントに対応する、請求項27記載のシステム。
【請求項２９】
格子を選択することが、
距離が高分解能範囲閾値を下回るかどうかを決定する工程;
距離が高分解能範囲閾値以下であると決定したことに応答して、第1の分解能を有する第1の格子を選択する工程;および
距離が高分解能範囲閾値を上回ると決定したことに応答して、第1の分解能より低い第2の分解能を有する第2の格子を選択する工程
を含む、
請求項28記載のシステム。
【請求項３０】
位置移動情報を決定する工程が、選択された格子内の第1のアバターについての移動オフセットを生成することを含む、請求項27記載のシステム。
【請求項３１】
前記方法が、決定された格子分解能に基づいて、位置移動情報を表すビットコードを生成する工程をさらに含む、請求項27記載のシステム。
【請求項３２】
前記方法が、
位置移動情報を伝送するのに用いる時間分解能を決定する工程;および
決定された時間分解能に基づいて位置移動情報の伝送をスケジュール設定する工程
をさらに含む、
請求項27記載のシステム。
【請求項３３】
前記方法が、
第2のアバターについての位置移動情報を報告するための第2の格子分解能を決定する工程であって、第2の格子分解能が、複数の格子の中から第2の格子を選択することに基づくものである、工程;
第2のアバターの位置移動情報を、第2の選択された格子内の第2のアバターの現在位置と第2の選択された格子内の第2のアバターの前の位置とを比較することにより決定する工程;および
第2のアバターの位置移動情報をクライアントに伝送する工程
をさらに含む、
請求項27記載のシステム。
【請求項３４】
クライアントに伝送する工程が、位置移動情報を、複数のアバターの位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送することを含み、かつ前記方法が、
対応する2つ以上のアバターのセットの位置に変更がないことを示す一つまたは複数の連続するビットコードのセットを特定する工程;および
該一つまたは複数の連続するビットコードのセットをランレングス符号化ビットコードで置き換える工程
をさらに含む、
請求項27記載のシステム。
【請求項３５】
格子を選択することが、
分解能範囲を特定する工程;
クライアントに対応する第2のアバターから分解能範囲内にあるアバターの数を決定する工程;
分解能範囲内のアバターの数がアバター閾値を上回るかどうかを決定する工程;および
分解能範囲内のアバターの数がアバター閾値を上回ると決定したことに応答して、該分解能範囲内の該アバターの数が該アバター閾値内になるまで該分解能範囲を変更する工程
を含む、
請求項27記載のシステム。
【請求項３６】
分解能範囲内のアバターについての位置移動情報が、選択された格子に基づいて報告され、かつ分解能範囲外のアバターの位置移動情報が、第1の格子より低い分解能を有する第2の格子に基づいて報告される、請求項35記載のシステム。
【請求項３７】
位置移動情報が、複数のアバターについての位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送され、該複数のアバターについての該位置移動情報が、前の送信においてクライアントに提供された過去の位置移動情報の分解能に従って該伝送ストリームにおいてソートされる、請求項27記載のシステム。
【請求項３８】
一つまたは複数のプロセッサ;
一つまたは複数のネットワークインターフェース;および
実行可能命令を記憶するコンピュータメモリ
を含む仮想世界サーバシステムであって、
該実行可能命令は、一つまたは複数のプロセッサにより実行されると、仮想世界内の複数のアバターについての位置情報を提供するための方法を実行し、該方法が、
仮想世界内のすべてのアバターを含む該仮想世界内の複数のアバターのそれぞれの現在位置を決定する工程;
仮想世界に対応する第1の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、複数のアバターのそれぞれについての第1の位置オフセットデータを生成する工程;
仮想世界に対応する第2の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第2の位置オフセットデータを生成する工程であって、第1の格子と第2の格子は異なる分解能を有する、工程;
複数のアバターのそれぞれについて、第1の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程;および
複数のアバターの少なくともすべてについての選択された位置オフセットデータを、第1の仮想世界クライアント機器に伝送する工程
を含む、
仮想世界サーバシステム。
【請求項３９】
前記方法が、
複数のアバターのそれぞれについて、第2の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程であって、第2の仮想世界クライアント機器に伝送するために選択された位置オフセットデータは、第1の仮想世界クライアント機器に伝送するために選択された位置オフセットデータとは異なる、工程;および
第2の仮想世界クライアント機器に、該第2の仮想世界クライアント機器に対応するアバター以外の複数のアバターの少なくともすべてについての選択された位置オフセットデータを伝送する工程
をさらに含む、
請求項38記載のシステム。
【請求項４０】
各位置オフセットデータがビットコードを含み、かつ該ビットコードの形式がアバターの位置変更の種類に基づくものである、請求項38記載のシステム。
【請求項４１】
各ビットコードがプレフィックス符号化方式に従う、請求項40記載のシステム。
【請求項４２】
位置変更の種類が、移動なしを含む、請求項40記載のシステム。
【請求項４３】
前記方法が、
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していたかどうかを決定する工程;
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していなかったと決定したことに応答して、第1の仮想世界クライアント機器が位置オフセットデータを最後に受信して以来のアバター移動に基づく個別仕様の位置オフセットデータのセットを生成する工程;および
個別仕様の位置データのセットを第1の仮想世界クライアント機器に伝送する工程
をさらに含む、
請求項38記載のシステム。
【請求項４４】
個別仕様の位置オフセットデータのセットが、複数のアバターのそれぞれについてのデフォルトである前の位置に基づいて生成される、請求項43記載のシステム。
【請求項４５】
実行可能命令を記憶する一つまたは複数の物理コンピュータメモリであって、
該実行可能命令は、仮想世界クライアント機器により実行されると、アバター位置情報を受信するための方法を実行し、該方法は、
仮想世界内の複数のアバターについての位置オフセット情報を受信する工程;
位置オフセット情報が受信されているアバターごとに、
位置オフセット情報の分解能を決定する工程;および
決定された分解能に基づいて、受信された位置オフセット情報を適用し、該位置オフセット情報に対応するアバターの新しい位置を決定する工程
を含み、
第1のアバターに対応する位置オフセット情報が第1の分解能で受信され、かつ第2のアバターに対応する位置オフセット情報が第2の分解能で受信される、
コンピュータメモリ。
【請求項４６】
複数のアバターが、仮想世界内のすべてのアバターを含む、請求項45記載のコンピュータメモリ。
【請求項４７】
前記方法が、
受信されたビットコードに基づいて、第3のアバターに対応する位置オフセット情報が第1の分解能から第2の分解能へと変更されていると決定する工程
をさらに含む、
請求項45記載のコンピュータメモリ。
【請求項４８】
第1の分解能が第2の分解能より低く、前記方法が、受信されたビットコードと共に受信された追加の精密情報を使って第3のアバターの位置を決定する工程をさらに含む、請求項47記載のコンピュータメモリ。
【請求項４９】
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報のセットの分解能に基づいて少なくとも一部ソートされる、請求項46記載のコンピュータメモリ。
【請求項５０】
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報において示される位置変更の種類に基づいて少なくとも一部ソートされる、請求項46記載のコンピュータメモリ。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
仮想世界は、複数の個人が共有体験に一緒に参加することのできるグラフィックで表現されたシミュレート環境を提供する。例えば、仮想世界は、架空のゲーム環境、実世界の場所および周囲状況、ならびに現実の活動および相互作用をシミュレートするのに使用されてきた。典型的には、ユーザは、複数のクライアントに対応するデータを調整し、管理する仮想世界サーバとのインターフェースをとりながら、ユーザ自身のコンピュータまたは他の機器上でクライアントアプリケーションまたはモジュールを操作することができる。
【０００２】
仮想世界の作成および管理の一局面は当該環境内のユーザ位置の追跡および識別である。特に、あるキャラクタまたは（アバターにより表される）ユーザの位置は、一般に、他のキャラクタまたはユーザのクライアントが位置決めに基づいてアバターをグラフィックで描画し、適切に位置決めされたアバター間のやりとりを可能にし得るように、他のキャラクタまたはユーザへと一斉同報する必要がある。これによりユーザが仮想世界において目に見える近接範囲内にいる他のユーザを見ることが可能になり、またクライアントアプリケーションがユーザのディスプレイ上に他のアバターをいつレンダリングすべきかを決定することも可能になる。場合によっては、仮想世界が同時に何十万（あるいはそれ以上）ものユーザを含むこともある。したがって、各アバターの位置を伝送するのに必要とされる帯域幅の量は相当な大きさになり得る。
【０００３】
どのアバター位置を所与のクライアントに伝送すべきかを決定するための公知の一方法が、どちらもLeahyらに特許された、米国特許第7,181,690号明細書（「Leahy '690」）（特許文献1）および米国特許第7,493,558号明細書（「Leahy '558」）（特許文献2）に記載されている。Leahy '690とLeahy '558のどちらにおいても、サーバは、ユーザの場所に最も近いN個のアバターとそれらのアバターの位置のリストを決定し、そのような情報をユーザのクライアントソフトウェアに伝送するように構成される。Leahyにおいては、ユーザの場所に最も近いN個のアバターのリストは、仮想世界を占有するすべてのユーザより少ないユーザを表し得る。しかし、そのような解決策は好ましくない。というのは、ユーザは遠方のユーザについて全く何も知らず、このことにより、ユーザが、遠方に位置する友人を位置決めすること、仮想世界内の静かな領域を見つけて相対的に孤立した状態で何らかの行動を取ること、あるいは、仮想世界内の混雑した領域を位置決めして多くの他のユーザと対話することが難しくなるからである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第7,181,690号
【特許文献２】米国特許第7,493,558号
【発明の概要】
【０００５】
簡単な概要
本概要は、以下の詳細な説明においてさらに説明するいくつかの概念を簡略化した形で提示するためのものである。本概要は、特許請求される主題の主要な特徴または不可欠な特徴を特定するためのものではなく、特許請求される主題の範囲を限定するのに使用するためのものでもない。
【０００６】
本明細書において説明する一つまたは複数の局面は、仮想世界におけるアバターの位置情報の伝送に関するものである。例えば仮想世界システムは、第1のアバターについての位置移動情報を報告するための格子分解能を決定するように構成することができ、その場合格子分解能は、異なる格子分解能を有する複数の格子の中から一つの格子を選択することに基づくものであり、各格子は当該仮想世界に対応する。次いで仮想世界システムは、選択された格子内のアバターの現在位置と、選択された格子内のアバターの前の位置とを比較することにより第1のアバターの位置移動情報を決定し、次いで仮想世界システムに接続されたクライアントへと第1のアバターの位置移動情報を伝送することができる。
【０００７】
本明細書において説明する他の局面によれば、仮想世界サーバは仮想世界内の複数のアバターのそれぞれの現在位置を決定することができ、その場合複数のアバターは仮想世界内のすべてのアバターを含む。次いで仮想世界サーバは、仮想世界に対応する第1の格子における複数のアバターのそれぞれの対応する前の位置と比較した複数のアバターのそれぞれの現在位置に基づいて、複数のアバターのそれぞれについての第1の位置オフセットデータを生成し、仮想世界に対応する第2の格子における複数のアバターのそれぞれの対応する前の位置と比べた複数のアバターのそれぞれの現在位置に基づいて、複数のアバターのそれぞれについての第2の位置オフセットデータを生成することができる。第1の格子と第2の格子は異なる分解能を有する。次いで仮想世界サーバは、複数のアバターのそれぞれについて、第1の仮想世界クライアント機器に伝送するために第1の位置オフセットデータおよび第2の位置オフセットデータのうちの一つだけを選択し、複数のアバターの少なくともすべてについての選択された位置オフセットデータを、第1の仮想世界クライアント機器に伝送する。
【０００８】
別の局面によれば、高分解能範囲/閾値を、特定のアバターの位置から高分解能範囲内に存在するアバターの数に基づいて変更することができる。例えば、高分解能範囲内のアバターの数がアバター閾値を上回る場合、高分解能範囲は、アバターの数がアバター閾値以下になるまで縮小することができ、次いでシステムは、高分解能範囲内のアバターについての位置情報を送信するときには高分解能のビットコードを、高分解能範囲外のアバターについての位置情報を送信するときには低分解能のビットコードを使用することができる。
【０００９】
別の局面によれば、ビットコードを伝送ストリームへと書式設定することができる。加えて、または代替として、ある特定の種類（例えば静止アバターなど）の連続するビットコードを、ランレングス符号化（RLE:run length encoding）を使って短縮ビットコードへと圧縮することもできる。例えば、100個の連続する静止アバターについての位置変更情報を、100個すべての静止アバターを表す単一の11ビットRLEビットコードに圧縮することができる。
【００１０】
別の局面によれば、アバターごとの低分解能の位置ビットコードと高分解能の位置ビットコードの一つの対を、処理時間を短縮するために仮想世界システムは事前に生成することができる。仮想世界システムは、前の更新において受信側クライアントに報告された位置情報の種類に基づいて、高分解能の位置情報および低分解能の位置情報の中から選択することができる。クライアントによっては、当該クライアントが一つまたは複数の他のアバターについての最新の位置情報をもたない場合には、ビットコードがオンザフライで生成されてもよい。
【００１１】
本明細書において説明する他の局面によれば、受信側クライアント機器は、仮想世界内の複数のアバターについての位置オフセット情報を受信することができる。位置オフセット情報が受信されているアバターごとに、クライアント機器は位置オフセット情報の分解能を決定し、決定した分解能に基づいて、受信された位置オフセット情報を適用し、位置オフセット情報に対応するアバターの新しい位置を決定する。第1のアバターに対応する位置オフセット情報は第1の分解能で受信され、第2のアバターに対応する位置オフセット情報は第2の分解能で受信される。
以下に、本発明の基本的な諸特徴および種々の態様を列挙する。
［１］
以下の工程を含む、仮想世界内の一つまたは複数のアバターについての位置移動情報を伝えるための方法：
第1のアバターについての位置移動情報を報告するための格子分解能を決定する工程であって、該格子分解能が、異なる格子分解能を有する複数の格子の中から一つの格子を選択することに基づくものであり、各格子が仮想世界に対応する、工程;
第1のアバターの位置移動情報を、選択された格子内の該アバターの現在位置と選択された格子内の該アバターの前の位置とを比較することにより決定する工程;および
第1のアバターの位置移動情報をクライアントに伝送する工程。
［２］
選択された格子が、仮想世界における第1のアバターと第2のアバターとの間の距離に基づいて選択されており、該第2のアバターが、位置移動情報の伝送先のクライアントに対応する、［1］記載の方法。
［３］
格子を選択することが、
距離が高分解能範囲閾値を下回るかどうかを決定する工程;
距離が高分解能範囲閾値以下であると決定したことに応答して、第1の分解能を有する第1の格子を選択する工程;および
距離が高分解能範囲閾値を上回ると決定したことに応答して、第1の分解能より低い第2の分解能を有する第2の格子を選択する工程
を含む、
［2］記載の方法。
［４］
位置移動情報を決定する工程が、選択された格子内の第1のアバターについての移動オフセットを生成することを含む、［1］記載の方法。
［５］
決定された格子分解能に基づいて、位置移動情報を表すビットコードを生成する工程をさらに含む、［1］記載の方法。
［６］
位置移動情報を伝送するのに用いる時間分解能を決定する工程;および
決定された時間分解能に基づいて位置移動情報の伝送をスケジュール設定する工程
をさらに含む、［1］記載の方法。
［７］
第2のアバターについての位置移動情報を報告するための第2の格子分解能を決定する工程であって、第2の格子分解能が、複数の格子の中から第2の格子を選択することに基づくものである、工程;
第2のアバターの位置移動情報を、第2の選択された格子内の第2のアバターの現在位置と第2の選択された格子内の第2のアバターの前の位置とを比較することにより決定する工程;および
第2のアバターの位置移動情報をクライアントに伝送する工程
をさらに含む、［1］記載の方法。
［８］
クライアントに伝送する工程が、位置移動情報を、複数のアバターの位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送することを含む、方法であって、
対応する2つ以上のアバターのセットの位置に変更がないことを示す2つ以上の連続するビットコードのセットを特定する工程;および
該2つ以上の連続するビットコードのセットを短縮ビットコードへと圧縮する工程
をさらに含む、［1］記載の方法。
［９］
格子を選択することが、
分解能範囲を特定する工程;
クライアントに対応する第2のアバターから分解能範囲内にあるアバターの数を決定する工程;
分解能範囲内のアバターの数がアバター閾値を上回るかどうかを決定する工程;および
分解能範囲内のアバターの数がアバター閾値を上回ると決定したことに応答して、該分解能範囲内の該アバターの数が該アバター閾値内になるまで該分解能範囲を変更する工程
を含む、
［1］記載の方法。
［１０］
分解能範囲内のアバターについての位置移動情報が、選択された格子に基づいて報告され、かつ分解能範囲外のアバターの位置移動情報が、第1の格子より低い分解能を有する第2の格子に基づいて報告される、［9］記載の方法。
［１１］
位置移動情報が、複数のアバターについての位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送される、［1］記載の方法。
［１２］
複数のアバターについての位置移動情報が、前の伝送においてクライアントに提供された過去の位置移動情報の分解能および種類に従って伝送ストリームにおいてソートされる、［11］記載の方法。
［１３］
複数のアバターが、仮想世界内のすべてのアバターを含む、［11］記載の方法。
［１４］
以下の工程を含む、仮想世界内の複数のアバターについての位置情報を提供するための方法：
仮想世界内のすべてのアバターを含む該仮想世界内の複数のアバターのそれぞれの現在位置を仮想世界サーバで決定する工程;
仮想世界に対応する第1の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第1の位置オフセットデータを生成する工程;
仮想世界に対応する第2の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第2の位置オフセットデータを生成する工程であって、第1の格子と第2の格子は異なる分解能を有する、工程;
複数のアバターのそれぞれについて、第1の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程;および
複数のアバターの少なくともすべてについての選択された位置オフセットデータを、第1の仮想世界クライアント機器に伝送する工程。
［１５］
複数のアバターのそれぞれについて、第2の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程であって、第2の仮想世界クライアント機器に伝送するために選択された位置オフセットデータは、第1の仮想世界クライアント機器に伝送するために選択された位置オフセットデータとは異なる、工程;および
第2の仮想世界クライアント機器に、該第2の仮想世界クライアント機器に対応するアバターを除く複数のアバターの少なくともすべてについての選択された位置オフセットデータを伝送する工程
をさらに含む、［14］記載の方法。
［１６］
各位置オフセットデータがビットコードを含み、かつ該ビットコードの形式がアバターの位置変更の種類に基づくものである、［14］記載の方法。
［１７］
仮想世界が3次元の仮想世界であり、かつアバターの位置変更の種類が、該仮想世界におけるアバターの垂直の位置変更を含む、［16］記載の方法。
［１８］
位置変更の種類が、移動なしを含む、［16］記載の方法。
［１９］
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していたかどうかを決定する工程;
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していなかったと決定したことに応答して、第1の仮想世界クライアント機器が位置オフセットデータを最後に受信して以来のアバター移動に基づく個別仕様の位置オフセットデータのセットを生成する工程;および
個別仕様の位置データのセットを第1の仮想世界クライアント機器に伝送する工程
をさらに含む、［14］記載の方法。
［２０］
個別仕様の位置オフセットデータのセットが、複数のアバターのそれぞれについてのデフォルトである前の位置に基づいて生成される、［19］記載の方法。
［２１］
仮想世界クライアント機器において、仮想世界内の複数のアバターについての位置オフセット情報を受信する工程;
位置オフセット情報が受信されているアバターごとに、
位置オフセット情報の分解能を決定する工程;および
決定された分解能に基づいて、受信された位置オフセット情報を適用し、該位置オフセット情報に対応するアバターの新しい位置を決定する工程
を含む方法であって、
第1のアバターに対応する位置オフセット情報が第1の分解能で受信され、かつ第2のアバターに対応する位置オフセット情報が第2の分解能で受信される、
方法。
［２２］
複数のアバターが、仮想世界内のすべてのアバターを含む、［21］記載の方法。
［２３］
受信されたビットコードに基づいて、第3のアバターに対応する位置オフセット情報が第1の分解能から第2の分解能へと変更されていると決定する工程をさらに含む、［21］記載の方法。
［２４］
第1の分解能が第2の分解能より低い、方法であって、
受信されたビットコードと共に受信された追加の精密情報を使って第3のアバターの位置を決定する工程をさらに含む、［23］記載の方法。
［２５］
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報のセットの分解能に基づいてソートされる、［22］記載の方法。
［２６］
複数のアバターの位置オフセット情報がさらに、直前に受信された位置オフセット情報において示された位置変更の種類に基づいてソートされる、［25］記載の方法。
［２７］
一つまたは複数のプロセッサ;
一つまたは複数のネットワークインターフェース;および
実行可能命令を記憶するコンピュータメモリ
を含む仮想世界サーバシステムであって、
該実行可能命令は、一つまたは複数のプロセッサにより実行されると、一つまたは複数のネットワークインターフェースを介して仮想世界サーバシステムと通信する一つまたは複数のクライアント機器に、仮想世界内の一つまたは複数のアバターについての位置移動情報を伝えるための方法を実行し、該方法が、
第1のアバターについての位置移動情報を報告するための格子分解能を決定する工程であって、該格子分解能が、異なる格子分解能を有する複数の格子の中から一つの格子を選択することに基づくものであり、各格子が仮想世界に対応する、工程;
第1のアバターの位置移動情報を、選択された格子内の該アバターの現在位置と選択された格子内の該アバターの前の位置とを比較することにより決定する工程;および
第1のアバターの位置移動情報をクライアントに伝送する工程
を含む、
仮想世界サーバシステム。
［２８］
選択された格子が、仮想世界における第1のアバターと第2のアバターとの間の距離に基づいて選択されており、第2のアバターが、位置移動情報の伝送先のクライアントに対応する、［27］記載のシステム。
［２９］
格子を選択することが、
距離が高分解能範囲閾値を下回るかどうかを決定する工程;
距離が高分解能範囲閾値以下であると決定したことに応答して、第1の分解能を有する第1の格子を選択する工程;および
距離が高分解能範囲閾値を上回ると決定したことに応答して、第1の分解能より低い第2の分解能を有する第2の格子を選択する工程
を含む、
［28］記載のシステム。
［３０］
位置移動情報を決定する工程が、選択された格子内の第1のアバターについての移動オフセットを生成することを含む、［27］記載のシステム。
［３１］
前記方法が、決定された格子分解能に基づいて、位置移動情報を表すビットコードを生成する工程をさらに含む、［27］記載のシステム。
［３２］
前記方法が、
位置移動情報を伝送するのに用いる時間分解能を決定する工程;および
決定された時間分解能に基づいて位置移動情報の伝送をスケジュール設定する工程
をさらに含む、
［27］記載のシステム。
［３３］
前記方法が、
第2のアバターについての位置移動情報を報告するための第2の格子分解能を決定する工程であって、第2の格子分解能が、複数の格子の中から第2の格子を選択することに基づくものである、工程;
第2のアバターの位置移動情報を、第2の選択された格子内の第2のアバターの現在位置と第2の選択された格子内の第2のアバターの前の位置とを比較することにより決定する工程;および
第2のアバターの位置移動情報をクライアントに伝送する工程
をさらに含む、
［27］記載のシステム。
［３４］
クライアントに伝送する工程が、位置移動情報を、複数のアバターの位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送することを含み、かつ前記方法が、
対応する2つ以上のアバターのセットの位置に変更がないことを示す一つまたは複数の連続するビットコードのセットを特定する工程;および
該一つまたは複数の連続するビットコードのセットをランレングス符号化ビットコードで置き換える工程
をさらに含む、
［27］記載のシステム。
［３５］
格子を選択することが、
分解能範囲を特定する工程;
クライアントに対応する第2のアバターから分解能範囲内にあるアバターの数を決定する工程;
分解能範囲内のアバターの数がアバター閾値を上回るかどうかを決定する工程;および
分解能範囲内のアバターの数がアバター閾値を上回ると決定したことに応答して、該分解能範囲内の該アバターの数が該アバター閾値内になるまで該分解能範囲を変更する工程
を含む、
［27］記載のシステム。
［３６］
分解能範囲内のアバターについての位置移動情報が、選択された格子に基づいて報告され、かつ分解能範囲外のアバターの位置移動情報が、第1の格子より低い分解能を有する第2の格子に基づいて報告される、［35］記載のシステム。
［３７］
位置移動情報が、複数のアバターについての位置移動情報に対応する複数のビットコードを含む伝送ストリームにおいて伝送され、該複数のアバターについての該位置移動情報が、前の送信においてクライアントに提供された過去の位置移動情報の分解能に従って該伝送ストリームにおいてソートされる、［27］記載のシステム。
［３８］
一つまたは複数のプロセッサ;
一つまたは複数のネットワークインターフェース;および
実行可能命令を記憶するコンピュータメモリ
を含む仮想世界サーバシステムであって、
該実行可能命令は、一つまたは複数のプロセッサにより実行されると、仮想世界内の複数のアバターについての位置情報を提供するための方法を実行し、該方法が、
仮想世界内のすべてのアバターを含む該仮想世界内の複数のアバターのそれぞれの現在位置を決定する工程;
仮想世界に対応する第1の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、複数のアバターのそれぞれについての第1の位置オフセットデータを生成する工程;
仮想世界に対応する第2の格子における複数のアバターのそれぞれの対応する前の位置と比較した該複数のアバターのそれぞれの現在位置に基づいて、該複数のアバターのそれぞれについての第2の位置オフセットデータを生成する工程であって、第1の格子と第2の格子は異なる分解能を有する、工程;
複数のアバターのそれぞれについて、第1の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程;および
複数のアバターの少なくともすべてについての選択された位置オフセットデータを、第1の仮想世界クライアント機器に伝送する工程
を含む、
仮想世界サーバシステム。
［３９］
前記方法が、
複数のアバターのそれぞれについて、第2の仮想世界クライアント機器に伝送するために、第1の位置オフセットデータと第2の位置オフセットデータのうちの一つだけを選択する工程であって、第2の仮想世界クライアント機器に伝送するために選択された位置オフセットデータは、第1の仮想世界クライアント機器に伝送するために選択された位置オフセットデータとは異なる、工程;および
第2の仮想世界クライアント機器に、該第2の仮想世界クライアント機器に対応するアバター以外の複数のアバターの少なくともすべてについての選択された位置オフセットデータを伝送する工程
をさらに含む、
［38］記載のシステム。
［４０］
各位置オフセットデータがビットコードを含み、かつ該ビットコードの形式がアバターの位置変更の種類に基づくものである、［38］記載のシステム。
［４１］
各ビットコードがプレフィックス符号化方式に従う、［40］記載のシステム。
［４２］
位置変更の種類が、移動なしを含む、［40］記載のシステム。
［４３］
前記方法が、
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していたかどうかを決定する工程;
第1の仮想世界クライアント機器が直前の位置オフセットデータのセットを受信していなかったと決定したことに応答して、第1の仮想世界クライアント機器が位置オフセットデータを最後に受信して以来のアバター移動に基づく個別仕様の位置オフセットデータのセットを生成する工程;および
個別仕様の位置データのセットを第1の仮想世界クライアント機器に伝送する工程
をさらに含む、
［38］記載のシステム。
［４４］
個別仕様の位置オフセットデータのセットが、複数のアバターのそれぞれについてのデフォルトである前の位置に基づいて生成される、［43］記載のシステム。
［４５］
実行可能命令を記憶する一つまたは複数の物理コンピュータメモリであって、
該実行可能命令は、仮想世界クライアント機器により実行されると、アバター位置情報を受信するための方法を実行し、該方法は、
仮想世界内の複数のアバターについての位置オフセット情報を受信する工程;
位置オフセット情報が受信されているアバターごとに、
位置オフセット情報の分解能を決定する工程;および
決定された分解能に基づいて、受信された位置オフセット情報を適用し、該位置オフセット情報に対応するアバターの新しい位置を決定する工程
を含み、
第1のアバターに対応する位置オフセット情報が第1の分解能で受信され、かつ第2のアバターに対応する位置オフセット情報が第2の分解能で受信される、
コンピュータメモリ。
［４６］
複数のアバターが、仮想世界内のすべてのアバターを含む、［45］記載のコンピュータメモリ。
［４７］
前記方法が、
受信されたビットコードに基づいて、第3のアバターに対応する位置オフセット情報が第1の分解能から第2の分解能へと変更されていると決定する工程
をさらに含む、
［45］記載のコンピュータメモリ。
［４８］
第1の分解能が第2の分解能より低く、前記方法が、受信されたビットコードと共に受信された追加の精密情報を使って第3のアバターの位置を決定する工程をさらに含む、［47］記載のコンピュータメモリ。
［４９］
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報のセットの分解能に基づいて少なくとも一部ソートされる、［46］記載のコンピュータメモリ。
［５０］
複数のアバターの位置オフセット情報が、直前に受信された位置オフセット情報において示される位置変更の種類に基づいて少なくとも一部ソートされる、［46］記載のコンピュータメモリ。
【図面の簡単な説明】
【００１２】
添付の図には限定ではなく例としていくつかの態様が示されている。図において類似の符番は類似の要素を指し示す。
【図１】本明細書において説明する一つまたは複数の局面が使用され得る例示的ネットワーク環境を示す図である。
【図２】本明細書において説明する一つまたは複数の局面による仮想世界クライアントの例を示すブロック図である。
【図３】本明細書において説明する一つまたは複数の局面による仮想世界サーバの例を示すブロック図である。
【図４】本明細書において説明する一つまたは複数の局面による例示的仮想世界を示す図である。
【図５】図5Aおよび5Bは、本明細書において説明する一つまたは複数の局面による2つの異なる格子分解能の格子システムを有する仮想世界の例を示す図である。
【図６】図6Aおよび6Bは、本明細書において説明する一つまたは複数の局面による仮想世界内のアバターの位置を表すビットコードの例を示す図である。
【図７】本明細書において説明する一つまたは複数の局面による仮想世界内のアバターの位置情報を決定し、配布するためのサーバによる方法の例を示す流れ図である。
【図８】本明細書において説明する一つまたは複数の局面による高分解能のビットコードの閾値の例を示す図である。
【図９】本明細書において説明する一つまたは複数の局面による高時間分解能および低時間分解能のビットコード情報についての伝送スケジュールの例を示す図である。
【図１０】本明細書において説明する一つまたは複数の局面による、必要とされる帯域幅の量を低減させるように伝送ストリームを符号化するための方法の例を示す流れ図である。
【図１１】本明細書において説明する一つまたは複数の局面による、高分解能範囲を決定し、変更するための方法の例を示す流れ図である。
【図１２】本明細書において説明する一つまたは複数の局面による仮想世界内のアバターについての位置情報を受信し、更新するためのクライアントによる方法の例を示す流れ図である。
【発明を実施するための形態】
【００１３】
詳細な説明
以下の様々な態様の説明においては添付の図面を参照する。図面は本明細書の一部を構成し、各図面には例示として、本発明が実施され得る様々な態様が示されている。他の態様が利用されてもよく、本発明の範囲を逸脱することなく構造的、機能的変更が加えられ得ることを理解すべきである。
【００１４】
前置きとしていうと、本明細書において説明する局面は仮想世界内のアバターの位置情報の伝送に関するものである。仮想世界サーバは、仮想世界内のアバターの位置を決定し、仮想世界に接続された多数のクライアントのそれぞれにアバター位置を送信するときに、高分解能のビットコードを使用すべきかまたは低分解能のビットコードを使用すべきかを決定するように構成することができる。ビットコード分解能は空間的に、または時間的に変動し得る。例えば、ユーザのアバターの近くの他のアバターの位置は第1のビットコード分解能を使って決定し、伝送することができ、ユーザのアバターからさらに離れた他のアバターの位置はより低い第2のビットコード分解能で決定し、伝送することができ、それによって、帯域幅を節約すると同時に、仮想世界内のすべてのアバターについての位置情報も提供する。時間分解能が使用される場合には、より近いアバターの位置がより遠くに位置するアバターの位置よりも頻繁に送信され得る。
【００１５】
本明細書において使用する場合、仮想世界とは、そこで多くのユーザが、相互に、対抗して、共通目的のために、または共通のゲームをプレーするために働きかけ合う、グラフィックで表現された、またはグラフィックでシミュレートされた環境をいう。仮想世界とは、典型的には、何千人以上のユーザ、あるいは何百万人以上ものユーザが同時に一緒に使用するための環境をいう。仮想世界は、現実の場所、サイエンスフィクション環境、ファンタジー環境、または仮想世界の所有者により求められる他の任意の場所に似るようにグラフィックで描写することができる。
【００１６】
図1に、クライアント101が仮想世界サーバ106と対話することのできるネットワーク環境を示す。クライアント101には、汎用データ処理装置101a、パーソナルコンピュータ（PC）101b、ラップトップ、携帯式またはノート型コンピュータ101c、携帯情報端末またはモバイル機器101d、モバイル通信機器（図示せず）などを含む様々な機器が含まれ得る。各クライアント101は、クライアント101がネットワーク100を介して仮想世界サーバ106に接続することを可能にするネットワークアダプタを備えることができる。一例においてネットワーク100は、例えばインターネットなど、インターネットプロトコル（IP）ベースのネットワークを含むことができる。他のネットワークには、セルラネットワーク、ケーブルネットワーク、光ファイバネットワーク、無線ネットワーク、有線ネットワークおよび/またはこれらの組合せが含まれ得る。ネットワーク100はさらに、有線または無線のローカル・エリア・ネットワーク（LAN）などの一つまたは複数のサブネットワークも含み得る。
【００１７】
仮想世界サーバソフトウェア106の一つまたは複数のインスタンスを走らせるのに1台または複数の物理サーバ105が使用され得る。各物理サーバはクライアント101と同様のデータ処理装置とすることもでき、かつ/または専用のサーバハードウェアを含んでいてもよい。サーバソフトウェア106の各実行インスタンスは厳密に一つの仮想世界を作成する。物理サーバの数と実行されるサーバソフトウェアのコピー数との間には必ずしも相関関係があるとは限らない。例えば、1台の高性能なサーバ105aが複数の仮想世界106aおよび106bを実行することもできるはずであり、または数台のより性能の低いサーバ105cおよび105dを協働して一つの大きな仮想世界106dを実行するためのクラスタとして接続することもできるはずである。本明細書において説明する場合、「サーバ」は、サーバソフトウェア106の単一のインスタンス（すなわち、仮想世界の単一の独立のインスタンス）を指し示すのに使用する。サーバは必ずしも基礎をなすハードウェアサーバ105を指し示すとは限らない。
【００１８】
図2に、図1のサーバ106aなどの仮想世界サーバにより提供される仮想世界にアクセスし、これと対話するのに使用され得る、PC 101b（図1）などのクライアント機器200の例を示す。クライアント機器200は、プロセッサ217、ランダム・アクセス・メモリ（RAM）215、読出し専用メモリ（ROM）213、データベース201および203、レンダラ205、出力アダプタ211、入力インターフェース209、ならびに通信インターフェース207を含む様々な構成要素およびモジュールを含み得る。プロセッサ217がグラフィック処理装置（GPU）を含んでいてもよく、別個のGPUが出力アダプタ211に含まれていてもよい。アバターデータベース201は、仮想世界を探査し、仮想世界と対話するために機器200のユーザにより使用されるアバターを定義し、かつ別の方法でアバターと関連付けられるデータを記憶するように構成され得る。アバター情報は、アバターの特徴（例えば、強さ、肌の色、目の色、髪の長さ、身長、体重、知能など）、アバターの位置/場所情報、アバターと関連付けられるオブジェクト（例えば、目録、衣服、武器、アクセサリなど）などを含み得る。他方、世界データベース203は、アバターが存在する環境を定義し、生成するためのデータを記憶するように構成され得る。例えば、世界データベース203は、床または地面、壁、空などをレンダリングするためのテクスチャマップを記憶することができる。別の例において、世界データベース203はシミュレートされた気象データ、アクセス可能領域とアクセス不能領域との対比、色、世界の対話型構成要素（非対話型構成要素に対する）、世界に存在する無生物オブジェクトを定義するデータ、コンピュータで制御されるキャラクタを定義するデータなどを記憶することができる。各データベース201、203は、従来型のデータベースであってもそうでなくてもよく、あるいは必要に応じてクライアントソフトウェアによりアクセスされるRAMメモリに記憶されたデータを指していてもよい。アバターまたは仮想世界と関連付けられるデータは、通信インターフェース207を使ってクライアント機器200と仮想世界サーバとの間でやりとりされ得る。例えば、アバターの位置、属性および状況が更新されてもよく、インターフェース207を介してそのようなデータをやりとりすることにより環境が変更されてもよい。
【００１９】
世界およびアバターはクライアントソフトウェア205によりレンダリングされ、その後に出力アダプタ211およびディスプレイ219に送信され得る。クライアントソフトウェア205は、一つまたは複数の構成において、仮想世界およびその構成要素、ならびにユーザに対応するアバターの3次元（3D）モデルを生成するように構成され得る。ユーザは、キーボード223およびマウス225を含む様々な種類の入力装置を使用し、入力インターフェース209を介してアバターを制御し、世界と対話することができる。他の種類の入力装置には、（ネットワーク上での音声通信などのための）マイクロホン、ジョイスティック、動き感知装置および/またはこれらの組合せが含まれ得る。一つまたは複数の構成においては、音楽または会話などの他の可聴音が仮想世界の一部として含まれ得る。そのような例では可聴音はスピーカ221を介して出力され得る。
【００２０】
クライアント機器200のプロセッサ217および他の構成要素により使用されるクライアントソフトウェア205、コンピュータ実行可能命令、および他のデータは、RAM215、ROM213またはこれらの組合せに記憶され得る。また、揮発性および不揮発性両方のメモリを含む他の種類のメモリも使用され得る。ソフトウェア205は、命令が実行された場合に、本明細書において説明する機能および方法をプロセッサ217、クライアント機器200および/またはクライアント機器200の他の構成要素に実行させるように、プロセッサ217に命令を提供するために、RAM215、ROM213および/またはデータベース201および203内に記憶され得る。一例では、仮想世界サーバとのインターフェースをとるためのユーザインターフェースを生成するための命令が、RAM215、ROM213および/またはデータベース201および203に記憶され得る。クライアントソフトウェア205は、アプリケーションおよびオペレーティング・システム・ソフトウェアの両方を含むことができ、コードセグメント、命令、アプレット、プリコンパイルコード、コンパイルコード、コンピュータプログラム、プログラムモジュール、エンジン、プログラム論理、およびこれらの組合せを含むことができる。コンピュータ実行可能命令およびデータはさらに、例えば、電気的消去書込み可能読出し専用メモリ（EEPROM）、フラッシュメモリまたは他のメモリ技術、CD-ROM、DVDまたは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気記憶装置などを含む（本明細書において「コンピュータメモリ」と呼ぶ）何らかの物理的形態のコンピュータ可読記憶媒体に記憶されていてもよい。
【００２１】
先に図4を参照すると、ユーザは例示的仮想世界400内で動き回り、相互に対話することができる。各ユーザはアバター（例えばアバター401など）として表すことができ、アバターとは仮想世界におけるユーザのグラフィック描画による表現である。仮想世界400は樹木403および自動車405を含むことができる。アバター401は、仮想世界400内の特定の位置においてレンダリングし、配置することができる。図2に関連して説明したような制御を使って、ユーザはアバター401を移動させてアバター401の位置を変更することができる。例えばユーザはアバター401を自動車405に近づけたり、樹木403に近づけたりすることができる。自動車405もしくは樹木403またはその両方を対話型とすることもできる。すなわち、ユーザは自分のアバター401を、例えば、自動車405のドアを開けて自動車に乗り込んで走り去り、あるいは樹木403を切り倒して薪を得るように制御することができる。仮想世界400のいくつかの局面の中には2次元（2D）として示されるものもあるが、それらの局面を、任意選択でテクスチャおよび色を伴った3Dオブジェクトとして生成することもできる。
【００２２】
図3を参照すると、仮想世界サーバ300は、図4の仮想世界400などの仮想世界を生成し、操作するように構成され得る。サーバ300は、通信インターフェース307、アバター位置データベース309、世界データベース311、ユーザデータベース313、ゲーム論理317、分解能決定器319、ビットコード圧縮器320、およびビットコード生成器321を含み得る。サーバがそこで実行され得る物理的ハードウェアは、例えば、一つまたは複数の中央処理装置（CPU）、グラフィック処理装置（GPU）、RAM、ROM、ネットワークインターフェース、不揮発性メモリ、入力/出力インターフェースなど（図示せず）を含む、そのようなタスクに適した任意のサーバハードウェアまたはデータ処理装置を含むことができる。
【００２３】
アバター位置データベース309は（例えば、各クライアントから受け取られる移動コマンドに基づいて）アバターごとの位置情報を記憶するように構成され得る。世界データベース311は、世界において利用可能な対話のための規則、アルゴリズムおよび他のデータを記憶することができる。例えば、コンピュータ・コントローラ・キャラクタが移動する方法、または別の行動を取る方法が、世界データベース311に記憶されたデータにおいて定義されていてもよい。加えて項目情報も、項目が各クライアントにより変更されないように世界データベース311において定義され得る。別の例では、世界データベース311は、非アバター項目および構成要素についての場所情報を記憶することができる。他方、ユーザデータベース313は、アバターを制御しているユーザを記述する情報を記憶するように構成され得る。例えばユーザデータベース313は、アカウント情報、ユーザ設定、支払情報、ユーザ識別情報、キャラクタ定義などを含むことができる。各データベース309、311、313は、従来型のデータベースであってもそうでなくてもよく、代わりに、サーバソフトウェアにより必要に応じてアクセスされるRAMメモリに記憶されたデータを参照することもできる。例えば、位置データベース309は、実際には、本明細書において説明するように更新される、RAMに記憶されたアバター位置の集合体とすることができる。
【００２４】
アバターの位置は、仮想世界の大きさに基づく座標系を使ってサーバに記憶され得る。3D空間においてアバターの位置は、3次元のそれぞれに対応するx、y、zの座標の組として定義され得る。2D空間においてアバターの位置は、2次元に対応するx、y（またはx、z）の座標の組により表され得る。一例では仮想世界は、各層が10km×10kmの大きさの空間を表す4層へと分割され得る。
【００２５】
ユーザの位置を伝えるために、サーバは格子を使って世界を分割し、次いで各ユーザがどの格子セルに位置するかを伝えることができる。図5Aに、仮想世界内のアバターの位置を伝えるのに使用され得る第1の格子分解能の格子システムの例を示す。クライアントにアバターの位置を伝えるのに使用される格子の分解能は、サーバにアバターの位置を記憶するのに使用される座標系の分解能以下とすることができる。格子500は、それぞれが1組のセルへと分割されている1組の積み重なった層501へと分割され得る。一態様では、各層は、事前に定義された垂直距離の範囲、高さまたは「厚さ」を表し、例えば第1の層は地表面から地上5メートルまでを表すことができ、層2は地上15mを表すことができ、以下同様とすることができる。層の厚さは望み通りに高くすることも低くすることもできる。別の態様では、各層は代わりに、地表面が実際に何であるかにかかわらず、地上の世界の別々の部分を指し示すことができる。例えば、地面の高さが1mであるか、4mであるか、または13mであるかにかかわらず、地面に立っているすべてのアバターが層0に含まれていてもよく、任意の建物の1階より上の2階に立っているすべてのアバターが（各建物内の天井の高さにかかわらず）層1に位置していてもよく、任意の建物の1階より上の3階に立っているすべてのアバターが層2に位置していてもよく、以下同様である。その場合アバターの位置は、当該アバター（例えばアバター505など）が位置する格子セルの座標を識別することにより伝えることができる。よって、格子500内においてアバター505の位置は、それぞれ、x、yおよびzの各座標に対応する（3,0,1）として伝えることができる。アバター505の位置と関連付けられる層は、（例えば、図示の例では層0上に存在するアバターの足に基づいて）アバター505と交わる最低層によって、または仮想世界ソフトウェアにより別の方法で決定される層によって定義され得る。図5Aに示す格子システム500は、2000m×2000m×45mの世界内において（それぞれx、yおよびzを表す）5×4×3セルの分解能を有するということができる。
【００２６】
図5Bに、図5Aの格子システム500と併用され得る第2の分解能の格子システムの例を示す。図5Aおよび図5Bには、2つの異なる分解能の格子を使って重ね合わされた同じ仮想世界が表されている。第2の分解能は3×3×2セルの格子に対応し、よって図5Aの格子500の分解能より粗く、または粒度が大きい。より粗い、またはより低い分解能の格子を使用すると、結果的に、他のユーザにアバターの位置を送信するのにより低い分解能のビットコード（下記）が使用されることになり、クライアントに伝送される必要のある、位置の変更を示すデータの量を低減させるのに役立ち得る。というのは、位置の変更の回数が少ないほど、より低い分解能の格子内における場所の変更を生じることになるからである。一例では、格子がより低い分解能を有する場合、アバター505の位置が第1のセルから第2のセルへと変化しないこともあり得るため、アバター505の位置変更が検出されない場合がある。格子セル内での移動が検出されないことになるため、図5Bの低分解能の格子を使用するとアバター505の位置変更は登録されないはずである。しかし図5Aでは、同じ位置変更が別のセル、すなわちセル（4,0,2）への横断として登録されるはずである。
【００２７】
図3を再び参照すると、ゲーム論理317が位置データベース309におけるアバターの位置を決定または更新した後で、サーバは、ビットコード生成器321に、ユーザの位置が高分解能の格子のどのセル内に含まれるかを決定して対応する高分解能のビットコードを用意し、ユーザの位置が低分解能の格子のどのセル内に含まれるかを決定して対応する低分解能のビットコードを用意するように指示する。これらのビットコードは、最後の位置を更新して以来の各格子における当該アバターによる任意の移動を表す。
【００２８】
サーバは、以下でさらに説明するように、高分解能のビットコードまたは低分解能のビットコードのどちらかを送信することにより、すべてのクライアント/アバターを、他のすべてのクライアント/アバターの位置情報で更新することができる。他の構成では、サーバは、（例えば、空間分解能に加えて、またはその代わりに時間分解能を使用するときに）所与の伝送において、各クライアントを、すべてより少ない数の他のアバターの位置で更新し、しかも最終的には（時間分解能の最大待ち時間に基づく）所与の時間量以内にすべてのアバターについての位置情報を送信することができる。分解能とは、本明細書において使用する場合、ある位置を示すのに用いられる空間的または時間的正確さをいう。空間分解能とは、ユーザの位置を所与の空間において決定するのに用いられ得る物理的粒度をいう。他方、時間分解能は、位置情報を送信するのに用いられる頻度に対応し得る（例えば、位置情報が頻繁に提供されるほど、アバターの位置は通常はより正確になる）。
【００２９】
空間分解能を使用する場合、分解能決定器319は、以下でさらに説明するように、所与のクライアントにアバターの位置を送信するのに高分解能のビットコードを使用すべきかまたは低分解能のビットコードを使用すべきかを決定するように構成され得る。時間分解能を使用するとき、分解能決定器319は、以下でさらに説明するように、所与のフレームの間に所与のクライアントにアバターの位置を送信すべきかどうかを決定するように構成され得る。空間分解能と時間分解能とは、本明細書において説明する様々な態様において個別に使用されても、同時に使用されてもよい。
【００３０】
各クライアントは（各アバターが固有のクライアントに対応するものと仮定すると）仮想世界内の他のあらゆるアバターについての位置情報を必要とし得るため、アバターの数が大きい場合、仮想世界システムには、ビットコードを生成するために相当な回数の計算を行う必要が生じ得る。よって、世界が2000個のアバターを有する場合、システムには2000×2000（4百万）個のビットコード、すなわち、クライアントごとに2000個のビットコードの1セットを生成する（かつ/または送信する）必要が生じ得る。この処理負荷を低減させるために、システムはアバターごとに、第1のビットコードが最後のフレーム以後の低分解能の格子の変更に対応し、第2のビットコードが最後のフレーム以後の高分解能の格子の変更に対応する1対のビットコードを、事前に生成することもできる。位置情報が各クライアントに送信されるべきときには、受信側クライアントが前の更新またはフレームにおいてアバターのために受信したのが高分解能のビットコードであったかまたは低分解能のビットコードであったかに基づいて2つの事前生成ビットコードのうちの一つが選択され得る。ビットコードはすでに生成されているため、この選択はビットコードをオンザフライで計算せずに行うことができる。しかし場合によっては、ビットコードがさらにオンザフライで生成されてもよい。例えば、クライアントが前の位置更新を受け取れなかった（ネットワーク帯域幅使用量により位置情報の最後のフレームを廃棄する必要があったなどの）場合、空間的ビットコードを生成する必要が生じ得る。というのは、クライアントが知っている前の位置情報は、事前に生成されたビットコードを決定するのに使用される、前の位置情報と異なるからである。
【００３１】
一つまたは複数の構成においては、仮想世界内のすべての活動中のアバターについての位置が他のすべての活動中のアバターに送信される。アバターが活動中であるとみなされ得るのは、当該アバターが仮想世界にログインされている場合である。すべての活動中のアバターについての位置を送信すれば、ユーザには、所望の人口統計を有する世界の領域を特定することが可能になり得る。例えばユーザは、他のすべてのユーザの場所を特定し、（より多くの人々がより多くの活動および雑音に対応するものと仮定して）所望の人口密度を有する領域を選択することにより、仮想世界内の静かな場所を見つけることができる。他の構成においては、仮想世界内の、すべてより少ない数の活動中のアバターについての位置を、第1の時間分解能の範囲内で他の活動中のアバターに送信することができ、すべての活動中のアバターについての位置情報が第2の時間分解能以内で送信される。
【００３２】
アバター位置の伝送および計算に関連して、本明細書において説明する方法およびシステムは、各アバターの前の位置を利用することができる。すなわち、位置情報を「移動」情報として送信することもでき、その場合の移動情報は、アバターが、移動した場合には、最後の更新以来どれほど移動しているかを示す。よって、第1のアバターの新しい位置を決定するために、第2のアバターに対応するクライアントには、第1のアバターの前の位置を得る必要が生じ得る。ユーザが最初に世界に接続する状況においては、ユーザのクライアントには、世界における他のアバターの前の位置の知識がない場合もある。したがって仮想世界システムは、接続側のユーザのクライアントに対して、低分解能のビットコードを使ってシステム内の他のあらゆるアバターの位置を提供するセットアップパケットを用意することができる。仮想世界システムは、初期位置情報を、他のすべてのアバターについて（0,0,0）という前の位置に基づいて提供することができる。これにより、接続側クライアントは、既知の開始位置（例えば（0,0,0）など）を使って他のアバターの位置を決定することが可能になる。
【００３３】
前述のように、ビットコード生成器321は高分解能形式および低分解能形式の両方を使ってビットコードを生成することができる。他の態様では、3つ以上の分解能のビットコードが使用されてもよい。ビットコードはプレフィックスコード（ハフマンコードともいう）であり得る。すなわち、セット中には他の有効なビットコードのプレフィックス（開始部）である有効なビットコードはない。プレフィックスコードを使用すれば、コードまたはコードと共に提供される情報がいつ終了するかを指定するための終了コードまたは他の特殊なマーカが不要になる。図6Aに、アバター位置情報を提供するために生成され、伝送され得る、1層当たり12800×12800の格子セルを有する4層の格子に対応する分解能である、高分解能のビットコードセット601および603の例を示す。一例では、ユーザのアバターが格子セルを変更しておらず、したがって検出可能な位置の変更を行っていないことを示すのに「0」（1ビット）というビットコードが使用され得る。ユーザのアバターが格子セルを変更しているが、当該アバターの前のセルと同じ層にあり、前のセルに隣接するセルに変更したにすぎない場合には、「1 000 rrr」（7ビット）というビットコードを使用することができ、その場合rrrは、（「rrr」のどのビットコードが、どの隣接するセルを指し示すかに関する、クライアントとサーバとの間の事前に合意された相関を使って）アバターが隣接する8セルのうちのどのセルに移動しているかを指定する3ビットコードである。隣接するセルには、アバターの前のセルを中心とする反時計回りまたは時計回りを含む様々な方法で番号付けを行うことができる。あるいは、ユーザのアバターが同じ層内で2セル移動した場合には、「1 010 rrrr」というビットコードを生成することができ、その場合rrrrは、アバターの前の格子セルから厳密に2セル離れた16セルのうちの一つを識別する4ビットコードである。
【００３４】
層の変更を伴う位置の変更、または2セルを超えるが-16セルから15セルまでの間の移動を伴う位置の変更は、「1 011 0 yyxxxxxzzzzz」という17ビットのビットコードによって表すことができ、その場合、yy＝（新しい層-古い層）＆3、xxxxx＝（新しいx-古いx）＆31、およびzzzzz＝（新しいz-古いz）＆31である。位置の変更が-16セルから15セルまでの間であるかどうかを決定するために、仮想世界によって分割される格子に、負（-）の方向と正（＋）の方向を指定しておくことができる。よって、x軸に沿って右に移動することは正の移動とみなすことができ、x軸に沿って左に移動することは負の移動とみなすことができる。したがって、-16という距離は、ある軸に沿った一方向に16セル離れることを表すことができ、正の15という距離は、反対方向に15セル離れることを表すことができる。本明細書において使用する「＆」という記号は、2進のAND演算を表し、次元ごとの位置ビットのビットマスクを作成するのに使用される。17ビットのビットコードはラップアラウンドを伴う符号なしの数として送信することができる。例えば、ユーザが4層格子の最上層から最下層へと移動する場合には、yyは、最上層から最下層へのラップアラウンドを示すために（すなわち-3の代わりに）1に設定され得る。アバターが-16から15セルより大きい距離を移動する例では、「1 O11 1 yyxxxxxxxxxxxxxxzzzzzzzzzzzzzz」の形の35ビットのビットコードを使用することができ、その場合、yy＝（新しい層-古い層）＆3であり、xxxxx＝（新しいx-古いx）＆16383であり、zzzzz＝（新しいz-古いz）＆16383である。一つまたは複数の構成においては、x、yおよびzの各距離とのAND演算が行われる値（例えば、3、31、16383など）は、位置格子の大きさまたは分解能に基づいて変化し得る。典型的には、ビットマスクを作成するために所与の次元において移動した距離を（2進ANDを使って）マスクした値は、2n-1の2進表現であり、nは格子における当該次元を表すのに必要とされるビット数を表す。
【００３５】
ビットコード603は、各ビットコードシーケンスの第2ビットを除いて、ビットコード601を繰り返している。ビットコード603の第2ビットは、ビットコード601の場合の「0」ではなく、1の値を有する。この第2ビットの変更は、アバターに関する追加情報が続くこと、または伝送に含まれることを表す、またはクライアントに示すことができる。アバターの位置が変化していないことを示すビットコード「1 100」の例では、「1」の値を有する第2ビットは、アバターの他の何らかの局面（例えば身長、生死、健康状態など）が変化していることを示すことができる。図6Aには各ビットコード603それぞれの意味が示されている。
【００３６】
図6Bに、アバター位置情報を提供するために生成され、伝送され得る一連の低分解能のビットコード605を示す。この低分解能のビットコードは、高分解能のビットコードに依拠するのと同じアバター位置に対応するが、1層当たり200×200の格子セルを有する4層の格子に基づいてやりとりされるアバター位置に対応する。ビットコード601、603の場合と同様に、ビットコード605もプレフィックスコード規則に準拠し得る。しかし、ビットコード601、603は、プレフィックスコードとして一緒に使用される場合にはビットコード605と競合するため、受け手はアバターごとにどのコードセットが使用されているか知らなければならない。よって、この例では、受け手は常に、ビットコード分解能は、あるアバターについて受信した最後のビットコード分解能と同じであると仮定する。図6Bに示すように、200×4×200（x,y,z）サイズの低分解能の格子を使って任意の位置変更を報告するのに必要とされる帯域幅の最大量は21ビットである。というのは、どんな特定の格子セルも、図6Bに示すように、21ビットのビットコードを使って明確に指定することができるからである。加えて、高分解能の格子への切換えがコード「1 00」により示されるときでさえも、高分解能のビットコードは、アバターが位置する既存の低分解能の格子セル内に特定の高分解能の格子セルを設けることにより、低分解能のビットコードから推定することができる。すなわち、この例では、低分解能の各格子セルは、64×64個の高分解能の格子セルを含む。したがって、どんな高分解能の格子セルも、アバターが位置する低分解能の格子セル内の特定の高分解能の格子セルの識別を用いて低分解能の格子セルから明確に推定することができる。一つの低分解能の格子セル当たり26×26個の高分解能の格子セルがあるため、3ビットコード「1 00」を超える高分解能に切り換えるのに必要とされるのは6＋6（すなわち12）個の追加ビットだけである。加えて、高分解能のビットコード報告とは対照的に、位置が低分解能のビットコードを用いて報告されている場合には追加情報は無関係である、または重要でないはずであるという仮定の下で、追加情報を示すビットコードは指定されないか、または低分解能のビットコード情報に含まれない場合もある。
【００３７】
図6Aおよび図6Bには、アバターの位置を報告するのに使用されるビットコード分解能の変更を示すための特殊なビットコードをそれぞれが含むビットコードの例が示されている。これが関連性を有し得るのは、これらのビットコード自体は位置情報が高分解能形式であるかまたは低分解能形式であるかを示さず、かつ前述のように、受信側機器が事前にどちらのビットコード分解能が使用されているかを知っていなければ、プレフィックスコードが競合することになるからである。すべてではないがほとんどの場合、クライアント機器またはアプリケーションは、位置情報が当該アバターについて受信した前の位置と同じ分解能であるものと仮定することになる（以下でさらに説明する）。したがって、分解能の変更が生じる場合には、図6Aおよび図6Bの対応するビットコードを使ってクライアントに通知することができる。
【００３８】
図7は、仮想世界内のすべてのアバターについての位置情報を決定し、当該仮想世界に（または当該仮想世界の当該インスタンスに）接続されたすべてのクライアント機器に報告するためのサーバによる方法の例を示す流れ図である。工程700で、ビットコード生成器321は、以前に伝送された位置に基づいて各アバターの現在位置を表す高分解能のビットコードおよび低分解能のビットコードを事前に計算する。すなわちサーバは、アバターごとに、当該アバターが最後の位置更新以来移動しているか否かを決定し、その決定に基づき、ビットコード生成器321は、各アバターの移動（または移動の欠如）を表す高分解能のビットコードと低分解能のビットコードの両方を生成する。次いでサーバは、仮想世界に接続されたクライアント機器ごとに工程705〜工程745を繰り返す。これらの工程を、それについて位置情報が用意されている1つのクライアントに関して説明する。
【００３９】
工程705で、サーバは、使用されている任意の時間分解能に基づいて、どのアバターの位置がクライアントに報告されるべきかを決定する（図9および対応する説明などを参照）。時間分解能は、帯域幅使用量をより効率よく管理するために使用され得る。例えば、1伝送フレーム当たりに使用される帯域幅の量を低減させるために、より遠く離れたアバターの位置はより近くに位置するアバターよりも低い頻度（より低いフレーム率）で報告され得る。この例では、時間分解能は使用されておらず、あらゆるアバターの位置が、高分解能のビットコードまたは低分解能のビットコードのいずれかを使ってフレームごとに報告されるものと仮定する（フレームとはt秒ごとに伝送される位置データのパケットをいい、tは、サーバが位置情報を提供する最短の時間量を表し、例えば、t＝1秒、t＝5秒、t＝250ミリ秒などである）。
【００４０】
現在のフレームにおいてクライアントにその位置を報告すべきすべてのアバターについて、サーバは、1つのアバターに関連して以下に説明する工程710〜730を繰り返す。工程710で、サーバは、現在のアバターの位置をクライアントに送信するために、事前に計算された高分解能のビットコードを使用すべきかまたは事前に計算された低分解能のビットコードを使用すべきかを決定する。この決定は、任意の所望の技術を使って、例えば図8および図11（後述）に関連して説明する方法などを使って行われる。工程715で、サーバは、現在のクライアントが、このアバターについての位置情報を含む直前のフレームを受信していたかどうかを決定する。これが重要なのは、クライアントがこのアバターの位置を有する直前のフレームを受信していなかった場合には、（ビットコードは前の位置からのオフセットを提供するにすぎないため）ビットコードが不正確な位置を生じる結果になるからである。よって、現在のクライアントが現在のアバターについての位置情報を有する前のフレームを受信していた場合には、サーバは工程720で、工程710において選択されたビットコード分解能を使って当該アバターのために事前に計算されたビットコードを選択する。現在のクライアントが現在のアバターについての位置情報を有する前のフレームを受信していなかった場合には、ビットコード生成器321は工程725で、現在のクライアントに報告された最後の位置ビットコードに基づいて適切なビットコード分解能の新しいビットコードを生成する。
【００４１】
工程730で、サーバは、（工程720からの）選択されたビットコード、または（工程725からの）新しく生成されたビットコードを、現在のフレームのためのクライアントへの伝送パケットに追加する。工程735および工程740で、サーバは、現在のクライアントにさらに多くのアバター位置を報告する必要があるかどうかを決定し、そうである場合、位置を報告する追加のアバターごとに工程710〜工程730を繰り返す。
【００４２】
サーバが、クライアントに報告されるべきすべてのアバターの位置を含むクライアントのための伝送パックをアセンブルした後で、ビットコード圧縮器320は工程745で、（図10に関連して後述する）ランレングス符号化を行い、クライアントに伝送パケットを送信する。工程750および工程755で、サーバは、現在のフレームについて位置情報を受信する必要のある残りのクライアントがあるかどうかを決定し、そうである場合、そのようなクライアントごとに工程705〜工程745を繰り返す。
【００４３】
各クライアントに高分解能のビットコードを提供すべきかまたは低分解能のビットコードを提供すべきかの決定は、基準アバター（すなわち、ビットコードの送信先のクライアントと関連付けられたアバター）と仮想世界内の他の各アバターとの間の距離に依存し得る。図8を簡単に参照すると、仮想世界サーバは基準アバター801に対する分解能閾値距離を決定することができる。基準アバター801は、他のアバター803および805それぞれについての位置情報の報告先のクライアントに対応する。よって分解能閾値は、基準アバター801の位置からの距離として定義され得る。閾値以下の距離内に存在するアバター803の位置は高分解能のビットコードを使って報告することができ、基準アバター801から閾値を上回る距離に位置するアバター805の位置はより低い分解能のビットコードを使って報告することができる。代替として、またはこれに加えて、分解能を選択するときに、アバターの視野を考慮に入れることもできる。例えばアバターは180度の視界しかもたない場合もある。したがって、この180度の視角外に存在する他のすべてのアバターの位置が、低分解能のビットコードを使って報告され得る。
【００４４】
図11に、仮想世界内の混雑した領域の釣り合いを取るように高分解能範囲を変更するための方法の例を示す。工程1100で、仮想世界システムは、高分解能範囲内（例えば100m以内など）のアバターの数を決定することができる。次いで工程1105で、仮想世界システムは、高分解能範囲内のアバターの数が指定の閾値を上回るかどうかを決定することができる。この閾値は、アバターが人口密度の高い領域に存在する場合は多くの高分解能のビットコードを伝送するために大量の帯域幅を使用する必要が生じるが、その可能性を低減させるように定義することができる。閾値は、20アバター、50アバター、100アバター、500アバター、1000アバターなどとすることができる。アバターの数が指定の閾値より大きく、その範囲が最小範囲を上回る場合、仮想世界システムは工程1115で高分解能範囲を低減させ、次いで工程1100に戻って新しい範囲をテストすることができる。範囲内のアバターの数が閾値以下になった場合、または範囲をそれ以上低減させることができない場合には、サーバは工程1110に進み、高分解能範囲内のアバターについての高分解能のビットコードと、他のすべてのアバターについての低分解能のビットコードを選択/決定する。一つまたは複数の構成においては、最小の高分解能範囲は、高分解能範囲がその最小値を下回らないように定義され得る。これらの場合には、高分解能のアバターの数は閾値数を超えてもよい。
【００４５】
図9に、高分解能のビットコードのためのより高い時間分解能（すなわち頻度）の報告と、低分解能のビットコードのためのより低い時間分解能の報告とを提供する伝送スケジュールの例を示す。したがって、例示的な伝送スケジュール900では、200ミリ秒ごとに低分解能のビットコード情報の伝送を提供し、高分解能のビットコード情報は50ミリ秒ごとに伝送される。あるいは、帯域幅を節約するために、低分解能のビットコード情報がより高い頻度で伝送されてもよく、高分解能のビットコード情報がより低い頻度で伝送されてもよい。
【００４６】
前述のように、仮想世界システムは、ランレングス符号化（RLE）を使って、複数のアバターについての位置情報を搬送する伝送ストリームにおける帯域幅使用量を最適化することができる。図10に、ランレングス符号化を使って伝送ストリームを最適化するための方法の例を示す。工程1000で、仮想世界システムは、例えば図7に関連して前述したように、基準アバターのクライアントに伝送されるべき複数のアバターに対応する位置情報（例えば、高分解能のビットコードおよび低分解能のビットコードなど）を決定することができる。工程1005で、システムは、指定の順序に従って位置情報をソートすることができる。一例では、この順序は以下のように定義され得る。1）移動を示す高分解能のビットコードが前の更新において送信されたアバター、2）移動がないことを示す高分解能のビットコードが前の更新において送信されたアバター、3）移動がないことを示す低分解能のビットコードが前の更新において送信されたアバター、および4）移動を示す低分解能のビットコードが前の更新において送信されたアバター。各グループは、サーバと各クライアントの両方に知られているアバターIDに基づいてさらにソートされ得る。アバター位置情報が伝送される順序は変動してもよく、この順序は、サーバと各クライアントとの間で事前に定義され、同意された任意のソート順序を含み得る。したがって、各クライアントは、データがサーバによってソートされた順序で受信されるものと予期しているため、アバター/クライアントの順序を指定するさらに別の情報およびデータを伝送に含める必要はない。伝送ストリームにおいて各ビットコードと共にアバターID情報を送信する必要が生じないため帯域幅がさらに節約される。
【００４７】
ソートされた後で、システムは工程1010で、連続する静止アバター位置のセグメントを、表1のRLEビットコード（および適用可能な場合にはデータ）のうちの一つで置き換えることができる。
【００４８】
（表１）RLEビットコード
0005492290.tif 000002
【００４９】
例えば、「0 00」というビットコードは、予期されるアバター順序における次のユーザだけが静止していることを示すために使用することができ、「0 01 nnnn」は、リスト中の次のnnnn（最大24まで）のユーザが静止していることを示すために、「0 10 nnnnnnnn」は、リスト中の次のnnnnnnnn（最大28まで）のユーザが静止していることを示すために、「0 11 nnnnnnnnnnn」は、リスト中の次のnnnnnnnnnnn（最大211まで）のユーザが静止していることを示すために使用することができる。その後に1から2mまでの2進数が続くRLEビットコードとmの値との間の任意の事前に同意された相関が使用され得る。211（2048）が最終的なRLEビットコードに選択されたのは、この例では、仮想世界の各インスタンスは多くても1度に2000ユーザしか有することができないからであり、そのため、211より多くのユーザが静止していることを示す必要は全く生じないはずである。よってRLEビットコードは、アバター位置が静止しており、追加情報が提供されないことを示す「0」ビットコードのインスタンスを置き換えるのに使用される。どのRLEビットコードが使用されるかは、特定のクライアントへの送信のために用意されるパケット内の連続する「0」ビットコードの数に依存する。そのためRLEビットコードは、（以下に記すものを除く）複数の高/低分解能のビットコードを単一のRLEビットコードで置き換えることにより帯域幅をさらに低減させる。工程1015で、ビットコードを、基準アバターのクライアントに伝送することができる。
【００５０】
RLEビットコードは、例えば、伝送ストリームにおける2048を超える連続するアバターが静止している場合などには、追加のアバター位置を含めるように変更または追加することができる。単一の高分解能のビットコード（または低分解能のビットコード）の「0」からRLEビットコードの「0 00」への変更は、事実上帯域幅を1ビットから3ビットへと増大させることになるが、実際上の効果としてはRLEビットコードを使用すると、前述のソート順序に基づいて全体の帯域幅が減少する。高分解能のビットコードおよび低分解能のビットコードの「0」は、RLEビットコードと組み合わせて使用することができない。というのは、「0」はRLEビットコードのプレフィックスであり、使用中のプレフィックスコードシステムに多義性を導入することになるからである。加えて、位置ビットコードにさらに別の非位置情報が続く場合、当該位置ビットコードは、クライアントが後続の追加情報に気付くように置き換えができない可能性もある。言い換えると、追加情報を提供する必要があるときは、仮想世界サーバは、アバターを、他の連続する静止アバター位置内に含めるのではなく、当該アバターについてコード「1 100」を送信する。
【００５１】
図12に、クライアント機器が位置情報伝送ストリームを受信し、処理するための方法の例を示す。クライアントは最初に、前述のようなRLE圧縮を取り消して、RLEビットコードを展開し、代わりに複数の静止「0」ビットコードで置き換えるようにすることができる。次いで図12の方法は、クライアントによってアバターごとに実行される。
【００５２】
工程1200で、クライアントは、個々のビットコードが受信されているアバターを識別する。クライアントは、工程1205で、アバターの以前に知らされた位置と、当該アバターのために最後に使用されたビットコード分解能とを検索し、着信するビットコードも同じ分解能であるものと仮定する。工程1210で、クライアントは、仮定したビットコード分解能を使って、ビットコードが分解能の変更を示しているかどうかを決定する。分解能の変更が示されていない場合には、工程1215で、クライアントは、以前に知られた位置に新しいビットコードを適用して、当該アバターについての新しい位置を獲得し、工程1250に進む。
【００５３】
しかし、ビットコードが分解能の変更を示している場合には、工程1220で、クライアントは、分解能が増加している（低分解能から高分解能のビットコードになっている）か、または減少している（高分解能から低分解能のビットコードになっている）かを決定する。ビットコード分解能が減少している場合には、工程1225で、クライアントは、低分解能の格子を使ってアバターの以前に知られた位置を高分解能の格子から低減させる（すなわち、この例では、クライアントは、一つの低分解能の格子セル当たり64×64個の高分解能の格子セルがあることを知っており、それに応じて計算し、同じ層を保持する）。次いで工程1230で、クライアントは、さらに別の低分解能のビットコードを読み取り、工程1215に進み、そこでクライアントは、以前に知られた位置に低分解能のビットコードを適用して現在位置を決定する。
【００５４】
工程1220で、ビットコードが、ビットコード分解能が増加していることを示している場合には、工程1235で、クライアントは、当該アバターについての第2の低分解能のビットコードを読み取り、工程1240で、クライアントは、低分解能のビットコードに基づくアバターの正しい位置をクライアントが有していることを確認するために、以前に知られた位置に第2の低分解能のビットコードを適用する。工程1245で、クライアントは、第1の低分解能のビットコードと一緒に受信された追加の精密情報を、工程1240でクライアントにより計算された位置に適用して、後で高分解能のビットコードと共に使用することのできる位置を得る。次いでクライアントは工程1250に進む。
【００５５】
工程1250で、クライアントは、伝送ストリームがさらに別のアバター位置についてのビットコードを含んでいるかどうかを決定し、そうである場合、次のアバタービットコードを選択し、受け取られる次のアバタービットコードごとに工程1200〜工程1250を繰り返す。
【００５６】
各アバターの新しい位置を決定した後で、または各アバターの新しい位置を決定次第、クライアントは、更新された位置を反映するために、仮想世界のグラフィック描写を提供するグラフィカル・ユーザ・インターフェースを再度レンダリングすることができる。クライアントはアバターを、それが位置する格子セルの中心に位置するものとして描写することもでき、またはアバターがその格子セルへと移動したのが最近であるかどうかなど、アバターの移動の履歴に基づいてアバターを描写するように格子セル内の場所を推定することもできる。
【００５７】
本明細書において説明する方法工程、手順または機能は、例えば、工程、モジュール、機能、プログラム、オブジェクトなどを組み合わせ、並べ替え、かつ/または分割することなどにより、変更された形で実施されてもよいことを理解すべきである。加えて、本明細書において説明する技術は、一つまたは複数のプロセッサを、方法工程、手順または機能をプロセッサおよび他の構成要素に実行させる実行可能命令と組み合わせて使用して、実施することもできる。本明細書において使用する場合、「プロセッサ」および「コンピュータ」の各用語は、単独で使用されるにせよ、メモリまたは他のコンピュータ可読記憶媒体に記憶された実行可能命令と組み合わせて使用されるにせよ、それだけに限らないが、一つまたは複数のマイクロプロセッサ、専用コンピュータチップ、フィールド・プログラマブル・ゲート・アレイ（FPGA）、コントローラ、特定用途向け集積回路（ASIC）、ハードウェア/ファームウェア/ソフトウェアの組み合わせ、あるいは他の専用または汎用の処理回路を含む様々な種類の周知のコンピューティング構造のいずれかを包含するものと理解すべきである。加えて、本明細書において説明する特定のソフトウェアアーキテクチャは例示のためのものにすぎず、ソフトウェア機能は、さらに別のまたは異なるモジュール、プログラム、オブジェクト、アプリケーションなどによっても実行され得る。
【００５８】
以上、本発明を実行する具体例を説明したが、添付の特許請求の範囲に示す本発明の趣旨および範囲内に含まれる、前述のシステムおよび方法の多数の変形および置換が存在することを当業者は理解するであろう。加えて、本開示を考察すれば当業者には、添付の特許請求の範囲の趣旨および範囲内に含まれる他の多数の態様、改変および変形も想起されるであろう。
【図１】
0005492290.tif 000003
【図２】
0005492290.tif 000004
【図３】
0005492290.tif 000005
【図４】
0005492290.tif 000006
【図５Ａ】
0005492290.tif 000007
【図５Ｂ】
0005492290.tif 000008
【図６Ａ】
0005492290.tif 000009
【図６Ｂ】
0005492290.tif 000010
【図７】
0005492290.tif 000011
【図８】
0005492290.tif 000012
【図９】
0005492290.tif 000013
【図１０】
0005492290.tif 000014
【図１１】
0005492290.tif 000015
【図１２】
0005492290.tif 000016