以下、実施形態について図面を参照して説明する。
(仮想現実生成システムの概要)
図1を参照して、本発明の一実施形態に係る仮想現実生成システム1の概要について説明する。図1は、本実施形態に係る仮想現実生成システム1のブロック図である。
仮想現実生成システム1は、サーバ装置10と、1つ以上の端末装置20と、を備える。図1では簡便のため、3つの端末装置20を図示しているが、端末装置20の数は1つ以上であればよい。
サーバ装置10は、例えば1つ以上の仮想現実を提供する運営者が管理するサーバ等の情報処理システムである。端末装置20は、例えば携帯電話、スマートフォン、タブレット端末、PC(Personal Computer)、ヘッドマウントディスプレイ、又はゲーム装置等の、ユーザによって使用される装置である。端末装置20は、典型的にはユーザごとに異なる態様で、複数がサーバ装置10にネットワーク3を介して接続されうる。
端末装置20は、本実施形態に係る仮想現実アプリケーションを実行可能である。仮想現実アプリケーションは、ネットワーク3を介してサーバ装置10や所定のアプリケーション配信サーバから端末装置20に受信されてもよく、あるいは端末装置20に備えられた記憶装置又は端末装置20が読取可能なメモリカード等の記憶媒体にあらかじめ記憶されていてもよい。サーバ装置10及び端末装置20は、ネットワーク3を介して通信可能に接続される。例えば、サーバ装置10及び端末装置20が協動して、仮想現実に関する多様な処理を実行する。
各端末装置20は、サーバ装置10を介して互いに通信可能に接続されている。なお、以下では、「一の端末装置20が情報を他の端末装置20に送信する」とは、「一の端末装置20が情報をサーバ装置10を介して他の端末装置20に送信する」ことを意味する。同様に、「一の端末装置20が情報を他の端末装置20から受信する」とは、「一の端末装置20が情報をサーバ装置10を介して他の端末装置20から受信する」ことを意味する。ただし、変形例では、各端末装置20は、サーバ装置10を介さずに通信可能に接続されてもよい。
なお、ネットワーク3は、無線通信網や、インターネット、VPN(Virtual Private Network)、WAN(Wide Area Network)、有線ネットワーク、又はこれらの任意の組み合わせ等を含んでよい。
以下では、仮想現実生成システム1が、情報処理システムの一例を実現するが、特定の一の端末装置20の各要素(図1の端末通信部21~端末制御部25参照)が、情報処理システムの一例を実現してもよいし、複数の端末装置20が、協動して情報処理システムの一例を実現してもよい。また、サーバ装置10が単独で、情報処理システムの一例を実現してもよいし、サーバ装置10と1つ以上の端末装置20が、協動して情報処理システムの一例を実現してもよい。
ここで、本実施形態に係る仮想現実の概要について説明する。本実施形態に係る仮想現実は、例えば教育、旅行、ロールプレイング、シミュレーション、ゲームやコンサートのようなエンターテイメント等、任意の現実に対する仮想現実等であって、仮想現実の実行に伴い、アバターのような仮想現実媒体が用いられる。例えば、本実施形態に係る仮想現実は、3次元の仮想空間と、当該仮想空間内に登場する各種の仮想現実媒体と、当該仮想空間内で提供される各種のコンテンツとにより実現される。
仮想現実媒体は、仮想現実に使用される電子データであり、例えば、カード、アイテム、ポイント、サービス内通貨(又は仮想現実内通貨)、トークン(例えばNon-Fungible Token(NFT))、チケット、キャラクタ、アバター、パラメータ等、任意の媒体を含む。また、仮想現実媒体は、レベル情報、ステータス情報、パラメータ情報(体力値及び攻撃力等)又は能力情報(スキル、アビリティ、呪文、ジョブ等)のような、仮想現実関連情報であってもよい。また、仮想現実媒体は、ユーザによって仮想現実内で取得、所有、使用、管理、交換、合成、強化、売却、廃棄、又は贈与等され得る電子データであるが、仮想現実媒体の利用態様は本明細書で明示されるものに限られない。
本実施形態では、ユーザは、仮想空間内で各種コンテンツを視聴する視聴ユーザと、後述する配信者アバターを介して仮想空間内で後述する特定コンテンツを配信する配信ユーザとを含む。
なお、配信ユーザは、視聴ユーザとして、他の配信ユーザによる特定コンテンツを視聴することも可能であるし、逆に、視聴ユーザも、配信ユーザとして、特定コンテンツを配信することも可能でありうる。ただし、以下では、説明の複雑化を防止する都合上、視聴ユーザとは、その時の視聴ユーザであるとし、配信ユーザは、その時の配信ユーザであるとする。なお、以下では、配信ユーザと視聴ユーザとを特に区別しない場合は、単に「ユーザ」と称する場合がある。また、配信者アバターと他のユーザアバターを特に区別しない場合は、単に「ユーザアバター」と称する場合がある。
なお、ユーザアバターは、典型的には、正面方向を有するキャラクタの形態であり、人や動物又はその類を模した形態を有してよい。ユーザアバターは、各種アバターアイテムに対応付けられることで、多様な容姿(描画されたときの容姿)を有することができる。
本実施形態では、一のユーザには一のユーザアバターが対応付けられる。従って、一のユーザと、当該一のユーザに対応付けられるユーザアバターとは、一対一で対応する関係である。従って、以下の説明では、ユーザアバターとは、ユーザと同義となる場合があり、ユーザとは、ユーザアバターと同義になる場合がある。ただし、変形例では、一のユーザには、複数のユーザアバターが対応付け可能であってよい。この場合も、一のユーザが仮想空間で利用するユーザアバターがその時点で1つである場合、当該一のユーザと、当該一のユーザに対応付けられるユーザアバターとは、一対一で対応する関係である。
視聴ユーザ及び配信ユーザは、基本的には、頭部又は顔の一部に装着型装置を装着し、当該装着型装置を介して仮想空間を視認する。なお、装着型装置は、ヘッドマウントディスプレイやメガネ型装置であってもよい。メガネ型装置は、いわゆるAR(Augmented Reality)グラスやMR(Mixed Reality)グラスであってよい。いずれの場合でも、装着型装置は、端末装置20とは別であってもよいし、端末装置20の一部又は全部の機能を実現してもよい。本実施形態では、一例として、端末装置20は、ヘッドマウントディスプレイにより実現されるものとする。
以下では、サーバ装置10が配信する各種コンテンツのうちの、配信ユーザによる特定コンテンツを主に説明する。また、以下の説明では、ヘッドマウントディスプレイを介して視聴されることが好適なコンテンツについて説明する。
配信ユーザによる特定コンテンツとは、配信ユーザに係る配信者アバターであって、配信ユーザの向きや位置、動き等に応じて向きや位置、動き等を変化させる配信者アバターが仮想空間内に登場するコンテンツを指すものとする。なお、配信ユーザの向きや位置、動きとは、配信ユーザの顔や手等の身体の一部や全部の向き、位置、動きのみならず、配信ユーザの視線の向き、位置、動き又はその類を含む概念である。配信ユーザによる特定コンテンツは、典型的には、動画コンテンツである。
配信ユーザによる特定コンテンツは、典型的には、配信者アバターを介して任意の態様でエンターテイメントを提供するものである。例えば、配信ユーザによる特定コンテンツは、踊りや音楽、マジック等のような各種のパフォーマンス、チャット、会合、集会、会議、又はその類に関連してもよい。
また、配信ユーザによる特定コンテンツは、教育系であってもよい。例えば、配信ユーザによる特定コンテンツは、配信者アバターを介して配信ユーザからの指導やアドバイス等を含んでよい。例えば、ダンスのレッスンに係る仮想現実で提供されるコンテンツとして、ダンスの先生からの指導やアドバイス等を含んでよい。この場合、ダンスの先生が配信ユーザとなり、生徒が視聴ユーザとなり、仮想現実において生徒が先生から個別的に指導を受けることができる。
また、配信ユーザによる特定コンテンツは、2人以上の配信ユーザによるコラボレーションの形態で配信(以下、「コラボ配信」と省略)されてもよい。これにより、多様な態様での配信が可能となり、配信ユーザ間での交流が促進される。
なお、サーバ装置10は、配信ユーザによる特定コンテンツ以外のコンテンツを配信することも可能である。サーバ装置10が提供するコンテンツ(仮想現実で提供されるコンテンツ)の種類や数は、任意であるが、本実施形態では、一例として、サーバ装置10が提供するコンテンツは、各種の映像のようなデジタルコンテンツを含んでよい。映像は、リアルタイムの映像であってもよいし、非リアルタイムの映像であってもよい。また、映像は、実画像に基づく映像であってもよいし、CG(Computer Graphics)に基づく映像であってもよい。映像は、情報提供用の映像であってよい。この場合、映像は、特定のジャンルの情報提供サービス(旅や、住まい、食品、ファッション、健康、美容等に関する情報提供サービス)、特定のユーザによる放送サービス(例えばYoutube(登録商標))等に関するものであってよい。
仮想現実におけるコンテンツの提供態様は、多様であり、ヘッドマウントディスプレイの表示機能を利用して提供される態様以外であってもよい。例えば、コンテンツが映像である場合、仮想空間内の表示装置(仮想現実媒体)のディスプレイ上に、映像を描画することで、当該コンテンツの提供が実現されてもよい。なお、仮想空間内の表示装置は、任意の形態であり、仮想空間内に設置されるスクリーンや、仮想空間内に設置される大画面ディスプレイ、仮想空間内の携帯端末のディスプレイ等であってよい。
また、仮想現実におけるコンテンツは、ヘッドマウントディスプレイを介する以外の方法によっても視聴可能であってもよい。例えば、仮想現実におけるコンテンツは、スマートフォンやタブレット等を介して直接的に(ヘッドマウントディスプレイを介することなく)視聴されてもよい。
(サーバ装置の構成)
サーバ装置10の構成について具体的に説明する。サーバ装置10は、サーバコンピュータにより構成される。サーバ装置10は、複数台のサーバコンピュータにより協動して実現されてもよい。例えば、サーバ装置10は、各種のコンテンツを提供するサーバコンピュータや、各種の認証サーバを実現するサーバコンピュータ等により協動して実現されてもよい。また、サーバ装置10は、Webサーバを含んでよい。この場合、後述する端末装置20の機能の一部は、Webサーバから受領したHTML文書やそれに付随する各種プログラム(Javascript)をブラウザが処理することによって実現されてもよい。
サーバ装置10は、図1に示すように、サーバ通信部11と、サーバ記憶部12と、サーバ制御部13と、を備える。
サーバ通信部11は、外部装置と無線又は有線によって通信し、情報の送受信を行うインターフェースを含む。サーバ通信部11は、例えば無線LAN(Local Area Network)通信モジュール又は有線LAN通信モジュール等を含んでもよい。サーバ通信部11は、ネットワーク3を介して、端末装置20との間で情報を送受信可能である。
サーバ記憶部12は、例えば記憶装置であって、仮想現実に係る各種処理に必要な種々の情報及びプログラムを記憶する。
サーバ制御部13は、専用のマイクロプロセッサ又は特定のプログラムを読み込むことにより特定の機能を実現するCPU(Central Processing Unit)や、GPU(Graphics Processing Unit)等を含んでよい。例えばサーバ制御部13は、端末装置20と協動して、端末装置20の表示部23に対するユーザ操作に応じて仮想現実アプリケーションを実行する。
(端末装置の構成)
端末装置20の構成について説明する。図1に示すように、端末装置20は、端末通信部21と、端末記憶部22と、表示部23と、入力部24と、端末制御部25とを備える。
端末通信部21は、外部装置と無線又は有線によって通信し、情報の送受信を行うインターフェースを含む。端末通信部21は、例えばLTE(Long Term Evolution)(登録商標)や、LTE-A(LTE-Advanced)、第五世代移動通信システム、UMB(Ultra Mobile Broadband)等のモバイル通信規格に対応する無線通信モジュール、無線LAN通信モジュール、又は有線LAN通信モジュール等を含んでもよい。端末通信部21は、ネットワーク3を介して、サーバ装置10との間で情報を送受信可能である。
端末記憶部22は、例えば一次記憶装置及び二次記憶装置を含む。例えば端末記憶部22は、半導体メモリ、磁気メモリ、又は光メモリ等を含んでもよい。端末記憶部22は、サーバ装置10から受信する、仮想現実の処理に用いられる種々の情報及びプログラムを記憶する。仮想現実の処理に用いられる情報及びプログラムは、端末通信部21を介して外部装置から取得されてもよい。例えば、仮想現実アプリケーションプログラムが、所定のアプリケーション配信サーバから取得されてもよい。以下、アプリケーションプログラムを、単にアプリケーションともいう。
また、端末記憶部22は、仮想空間を描画するためのデータ、例えば建物のような屋内の空間や、屋外の空間の画像等を記憶する。なお、仮想空間を描画するためのデータは、仮想空間ごとに複数種類用意され、使い分けられてもよい。
また、端末記憶部22は、3次元の仮想空間内に配置された種々のオブジェクトに投影(テクスチャマッピング)するための種々の画像(テクスチャ画像)を記憶する。
例えば、端末記憶部22は、各ユーザに対応付けられるユーザアバターの描画情報を記憶する。仮想空間内に各ユーザアバターは、ユーザアバターの描画情報に基づいて描画される。
また、端末記憶部22は、例えば各種のギフトオブジェクト、建物、壁、又はNPC(Non Player Character)等のような、ユーザアバターとは異なる各種のオブジェクトに係る描画情報を記憶する。仮想空間内に各種のオブジェクトは、かかる描画情報に基づいて描画される。なお、ギフトオブジェクトとは、一のユーザから他のユーザへのギフト(贈り物)に対応するオブジェクトであり、アイテムの一部である。ギフトオブジェクトは、ユーザアバターの身に着けるもの(服やアクセサリー)や配信画像を装飾するもの(花火やお花等)、背景(壁紙)又はその類や、ガチャ(抽選)を回すことのできるチケット又はその類であってよい。本件出願において用いられる「ギフト」という用語は、「トークン(token)」という用語と同様の概念を意味する。したがって、「ギフト」という用語を「トークン(token)」という用語に置き換えて、本件出願に記載された技術を理解することも可能である。
表示部23は、例えば液晶ディスプレイ又は有機EL(Electro-Luminescence)ディスプレイ等の表示デバイスを含む。表示部23は、多様な画像を表示可能である。表示部23は、例えばタッチパネルで構成され、多様なユーザ操作を検出するインターフェースとして機能する。なお、表示部23は、上述したように、ヘッドマウントディスプレイに内蔵される形態であってよい。
入力部24は、物理キーを含んでもよいし、マウス等のようなポインティングデバイスをはじめとする任意の入力インターフェースを更に含んでもよい。また、入力部24は、音声入力やジェスチャ入力、視線入力のような、非接触型のユーザ入力を受付可能であってもよい。なお、ジェスチャ入力には、ユーザの各種状態を検出するためのセンサ(画像センサや、加速度センサ、距離センサ等)や、センサ技術(例えば深度センサや、カメラを統合したモーションキャプチャ、ジョイパッドのようなコントローラ等)が利用されてもよい。モーションキャプチャの場合、ユーザの各種関節の位置情報(関節位置情報)や角度情報(関節角度情報)が取得されてもよい。以下、関節位置情報及び関節角度情報の双方又はいずれか一方を指す情報として、「関節情報」と称する場合がある。また、画像センサの場合、ユーザの関節以外の可動部位(例えば目や口)の動き情報が取得されてもよい。また、視線検出用のカメラは、ヘッドマウントディスプレイ内に配置されてもよい。なお、上述したように、ユーザの各種状態は、例えばユーザの向きや位置、動き又はその類であり、この場合、ユーザの向きや位置、動きとは、ユーザの手や身体の向き、位置、動きのみならず、配信ユーザの視線の向き、位置、動き又はその類を含む概念である。
端末制御部25は、1つ以上のプロセッサを含む。端末制御部25は、端末装置20全体の動作を制御する。
端末制御部25は、端末通信部21を介して情報の送受信を行う。例えば、端末制御部25は、仮想現実に係る各種処理に用いられる種々の情報及びプログラムを、サーバ装置10及び他の外部サーバの少なくとも一方から受信する。端末制御部25は、受信した情報及びプログラムを、端末記憶部22に記憶する。例えば、端末記憶部22には、Webサーバに接続するためのブラウザ(インターネットブラウザ)が格納されてよい。
端末制御部25は、ユーザの操作に応じて仮想現実アプリケーションを起動する。端末制御部25は、サーバ装置10と協動して、仮想現実に係る各種処理を実行する。例えば、端末制御部25は、仮想空間の画像を表示部23に表示させる。画面上には、例えばユーザ操作を検出するGUI(Graphic User Interface)が表示されてもよい。端末制御部25は、入力部24を介して、ユーザ操作を検出可能である。例えば端末制御部25は、ユーザのジェスチャによる各種操作(タップ操作、ロングタップ操作、フリック操作、及びスワイプ操作等に対応する操作)を検出可能である。端末制御部25は、操作情報をサーバ装置10に送信する。
端末制御部25は、仮想空間(画像)とともにユーザアバターを描画し、表示部23に表示させる。この場合、例えば、図2に示すように、左右の目でそれぞれ視認される画像G200、G201を生成することで、立体視画像を生成してよい。図2には、左右の目でそれぞれ視認される画像G200、G201が模式的に示されている。なお、以下では、特に言及しない限り、仮想空間の画像とは、画像G200、G201で表現される画像全体を指す。また、端末制御部25は、例えば配信ユーザによる各種操作に応じて、仮想空間内においてユーザアバターの各種動きを実現させる。端末制御部25の具体的な描画処理は、以下で詳説する。
(アニメーション描画機能)
本実施形態では、描画処理は、所定オブジェクトとユーザオブジェクトとの間の距離が第1所定距離d1以下になると、所定オブジェクトとユーザオブジェクトとの組み合わせに係るアニメーションを描画するアニメーション描画機能を実現する。この場合、アニメーションは、事前に用意されるアニメーションであり、所定オブジェクトごとにかつユーザオブジェクトごとに用意されてよい。
所定オブジェクトは、仮想空間内に配置可能な各種オブジェクトのうちの任意のオブジェクトであり、典型的には、仮想空間内に配置可能な各種オブジェクトの一部であるが、仮想空間内に配置可能な各種オブジェクトの全部であってもよい。
本実施形態では、所定オブジェクトは、一例として、仮想空間内に配置可能な各種オブジェクトのうちの、ユーザアバターが扱うことができるオブジェクト(例えば手にすることができるオブジェクト)であるとする。例えば、所定オブジェクトは、ユーザアバターが手に取ることができるペン等の物体に係るオブジェクトを含んでよい。ただし、所定オブジェクトに対応する物体は、現実において対応する物体が存在する必要はなく、仮想空間においてのみ存在する物体であってもよい。また、仮想空間内に配置可能な各種オブジェクトがギフトオブジェクトを含む構成の場合、所定オブジェクトは、好ましくは、ギフトオブジェクトの全部又は一部を含む。
所定オブジェクトとユーザオブジェクトとの間の距離は、仮想空間内における距離(例えば空間距離)であり、所定オブジェクトの位置情報と、ユーザオブジェクトの位置情報とに基づいて算出されてよい。この場合、所定オブジェクトの位置情報は、当該所定オブジェクトを仮想空間に配置する際に用いる位置情報であってよく、例えば、所定オブジェクトの代表点(例えば重心や図心)の位置情報であってよい。また、ユーザオブジェクトの位置情報は、ユーザオブジェクトの手の位置情報であってよい。この場合、ユーザオブジェクトの手の位置情報は、ユーザオブジェクトの手の最も先の部分の位置情報であってよい。例えば、指の関節位置情報を取得可能な構成の場合、ユーザオブジェクトの手の位置情報は、指の関節位置情報であってよい。また、指の関節位置情報は取得されず手首の関節位置情報を取得可能な構成の場合、ユーザオブジェクトの手の位置情報は、手首の関節位置情報であってよい。
以下では、ユーザの手又はユーザオブジェクトの手とは、特に言及しない限り、ユーザ又はユーザオブジェクトの手首よりも先の掌及び指に対応する部分を指す。
第1所定距離d1は、任意であるが、比較的小さい値であり、所定オブジェクトとユーザオブジェクトとの間の接触が検知される距離と同様であってよい。第1所定距離d1は、所定オブジェクトのサイズ(仮想空間における実際のサイズ、又は仮想空間の画像上でのサイズ)に応じて設定されてもよい。例えば、第1所定距離d1は、所定オブジェクトのサイズが小さくなるほど小さくなる態様で設定されてもよい。なお、仮想空間の画像上での所定オブジェクトのサイズに応じて設定される場合、第1所定距離d1は、同じ所定オブジェクトに対しても異なる値となりうる。
図3は、所定オブジェクトの一例である鉛筆オブジェクトM3に係る第1所定距離d1及び第2所定距離d2の説明図である。
図3に示す例では、鉛筆オブジェクトM3に係る第1所定距離d1を定める球301(図3では、2次元の円で図示)が示されている。当該球301は、第1所定距離d1の半径を有し、その中心は、鉛筆オブジェクトM3の図心(代表点)に設定されている。なお、図3には、球301よりも大きい半径d2(以下、「第2所定距離d2」と称する)の球302(図3では、2次元の円で図示)も併せて示されている。球302の中心も、鉛筆オブジェクトM3の図心(代表点)に設定されている。第2所定距離d2の半径に係る球302については後述する。
所定オブジェクトとユーザオブジェクトとの組み合わせに係るアニメーションは、任意であり、例えば、所定オブジェクトを触る、所定オブジェクトを持つ、所定オブジェクトを握る、所定オブジェクトを摘む、所定オブジェクトを持ち上げる、所定オブジェクトを挟むといったような、各種の手の動きを表すアニメーションである。また、所定オブジェクトとユーザオブジェクトとの組み合わせに係るアニメーションは、片手に係るアニメーションであってもよいし、両手に係るアニメーションであってもよい。
アニメーションは、好ましくは、ユーザオブジェクトの全体のうちの手の部分のみに関する。これは、手の部分は、指があるが故に関節数が多く、モーションキャプチャ等によって各関節の位置情報を取得及び利用すると処理負荷が有意に増加する傾向があるためである。
アニメーションは、所定オブジェクトごとに用意されるので、一の種類の所定オブジェクトに対して用意されるアニメーションの種類は、当該一の種類の所定オブジェクトの属性に応じて決定されてもよい。例えば、所定オブジェクトが、現実において比較的重量の大きい物体(例えばバーベル)に対応するオブジェクトの場合、片手で“所定オブジェクトを持ち上げる”といった種類のアニメーションは用意されなくてもよい。
アニメーションは、所定オブジェクトの動きや変形等の変化をも表現してもよい。これは、所定オブジェクトの種類によっては、手で扱われることで所定オブジェクトの動きを与えるほうが、現実との整合性が高くなる場合があるためである。例えば、所定オブジェクトが、飲料が入った瓶や、コップ、ジョッキ等に対応する場合、アニメーションは、飲料の動き(瓶から飲料がコップやジョッキに注がれる場合はその動きや、コップの動きに応じたコップ内の液面の動き、泡の発生など)を表現してもよい。
図4及び図5は、所定オブジェクトの一例である鉛筆オブジェクトM3とユーザアバターの手パーツM2との組み合わせに係るアニメーションの説明図である。
図4は、仮想空間の画像における鉛筆オブジェクトM3とユーザアバターの手の部分(以下、「手パーツM2」とも称する)とを示す図であり、鉛筆オブジェクトM3とユーザアバターの手パーツM2との間の距離が第1所定距離d1以下に至る直前の状態を示す図である。図5は、仮想空間の画像における鉛筆オブジェクトM3とユーザアバターの手パーツM2とを示す図であり、鉛筆オブジェクトM3とユーザアバターの手パーツM2との間の距離が第1所定距離d1以下となった直後の状態を示す図である。
図4及び図5に示す例では、鉛筆オブジェクトM3とユーザアバターの手パーツM2との間の距離d3が第1所定距離d1(図3参照)以下になると、ユーザアバターの手が鉛筆オブジェクトM3を握るアニメーションが描画される。なお、図5には、ユーザアバターの手が鉛筆オブジェクトM3を握っている状態が示されているが、当該アニメーションは、図4に示す状態から、図5に示す状態に至るまでのアニメーション部分を含んでよい。
ここで、図4及び図5に示すようなアニメーションは、ユーザアバターの手の各関節の細かな動きを表現するものであるが、モーションキャプチャ等によってユーザの各関節の位置情報を取得することなく、描画できる。すなわち、図4及び図5に示すようなアニメーションは、あらかじめ用意されるデータ(描画データ)に基づいて生成されるので、モーションキャプチャ等によってユーザの各関節の位置情報を取得することを要しない。
このようにして、本実施形態によれば、処理負荷を過大とすることなく、仮想空間におけるユーザオブジェクトの細かな動きを描画することが可能となる。
図6は、本実施形態で好適に利用可能なステートマシンの一例の説明図である。図6に示す例では、一例として、各状態ST600~ST625が示されている。状態ST600は、仮想空間内へとユーザアバターが入った後(エントリ後)に形成されるデフォルト状態(“Default”)に対応し、状態ST610は、各状態ST620~ST625のうちの任意の状態を表す任意状態(“Any State”)に対応する。各状態ST620~ST625は、遷移時にアニメーションの描画を伴う状態である。例えば“PencilHand”は、ユーザアバターが鉛筆オブジェクト(図5参照)を握っている状態であり、鉛筆オブジェクトとユーザアバターとが親子関係となっている状態に対応する。なお、この状態“PencilHand”において、所定オブジェクトであるボトルオブジェクト(図示せず)とユーザアバターの手パーツM2との間の距離が第1所定距離d1以下になると、状態“BottleHand”は“Any State”から遷移可能であることから、状態“PencilHand”からダイレクトに遷移する。この場合、ユーザアバターがボトルオブジェクト(図示せず)を持つ状態へ至るアニメーションが描画されてよい。
このようなステートマシンを利用して各種アニメーションの変化を実現することで、各種アニメーションのバリエーションを容易に増加させることができる。例えば、新たに一の所定オブジェクトに係るアニメーションを追加する場合、例えば任意状態(“Any State”)からの遷移に基づき記述することで、既存のアニメーションに影響することなく追加できる。これにより、設計工数を効率的に削減できるとともに、ロジックの簡素化に伴う処理負荷の低減を図ることができる。
次に、図7以降を参照して、上述した仮想現実生成システム1の構成例を順に説明していく。
図7は、端末装置20の各種機能のうちの、上述したアニメーション描画機能に関する構成を示す概略的なブロック図である。図8は、アバター記憶部241内のデータの一例の説明図である。図9は、所定オブジェクト記憶部242内のデータの一例の説明図である。図10は、アニメーションデータ記憶部244内のデータの一例の説明図である。図11は、関節位置情報の説明図である。
以下では、一の端末装置20について説明するが、他の端末装置20についても実質的に同様であってよい。また、以下では、ユーザとは、特に言及しない限り、当該一の端末装置20を利用するユーザを指し、ユーザアバターM1とは、特に言及しない限り、当該ユーザに対応付けられるユーザアバターM1、又は、配信画像H2においては配信者アバターを指す。
端末装置20は、図7に示すように、オブジェクト情報記憶部240と、アニメーションデータ記憶部244と、サーバデータ取得部250と、ユーザ入力取得部252と、アバター動作処理部254と、描画処理部258と、を含む。
なお、オブジェクト情報記憶部240からアニメーションデータ記憶部244の各機能は、図1に示した端末装置20の端末記憶部22により実現できる。また、サーバデータ取得部250から描画処理部258の各機能は、図1に示した端末装置20の端末制御部25が、端末通信部21、端末記憶部22、表示部23及び入力部24と協動して、仮想現実アプリケーションを実行することで実現できる。
オブジェクト情報記憶部240は、仮想空間に係る各種オブジェクトに関するオブジェクト情報を記憶する。オブジェクト情報記憶部240は、アバター記憶部241と、所定オブジェクト記憶部242とを含む。
アバター記憶部241には、ユーザアバターM1を描画するための各種情報(以下、「ユーザアバターM1の描画情報」とも称する)が記憶される。図8に示す例では、ユーザアバターM1の描画情報800は、各アバターIDに、顔パーツID、髪型パーツID、服装パーツID等が対応付けられる。顔パーツID、髪型パーツID、服装パーツID等の容姿に係るパーツ情報は、ユーザアバターM1を特徴付けるパラメータであり、対応するユーザにより選択されてよい。ユーザアバターM1に係る顔パーツID、髪型パーツID、服装パーツID等の容姿に係る情報は、各ユーザが多様に選択できるように、複数種類用意される。また、顔パーツIDについては、顔の形、目、口、鼻等の各種類にそれぞれパーツIDが用意され、顔パーツIDに係る情報は、当該顔を構成する各パーツのIDの組み合わせで管理されてもよい。この場合、各アバターIDに紐付けられた容姿に係る各IDに基づいて、端末装置20側において各ユーザアバターM1を描画することが可能である。
所定オブジェクト記憶部242には、所定オブジェクトに関する各種情報(以下、「オブジェクト情報」とも称する)が記憶される。図9に示す例では、オブジェクト情報900は、各所定オブジェクトIDに、位置情報、第1所定距離d1(図3参照)、第2所定距離d2(図3参照)が対応付けられる。位置情報は、対応する所定オブジェクトの位置(仮想空間における位置)を表し、上述したように所定オブジェクトの代表点の位置情報であってよい。なお、所定オブジェクトが移動可能なオブジェクトの場合、位置情報は、対応する所定オブジェクトの移動に応じて更新されてよい。第1所定距離d1及び第2所定距離d2は、図3を参照して上述したとおりである。なお、第1所定距離d1及び/又は第2所定距離d2は、すべての所定オブジェクトに対して同一であってもよく、この場合、オブジェクト情報900は簡略化されてよい。
アニメーションデータ記憶部244には、上述した各種アニメーションを描画するためのデータ(以下、「アニメーション情報」とも称する)が記憶される。図10に示すアニメーション情報1000は、特定の一のユーザアバターM1に対応付けられたアニメーション情報を示す。図10に示すアニメーション情報1000のようなアニメーション情報は、ユーザアバターM1ごとに用意されてよい。
図10に示すアニメーション情報1000は、所定オブジェクトIDごとに、データIDが対応付けられている。データIDは、アニメーションデータごとに付与されるIDであり、一のデータIDは、一意に一の特定のアニメーションデータに対応する。図10に示すアニメーション情報1000では、所定オブジェクトID“B01”には、2つのデータIDが対応付けられており、2つのデータIDは、それぞれ、第1アニメーションデータ(第1描画情報の一例)及び第2アニメーションデータ(第2描画情報の一例)に対応付けられている。また、所定オブジェクトID“B02”には、第1アニメーションデータに係る2つのデータIDが対応付けられている。
第1アニメーションデータは、所定オブジェクトとユーザアバターM1との間の距離が第1所定距離d1以下となった場合のアニメーション(第1アニメーションの一例)を描画するためのデータである。第2アニメーションデータは、所定オブジェクトとユーザアバターM1との間の距離が第1所定距離d1よりも大きいが第2所定距離d2以下となった場合のアニメーション(第2アニメーションの一例)を描画するためのデータである。なお、第2アニメーションデータは、省略されてもよい。この場合、第2アニメーションデータに代えて、ユーザアバターM1の手の所定姿勢(例えば所定オブジェクトを指差す姿勢)を表す静止画データが利用されてもよい。
本実施形態では、一の端末装置20のアニメーションデータ記憶部244に記憶される各種アニメーションデータは、当該一の端末装置20のユーザに対応付けられるユーザアバターM1に係る各種アニメーションデータや、配信者アバターに係る各種アニメーションデータを含んでよい。すなわち、アニメーションは、ユーザアバターM1ごとに用意され、一の端末装置20のアニメーションデータ記憶部244に記憶される各種アニメーションデータは、対応するユーザアバターM1や各種配信者アバターに対して用意されたアニメーションを描画するためのデータである。ただし、変形例では、アニメーションは、1つ以上の種類のユーザアバターM1に対して共通であってもよい。
サーバデータ取得部250は、サーバ装置10から、端末装置20側においてアニメーション描画機能を実現するための各種情報やデータを取得する。例えば、サーバデータ取得部250は、オブジェクト情報記憶部240及びアニメーションデータ記憶部244内に記憶(及び更新)されるべき各種データ及びその更新用データを取得する。
ユーザ入力取得部252は、入力部24を介したユーザによる各種入力を取得する。なお、配信画像H2を描画する場合は、ユーザ入力取得部252は、配信ユーザに係る各種入力を取得する。入力部24を介した各種入力は、上述したとおりであってよい。本実施形態では、一例として、ユーザ入力取得部252は、モーションキャプチャに基づいて、ユーザの各種関節に係る関節情報を取得する。この場合、関節情報は、ユーザのすべての関節のうちの、一部の関節に関する。具体的には、本実施形態では、関節情報は、ユーザの指の関節を含まない関節に関する。例えば、関節情報は、図11に示すように、ユーザの首、肩、肘、手首、股、膝、足首等の関節に関する情報であってよい。この場合、関節情報は、姿勢と骨格を表現する行列の変換(位置と角度)、その行列に従属するメッシュの変形データの形式であってもよい。
あるいは、他の実施形態では、ユーザ入力取得部252が取得する関節情報は、ユーザの指の関節に係る関節情報を含んでもよい。ただし、この場合、ユーザの指の関節に係る関節情報は、アニメーションの描画には利用されなくてよい。あるいは、ユーザの指の関節に係る関節情報は、アニメーションの描画において一部のみが利用されてもよい。
なお、以下では説明上、ユーザアバターM1は、ユーザの各種関節に対応する各種関節を有するものとする。ただし、ユーザアバターM1の各種関節の位置や動き(可動域)等は、人の位置や動き等と完全に一致する必要はなく、適宜、異なってよい。図11に示す例では、ユーザアバターM1は、関節(図11で黒丸のマークで図示)を介して連結された複数のパーツを含み、複数のパーツは、手に対応する手パーツM2(第1パーツの一例)と、腕パーツを含む身体側の各パーツM5(第2パーツの一例)とを有する。手パーツM2は、手首の関節を介して、身体側の各パーツM5に連結されている。ユーザアバターM1が有する関節の数や場所は、適宜、設定されてよい。
アバター動作処理部254は、ユーザ入力取得部252により取得された各種入力に基づいて、ユーザアバターM1の動きを決定する。ユーザアバターM1の動きとは、全体の動きのみならず、一部のパーツの動きをも含んでよい。
ユーザ入力取得部252により取得された入力が関節情報を含む場合、アバター動作処理部254は、関節情報に基づいて、ユーザアバターM1の姿勢や動きを決定する。この場合、関節情報が表す現実の座標系におけるユーザの各関節の位置及び/又は角度が、仮想空間の座標系におけるユーザアバターM1の各関節の位置及び/又は角度に整合するように、ユーザアバターM1の姿勢や動きが決定されてもよい。
また、ユーザ入力取得部252により取得された入力が、ユーザアバターM1の各種関節以外の可動部位(例えば口や目等)に係る動き情報を含む場合、アバター動作処理部254は、動き情報に基づいて、ユーザアバターM1の可動部位の状態(動き)を決定してよい。この場合、アバター動作処理部254は、かかる動き情報に、ユーザアバターM1の可動部位の状態(動き)が整合するように、ユーザアバターM1の可動部位の状態(動き)を決定してもよい。
本実施形態では、アバター動作処理部254は、ユーザ入力取得部252により取得された各種入力に基づいて、ユーザアバターM1の位置/向き情報として、ユーザアバターM1の全体としての位置及び向きを表す情報と、ユーザアバターM1の各種関節に係る関節情報とを更新する。ユーザアバターM1の全体としての位置は、例えばユーザアバターM1の代表点(例えば胴体部分の中心や、任意の1つの関節)の位置であってよく、ユーザアバターM1の全体としての向きは、例えばユーザアバターM1の胴体部分の正面方向に対応してよい。また、アバター動作処理部254は、ユーザアバターM1の位置/向き情報に、決定したユーザアバターM1の可動部位の状態(動き)を表す情報を含めてもよい。なお、他の実施形態では、アバター動作処理部254は、ユーザアバターM1の位置/向き情報に含める情報として、ユーザ入力取得部252により取得された動き情報を、そのまま利用してもよい。
描画処理部258は、仮想空間内に仮想的に配置される仮想カメラの視界内の画像(以下、「端末用画像」とも称する)を生成する。なお、仮想カメラは、端末装置20ごとに設定されてよい。
図12は、仮想カメラ60の視界の一例の説明図である。図12には、仮想空間におけるユーザアバターM1と仮想カメラ60とともに、仮想カメラ60の視界がハッチング範囲R1100により上面視で模式的に示されている。なお、仮想カメラ60の向きは、必ずしも水平(仮想空間のフィールドに対して平行)である必要はなく、多様な自由度で変化されてもよい。仮想カメラ60の位置も多様な自由度で変化されてもよい。なお、以下では、仮想カメラ60の視界は、各種のカメラパラメータの値に応じて定まることとする。
描画処理部258は、通常モードと、アニメーションモードとを含む複数のモード間で遷移する態様で動作してよい。描画処理部258は、アバター描画部2581と、オブジェクト描画部2582と、ベース画像描画部2583と、アニメーション描画部2584とを含む。
アバター描画部2581は、上述したような端末用画像のうちの、ユーザアバターM1に係る部分を描画する。具体的には、アバター描画部2581は、仮想カメラ60の各カメラパラメータの値と、各ユーザアバターM1の位置/向き情報と、ユーザアバターM1の描画情報800(図8参照)等に基づいて、仮想カメラの視野内に位置しうる1つ以上のユーザアバターM1を描画する。なお、アバター描画部2581によるユーザアバターM1の描画は、後述するベース画像上に重畳されてもよい。
なお、上述したように、一のユーザアバターM1の位置/向き情報が、ユーザアバターM1の複数のパーツのそれぞれの位置や向きを表す情報を含む場合、アバター描画部2581は、かかる情報に基づいて、ユーザアバターM1の複数のパーツのそれぞれの位置や向きを表現してよい。これにより、ユーザアバターM1の動きを、より自然に表現できる。例えば、特定パーツが上半身の場合、下半身に対して上半身をひねるような動きも表現可能となりうる。
また、上述したように、一のユーザアバターM1の位置/向き情報が、当該一のユーザアバターM1の各種関節に係る関節情報を含む場合、アバター描画部2581は、かかる関節情報に、ユーザアバターM1の各種関節の状態が整合するように、ユーザアバターM1を描画してもよい。
また、上述したように、一のユーザアバターM1の位置/向き情報が、当該一のユーザアバターM1の各種関節以外の可動部位(例えば口や目等)に係る動きを表す情報を含む場合、アバター描画部2581は、かかる情報に基づいて、ユーザアバターM1の可動部位の対応する動きが表現される態様で、ユーザアバターM1の可動部位を描画してもよい。
アバター描画部2581は、通常モードでは、手パーツM2を含むユーザアバターM1全体を描画する。他方、アバター描画部2581は、後述するアニメーション描画部2584が動作するアニメーションモードでは、アニメーション描画部2584により描画されるパーツ(例えば手パーツM2)については描画することなく、アニメーション描画部2584により描画されないパーツ(例えば、手パーツM2以外の身体側の各パーツM5)のみを描画する。
なお、上述したように、ユーザの指の関節に係る関節情報が取得される構成では、アバター描画部2581は、通常モードにおいては、ユーザの指の関節に係る関節情報に基づいて、ユーザアバターM1の手パーツM2を描画してもよい。ただし、この場合も、アバター描画部2581は、アニメーションモードにおいては、ユーザの指の関節に係る関節情報を利用することなく(あるいは一部のみを用いて)、アニメーション描画部2584により描画されないパーツ(例えば、手パーツM2以外の身体側の各パーツM5)のみを描画する。
同様に、上述したように、可動部位の動き情報が取得される構成では、アバター描画部2581は、可動部位の動き情報を通常モードにおいてのみ利用することとしてもよい。すなわち、アバター描画部2581は、アニメーションモードにおいては、可動部位の動き情報を利用することなく(あるいは一部のみを用いて)、アニメーション描画部2584により描画されないパーツ(例えば、手パーツM2以外の身体側の各パーツM5)のみを描画する。ただし、可動部位が、アニメーション描画部2584により描画されないパーツに含まれない場合は、アバター描画部2581は、アニメーションモードにおいても、可動部位の動きを表す情報に基づいて、ユーザアバターM1の可動部位を描画してもよい。
なお、アバター描画部2581により描画されるユーザアバターM1は、他のユーザに対応付けられる他のユーザアバターM1を含んでよい。すなわち、仮想カメラ60からの視野内に他のユーザアバターM1が位置する場合、アバター描画部2581は、当該他のユーザアバターM1を同様に描画してよい。
オブジェクト描画部2582は、上述したような端末用画像のうちの、所定オブジェクトを描画する。なお、各オブジェクトの描画情報は、ユーザアバターM1の描画情報800(図8参照)と同様の態様で、図示しない記憶部に記憶されてよい。
オブジェクト描画部2582は、通常モードでは、対応するオブジェクトの描画情報に基づいて、所定オブジェクトを描画する。他方、オブジェクト描画部2582は、後述するアニメーション描画部2584が動作するアニメーションモードでは、仮想カメラの視野内の所定オブジェクトのうちの、アニメーション描画部2584により描画される所定オブジェクトについては描画することなく、アニメーション描画部2584により描画されない所定オブジェクトのみを描画する。
ベース画像描画部2583は、上述したような端末用画像の基本部分を描画する。すなわち、ベース画像描画部2583は、アバター描画部2581やオブジェクト描画部2582、後述するアニメーション描画部2584による描画が重畳される前の基本部分を描画する。例えば、ベース画像描画部2583は、仮想空間の描画情報や、仮想カメラ60の各カメラパラメータの値等に基づいて、仮想カメラ60からの視野内のフィールドや背景等を描画する。なお、仮想空間の描画情報は、あらかじめ用意されてよいが、事後的又は動的に更新等されてもよい。なお、仮想空間の描画方法は、任意であるが、例えばフィールドオブジェクトや背景オブジェクトを、適切な平面や曲面等にマッピングすることにより実現されてもよい。
アニメーション描画部2584は、後述するサーバ装置10のアニメーション制御部157からの指令に基づいて、アニメーションデータ記憶部244内のアニメーションデータ(図10参照)から、当該指令に含まれるデータIDに対応したアニメーションデータを抽出する。そして、アニメーション描画部2584は、抽出したアニメーションデータに基づいて、図4及び図5を参照して上述したような各種アニメーションを描画する。
本実施形態では、アニメーションは、所定オブジェクトとユーザアバターM1の手パーツM2との組み合わせに関する。この場合、アニメーション描画部2584は、ユーザアバターM1の手首の位置や向きに基づいて、ユーザアバターM1の手首の関節に手パーツM2のアニメーションが自然な態様で連結されるように描画してよい。
なお、本実施形態では、所定オブジェクトはギフトオブジェクトを含んでよく、この場合、配信ユーザによる配信画像H2(特定コンテンツに係る配信画像)においてアニメーションを描画してもよい。
例えば、図13から図15は、ギフトオブジェクトに係るアニメーションの一例の説明図であり、配信画像H2の一例を示す図である。図13から図15は、時系列順の配信画像H2であり、上から落下してくるぬいぐるみのギフトオブジェクトG13(所定オブジェクト)に対するアニメーションの説明図である。図13に示すように、ぬいぐるみのギフトオブジェクトG13が落下してくると、図14に示すように、配信者アバターであるユーザアバターM1は、ぬいぐるみのギフトオブジェクトG13に手パーツM2を近づける。そして、ぬいぐるみのギフトオブジェクトG13とユーザアバターM1の手パーツM2の間の距離が第1所定距離d1以下になると、ぬいぐるみのギフトオブジェクトG13を手で掴んで抱き抱えるまでのアニメーション(ユーザアバターM1とぬいぐるみのギフトオブジェクトG13との組み合わせに係るアニメーション)が描画される。図15には、アニメーションの最後のフレームとして、ぬいぐるみのギフトオブジェクトG13を抱き抱えているユーザアバターM1が描画されている。
なお、図13から図15に示す例では、ハート型のギフトオブジェクトG12も、所定オブジェクトであるとする。この場合、ハート型のギフトオブジェクトG12とユーザアバターM1の手パーツM2の間の距離が第1所定距離d1以下にならず、それ故に、ユーザアバターM1とハート型のギフトオブジェクトG12との組み合わせに係るアニメーションについては描画されない(この場合、ハート型のギフトオブジェクトG12は通常モードで仮想的な重力の影響により落下する態様で描画される)。
なお、図13から図15に示す例では、ぬいぐるみのギフトオブジェクトG13が所定オブジェクトであるが、例えば、ラーメンのような食べ物に係るオブジェクトが所定オブジェクトである場合、食べ物に係るオブジェクトとユーザアバターM1に係るアニメーションとして、ユーザアバターM1が食べ物を箸やフォーク等を用いて食べる態様が描画されてもよい。この場合、箸やフォーク等もギフトオブジェクトとしてユーザアバターM1に贈られたアイテムであってもよい。
図16は、サーバ装置10の各種機能のうちの、上述したアニメーション描画機能に関する構成を示す概略的なブロック図である。図17は、アバター記憶部141内のデータの一例の説明図である。図18は、所定オブジェクト記憶部142内のデータの一例の説明図である。図19は、距離状態記憶部144内のデータの一例の説明図である。図20は、アニメーション情報記憶部146内のデータの一例の説明図である。
サーバ装置10は、図16に示すように、オブジェクト情報記憶部140と、距離状態記憶部144と、アニメーション情報記憶部146と、位置関係算出部150(情報生成部の一例)と、干渉検出部154と、オブジェクト管理部156と、アニメーション制御部157と、禁止処理部158とを含む。
なお、オブジェクト情報記憶部140からアニメーション情報記憶部146は、図1に示したサーバ記憶部12により実現でき、位置関係算出部150から禁止処理部158は、図1に示したサーバ制御部13により実現できる。また、位置関係算出部150から禁止処理部158のうちの一部(端末装置20との通信を行う機能部)は、図1に示したサーバ制御部13とともにサーバ通信部11により実現できる。
オブジェクト情報記憶部140は、仮想空間に係る各種オブジェクトに関するオブジェクト情報を記憶する。オブジェクト情報記憶部140は、アバター記憶部141と、所定オブジェクト記憶部142とを含む。
アバター記憶部141には、上述した端末装置20のアバター記憶部241に記憶されるデータの元データに加えて、ユーザアバターM1の所定パラメータの値が記憶されてよい。図17に示すアバター情報1700では、アバターIDごとに所定パラメータの値が対応付けられている。図17では、所定パラメータとして、ユーザアバターM1間の力関係を表す力パラメータと、ユーザアバターM1間の優先関係を表す優先度パラメータが例示されている。各ユーザアバターM1には、力パラメータの値と、優先度パラメータの値とが対応付けられる。なお、各ユーザアバターM1に対応付けられる力パラメータの値や優先度パラメータの値は、変化可能であってよい。例えば、一のユーザアバターM1に対応付けられる力パラメータの値や優先度パラメータの値は、当該一のユーザアバターM1の活動内容(例えば仮想空間における活動内容であって、他のユーザに貢献する活動内容)に応じて増加されてもよい。あるいは、一のユーザアバターM1に対応付けられる力パラメータの値や優先度パラメータの値は、当該一のユーザアバターM1に対応付けられるアバターアイテムに応じて変化されてもよい。
また、アバター記憶部141には、フレンドアバターに関する情報が記憶されてよい(図17のアバター情報1700参照)。フレンドアバターに関する情報は、対応するユーザアバターM1間の親密度が閾値以上であることを表す情報である。すなわち、一のユーザアバターM1に対応付けられるフレンド情報は、当該一のユーザアバターM1に対して親密度が閾値以上である1つ以上のユーザアバターM1を表す情報である。なお、フレンドアバターは、ユーザによる登録により追加されてよい。この場合、一のユーザアバターM1に対してフレンドアバターとして登録されたユーザアバターM1は、親密度が閾値以上であるユーザアバターM1として扱われてよい。
ここで、親密度は、例えば以下のような方法で増加させることが可能であってもよい。すなわち、相互フォロワーとなるユーザ間では親密度が増加し、コラボ配信を複数回実行した場合に親密度が増加し、配信ユーザの配信中にギフトやコメント、いいね等をたくさん送る場合に増加し、配信ユーザの配信を長時間視聴した場合に増加し、配信中以外に配信ユーザとの間で多数のメッセージのやり取りした場合に増加し、配信中以外に各種アイテムを配信ユーザに多数送る場合に増加する、といった具合である。また、他の実施例では、親密度が閾値以上であるかどうかの当該閾値は、値としてではなく、上述したような親密度が増加するような条件が満たされた場合に、親密度が閾値以上であると判定されてもよい。
所定オブジェクト記憶部142には、上述した端末装置20の所定オブジェクト記憶部242に記憶されるデータの元データに加えて、所定オブジェクトIDごとに、干渉可否の情報、共有可否の情報、共有条件の情報、リリース条件の情報、及び親子関係の設定情報が記憶される。
干渉可否の情報は、対応する所定オブジェクトが特定の所定オブジェクトであるか否かの情報である。特定の所定オブジェクトは、2つ以上のユーザアバターM1との間でオブジェクト間距離が同時に第1所定距離d1以内にならない所定オブジェクトである。例えば、特定の所定オブジェクトは、特定のユーザアバターのみが扱うことができるオブジェクトであってもよい。なお、変形例では、特定の所定オブジェクトは省略されてもよい。
共有可否の情報は、対応する所定オブジェクトが2つ以上のユーザアバターM1と親子関係を設定できるか否かを表す情報である。対応する所定オブジェクトが2つ以上のユーザアバターM1と親子関係を設定できる場合(すなわち共有が可能である場合)、共有可能なユーザアバターM1の数等の付属情報が記憶されてもよい。例えば、図18に示すオブジェクト情報1800では、所定オブジェクトID“B01”の所定オブジェクトは、共有可能であり、共有可能なユーザアバターM1の数は、2つのユーザアバターM1までである。なお、上述した特定の所定オブジェクトは、共有不可となる。例えば、共有可否は、所定オブジェクトの属性に応じて適宜設定されてよい。例えば、鉛筆オブジェクトM3のような比較的小さい物体や、スマートフォンのような一人で利用するのが一般的な物体等に対応する所定オブジェクトは、“共有不可”とされてよい。また、綱引き用の綱や、セレモニーでのケーキカット用のナイフ、テープカットセレモニー等におけるテープのような、複数で手に取る物体等に対応する所定オブジェクトは、“共有可”とされてよい。
共有条件の情報は、共有可能な所定オブジェクトに対応付けられて格納されてよい。共有条件の情報は、対応する所定オブジェクトが2つ以上のユーザアバターM1に共有される場合に満たされるべき条件(共有条件)を表す。共有条件は、任意であるが、例えばフレンドアバター同士やコラボ配信中の配信者アバター同士である場合(すなわち親密度が閾値以上である場合)に満たされてもよい。あるいは、共有条件は、上述した力パラメータの値及び/又は優先度パラメータの値が同様のユーザアバターM1同士である場合に満たされてもよい。
リリース条件の情報は、親子関係を解除する際に満たされるべき基本条件を表す情報である。リリース条件は、任意であるが、例えば、所定時間の経過、オブジェクト間距離が第1所定距離d1以下である状態(後述する第1状態)からオブジェクト間距離が第1所定距離d1よりも大きい状態(後述する第2状態)への遷移、及び、ユーザ入力に含まれる解除入力、のうちの少なくともいずれか1つに基づいて、満たされてよい。なお、所定時間は、所定オブジェクトの属性に応じて、所定オブジェクトごとに設定されてもよい。リリース条件は、後述する親子関係に関連して、専有状態であるときと共有状態であるときとで異なる態様で設定されてもよい(図18の所定オブジェクトID“B01”参照)。
親子関係の設定情報は、対応する所定オブジェクトに係る親子関係の状態(現在の状態)を表す情報である。親子関係の設定情報は、親子関係が設定されているか否かを表す情報と、親子関係が設定されている場合に親である1つ以上のユーザアバターM1を特定する情報(例えばアバターID)を含んでよい。なお、上述したように共有可能な所定オブジェクトの場合、親子関係が設定されている場合に親のユーザアバターM1は2つ以上となる場合がある。
本実施形態では、一例として、一の所定オブジェクトに係る親子関係の設定情報は、どのユーザアバターM1に対しても親子関係が設定されていない状態(以下、「フリー状態」とも称する)と、一のユーザアバターM1の従属オブジェクトである状態(以下、「専有状態」とも称する)と、2つ以上のユーザアバターM1の従属オブジェクトである状態(以下、「共有状態」とも称する)のいずれかの状態を表す状態情報を含む。この場合、一の所定オブジェクトに係る親子関係の設定情報は、専有状態又は共有状態を表す場合、更に、親である1つ以上のユーザアバターM1を特定する情報(例えばアバターID)を含む。
距離状態記憶部144には、所定オブジェクトごとかつユーザアバターM1ごとに、ユーザアバターと所定オブジェクトとの間の距離(以下、「オブジェクト間距離」とも称する)に係る情報(以下、「位置関係情報」とも称する)が記憶される。なお、複数の仮想空間が設定される場合、位置関係情報は、仮想空間ごとに管理されてよい。距離状態記憶部144内の位置関係情報に含まれる所定オブジェクト及びユーザアバターM1は、後述する位置関係算出部150によりオブジェクト間距離が算出された所定オブジェクト及びユーザアバターM1のみであってよい。
位置関係情報は、オブジェクト間距離自体であってもよいし、及び/又は、オブジェクト間距離と第1所定距離d1及び/又は第2所定距離d2との関係を表す情報であってもよい。
図19に示す位置関係情報1900は、所定オブジェクトIDごとに及びユーザアバターM1ごとに、第1状態と、第2状態とを有する。また、図19に示す位置関係情報1900では、第2状態は、非近接状態と、近接状態とを含む。第1状態は、オブジェクト間距離が第1所定距離d1以下である状態に対応し、第2状態は、オブジェクト間距離が第1所定距離d1よりも大きい状態に対応する。近接状態は、オブジェクト間距離が第1所定距離d1よりも大きくかつ第2所定距離d2以下である状態に対応し、非近接状態は、オブジェクト間距離が第2所定距離d2より大きい状態に対応する。なお、変形例では、より細かい状態に分類されてもよいし、あるいは、第1状態と第2状態の2つの状態だけに分類されてもよい。
アニメーション情報記憶部146には、上述した各種アニメーションを描画するための制御情報(以下、「アニメーション制御情報」とも称する)が記憶される。図20に示すアニメーション制御情報2000では、所定オブジェクトIDごとに、1つ以上の描画条件と、データIDとが対応付けられている。描画条件は、一の所定オブジェクトに対して複数種類のアニメーションデータが用意されている場合に、いずれのアニメーションデータに基づいて描画するかを定める条件を表す。例えば、図20に示す例では、所定オブジェクトID“B01”の所定オブジェクトに対しては、複数種類のアニメーションデータ(データID)が用意されており、それぞれの描画条件が規定されている。データIDは、上述のように、アニメーションデータごとに付与されるIDであり、一のデータIDは、一意に一の特定のアニメーションデータに対応する。なお、図20において、データID“D01(A01)”は、アバターID“A01”のユーザアバターM1に係るアニメーションデータに対応付けられたIDであることを表す。
例えば、所定オブジェクトID“B01”の場合、非近接状態から近接状態への遷移(描画条件)に対してデータID“D01”のアニメーションデータが対応付けられている。この場合、例えばアバターID“A01”のユーザアバターM1と所定オブジェクトID“B01”とに係る位置関係情報が、非近接状態から近接状態へと遷移すると、データID“D01(A01)”のアニメーションデータが描画される。また、所定オブジェクトID“B01”の場合、親子関係の形成(描画条件)に対してデータID“D02”のアニメーションデータが対応付けられている。この場合、例えば所定オブジェクトID“B01”に係る所定オブジェクトがアバターID“A01”のユーザアバターM1の従属オブジェクトとなる親子関係が形成されると、データID“D02(A01)”のアニメーションデータが描画される。
また、所定オブジェクトID“B01”の場合、親子関係の形成時において更に所定条件の成否に応じて、異なるアニメーションデータが用意される。このようにして、描画条件は、対応するアニメーションデータの種類に応じて多様に設定されてもよい。例えば、所定オブジェクトが“剣”を模したオブジェクトである場合、剣を抜いて斬るアニメーションデータと、剣を振り上げて構えるアニメーションデータが用意されてもよい。この場合、剣を抜いて斬るアニメーションデータに係る所定条件は、直前の所定タイミングでのユーザ入力が、“斬る”を指示する入力である場合に満たされてよい。同様に、剣を振り上げて構えるアニメーションデータに係る所定条件は、直前の所定タイミングでのユーザ入力が、“構える”を指示する入力である場合に満たされてよい。なお、直前の所定タイミングは、所定オブジェクト(“剣”を模したオブジェクト)とユーザアバターM1との間の距離が第1所定距離d1(図3参照)に至る直前のタイミングであってよく、例えば、所定オブジェクトとユーザアバターM1との間の距離が第2所定距離d2(図3参照)以下となったタイミングであってよい。
位置関係算出部150は、ユーザアバターM1と所定オブジェクトとの間の距離(すなわちオブジェクト間距離)を算出する。この場合、オブジェクト間距離の算出対象の所定オブジェクトは、すべての所定オブジェクトでなくてよく、ユーザアバターM1の近傍に位置する所定オブジェクトのみであってよい。例えば、一のユーザアバターM1に係るオブジェクト間距離の算出対象は、当該一のユーザアバターM1の手パーツM2の可動範囲内に位置する所定オブジェクトに限定されてもよい。これにより、オブジェクト間距離の算出負荷を効率的に低減できる。
また、所定オブジェクトがギフトオブジェクトを含む場合、位置関係算出部150は、ギフトオブジェクトが仮想空間において上から下に落下する際に、ギフトオブジェクトに係るオブジェクト間距離を算出してよい。これにより、他のユーザ(例えば視聴ユーザ)からギフトオブジェクトを贈られたユーザアバターM1(配信者アバター)は、落下してくるギフトオブジェクトに手を近づけることで、当該ギフトオブジェクトを手で受け取る等の動作を表すアニメーションを実現できる。
本実施形態では、位置関係算出部150は、ユーザアバターM1の手首の関節位置と所定オブジェクトとの間の距離を、オブジェクト間距離として算出する。このとき、一の所定オブジェクトに係るオブジェクト間距離は、ユーザアバターM1の2つの手首の関節位置に基づいて、2つ算出されてもよい。
位置関係算出部150は、上述したように各所定オブジェクトに係るオブジェクト間距離を算出すると、距離状態記憶部144内のデータ(図19の位置関係情報1900参照)を生成及び更新する。具体的には、位置関係算出部150は、一の所定オブジェクトに係るオブジェクト間距離を算出すると、当該一の所定オブジェクトに対応付けられた第1所定距離d1及び第2所定距離d2に基づいて、オブジェクト間距離と第1所定距離d1及び/又は第2所定距離d2との関係を表す情報を生成及び更新する。なお、更新タイミングは、位置関係算出部150による算出タイミングと同期してよい。
本実施例では、上述したように第1所定距離d1及び第2所定距離d2は、対応する所定オブジェクトの位置を中心とした球(図3参照)で定義されるので、例えば方向に応じて第1所定距離d1及び/又は第2所定距離d2が異なる場合に比べて、位置関係情報1900を生成する計算負荷を効率的に低減できる。ただし、変形例では、ある所定オブジェクトに関して、第1所定距離d1及び/又は第2所定距離d2が、方向(例えば、当該所定オブジェクトに対する手パーツM2の方向)に応じて異なってもよい。
干渉検出部154は、距離状態記憶部144内のデータ(図19の位置関係情報1900参照)に基づいて、所定オブジェクトごとに、2つ以上のユーザアバターM1間での干渉状態を検出する。具体的には、干渉検出部154は、1つ以上のユーザオブジェクトの従属オブジェクトである一の所定オブジェクトに対して他の1つ以上のユーザオブジェクトのオブジェクト間距離が第1所定距離d1以下になることに基づいて、干渉状態(以下、区別のために「後発の干渉状態」とも称する)を検出する。
また、干渉検出部154は、フリー状態の一の所定オブジェクトに対して2つ以上のユーザオブジェクトのオブジェクト間距離が同時に第1所定距離d1以下になることに基づいて、干渉状態(以下、区別のために「同時発生の干渉状態」とも称する)を検出してもよい。
なお、図21には、干渉検出部154により検出される干渉状態が模式的に図示されている。この場合、2つのユーザアバターM1に係る手パーツM2が所定オブジェクトである鉛筆オブジェクトM3に対して第1所定距離d1以下に近づいており(すなわち距離d3≦第1所定距離d1であり)、同時発生の干渉状態が検出されてよい。
なお、以下では、一の所定オブジェクトに関して干渉状態を形成する2つ以上のユーザアバターM1とは、後発の干渉状態の場合、当該一の所定オブジェクトを従属オブジェクトとしていた1つ以上のユーザアバターM1と、一の所定オブジェクトに対するオブジェクト間距離が新たに第1所定距離d1以下となった他の1つ以上のユーザアバターM1とを含む。一の所定オブジェクトに関して干渉状態を形成する2つ以上のユーザアバターM1とは、同時発生の干渉状態の場合は、一の所定オブジェクトに対するオブジェクト間距離が第1所定距離d1以下となった各ユーザアバターM1である。
オブジェクト管理部156は、各種オブジェクトの親子関係(主従関係の一例)を管理及び調整(解決)する。本実施形態では、オブジェクト管理部156は、所定オブジェクトごとに、親子関係を管理する。また、オブジェクト管理部156は、距離状態記憶部144内の位置関係情報や、干渉検出部154による干渉状態の検出結果等に基づいて、所定オブジェクト記憶部142内の親子関係の設定情報を更新する。
例えば、オブジェクト管理部156は、フリー状態の一の所定オブジェクトに関して、一のユーザアバターM1に対する位置関係情報が第2状態から第1状態へと遷移すると(すなわちオブジェクト間距離が第1所定距離d1以下になると)、当該一の所定オブジェクトと当該一のユーザアバターM1との間に親子関係を設定する。すなわち、オブジェクト管理部156は、当該一の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、当該一の所定オブジェクトによる専有状態(第1関係の一例)を表す情報へと、更新する。
オブジェクト管理部156は、一の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、一のユーザアバターM1による専有状態を表す情報へと更新すると、所定解除条件が成立するまで、更新した親子関係の設定情報(当該一のユーザアバターM1による専有状態を表す情報)を維持する。この場合、オブジェクト管理部156は、当該一の所定オブジェクトに係る所定解除条件が成立するか否かを監視する。
所定解除条件は、図18を参照して上述したリリース条件が満たされた場合に満たされる。リリース条件は、上述したとおりであり、所定オブジェクト記憶部142内に規定されてよい。また、本実施形態では、所定解除条件は、後述するように他のユーザアバターM1との共有や他のユーザアバターM1への引き渡し等によっても満たされうる。
そして、オブジェクト管理部156は、当該一の所定オブジェクトに係る所定解除条件が成立した場合、それに対応して、当該一の所定オブジェクトに係る親子関係の設定情報(所定オブジェクト記憶部142内の親子関係の設定情報)を更新する。
本実施形態では、オブジェクト管理部156は、例えば、干渉検出部154による検出結果に基づいて、一の所定オブジェクトに係る親子関係を調整する。
具体的には、オブジェクト管理部156は、一の所定オブジェクトに係る干渉状態が干渉検出部154により検出された場合、当該一の所定オブジェクトの共有可否の情報(図18のオブジェクト情報1800参照)に基づいて、当該一の所定オブジェクトに係る親子関係を調整してもよい。例えば、干渉検出部154により干渉状態が検出された一の所定オブジェクトが共有不可である場合、当該干渉状態を形成する2つ以上のユーザオブジェクトの関係を表す所定パラメータの値に基づいて、2つ以上のユーザオブジェクトのうちのいずれか1つが親となるように、当該一の所定オブジェクトに係る親子関係を調整してもよい。所定パラメータは、図17を参照して上述したとおりである。例えば、2つ以上のユーザオブジェクト間の力関係を表す力パラメータの値に基づいて、一の所定オブジェクトに係る親子関係を調整してもよい。この場合、2つ以上のユーザオブジェクトのうち、力パラメータの値の最も大きいユーザオブジェクトが、当該一の所定オブジェクトの親となるように、当該一の所定オブジェクトに係る親子関係を調整してよい。また、2つ以上のユーザオブジェクトのうち、優先度パラメータの値の最も大きいユーザオブジェクトが、当該一の所定オブジェクトの親となるように、当該一の所定オブジェクトに係る親子関係を調整してもよい。
他方、干渉検出部154により干渉状態が検出された一の所定オブジェクトが共有可である場合、オブジェクト管理部156は、共有条件(図18のオブジェクト情報1800参照)の成否を判定してよい。この場合、共有条件が満たされる場合は、当該一の所定オブジェクトに係る親子関係の設定情報を、共有状態を表す情報(第2関係の一例)へと、更新する。なお、この際、当該更新前の当該一の所定オブジェクトに係る親子関係の設定情報が、当該干渉状態を形成する2つ以上のユーザオブジェクトのいずれかによる専有状態を表していた場合、所定解除条件が満たされたことになる。
オブジェクト管理部156は、共有条件が満たされない場合、当該干渉状態を形成する2つ以上のユーザオブジェクトの関係を表す所定パラメータの値に基づいて、当該一の所定オブジェクトに係る所定解除条件が成立するか否かを判定する。この場合、当該干渉状態が検出される直前に親であったユーザアバターM1の力パラメータの値が、当該干渉状態を形成した他のユーザアバターM1の力パラメータの値よりも大きい場合、当該干渉状態に起因した所定解除条件が成立しないこととしてよい。この場合、当該干渉状態が検出される直前に親であったユーザアバターM1による専有状態が維持される。他方、当該干渉状態が検出される直前に親であったユーザアバターM1の力パラメータの値が、当該干渉状態を形成した他のユーザアバターM1の力パラメータの値よりも小さい場合、当該干渉状態に起因した所定解除条件が成立することとしてよい。この場合、オブジェクト管理部156は、当該一の所定オブジェクトに係る親子関係の設定情報(所定オブジェクト記憶部142内の親子関係の設定情報)を、力パラメータの値の大きい方のユーザオブジェクトによる専有状態を表す情報へと、更新する。なお、ここでは、力パラメータに基づく調整を説明したが、優先度パラメータに基づく調整の場合も同様であってよい。
なお、オブジェクト管理部156は、2つ以上のユーザアバターM1による共有状態である一の所定オブジェクトに係る干渉状態が干渉検出部154により検出された場合、同様に、当該干渉状態を形成する2つ以上のユーザオブジェクトの関係を表す所定パラメータの値に基づいて、当該一の所定オブジェクトに係る所定解除条件が成立するか否かを判定してもよい。この場合、当該干渉状態が検出される直前に親であった2つ以上のユーザアバターM1の力パラメータの各値が、当該干渉状態を形成した他のユーザアバターM1の力パラメータの値よりも大きい場合、当該干渉状態に起因した所定解除条件が成立しないこととしてよい。この場合、当該干渉状態が検出される直前に親であった2つ以上のユーザアバターM1による共有状態が維持される。他方、当該干渉状態が検出される直前に親であった2つ以上のユーザアバターM1の力パラメータの各値の少なくとも1つが、当該干渉状態を形成した他のユーザアバターM1の力パラメータの値よりも小さい場合、当該干渉状態に起因した所定解除条件が成立することとしてよい。この場合、オブジェクト管理部156は、当該一の所定オブジェクトに係る親子関係の設定情報(所定オブジェクト記憶部142内の親子関係の設定情報)を、力パラメータの値の大きい順に所定数のユーザオブジェクトによる共有状態を表す情報へと、更新する。なお、ここでは、力パラメータに基づく調整を説明したが、優先度パラメータに基づく調整の場合も同様であってよい。
オブジェクト管理部156による調整方法の更なる詳細は、図23から図26を参照して後述する。
アニメーション制御部157は、上述したオブジェクト管理部156と連携して、端末装置20における描画処理部258のアニメーション描画部2584の動作を制御する。アニメーション制御部157は、描画処理部258にアニメーションを描画させる際に、描画対象のアニメーションデータに係るデータIDを含む描画指令をアニメーション描画部2584に与える。また、アニメーション制御部157は、アニメーションの描画を停止させる際、停止指令をアニメーション描画部2584に与える。
アニメーション制御部157は、アニメーション情報記憶部146内のデータに基づいて、所定オブジェクトごとに、描画条件(図20のアニメーション制御情報2000参照)の成否を監視する。そして、アニメーション制御部157は、一の所定オブジェクトに対して描画条件が成立すると、対応するデータIDを含む描画指令を、当該一の所定オブジェクトと親子関係をなすユーザアバターM1に対応付けられている端末装置20(例えば当該ユーザアバターM1を含む端末用画像を描画している端末装置20)のアニメーション描画部2584に与える。
アニメーション制御部157は、一のアニメーションが開始されると、当該一のアニメーションにより描画される所定オブジェクトに係る親子関係の変化(所定解除条件の成立に伴う親子関係の変化)を監視し、親子関係の変化が生じた場合に、それに応じてアニメーションを制御する。例えば、親子関係が専有状態からフリー状態へと変化した場合、アニメーション制御部157は、アニメーションの描画を停止させるための停止指令をアニメーション描画部2584に与える。この場合、停止指令に代えて、描画対象の他のアニメーションデータ(例えば鉛筆オブジェクトM3の場合、鉛筆オブジェクトM3を離すアニメーションデータ)に係るデータIDを含む描画指令をアニメーション描画部2584に与えてもよい。
図22は、アニメーション制御部157において好適に利用可能なステートマシンの他の例の説明図である。図22に示す例は、図6を参照して上述したステートマシンに対して、状態ST220からST222が追加された点が異なる。この場合、例えば状態ST220は、所定オブジェクト“ポッキー(登録商標)”に対する専有状態を表す。この場合、例えば、アニメーションとして、ポッキーが入った袋を開ける動作が描画されてよい。そして、当該専有状態において干渉状態が検出されると、干渉状態を形成する2つのユーザアバターM1の親密度に応じて、状態ST221及び状態ST222のいずれかに遷移する。具体的には、親密度が閾値未満である場合は、状態ST221に遷移し、専有状態のアニメーションとして、ポッキーを一人(専有状態のユーザアバターM1一人)で食べる動作が描画されてよい。親密度が閾値以上である場合は、状態ST222に遷移し、共有状態のアニメーションとして、ポッキーを二人で食べる動作が描画されてよい。
禁止処理部158は、従属オブジェクトが特定の所定オブジェクトである場合、干渉状態が発生しないように所定処理を行う。すなわち、特定の所定オブジェクトが、一のユーザアバターM1の従属オブジェクトとなる親子関係が形成された場合、禁止処理部158は、当該親子関係が維持されている間(例えば、リリース条件が成立するまで)、干渉状態(後発の干渉状態)が発生しないように所定処理を行う。所定処理は、干渉状態を発生させる可能性があるユーザアバターを操作するユーザに係る端末装置20に対して、フィードバックを送ることを含む。端末装置20は、かかるフィードバックに応答して、ユーザに振動や反力等を付与してよい。例えば、入力部24の一要素としてハプティクスデバイスをユーザが手にしている場合、対応するユーザアバターM1の手パーツM2がこれ以上、特定の所定オブジェクトに近づかないように、ハプティクスデバイスを介してユーザに振動や反力等を付与してもよい。
なお、図7から図22までに示した例では、サーバ装置10及び端末装置20が連携して各種機能を実現しているが、このような機能の振り分けは適宜変更可能である。すなわち、図16に示したサーバ装置10の各種機能の一部又は全部は、端末装置20によって実現することも可能であり、逆に、図7に示した端末装置20の各種機能の一部は、サーバ装置10により実現することも可能である。例えば、サーバ装置10の位置関係算出部150及び干渉検出部154の一部又は全部は、端末装置20により実現されてもよいし、端末装置20のアバター動作処理部254及び描画処理部258の一部又は全部は、サーバ装置10により実現されてもよい。
次に、図23から図26を参照して、上述したオブジェクト管理部156による調整方法に関連したサーバ装置10の動作例について説明する。
図23は、オブジェクト管理部156による調整方法に関連してサーバ装置10により実行される処理の一例を示すフローチャートである。図23は、所定周期ごとに繰り返し実行されてよい。
ステップS2300では、サーバ装置10は、監視対象の所定オブジェクトを抽出する。監視対象の所定オブジェクトは、任意の端末装置20で表示される端末用画像に描画されている所定オブジェクトであってよい。他の実施形態では、監視対象の所定オブジェクトはすべての所定オブジェクトであってもよい。なお、仮想空間に複数のユーザアバターM1が配置されている状況下では、同じ所定オブジェクトが2つ以上の端末装置20で同時に描画される場合がある。
ステップS2302では、サーバ装置10は、ステップS2300で抽出した1つ以上の所定オブジェクトを所定順にソートし、変数kを“1”に設定する。
ステップS2304では、サーバ装置10は、k番目の所定オブジェクトを処理対象のオブジェクトとして設定する。
ステップS2306では、サーバ装置10は、k番目の所定オブジェクトに係るオブジェクト情報1800(図18参照)に基づいて、k番目の所定オブジェクトに係る親子関係の設定情報がフリー状態を表すか否かを判定する。判定結果が“YES”の場合、ステップS2308に進み、それ以外の場合(親子関係の設定情報が、専有状態又は共有状態を表す場合)は、ステップS2323に進む。
ステップS2308では、サーバ装置10は、k番目の所定オブジェクトに関して同時発生の干渉状態が検出されたか否かを判定する。同時発生の干渉状態は、干渉検出部154に関連して上述したとおりである。判定結果が“YES”の場合、ステップS2310に進み、それ以外の場合は、ステップS2312に進む。
ステップS2310では、サーバ装置10は、フリー状態の所定オブジェクトに係る同時発生の干渉状態に対する調整処理(以下、「第1調整処理」とも称する)を実行する。この第1調整処理は、図24を参照して後述する。
ステップS2312では、サーバ装置10は、位置関係情報1900(図19参照)に基づいて、任意の一のユーザアバターM1とk番目の所定オブジェクトとの間の距離(オブジェクト間距離)が第1所定距離d1以下となったか否かを判定する。すなわち、サーバ装置10は、任意の一のユーザアバターM1に対するk番目の所定オブジェクトに係る位置関係情報に関して、第2状態から第1状態への遷移の有無を判定する。判定結果が“YES”の場合、ステップS2314に進み、それ以外の場合は、ステップS2318に進む。
ステップS2314では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、一のユーザアバターM1の従属オブジェクトとなる専有状態を表す情報へと、更新する。この場合、当該一のユーザアバターM1は、k番目の所定オブジェクトに係る位置関係情報(各ユーザアバターM1に対する位置関係情報)のうちの、第2状態から第1状態へ遷移した位置関係情報に係るユーザアバターM1であり、以下、単に「k番目の所定オブジェクトの専有状態を形成したユーザアバターM1」とも称する。
ステップS2316では、サーバ装置10は、k番目の所定オブジェクトと、当該k番目の所定オブジェクトの専有状態を形成したユーザアバターM1との組み合わせに係るアニメーション(図23では、「専有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、k番目の所定オブジェクトを含む端末用画像を描画している端末装置20である。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
なお、ステップS2316において、k番目の所定オブジェクトに対して親子関係が形成された際の描画条件の所定条件(図20のアニメーション制御情報2000参照)が設定されている場合は、所定条件に応じたデータIDが選択されてよい。
ステップS2318では、サーバ装置10は、位置関係情報1900(図19参照)に基づいて、任意の一のユーザアバターM1とk番目の所定オブジェクトとの間の距離(オブジェクト間距離)が第2所定距離d2以下となったか否かを判定する。すなわち、サーバ装置10は、任意のユーザアバターM1に対するk番目の所定オブジェクトに係る位置関係情報に関して、非近接状態から近接状態への遷移の有無を判定する。判定結果が“YES”の場合、ステップS2320に進み、それ以外の場合は、ステップS2322に進む。
ステップS2320では、サーバ装置10は、k番目の所定オブジェクトと、近接状態への遷移を実現したユーザアバターM1との組み合わせに係るアニメーション(図23では、「近接状態のアニメーション」と表記)を描画させるために、対応する第2アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第2アニメーションデータに基づいて、アニメーションを描画する。
ステップS2322では、サーバ装置10は、k番目の所定オブジェクトに関するアニメーションの描画を行っている端末装置20に対して、アニメーションの停止指令を送信する。この場合、対応する端末装置20は、アニメーションモードを停止し、通常モードにより、各種オブジェクト(ユーザアバターM1を含む)を描画する。なお、k番目の所定オブジェクトに関するアニメーションの描画を行っている端末装置20が存在しない場合は、ステップS2322はスキップされる。
ステップS2323では、サーバ装置10は、所定オブジェクト記憶部142内のオブジェクト情報1800(図18参照)に基づいて、k番目の所定オブジェクトに対応付けられた共有可否の情報が、“共有可”であるか否かを判定する。判定結果が“YES”の場合、ステップS2324に進み、それ以外の場合は、親子関係の設定情報が専有状態を表すことになりステップS2326に進む。
ステップS2324では、サーバ装置10は、k番目の所定オブジェクトに係るオブジェクト情報1800(図18参照)に基づいて、k番目の所定オブジェクトに係る親子関係の設定情報が専有状態を表すか否かを判定する。判定結果が“YES”の場合、ステップS2326に進み、それ以外の場合(親子関係の設定情報が共有状態を表す場合)は、ステップS2328に進む。
ステップS2326では、サーバ装置10は、一のユーザアバターM1による専有状態の所定オブジェクトに対する調整処理(以下、「第2調整処理」とも称する)を実行する。この第2調整処理は、図25を参照して後述する。
ステップS2328では、サーバ装置10は、2つ以上のユーザアバターM1による共有状態の所定オブジェクトに対する調整処理(以下、「第3調整処理」とも称する)を実行する。この第3調整処理は、図26を参照して後述する。
ステップS2330では、サーバ装置10は、ステップS2300で抽出した1つ以上の所定オブジェクトのすべてが処理対象とされたか否かを判定する。判定結果が“YES”の場合、今回周期の処理を終了し、それ以外の場合、ステップS2332を介して、ステップS2304からの処理を繰り返す。
ステップS2332では、サーバ装置10は、変数kを“1”だけインクリメントする。
図24は、フリー状態の所定オブジェクトに係る同時発生の干渉状態に対する調整処理である第1調整処理(図23のステップS2310)の一例を示す概略フローチャートである。
ステップS2400では、サーバ装置10は、所定オブジェクト記憶部142内のオブジェクト情報1800(図18参照)に基づいて、k番目の所定オブジェクトに対応付けられた共有可否の情報が、“共有可”であるか否かを判定する。判定結果が“YES”の場合、ステップS2402に進み、それ以外の場合は、ステップS2408に進む。
ステップS2402では、サーバ装置10は、k番目の所定オブジェクトに対応付けられた共有条件の情報(図18のオブジェクト情報1800参照)に基づいて、共有条件が満たされたか否かを判定する。共有条件は、図18を参照して上述したとおりであってよい。判定結果が“YES”の場合、ステップS2404に進み、それ以外の場合は、今回周期の処理は終了する。すなわち、共有条件が満たされない場合は、k番目の所定オブジェクトはフリー状態のままとなる。ただし、共有条件が満たされない場合は、ステップS2408に進んでもよい。
ステップS2404では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、同時発生の干渉状態を形成した2つ以上のユーザアバターM1の従属オブジェクトとなる共有状態を表す情報へと、更新する。
また、k番目の所定オブジェクトに係るオブジェクト情報1800(図18参照)において、共有可否の情報が、共有可能なユーザアバターM1の最大数を規定しており、かつ、同時発生の干渉状態を形成した2つ以上のユーザアバターM1の数が最大数を超える場合、サーバ装置10は、当該2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、k番目の所定オブジェクトを従属オブジェクトとする最大数のユーザアバターM1を決定してよい。この場合、例えば力パラメータを利用する場合、上述のように、力パラメータの値が大きい順に最大数までのユーザアバターM1が、k番目の所定オブジェクトの“親”として選択されてよい。この場合、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、同時発生の干渉状態を形成した2つ以上のユーザアバターM1のうちの、上述したように決定した最大数のユーザアバターM1の従属オブジェクトとなる共有状態を表す情報へと、更新する。
ステップS2406では、サーバ装置10は、k番目の所定オブジェクトと、当該k番目の所定オブジェクトの共有状態を形成した2つ以上のユーザアバターM1との組み合わせに係るアニメーション(図24では、「共有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
ステップS2408では、サーバ装置10は、同時発生の干渉状態を形成した2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、同時発生の干渉状態を形成した2つ以上のユーザアバターM1のうちから、k番目の所定オブジェクトを従属オブジェクトとする一のユーザアバターM1を決定する。この場合、例えば力パラメータを利用する場合、上述のように、力パラメータの値が最も大きいユーザアバターM1が、k番目の所定オブジェクトを従属オブジェクトとする一のユーザアバターM1として選択されてよい。
ステップS2410では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、フリー状態を表す情報から、ステップS2408で決定した一のユーザアバターM1の従属オブジェクトとなる専有状態を表す情報へと、更新する。
ステップS2412では、サーバ装置10は、k番目の所定オブジェクトと、ステップS2408で決定した一のユーザアバターM1との組み合わせに係るアニメーション(図24では、「専有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
図25は、一のユーザアバターM1による専有状態の所定オブジェクトに対する調整処理である第2調整処理(図23のステップS2326)の一例を示す概略フローチャートである。以下では、本調整処理の開始前に、k番目の所定オブジェクトを従属オブジェクトとしていた一のユーザアバターM1を、「現に専有中のユーザアバターM1」とも称する。
ステップS2500では、サーバ装置10は、k番目の所定オブジェクトに関して後発の干渉状態が検出されたか否かを判定する。後発の干渉状態は、干渉検出部154に関連して上述したとおりである。判定結果が“YES”の場合、ステップS2502に進み、それ以外の場合は、ステップS2518に進む。
ステップS2502では、サーバ装置10は、所定オブジェクト記憶部142内のオブジェクト情報1800(図18参照)に基づいて、k番目の所定オブジェクトに対応付けられた共有可否の情報が、“共有可”であるか否かを判定する。判定結果が“YES”の場合、ステップS2504に進み、それ以外の場合は、ステップS2510に進む。
ステップS2504では、サーバ装置10は、k番目の所定オブジェクトに対応付けられた共有条件の情報(図18のオブジェクト情報1800参照)に基づいて、共有条件が満たされたか否かを判定する。共有条件は、図18を参照して上述したとおりであってよい。判定結果が“YES”の場合、ステップS2506に進み、それ以外の場合は、ステップS2510に進む。なお、判定結果が“YES”の場合、所定解除条件が満たされることになる。すなわち、この場合、所定解除条件は、干渉状態が検出され、かつ、共有条件が満たされるという要因(第1要因の一例)に基づいて、満たされることになる。なお、共有条件は、上述したように、例えば、後発の干渉状態を形成した2つ以上のユーザアバターM1の間の親密度が閾値以上である場合に満たされてよい。
ステップS2506では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、専有状態を表す情報から、後発の干渉状態を形成した2つ以上のユーザアバターM1の従属オブジェクトとなる共有状態を表す情報へと、更新する。
また、k番目の所定オブジェクトに係るオブジェクト情報1800(図18参照)において、共有可否の情報が、共有可能なユーザアバターM1の最大数を規定しており、かつ、後発の干渉状態を形成した2つ以上のユーザアバターM1の数が最大数を超える場合、サーバ装置10は、当該2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、k番目の所定オブジェクトを従属オブジェクトとする最大数のユーザアバターM1を決定してよい。この場合、例えば力パラメータを利用する場合、上述のように、力パラメータの値が大きい順に最大数までのユーザアバターM1が、k番目の所定オブジェクトの“親”として選択されてよい。この場合、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、専有状態を表す情報から、後発の干渉状態を形成した2つ以上のユーザアバターM1のうちの、上述したように決定した最大数のユーザアバターM1の従属オブジェクトとなる共有状態を表す情報へと、更新する。
ステップS2508では、サーバ装置10は、k番目の所定オブジェクトと、当該k番目の所定オブジェクトの共有状態を形成した2つ以上のユーザアバターM1との組み合わせに係るアニメーション(図25では、「共有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
ステップS2510では、サーバ装置10は、後発の干渉状態を形成した2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、後発の干渉状態を形成した2つ以上のユーザアバターM1のうちから、k番目の所定オブジェクトを従属オブジェクトとする一のユーザアバターM1を決定する。この場合、例えば優先度パラメータを利用する場合、上述のように、優先度パラメータの値が最も大きいユーザアバターM1が、k番目の所定オブジェクトを従属オブジェクトとする一のユーザアバターM1として選択されてよい。これは、力パラメータを利用する場合も同様である。
ステップS2512では、サーバ装置10は、ステップS2508で決定したユーザアバターM1が、現に専有中のユーザアバターM1であるか否かを判定する。判定結果が“YES”の場合、k番目の所定オブジェクトに係る親子関係の設定情報を変化させることなく今回周期の処理を終了する(この場合、対応する端末装置20におけるアニメーションの描画処理は継続される)。他方、判定結果が“NO”である場合は、所定解除条件が満たされたこととなりステップS2514に進む。すなわち、判定結果が“NO”である場合は、所定解除条件は、干渉状態が検出され、かつ、現に専有中のユーザアバターM1よりも他の一のユーザアバター(k番目の所定オブジェクトに関して後から第1状態を形成した一のユーザアバターM1)の方が、力が強い又は優先度が高いという要因(第2要因の一例)に基づいて満たされることになる。
ステップS2514では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、現に専有中のユーザアバターM1による専有状態を表す情報から、ステップS2510で決定した一のユーザアバターM1の従属オブジェクトとなる専有状態を表す情報へと、更新する。
ステップS2516では、サーバ装置10は、k番目の所定オブジェクトと、ステップS2510で決定した一のユーザアバターM1との組み合わせに係るアニメーション(図25では、「専有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
ステップS2518では、サーバ装置10は、k番目の所定オブジェクトに係るリリース条件(図18のオブジェクト情報1800参照)が成立したか否かを判定する。なお、k番目の所定オブジェクトに対して、専有状態に係るリリース条件と、共有状態に係るリリース条件とが対応付けられている場合(例えば図18の所定オブジェクトID“B01”参照)、専有状態に係るリリース条件が利用される。判定結果が“YES”の場合、所定解除条件が満たされたこととなりステップS2520に進み、それ以外の場合は、今回周期の処理を終了する(この場合、対応する端末装置20におけるアニメーションの描画処理は継続される)。
ステップS2520では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、専有状態を表す情報からフリー状態を表す情報へと、更新する。
ステップS2522では、サーバ装置10は、k番目の所定オブジェクトに関するアニメーションの描画を行っている端末装置20に対して、アニメーションの停止指令を送信する。この場合、対応する端末装置20は、アニメーションモードを停止し、通常モードにより、各種オブジェクト(ユーザアバターM1を含む)を描画する。
図26は、2つ以上のユーザアバターM1による共有状態の所定オブジェクトに対する調整処理である第3調整処理(図23のステップS2328)の一例を示す概略フローチャートである。以下では、本調整処理の開始前に、k番目の所定オブジェクトを従属オブジェクトとしていた2つ以上のユーザアバターM1を、「2つ以上の現に専有中のユーザアバターM1」とも称する。
ステップS2600では、サーバ装置10は、k番目の所定オブジェクトに関して後発の干渉状態が検出されたか否かを判定する。後発の干渉状態は、干渉検出部154に関連して上述したとおりである。判定結果が“YES”の場合、ステップS2602に進み、それ以外の場合は、ステップS2610に進む。
ステップS2602では、サーバ装置10は、後発の干渉状態を形成した2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、共有条件が満たされる態様で、k番目の所定オブジェクトを従属オブジェクトとする2つ以上のユーザアバターM1を決定する。また、k番目の所定オブジェクトに係るオブジェクト情報1800(図18参照)において、共有可否の情報が、共有可能なユーザアバターM1の最大数を規定しており、かつ、後発の干渉状態を形成した2つ以上のユーザアバターM1の数が最大数を超える場合、サーバ装置10は、当該2つ以上のユーザアバターM1の所定パラメータの各値に基づいて、k番目の所定オブジェクトを従属オブジェクトとする最大数のユーザアバターM1を決定してよい。この場合、例えば力パラメータを利用する場合、上述のように、力パラメータの値が大きい順に最大数までのユーザアバターM1が、k番目の所定オブジェクトの“親”として選択されてよい。
ステップS2604では、サーバ装置10は、ステップS2602で決定した2つ以上のユーザアバターM1が、2つ以上の現に専有中のユーザアバターM1であるか否かを判定する。判定結果が“YES”の場合、k番目の所定オブジェクトに係る親子関係の設定情報を変化させることなく今回周期の処理を終了する(この場合、対応する端末装置20におけるアニメーションの描画処理は継続される)。他方、判定結果が“NO”である場合は、所定解除条件が満たされたこととなりステップS2606に進む。
ステップS2606では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、2つ以上の現に専有中のユーザアバターM1による共有状態を表す情報から、上述したように決定した2つ以上のユーザアバターM1の従属オブジェクトとなる共有状態を表す情報へと、更新する。
ステップS2608では、サーバ装置10は、k番目の所定オブジェクトと、当該k番目の所定オブジェクトの共有状態を形成した2つ以上のユーザアバターM1との組み合わせに係るアニメーション(図26では、「共有状態のアニメーション」と表記)を描画させるために、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信する。この場合、対応する端末装置20は、描画指令に含まれるデータIDに対応する第1アニメーションデータに基づいて、アニメーションを描画する。
ステップS2610では、サーバ装置10は、k番目の所定オブジェクトに係るリリース条件(図18のオブジェクト情報1800参照)が成立したか否かを判定する。なお、k番目の所定オブジェクトに対して、専有状態に係るリリース条件と、共有状態に係るリリース条件とが対応付けられている場合、共有状態に係るリリース条件が利用される(例えば図18の所定オブジェクトID“B01”参照)。共有状態に対応付けられたリリース条件は、共有状態を形成するユーザアバターM1のそれぞれのリリース条件や、全体としてのリリース条件を含んでもよい。判定結果が“YES”の場合、所定解除条件が満たされたこととなりステップS2612に進み、それ以外の場合は、今回周期の処理を終了する(この場合、対応する端末装置20におけるアニメーションの描画処理は継続される)。
ステップS2612では、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、共有状態を表す情報からフリー状態を表す情報へと、更新する。
ステップS2614では、サーバ装置10は、k番目の所定オブジェクトに関するアニメーションの描画を行っている端末装置20に対して、アニメーションの停止指令を送信する。この場合、対応する端末装置20は、アニメーションモードを停止し、通常モードにより、各種オブジェクト(ユーザアバターM1を含む)を描画する。
なお、図26に示す例では、ステップS2612において、共有状態を形成する2つ以上のユーザアバターM1の一部のリリース条件が満たされた場合に、サーバ装置10は、k番目の所定オブジェクトに係る親子関係の設定情報を、2つ以上の現に専有中のユーザアバターM1による共有状態を表す情報から、専有状態又は他の2つ以上のM1による共有状態を表す情報へと、更新してもよい。この場合、続くステップS2614では、サーバ装置10は、対応する第1アニメーションデータに係るデータIDを含む描画指令を、対応する端末装置20に送信してよい。
なお、図23から図26に示す例は、説明の複雑化を防止するために、図16を参照して上述した禁止処理部158等の動作が省略されているが、適宜、組み込むことは可能である。
以上、この実施形態について図面を参照して詳述してきたが、具体的な構成は上述した各種実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
例えば、上述した実施形態では、アニメーションは、ユーザアバターM1の各パーツのうちの、手パーツM2のみに関するが、これに限られない。アニメーションは、手パーツM2と腕パーツ(肘から先の部分又は肩から先の部分)との組み合わせに関して用意されてもよい。あるいは、アニメーションがユーザアバターM1の食べる動作等に関する場合、顔パーツの一部(例えば口パーツ)のアニメーションを含んでもよい。