以下、この技術的思想の実施形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。なお、以下で説明される各実施形態は、適宜選択的に組み合わされてもよい。
[技術思想]
図1は、本開示の技術思想を説明するための図である。図1を参照して、コンピュータ200は、ユーザ190が装着しているHMD(Head-Mounted Device)110に仮想空間2を提供している。コンピュータ200は、仮想空間2にパノラマ画像22を展開している。図1の例において、パノラマ画像22は動画像である。
コンピュータ200は、ユーザ190に対応するアバターオブジェクト1100を仮想空間2に配置する。コンピュータ200はさらに、アバターオブジェクト1100の視界領域に対応する画像をHMD110のモニタに表示する。これによりユーザ190は、パノラマ画像22を視認する。また、コンピュータ200は、撮影機能を有するカメラオブジェクト1710を仮想空間2に配置する。
コンピュータ200は、撮影に適したタイミング(以下、「撮影タイミング」とも言う)を検出する。コンピュータ200は、撮影タイミングとカメラオブジェクト1710の位置とをユーザ190に通知する。コンピュータ200は、上記通知を行なった後に、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成する(カメラオブジェクト1710による撮影を実行する)。
コンピュータ200が撮影タイミングを検出する処理の概要について説明する。ある実施形態において、ユーザ190は、パノラマ画像22を見て感動する。コンピュータ200は、ユーザ190の発話(に対応する音声信号)またはユーザ190の顔の表情に基づいて、ユーザ190が感動したことを検出する。コンピュータ200は、ユーザ190が感動したタイミングを、撮影タイミングとして検出する。
他の実施形態において、コンピュータ200は、ユーザ190とは異なる他のユーザのパノラマ画像22の履歴情報に基づいて撮影タイミングを検出する。履歴情報は、パノラマ画像22のどの部分が他のユーザに多く視られていたか、パノラマ画像22のどの部分が他のユーザに多く撮影されたか、等の情報を含む。
一例として、ユーザ190の発話に対応する音声信号に基づく自動撮影処理について説明する。図1を参照して、ステップS10においてユーザ190は、パノラマ画像22に感動して「すごーい」と発話する。コンピュータ200は、HMD110に設けられたマイクによって、ユーザ190の発話に対応する音声信号の入力を受け付ける。
ステップS20において、コンピュータ200は、音声信号から文字列を抽出する。コンピュータ200は、抽出した文字列が感嘆詞(予め定められた単語)を含むことに基づいて、撮影タイミングを検出する。コンピュータ200は、撮影タイミングを検出したことに基づいてカメラオブジェクト1710を仮想空間2に配置する。このとき、コンピュータ200は、カメラオブジェクト1710の撮影範囲1730にアバターオブジェクト1100の少なくとも一部(例えば、頭部)が含まれるようにカメラオブジェクト1710を配置する。
ステップS30において、コンピュータ200は、撮影タイミングであること、およびカメラオブジェクト1710の位置をユーザ190に通知する。例えば、コンピュータ200は、HMD110のモニタ(ユーザ190の視界)にカメラオブジェクト1710を配置することによって、カメラオブジェクト1710の位置をユーザ190に通知する。また、コンピュータ200は、HMD110に設けられたスピーカから音声(図1の例では「こっち向いて」)を出力することにより、撮影タイミングをユーザ190に通知する。これらの処理により、ユーザ190はカメラオブジェクト1710を見る。その結果、ユーザ190に対応するアバターオブジェクト1100はカメラオブジェクト1710の方向を向く。
ステップS40において、コンピュータ200は、カメラオブジェクト1710による撮影を実行して、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成する。これにより、コンピュータ200は、撮影に適したタイミングで、カメラ目線のアバターオブジェクト1100を含む画像を自動的に生成する。
上記によれば、ユーザ190は、能動的に撮影操作を行なわなくても、撮影タイミングで撮影された画像(例えば、カメラ目線の画像)を得ることができる。このように、コンピュータ200は、ユーザ190の仮想空間2における仮想体験を豊かにできる。以下、このような処理を実現するための具体的な構成および制御について説明する。
[HMDシステムの構成]
図2を参照して、HMD(Head-Mounted Device)システム100の構成について説明する。図2は、HMDシステム100の構成の概略を表す図である。HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
HMDシステム100は、HMDセット105A,105B,105C,105Dと、ネットワーク19とサーバ150とを含む。HMDセット105A,105B,105C,105Dの各々は、ネットワーク19を介してサーバ150と通信可能に構成される。以下、HMDセット105A,105B,105C,105Dを総称して、HMDセット105とも言う。なお、HMDシステム100を構成するHMDセット105の数は、4つに限られず、3つ以下でも、5つ以上でもよい。HMDセット105は、HMD110と、HMDセンサ120と、コントローラ160と、コンピュータ200とを備える。HMD110は、モニタ112と、第1カメラ115と、第2カメラ117と、スピーカ118と、マイク119と、注視センサ140とを含む。コントローラ160は、モーションセンサ130を含み得る。
ある局面において、コンピュータ200は、インターネットその他のネットワーク19に接続可能であり、ネットワーク19に接続されているサーバ150その他のコンピュータ(例えば、他のHMDセット105のコンピュータ)と通信可能である。別の局面において、HMD110は、HMDセンサ120の代わりに、センサ114を含み得る。
HMD110は、ユーザ190の頭部に装着され、動作中に仮想空間をユーザ190に提供し得る。より具体的には、HMD110は、右目用の画像および左目用の画像をモニタ112にそれぞれ表示する。ユーザ190の各目がそれぞれの画像を視認すると、ユーザ190は、両目の視差に基づき当該画像を3次元の画像として認識し得る。HMD100は、モニタを備える所謂ヘッドマウントディスプレイと、スマートフォンその他のモニタを有する端末を装着可能なヘッドマウント機器のいずれをも含み得る。
モニタ112は、例えば、非透過型の表示装置として実現される。ある局面において、モニタ112は、ユーザ190の両目の前方に位置するようにHMD110の本体に配置されている。したがって、ユーザ190は、モニタ112に表示される3次元画像を視認すると、仮想空間に没入することができる。ある実施形態において、仮想空間は、例えば、背景、ユーザ190が操作可能なオブジェクト、ユーザ190が選択可能なメニューの画像を含む。ある実施形態において、モニタ112は、所謂スマートフォンその他の情報表示端末が備える液晶モニタまたは有機EL(Electro Luminescence)モニタとして実現され得る。
他の局面において、モニタ112は、透過型の表示装置として実現され得る。この場合、HMD110は、図1に示されるようにユーザ190の目を覆う密閉型ではなく、メガネ型のような開放型であり得る。透過型のモニタ112は、その透過率を調整することにより、一時的に非透過型の表示装置として構成可能であってもよい。また、モニタ112は、仮想空間を構成する画像の一部と、現実空間とを同時に表示する構成を含んでいてもよい。例えば、モニタ112は、HMD110に搭載されたカメラで撮影した現実空間の画像を表示してもよいし、一部の透過率を高く設定することにより現実空間を視認可能にしてもよい。
ある局面において、モニタ112は、右目用の画像を表示するためのサブモニタと、左目用の画像を表示するためのサブモニタとを含み得る。別の局面において、モニタ112は、右目用の画像と左目用の画像とを一体として表示する構成であってもよい。この場合、モニタ112は、高速シャッタを含む。高速シャッタは、画像がいずれか一方の目にのみ認識されるように、右目用の画像と左目用の画像とを交互に表示可能に作動する。
ある局面において、HMD110は、複数の光源(図示しない)を含む。各光源は例えば、赤外線を発するLED(Light Emitting Diode)により実現される。HMDセンサ120は、HMD110の動きを検出するためのポジショントラッキング機能を有する。より具体的には、HMDセンサ120は、HMD110が発する複数の赤外線を読み取り、現実空間内におけるHMD110の位置および傾きを検出する。
なお、別の局面において、HMDセンサ120は、カメラにより実現されてもよい。この場合、HMDセンサ120は、カメラから出力されるHMD110の画像情報を用いて、画像解析処理を実行することにより、HMD110の位置および傾きを検出することができる。
別の局面において、HMD110は、位置検出器として、HMDセンサ120の代わりに、あるいはHMDセンサ120に加えてセンサ114を備えてもよい。HMD110は、センサ114を用いて、HMD110自身の位置および傾きを検出し得る。例えば、センサ114が角速度センサ、地磁気センサ、あるいは加速度センサである場合、HMD110は、HMDセンサ120の代わりに、これらの各センサのいずれかを用いて、自身の位置および傾きを検出し得る。一例として、センサ114が角速度センサである場合、角速度センサは、現実空間におけるHMD110の3軸周りの角速度を経時的に検出する。HMD110は、各角速度に基づいて、HMD110の3軸周りの角度の時間的変化を算出し、さらに、角度の時間的変化に基づいて、HMD110の傾きを算出する。
第1カメラ115は、ユーザ190の顔の下部を撮影する。より具体的には、第1カメラ115は、ユーザ190の鼻、頬、および口などを撮影する。第2カメラ117は、ユーザ190の目および眉などを撮影する。HMD110のユーザ190側の筐体をHMD110の内側、HMD110のユーザ190とは逆側の筐体をHMD110の外側と定義する。ある局面において、第1カメラ115は、HMD110の外側に配置され、第2カメラ117は、HMD110の内側に配置され得る。第1カメラ115および第2カメラ117が生成した画像は、コンピュータ200に入力される。
スピーカ118は、音声信号を音声に変換してユーザ190に出力する。マイク119は、ユーザ190の発話を音声信号(電気信号)に変換してコンピュータ200に出力する。なお、他の局面において、HMD110は、スピーカ118に替えてイヤホンを含み得る。
注視センサ140は、ユーザ190の右目および左目の視線が向けられる方向(視線)を検出する。当該方向の検出は、例えば、公知のアイトラッキング機能によって実現される。注視センサ140は、当該アイトラッキング機能を有するセンサにより実現される。ある局面において、注視センサ140は、右目用のセンサおよび左目用のセンサを含むことが好ましい。注視センサ140は、例えば、ユーザ190の右目および左目に赤外光を照射するとともに、照射光に対する角膜および虹彩からの反射光を受けることにより各眼球の回転角を検出するセンサであってもよい。注視センサ140は、検出した各回転角に基づいて、ユーザ190の視線を検知することができる。
サーバ150は、コンピュータ200にプログラムを送信し得る。別の局面において、サーバ150は、他のユーザによって使用されるHMDに仮想現実を提供するための他のコンピュータ200と通信し得る。例えば、アミューズメント施設において、複数のユーザが参加型のゲームを行なう場合、各コンピュータ200は、各ユーザの動作に基づく信号を他のコンピュータ200と通信して、同じ仮想空間において複数のユーザが共通のゲームを楽しむことを可能にする。
コントローラ160は、有線または無線によりコンピュータ200に接続されている。コントローラ160は、ユーザ190からコンピュータ200への命令の入力を受け付ける。ある局面において、コントローラ160は、ユーザ190によって把持可能に構成される。別の局面において、コントローラ160は、ユーザ190の身体あるいは衣類の一部に装着可能に構成される。別の局面において、コントローラ160は、コンピュータ200から送信される信号に基づいて、振動、音、光のうちの少なくともいずれかを出力するように構成されてもよい。別の局面において、コントローラ160は、ユーザ190から、仮想空間に配置されるオブジェクトの位置や動きを制御するための操作を受け付ける。
モーションセンサ130は、ある局面において、ユーザ190の手に取り付けられて、ユーザ190の手の動きを検出する。検出された信号は、コンピュータ200に送られる。モーションセンサ130は、例えば、手袋型のコントローラ160に設けられている。ある実施形態において、現実空間における安全のため、コントローラ160は、手袋型のようにユーザ190の手に装着されることにより容易に飛んで行かないものに装着されるのが望ましい。別の局面において、ユーザ190に装着されないセンサがユーザ190の手の動きを検出してもよい。例えば、ユーザ190を撮影するカメラの信号が、ユーザ190の動作を表わす信号として、コンピュータ200に入力されてもよい。モーションセンサ130とコンピュータ200とは、一例として、無線により互いに接続される。無線の場合、通信形態は特に限られず、例えば、Bluetooth(登録商標)その他の公知の通信手法が用いられる。
[ハードウェア構成]
図3を参照して、本実施形態に係るコンピュータ200について説明する。図3は、ある局面に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ10と、メモリ11と、ストレージ12と、入出力インターフェイス13と、通信インターフェイス14とを備える。各構成要素は、それぞれ、バス15に接続されている。
プロセッサ10は、コンピュータ200に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ11またはストレージ12に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ10は、CPU(Central Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ11は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ12からロードされる。データは、コンピュータ200に入力されたデータと、プロセッサ10によって生成されたデータとを含む。ある局面において、メモリ11は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ12は、プログラムおよびデータを永続的に保持する。ストレージ12は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ12に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他のコンピュータ200との通信を実現するためのプログラムを含む。ストレージ12に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含む。
なお、別の局面において、ストレージ12は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、コンピュータ200に内蔵されたストレージ12の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行なうことが可能になる。
ある実施形態において、入出力インターフェイス13は、HMD110、HMDセンサ120およびモーションセンサ130との間で信号を通信する。ある局面において、HMD110に含まれる第1カメラ115,第2カメラ117,スピーカ118,およびマイク119は、HMD110の入出力インターフェイス13を介してコンピュータ200との通信を行ない得る。ある局面において、入出力インターフェイス13は、USB(Universal Serial Bus)、DVI(Digital Visual Interface)、HDMI(登録商標)(High-Definition Multimedia Interface)その他の端子を用いて実現される。なお、入出力インターフェイス13は上述のものに限られない。
ある実施形態において、入出力インターフェイス13は、さらに、コントローラ160と通信し得る。例えば、入出力インターフェイス13は、コントローラ160およびモーションセンサ130から出力された信号の入力を受ける。別の局面において、入出力インターフェイス13は、プロセッサ10から出力された命令を、コントローラ160に送る。当該命令は、振動、音声出力、発光等をコントローラ160に指示する。コントローラ160は、当該命令を受信すると、その命令に応じて、振動、音声出力または発光のいずれかを実行する。
通信インターフェイス14は、ネットワーク19に接続されて、ネットワーク19に接続されている他のコンピュータ(例えば、サーバ150)と通信する。ある局面において、通信インターフェイス14は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。なお、通信インターフェイス14は上述のものに限られない。
ある局面において、プロセッサ10は、ストレージ12にアクセスし、ストレージ12に格納されている1つ以上のプログラムをメモリ11にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、コンピュータ200のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ10は、入出力インターフェイス13を介して、仮想空間を提供するための信号をHMD110に送る。HMD110は、その信号に基づいてモニタ112に映像を表示する。
なお、図3に示される例では、コンピュータ200は、HMD110の外部に設けられる構成が示されているが、別の局面において、コンピュータ200は、HMD110に内蔵されてもよい。一例として、モニタ112を含む携帯型の情報通信端末(例えば、スマートフォン)がコンピュータ200として機能してもよい。
また、コンピュータ200は、複数のHMD110に共通して用いられる構成であってもよい。このような構成によれば、例えば、複数のユーザに同一の仮想空間を提供することもできるので、各ユーザは同一の仮想空間で他のユーザと同一のアプリケーションを楽しむことができる。
ある実施形態において、HMDシステム100では、グローバル座標系が予め設定されている。グローバル座標系は、現実空間における鉛直方向、鉛直方向に直交する水平方向、並びに、鉛直方向および水平方向の双方に直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。本実施形態では、グローバル座標系は視点座標系のひとつである。そこで、グローバル座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれ、x軸、y軸、z軸と規定される。より具体的には、グローバル座標系において、x軸は現実空間の水平方向に平行である。y軸は、現実空間の鉛直方向に平行である。z軸は現実空間の前後方向に平行である。
ある局面において、HMDセンサ120は、赤外線センサを含む。赤外線センサが、HMD110の各光源から発せられた赤外線をそれぞれ検出すると、HMD110の存在を検出する。HMDセンサ120は、さらに、各点の値(グローバル座標系における各座標値)に基づいて、HMD110を装着したユーザ190の動きに応じた、現実空間内におけるHMD110の位置および傾き(向き)を検出する。より詳しくは、HMDセンサ120は、経時的に検出された各値を用いて、HMD110の位置および傾きの時間的変化を検出できる。
グローバル座標系は現実空間の座標系と平行である。したがって、HMDセンサ120によって検出されたHMD110の各傾きは、グローバル座標系におけるHMD110の3軸周りの各傾きに相当する。HMDセンサ120は、グローバル座標系におけるHMD110の傾きに基づき、uvw視野座標系をHMD110に設定する。HMD110に設定されるuvw視野座標系は、HMD110を装着したユーザ190が仮想空間において物体を見る際の視点座標系に対応する。
[uvw視野座標系]
図4を参照して、uvw視野座標系について説明する。図4は、ある実施形態に従うHMD110に設定されるuvw視野座標系を概念的に表す図である。HMDセンサ120は、HMD110の起動時に、グローバル座標系におけるHMD110の位置および傾きを検出する。プロセッサ10は、検出された値に基づいて、uvw視野座標系をHMD110に設定する。
図4に示されるように、HMD110は、HMD110を装着したユーザ190の頭部を中心(原点)とした3次元のuvw視野座標系を設定する。より具体的には、HMD110は、グローバル座標系を規定する水平方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、グローバル座標系内においてHMD110の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって新たに得られる3つの方向を、HMD110におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)として設定する。
ある局面において、HMD110を装着したユーザ190が直立し、かつ、正面を視認している場合、プロセッサ10は、グローバル座標系に平行なuvw視野座標系をHMD110に設定する。この場合、グローバル座標系における水平方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)は、HMD110におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)に一致する。
uvw視野座標系がHMD110に設定された後、HMDセンサ120は、HMD110の動きに基づいて、設定されたuvw視野座標系におけるHMD110の傾きを検出できる。この場合、HMDセンサ120は、HMD110の傾きとして、uvw視野座標系におけるHMD110のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ軸周りのHMD110の傾き角度を表す。ヨー角(θv)は、uvw視野座標系におけるヨー軸周りのHMD110の傾き角度を表す。ロール角(θw)は、uvw視野座標系におけるロール軸周りのHMD110の傾き角度を表す。
HMDセンサ120は、検出されたHMD110の傾きに基づいて、HMD110が動いた後のHMD110におけるuvw視野座標系を、HMD110に設定する。HMD110と、HMD110のuvw視野座標系との関係は、HMD110の位置および傾きに関わらず、常に一定である。HMD110の位置および傾きが変わると、当該位置および傾きの変化に連動して、グローバル座標系におけるHMD110のuvw視野座標系の位置および傾きが変化する。
ある局面において、HMDセンサ120は、赤外線センサからの出力に基づいて取得される赤外線の強度および複数の点間の相対的な位置関係(例えば、各点間の距離など)に基づいて、HMD110の現実空間内における位置を、HMDセンサ120に対する相対位置として特定してもよい。また、プロセッサ10は、特定された相対位置に基づいて、現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の原点を決定してもよい。
[仮想空間]
図5を参照して、仮想空間についてさらに説明する。図5は、ある実施形態に従う仮想空間2を表現する一態様を概念的に表す図である。仮想空間2は、中心21の360度方向の全体を覆う全天球状の構造を有する。図5では、説明を複雑にしないために、仮想空間2のうちの上半分の天球が例示されている。仮想空間2では各メッシュが規定される。各メッシュの位置は、仮想空間2に規定されるXYZ座標系における座標値として予め規定されている。コンピュータ200は、仮想空間2に展開可能なパノラマ画像22(静止画、動画等)を構成する各部分画像を、仮想空間2において対応する各メッシュにそれぞれ対応付ける。
ある局面において、仮想空間2では、中心21を原点とするXYZ座標系が規定される。XYZ座標系は、例えば、グローバル座標系に平行である。XYZ座標系は視点座標系の一種であるため、XYZ座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれX軸、Y軸、Z軸として規定される。したがって、XYZ座標系のX軸(水平方向)がグローバル座標系のx軸と平行であり、XYZ座標系のY軸(鉛直方向)がグローバル座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)がグローバル座標系のz軸と平行である。
HMD110の起動時、すなわちHMD110の初期状態において、仮想カメラ1が、仮想空間2の中心21に配置される。ある局面において、プロセッサ10は、仮想カメラ1が撮影する画像をHMD110のモニタ112に表示する。仮想カメラ1は、現実空間におけるHMD110の動きに連動して、仮想空間2を同様に移動する。これにより、現実空間におけるHMD110の位置および傾きの変化が、仮想空間2において同様に再現され得る。
仮想カメラ1には、HMD110の場合と同様に、uvw視野座標系が規定される。仮想空間2における仮想カメラのuvw視野座標系は、現実空間(グローバル座標系)におけるHMD110のuvw視野座標系に連動するように規定されている。したがって、HMD110の傾きが変化すると、それに応じて、仮想カメラ1の傾きも変化する。また、仮想カメラ1は、HMD110を装着したユーザ190の現実空間における移動に連動して、仮想空間2において移動することもできる。
コンピュータ200のプロセッサ10は、仮想カメラ1の位置と傾き(基準視線5)とに基づいて、仮想カメラ1の撮影範囲である視認領域23を規定する。基準視線5は、仮想カメラ1の撮影方向とも言える。視認領域23は、仮想空間2のうち、HMD110を装着したユーザ190が視認する領域に対応する。つまり、仮想カメラ1の位置は、仮想空間2におけるユーザ190の視座と言える。
注視センサ140によって検出されるユーザ190の視線は、ユーザ190が物体を視認する際の視点座標系における方向である。HMD110のuvw視野座標系は、ユーザ190がモニタ112を視認する際の視点座標系に等しい。また、仮想カメラ1のuvw視野座標系は、HMD110のuvw視野座標系に連動している。したがって、ある局面に従うHMDシステム100は、注視センサ140によって検出されたユーザ190の視線を、仮想カメラ1のuvw視野座標系におけるユーザ190の視線とみなすことができる。
[ユーザの視線]
図6を参照して、ユーザの視線の決定について説明する。図6は、HMD110を装着するユーザ190の頭部を上から見た図である。
ある局面において、注視センサ140は、ユーザ190の右目および左目の各視線を検出する。ある局面において、ユーザ190が近くを見ている場合、注視センサ140は、視線R1およびL1を検出する。別の局面において、ユーザ190が遠くを見ている場合、注視センサ140は、視線R2およびL2を検出する。この場合、ロール軸wに対して視線R2およびL2が成す角度は、ロール軸wに対して視線R1およびL1が成す角度よりも小さい。注視センサ140は、検出結果をコンピュータ200に送信する。
コンピュータ200が、視線の検出結果として、視線R1およびL1の検出値を注視センサ140から受信した場合には、その検出値に基づいて、視線R1およびL1の交点である注視点N1を特定する。一方、コンピュータ200は、視線R2およびL2の検出値を注視センサ140から受信した場合には、視線R2およびL2の交点を注視点として特定する。コンピュータ200は、特定した注視点N1の位置に基づき、ユーザ190の視線N0を特定する。コンピュータ200は、例えば、ユーザ190の右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の延びる方向を、視線N0として検出する。視線N0は、ユーザ190が両目により実際に視線を向けている方向である。また、視線N0は、視認領域23に対してユーザ190が実際に視線を向けている方向に相当する。
また、別の局面において、HMDシステム100は、テレビジョン放送受信チューナを備えてもよい。このような構成によれば、HMDシステム100は、仮想空間2においてテレビ番組を表示することができる。
さらに別の局面において、HMDシステム100は、インターネットに接続するための通信回路、あるいは、電話回線に接続するための通話機能を備えていてもよい。
[視界領域]
図7および図8を参照して、視認領域23について説明する。図7は、仮想空間2において視認領域23をX方向から見たYZ断面を表す図である。図8は、仮想空間2において視認領域23をY方向から見たXZ断面を表す図である。
図7に示されるように、YZ断面における視認領域23は、領域24を含む。領域24は、仮想カメラ1の位置と基準視線5と仮想空間2のYZ断面とによって定義される。プロセッサ10は、仮想空間における基準視線5を中心として極角αを含む範囲を、領域24として規定する。
図8に示されるように、XZ断面における視認領域23は、領域25を含む。領域25は、仮想カメラ1の位置と基準視線5と仮想空間2のXZ断面とによって定義される。プロセッサ10は、仮想空間2における基準視線5を中心とした方位角βを含む範囲を、領域25として規定する。極角αおよびβは、仮想カメラ1の位置と仮想カメラ1の傾き(向き)とに応じて定まる。
ある局面において、HMDシステム100は、コンピュータ200からの信号に基づいて、視界画像26をモニタ112に表示させることにより、ユーザ190に仮想空間における視界を提供する。視界画像26は、パノラマ画像22のうち視認領域23に対応する部分に相当する。ユーザ190が、頭に装着したHMD110を動かすと、その動きに連動して仮想カメラ1も動く。その結果、仮想空間2における視認領域23の位置が変化する。これにより、モニタ112に表示される視界画像26は、パノラマ画像22のうち、仮想空間2においてユーザ190が向いた方向の視認領域23に重畳する画像に更新される。ユーザ190は、仮想空間2における所望の方向を視認することができる。
このように、仮想カメラ1の傾きは仮想空間2におけるユーザ190の視線(基準視線5)に相当し、仮想カメラ1が配置される位置は、仮想空間2におけるユーザ190の視点に相当する。したがって、仮想カメラ1の位置または傾きを変更することにより、モニタ112に表示される画像が更新され、ユーザ190の視界が移動される。
ユーザ190は、HMD110を装着している間、現実世界を視認することなく、仮想空間2に展開されるパノラマ画像22のみを視認できる。そのため、HMDシステム100は、仮想空間2への高い没入感覚をユーザ190に与えることができる。
ある実施形態に従う仮想カメラ1は、2つの仮想カメラ、すなわち、右目用の画像を提供するための仮想カメラと、左目用の画像を提供するための仮想カメラとを含み得る。この場合、ユーザ190が3次元の仮想空間2を認識できるように、適切な視差が、2つの仮想カメラに設定される。本実施形態においては、仮想カメラ1が2つの仮想カメラを含み、2つの仮想カメラのロール軸が合成されることによって生成されるロール軸(w)がHMD110のロール軸(w)に適合されるように構成されているものとして、本開示に係る技術思想を例示する。
[HMDの制御装置]
図9を参照して、HMD110の制御装置について説明する。ある実施形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図9は、ある実施形態に従うコンピュータ200をモジュール構成として表わすブロック図である。
図9に示されるように、コンピュータ200は、表示制御モジュール220と、仮想空間制御モジュール230と、メモリモジュール240と、通信制御モジュール250とを備える。表示制御モジュール220は、サブモジュールとして、仮想カメラ制御モジュール221と、視界領域決定モジュール222と、視界画像生成モジュール223と、傾き特定モジュール224と、顔器官検出モジュール225と、トラッキングモジュール226と、視点特定モジュール227とを含む。仮想空間制御モジュール230は、サブモジュールとして、仮想空間定義モジュール231と、仮想オブジェクト生成モジュール232と、操作オブジェクト制御モジュール233と、アバター制御モジュール234と、撮影制御モジュール235と、感情判断モジュール236とを含む。
ある実施形態において、表示制御モジュール220と仮想空間制御モジュール230とは、プロセッサ10によって実現される。別の実施形態において、複数のプロセッサ10が表示制御モジュール220と仮想空間制御モジュール230として作動してもよい。メモリモジュール240は、メモリ11またはストレージ12によって実現される。通信制御モジュール250は、通信インターフェイス14によって実現される。
ある局面において、表示制御モジュール220は、HMD110のモニタ112における画像表示を制御する。
仮想カメラ制御モジュール221は、仮想空間2に仮想カメラ1を配置する。また、仮想カメラ制御モジュール221は、仮想空間2における仮想カメラ1の位置と、仮想カメラ1の傾き(撮影方向)を制御する。視界領域決定モジュール222は、HMD110の傾きと、仮想カメラ1の位置とに応じて、視認領域23を規定する。視界画像生成モジュール223は、決定された視認領域23に基づいて、モニタ112に表示される視界画像26を生成する。
傾き特定モジュール224は、HMDセンサ120の出力に基づいてHMD110の傾きを特定する。他の局面において、傾き特定モジュール224は、モーションセンサとして機能するセンサ114の出力に基づいてHMD110の傾きを特定する。顔器官検出モジュール225は、第1カメラ115および第2カメラ117が生成するユーザ190の顔の画像から、ユーザ190の顔を構成する器官(例えば、口,目,眉)を検出する。トラッキングモジュール226は、顔器官検出モジュール225が検出した各器官ごとの特徴点(の位置)を間欠的に検出する。換言すれば、トラッキングモジュール226は、ユーザ190の表情を検出する。図12〜図14において、顔器官検出モジュール225およびトラッキングモジュール226の制御内容は後述される。
視点特定モジュール227は、注視センサ140からの信号に基づいて、ユーザ190の仮想空間2における視線を検出する。次に、視点特定モジュール227は、検出したユーザ190の視線と仮想空間2の天球とが交わる視点位置(XYZ座標系における座標値)を検出する。より具体的には、視点特定モジュール227は、仮想カメラ1の位置および傾きに基づいて、uvw座標系で規定されるユーザ190の視線をXYZ座標系に変換して視点位置を検出する。
仮想空間制御モジュール230は、ユーザ190に提供される仮想空間2を制御する。仮想空間定義モジュール231は、仮想空間2の大きさおよび形状を定義する。また、仮想空間定義モジュール231は、仮想空間2にパノラマ画像22を展開する。
仮想オブジェクト生成モジュール232は、後述するオブジェクト情報242に基づいて仮想空間2に配置されるオブジェクトを生成する。オブジェクトは、木、動物、人などを含み得る。
操作オブジェクト制御モジュール233は、仮想空間2においてユーザ190の操作を受け付けるための操作オブジェクトを仮想空間2に配置する。ユーザ190は、操作オブジェクトを操作することにより、例えば、仮想空間2に配置されるオブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、ユーザ190の手に相当する手オブジェクト等を含み得る。ある局面において、操作オブジェクト制御モジュール233は、モーションセンサ130の出力に基づいて現実空間におけるユーザ190の手の動きに連動するように仮想空間2における手オブジェクトを動かす。ある局面において、操作オブジェクトは、後述するアバターオブジェクトの手の部分に相当する。
アバター制御モジュール234は、ネットワーク19を介して接続される他のコンピュータ200のユーザ190のアバターオブジェクトを仮想空間2に配置するためのデータを生成する。ある局面において、アバター制御モジュール234は、ユーザ190のアバターオブジェクトを仮想空間2に配置するためのデータを生成する。ある局面において、アバター制御モジュール234は、ユーザ190を含む画像に基づいて、ユーザ190を模したアバターオブジェクトを生成する。他の局面において、アバター制御モジュール234は、複数種類のアバターオブジェクト(例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクト)の中から選択されたアバターオブジェクトを仮想空間2に配置するためのデータを生成する。
アバター制御モジュール234は、HMDセンサ120が検出するHMD110の動きをアバターオブジェクトに反映する。例えば、アバター制御モジュール234は、HMD110が傾いたことを検知して、アバターオブジェクトを傾けて配置するためのデータを生成する。また、ある局面において、アバター制御モジュール234は、コントローラ160の動きをアバターオブジェクトの手(操作オブジェクト)に反映する。この場合、コントローラ160は、コントローラ160の動きを検知するためのモーションセンサ、加速度センサ、または複数の発光素子(例えば、赤外線LED)などを備える。また、アバター制御モジュール234は、トラッキングモジュール226が検出したユーザ190の表情を、仮想空間2に配置されるアバターオブジェクトの顔に反映する。
撮影制御モジュール235は、図1で説明したカメラオブジェクト1710による撮影を制御する。例えば、撮影制御モジュール235は、カメラオブジェクト1710を配置するタイミング、カメラオブジェクト1710の位置および向きを制御する。また、撮影制御モジュール235は、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成して、ストレージ12に保存する。
感情判断モジュール236は、ユーザ190の感情を判断する。ある局面において、感情判断モジュール236は、マイク119から入力されるユーザ190の音声信号に基づいてユーザ190の感情を判断する。他の局面において、感情判断モジュール236は、トラッキングモジュール226によって検出されるユーザ190の表情によってユーザ190の感情を判断する。
仮想空間制御モジュール230は、仮想空間2に配置されるオブジェクトが、他のオブジェクトと衝突した場合に、当該衝突を検出する。仮想空間制御モジュール230は、例えば、あるオブジェクトと、別のオブジェクトとが触れたタイミングを検出すると、予め定められた処理を行なう。仮想空間制御モジュール230は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出すると、予め定められた処理を行なう。
メモリモジュール240は、空間情報241と、オブジェクト情報242と、ユーザ情報243と、顔情報244とを保持している。
空間情報241は、仮想空間2を提供するために規定された1つ以上のテンプレートを含む。仮想空間定義モジュール231は、このテンプレートに従い仮想空間2を定義する。空間情報241は、仮想空間2に展開される複数のパノラマ画像22をさらに含む。パノラマ画像22は、静止画像および動画像を含み得る。また、パノラマ画像22は、現実空間の画像と非現実空間の画像(例えば、コンピュータグラフィックス)とを含み得る。
オブジェクト情報242は、仮想空間2に配置されるオブジェクト(例えば、カメラオブジェクト1710)を生成するためのデータを含む。
ユーザ情報243は、ユーザ190を識別するユーザIDを含む。ユーザIDは、例えば、ユーザ190が使用するコンピュータ200に設定されるIP(Internet Protocol)アドレスまたはMAC(Media Access Control)アドレスであり得る。他の局面において、ユーザIDはユーザによって設定され得る。ユーザ情報243は、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム等を含む。
顔情報244は、顔器官検出モジュール225が、ユーザ190の顔器官を検出するために予め記憶されたテンプレートを含む。ある実施形態において、顔情報244は、口テンプレート245と、目テンプレート246と、眉テンプレート247とを含む。各テンプレートは、顔を構成する器官に対応する画像であり得る。例えば、口テンプレート245は、口の画像であり得る。なお、各テンプレートは複数の画像を含んでもよい。顔情報244は、基準データ248をさらに含む。基準データ248は、ユーザ190が無表情である状態において、トラッキングモジュール226によって検出されるデータである。
メモリモジュール240に格納されているデータおよびプログラムは、HMD110のユーザ190によって入力される。あるいは、プロセッサ10が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ150)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール240に格納する。
通信制御モジュール250は、ネットワーク19を介して、サーバ150その他の情報通信装置と通信し得る。
ある局面において、表示制御モジュール220および仮想空間制御モジュール230は、例えば、ユニティテクノロジーズ社によって提供されるUnity(登録商標)を用いて実現され得る。別の局面において、表示制御モジュール220および仮想空間制御モジュール230は、各処理を実現する回路素子の組み合わせとしても実現され得る。
コンピュータ200における処理は、ハードウェアと、プロセッサ10により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール240に予め格納されている場合がある。また、ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール250を介してサーバ150その他のコンピュータからダウンロードされた後、ストレージ12に一旦格納される。そのソフトウェアは、プロセッサ10によってストレージ12から読み出され、実行可能なプログラムの形式でメモリ11に格納される。プロセッサ10は、そのプログラムを実行する。
[コンピュータ200の制御構造]
次に、図10を用いて実施形態に係るコンピュータ200の制御構造について説明する。図10は、HMDシステム100が実行する処理を表わすフローチャートである。
ステップS1005において、コンピュータ200のプロセッサ10は、仮想空間定義モジュール231として、空間情報241に格納されるテンプレートに基づいて仮想空間2を定義する。
ステップS1010において、プロセッサ10は、仮想空間2にパノラマ画像22を展開する。
ステップS1020において、プロセッサ10は、仮想カメラ1および操作オブジェクトを仮想空間2に配置する。例えば、プロセッサ10は、メモリのワーク領域において、仮想カメラ1を仮想空間2において予め規定された中心21に配置する。
ステップS1030において、プロセッサ10は、視界画像生成モジュール223として、初期の視界画像26(パノラマ画像22の一部)を表示するための視界画像データを生成する。生成された視界画像データは、視界画像生成モジュール223を介して通信制御モジュール250によってHMD110に送信される。
ステップS1032において、HMD110のモニタ112は、コンピュータ200から受信した信号に基づいて、視界画像26を表示する。これにより、HMD110を装着したユーザ190は、仮想空間2を認識する。
ステップS1034において、HMDセンサ120は、HMD110が出力する複数の赤外線光に基づいて、HMD110の位置および傾き(ユーザ190の動き)を検知する。検知結果は、動き検知データとして、コンピュータ200に送信される。
ステップS1040において、プロセッサ10は、HMDセンサ120から入力された動き検知データに基づいて、仮想カメラ1の位置および傾きを変更する。これにより、仮想カメラ1の位置および傾き(基準視線5)は、ユーザ190の頭の動きに連動して更新される。視界領域決定モジュール222は、変更後の仮想カメラ1の位置および傾きに応じて視認領域23を規定する。
ステップS1046において、モーションセンサ130は、現実空間におけるユーザ190の手の動きを検出する。モーションセンサ130は、検出結果をコンピュータ200に送信する。
ステップS1050において、プロセッサ10は、操作オブジェクト制御モジュール235として、モーションセンサ130の出力に基づいて操作オブジェクト(例えば、アバターオブジェクトの手)を移動する。プロセッサ10は、操作オブジェクトの移動により操作オブジェクトと他のオブジェクトとが接触したことを検出すると、予め定められた処理を実行する。
ステップS1060において、プロセッサ10は、視界画像生成モジュール223として、移動後の仮想カメラ1が撮影する視界画像26を表示するための視界画像データを生成し、生成した視界画像データをHMD110に出力する。
ステップS1062において、HMD110のモニタ112は、受信した視界画像データに基づいて、更新後の視界画像を表示する。これにより、仮想空間2におけるユーザの視界が更新される。
[アバターオブジェクト]
図11Aおよび図11Bを参照して、実施形態に従うアバターオブジェクトについて説明する。以下、HMDセット105Aのユーザをユーザ190A、HMDセット105Bのユーザをユーザ190B、HMDセット105Cのユーザをユーザ190C、HMDセット105Dのユーザをユーザ190Dと表す。また、HMDセット105Aに関する各構成要素の参照符号にAが付され、HMDセット105Bに関する各構成要素の参照符号にBが付され、HMDセット105Cに関する各構成要素の参照符号にCが付され、HMDセット105Dに関する各構成要素の参照符号にDが付される。例えば、HMD110Aは、HMDセット105Aに含まれる。
図11Aは、ネットワーク19において、複数のHMD110が、複数のユーザ190にそれぞれ仮想空間を提供する状況を表す模式図である。図11Aを参照して、コンピュータ200A〜200Dは、HMD110A〜110Dを介して、ユーザ190A〜190Dに、仮想空間2A〜2Dをそれぞれ提供する。図11Aに示される例において、仮想空間2Aおよび仮想空間2Bは同じデータによって構成されている。換言すれば、コンピュータ200Aとコンピュータ200Bとは同じ仮想空間を共有していることになる。仮想空間2Aおよび仮想空間2Bには、ユーザ190Aに対応するアバターオブジェクト1100Aと、ユーザ190Bに対応するアバターオブジェクト1100Bとが存在する。なお、仮想空間2Aにおけるアバターオブジェクト1100Aおよび仮想空間2Bにおけるアバターオブジェクト1100BがそれぞれHMDを装着しているが、これは説明を分かりやすくするためのものであって、実際にはこれらのオブジェクトはHMDを装着していない。
ある局面において、仮想カメラ制御モジュール221Aは、ユーザ190Aの視界画像26Aを撮影する仮想カメラ1Aを、アバターオブジェクト1100Aの目の位置に配置する。基準視線5Aは、仮想カメラ1Aの撮影方向を表す。そのため、基準視線5Aは、アバターオブジェクト1100Aの視線方向とも言える。
図11Bは、図11Aにおいてユーザ190Aが視認する視界画像1110を表す。視界画像1110は、HMD110Aのモニタ112Aに表示される画像である。この視界画像1110は、仮想カメラ1Aが撮影する画像である。図11Aにおいて、仮想空間2Aには、現実空間における市街風景のパノラマ画像22が展開されている。また、視界画像1110は、ユーザ190Bのアバターオブジェクト1100Bを含む。なお、特に図示はしていないが、ユーザ190Bの視界画像も同様に、市街風景とユーザ190Aのアバターオブジェクト1100Aとを含む。
図11Bの状態において、ユーザ190Aはユーザ190Bと対話によるコミュニケーションを図ることができる。より具体的には、マイク119Aにより取得されたユーザ190Aの音声は、サーバ150を介してユーザ190BのHMD110Bに送信され、HMD110Bに設けられたスピーカ118Bから出力される。また、ユーザ190Bの音声は、サーバ150を介してユーザ190AのHMD110Aに送信され、HMD110Aに設けられたスピーカ118Aから出力される。
コンピュータ200Aは、コンピュータ200BからHMD120Bおよびモーションセンサ130Bの検出結果を受信する。コンピュータ200Aは、アバター制御モジュール234Aとして、受信したデータをアバターオブジェクト1100Bに反映する。これにより、ユーザ190Aは、ユーザ190Bの動きを、アバターオブジェクト1100Bを通じて認識できる。
また、コンピュータ200Aは、コンピュータ200Bからトラッキングモジュール226Bの検出結果を受信する。コンピュータ200Aは、アバター制御モジュール234Aとして、受信したデータをアバターオブジェクト1100Bの顔に反映する。これにより、ユーザ190Aは、ユーザ190Bの表情を、アバターオブジェクト1100Bを通じて認識できる。
このように、ユーザ190Aおよびユーザ190Bは、仮想空間上で同じパノラマ画像22を共有しながらコミュニケーションを図ることができる。このパノラマ画像22は、例えば、映画、ライブ映像、観光名所の画像および、ユーザが過去に撮影した画像などを含み得る。
[フェイストラッキング]
以下、図12〜図14を参照して、ユーザの表情(顔の動き)を検出するための具体例について説明する。図12〜図14では、一例として、ユーザ190の口の動きを検出する具体例について説明する。なお、図12〜図14で説明される検出方法は、ユーザ190の口の動きに限られず、ユーザ190の顔を構成する他の器官(例えば、目、眉、鼻、頬)の動きの検出にも適用され得る。
図12は、ユーザの顔画像1200から口を検出する制御について説明する図である。第1カメラ115により生成された顔画像1200は、ユーザ190の鼻と口とを含む。
顔器官検出モジュール225は、顔情報244に格納される口テンプレート245を利用したパターンマッチングにより、顔画像1200から口領域1210を特定する。ある局面において、顔器官検出モジュール225は、顔画像1200において、矩形上の比較領域を設定し、この比較領域の大きさ、位置および角度をそれぞれ変えながら、比較領域の画像と、口テンプレート245の画像との類似度を算出する。顔器官検出モジュール225は、予め定められたしきい値よりも大きい類似度が算出された比較領域を、口領域1210として特定し得る。
顔器官検出モジュール225はさらに、算出した類似度がしきい値よりも大きい比較領域の位置と、他の顔器官(例えば、目、鼻)の位置との相対関係に基づいて、当該比較領域が口領域に相当するか否かを判断し得る。
トラッキングモジュール226は、顔器官検出モジュール225が検出した口領域1210から、より詳細な口の形状を検出する。
図13は、トラッキングモジュール226が口の形状を検出する処理を説明する図(その1)である。図13を参照して、トラッキングモジュール226は、口領域1210に含まれる口の形状(唇の輪郭)を検出するための輪郭検出線1300を設定する。輪郭検出線1300は、顔の高さ方向に直交する方向に、予め定められた間隔で複数本設定される。
トラッキングモジュール226は、複数本の輪郭検出線1300の各々に沿った口領域1210の輝度値の変化を検出し、輝度値の変化が急激な位置を輪郭点として特定し得る。より具体的には、トラッキングモジュール226は、隣接画素との輝度差(すなわち、輝度値変化)が予め定められたしきい値以上である画素を、輪郭点として特定し得る。画素の輝度値は、例えば、画素のRBG値を所定の重み付けで積算することにより得られる。
トラッキングモジュール226は、口領域1210に対応する画像から2種類の輪郭点を特定する。トラッキングモジュール226は、口(唇)の外側の輪郭に対応する輪郭点1310と、口(唇)の内側の輪郭に対応する輪郭点1320とを特定する。ある局面において、トラッキングモジュール226は、1つの輪郭検出線1300上に3つ以上の輪郭点が検出された場合には、両端の輪郭点を外側の輪郭点1310として特定し得る。この場合、トラッキングモジュール226は、外側の輪郭点1310以外の輪郭点を、内側の輪郭点1320として特定し得る。また、トラッキングモジュール226は、1つの輪郭検出線1300上に2つ以下の輪郭点が検出された場合には、検出された輪郭点を外側の輪郭点1310として特定し得る。
図14は、トラッキングモジュール226が口の形状を検出する処理を説明するための図(その2)である。図14では、外側の輪郭点1310は白丸、内側の輪郭点1320はハッチングされた丸としてそれぞれ示されている。
トラッキングモジュール226は、内側の輪郭点1320間を補完することにより、口形状1400を特定する。この場合、輪郭点1320は、口の特徴点と言える。ある局面において、トラッキングモジュール226は、スプライン補完などの非線形の補完方法を用いて、口形状1400を特定し得る。なお、他の局面において、トラッキングモジュール226は、外側の輪郭点1310間を補完することにより口形状1400を特定してもよい。さらに他の局面において、トラッキングモジュール226は、想定される口形状(人の上唇と下唇とによって形成され得る所定の形状)から、大きく逸脱する輪郭点を除外し、残った輪郭点によって口形状1400を特定してもよい。このようにして、トラッキングモジュール226は、ユーザの口の動作(形状)を特定し得る。なお、口形状1400の検出方法は上記に限られず、トラッキングモジュール226は、他の手法により口形状1400を検出してもよい。また、トラッキングモジュール226は、同様にして、ユーザの目および眉の動作を検出し得る。なお、トラッキングモジュール226は、頬、鼻などの器官の形状を検出可能に構成されてもよい。
図15は、フェイストラッキングデータの構造の一例を表す。フェイストラッキングデータは、各器官の形状を構成する複数の特徴点のuvw視野座標系における位置座標を表す。例えば、図15に示されるポイントm1、m2・・は、口形状1400を構成する内側の輪郭点1320に対応する。ある局面において、フェイストラッキングデータは、第1カメラ115の位置を基準(原点)としたuvw視野座標系における座標値である。他の局面において、フェイストラッキングデータは、各器官ごとに予め定められた特徴点を基準(原点)とした座標系における座標値である。一例として、ポイントm1、m2・・は、内側の輪郭点1320のうち口角に対応するいずれか一方の特徴点を原点とした座標系における座標値である。
コンピュータ200は、生成されたフェイストラッキングデータをサーバ150に送信する。サーバ150は、コンピュータ200と通信する他のコンピュータ200にこのデータを転送する。他のコンピュータ200は、受信したフェイストラッキングデータを、受信元のコンピュータ200のユーザに対応するアバターオブジェクトに反映する。
図11Bに示される例において、コンピュータ200Aは、コンピュータ200Bからユーザ190Bの表情を表すフェイストラッキングデータを受信する。コンピュータ200Aは、受信したデータをアバターオブジェクト1100Bに反映する。一例として、アバターオブジェクト1100Bを構成するポリゴンの頂点のうちいくつかの頂点には、フェイストラッキングデータに対応する頂点が設定されている。コンピュータ200Aは、対応する頂点の位置をフェイストラッキングデータに基づいて移動する。これにより、ユーザ190Bの表情がアバターオブジェクト1100Bに反映される。その結果、ユーザ190Aは、アバターオブジェクト1100Bを介してユーザ190Bの表情を認識できる。
[サーバ150の制御構造]
図16は、サーバ150のハードウェア構成およびモジュール構成を説明する図である。ある実施形態において、サーバ150は、主たるハードウェアとして通信インターフェイス1610と、プロセッサ1620と、ストレージ1630とを備える。
通信インターフェイス1610は、コンピュータ200など外部の通信機器と信号を送受信するための変復調処理などを行なう無線通信用の通信モジュールとして機能する。通信インターフェイス1610は、チューナ、高周波回路等により実現される。
プロセッサ1620は、サーバ150の動作を制御する。プロセッサ1620は、ストレージ1630に格納される各種の制御プログラムを実行することにより、送受信部1622、サーバ処理部1624、マッチング部1626、および撮影制御部1628として機能する。
送受信部1622は、各コンピュータ200との間で各種情報を送受信する。例えば、送受信部1622は、仮想空間2にオブジェクトを配置する要求、オブジェクトを仮想空間2から削除する要求、オブジェクトを移動させる要求、ユーザの音声、または仮想空間2を定義するための情報などを各コンピュータ200に送信する。
サーバ処理部1624は、コンピュータ200から受信した情報に基づいて、後述される撮影履歴DB(Data Base)1640、視点履歴DB1642、およびコメントDB1644を更新する。
マッチング部1626は、複数のユーザを関連付けるための一連の処理を行なう。マッチング部1626は、例えば、複数のユーザが同じ仮想空間2を共有するための入力操作を行った場合に、仮想空間2に属する複数のユーザの各々のユーザIDを関連付ける処理などを行なう。
撮影制御部1628は、ユーザが過去にパノラマ動画像を閲覧した履歴(撮影履歴DB1640、視点履歴DB1642、コメントDB1644)に基づいて、ユーザがパノラマ動画像において関心を示した場所とタイミングとを検出する。撮影制御部1628は、検出結果をコンピュータ200に送信する。
ストレージ1630は、仮想空間指定情報1632と、オブジェクト指定情報1634と、パノラマ画像DB1636と、ユーザDB1638と、撮影履歴DB1640と、視点履歴DB1642と、コメントDB1644とを保持する。
仮想空間指定情報1632は、コンピュータ200の仮想空間定義モジュール231が仮想空間2を定義するために用いられる情報である。例えば、仮想空間指定情報1632は、仮想空間2の大きさまたは形状を指定する情報を含む。
オブジェクト指定情報1634は、コンピュータ200の仮想オブジェクト生成モジュール232が仮想空間2に配置(生成)するオブジェクトを指定する。パノラマ画像DB1636は、コンピュータ200に配信するパノラマ画像22と、パノラマ画像22を特定するための識別情報(以下、「パノラマ画像ID」とも言う)とを互いに関連付けて複数格納する。
ユーザDB1638は、複数のユーザの各々を識別する情報(ユーザID)と、ユーザの属性情報とを含む。
撮影履歴DB1640は、仮想空間2で行なわれた撮影に関する情報を含む。撮影履歴DB1640は、自動撮影DB1646と、撮影DB1648とを含む、自動撮影DB1646は、仮想空間2で行なわれた撮影のうち、後述する自動撮影(ユーザ190の操作を必要としない撮影)に関する情報を含む。撮影DB1648は、仮想空間2で行なわれた撮影のうち、ユーザ190が能動的に行なった撮影に関する情報を含む。
視点履歴DB1642は、ユーザがパノラマ画像22のどの位置を視ていたかを表す情報を含む。コメントDB1644は、パノラマ画像22に対してユーザが行なったコメントを含む。撮影履歴DB1640、視点履歴DB1642、およびコメントDB1644の詳細は後述される。
[音声に基づく自動撮影]
次に図17および図18を用いて、ユーザ190Aの音声に基づく自動撮影処理を説明する。図17は、ある局面においてモニタ112Aに表示される視界画像1700を表す。視界画像1700は、市街風景を表すパノラマ画像22の一部と、アバターオブジェクト1100Bと、カメラオブジェクト1710とコメントオブジェクト1721〜1723とを含む。なお、図17に示される例においてカメラオブジェクト1710は、カメラの形状をしているが、他の局面において、カメラ以外の形状であってもよい。
プロセッサ10Aは、撮影制御モジュール235Aとして、マイク119Aから入力されるユーザ190Aの音声信号に基づいて自動撮影を実行する。より具体的には、プロセッサ10Aは、音声信号のレベル(音量)、音声信号から抽出される文字列、および音声信号から推測されるユーザ190の感情の少なくともいずれか1つの情報に基づいて、自動撮影を実行する。
(音量に基づく自動撮影)
ある実施形態に従う撮影制御モジュール235Aは、マイク119Aから入力される音声信号のレベル(振幅)が予め定められたレベル以上になった場合に、撮影タイミングを検出する。ユーザ190Aが大きな声を出している時、ユーザ190Aは、パノラマ画像22に展開されるコンテンツまたはユーザ190Bとの会話によって興奮している可能性が高いためである。
(発話内容に基づく自動撮影)
ある実施形態に従う撮影制御モジュール235Aは、マイク119Aから入力される音声信号から文字列を抽出する。一例として、撮影制御モジュール235Aは、音声信号の先頭から予め定められた時間単位(たとえば、10msec単位)で区切られる波形データと、ストレージ12Aに格納される音響モデル(図示しない)とを照合して、文字列を抽出する。音響モデルは、母音や子音などの音素ごとの特徴量を表す。一例として、プロセッサ10Aは、隠れマルコフモデルに基づき、音声信号と音響モデルとを照合する。
撮影制御モジュール235Aは、抽出した文字列に予め定められた文字列(例えば、「すごい」、「おぉ」、「えぇ〜」などの感嘆詞)が含まれている場合に、撮影タイミングを検出する。
(音声信号から推測される感情に基づく自動撮影)
ある実施形態に従う感情判断モジュール236Aは、入力された音声信号からユーザ190Aの感情を推定する。例えば、感情判断モジュール236Aは、音声信号から文字列を抽出して、当該文字列から感情を推定する。このような処理は、例えば、メタデータ社が提供する「感情解析API」により実現され得る。他の局面において、感情判断モジュール236Aは、音声信号の波形から感情を推定する。このような処理は、例えば、AGI社が提供する「ST Emotion SDK」により実現され得る。
感情判断モジュール236Aは、音声信号から推定される感情が肯定的な感情である場合(例えば、感情の種類が「喜び」または「楽しい」のとき)に、撮影タイミングを検出する。
撮影制御モジュール235Aは、上記いずれかの手法により撮影タイミングを検出すると、カメラオブジェクト1710による自動撮影処理を実行する。図18を用いてこの処理をより具体的に説明する。
(制御構造)
図18は、音声に基づく自動撮影処理の一例を表すフローチャートである。図18に示される処理は、プロセッサ10Aがメモリ11Aまたはストレージ12Aに格納される制御プログラムを読み込んで実行することにより実現される。
ステップS1805において、プロセッサ10Aは、仮想空間定義モジュール231Aとして、サーバ150から受信した仮想空間指定情報1632に基づいて、仮想空間2Aを定義する。
ステップS1810において、プロセッサ10Aは、仮想空間定義モジュール231Aとして、サーバ150から受信したパノラマ画像22を仮想空間2Aに展開する。他の局面において、プロセッサ10Aは、サーバ150からパノラマ画像IDの指定を受け付け、空間情報241Aに格納される複数のパノラマ画像22のうち、当該IDに対応するパノラマ画像を仮想空間2Aに展開するように構成されていてもよい。
ステップS1815において、プロセッサ10Aは、アバター制御モジュール234Aとして、仮想空間2Aにユーザ190Aに対応するアバターオブジェクト1100Aを配置する。
ステップS1820において、プロセッサ10Aは、撮影制御モジュール235Aとして、カメラオブジェクト1710を仮想空間2Aに配置する。なお、他の局面において、プロセッサ10Aは、後述するステップS1850の処理の時点で初めてカメラオブジェクト1710を配置するように構成されてもよい。この場合、ユーザ190Aは、プロセッサ10Aが自動撮影を行なうときだけカメラオブジェクト1710を視認するため、パノラマ画像22の視聴に集中できる。
ステップS1825において、プロセッサ10Aは、アバター制御モジュール234Aとして、アバターオブジェクト1100Aの位置および視線方向(傾き)を更新する。より具体的には、プロセッサ10Aは、傾き特定モジュール224Aが特定するHMD110Aの傾きに基づいてアバターオブジェクト1100Aの視線方向を更新する。また、プロセッサ10Aは、HMDセンサ120Aの出力、およびコントローラ160Aの出力に基づいてアバターオブジェクト1100Aの位置を更新する。
ステップS1830において、プロセッサ10Aは、マイク119Aから音声信号の入力を受け付ける。
ステップS1835において、プロセッサ10Aは、撮影制御モジュール235Aとして、ユーザ190Aの発話に対応する音声信号が予め定められたレベル(例えば、70dB)以上であるか否かを判断する。プロセッサ10Aは、音声信号が予め定められたレベル以上であると判断した場合(ステップS1835でYES)、ステップS1840の処理を実行する。そうでない場合(ステップS1835でNO)、プロセッサ10AはステップS1825の処理を再び実行する。
ステップS1840において、プロセッサ10Aは、感情判断モジュール236Aとして、入力された音声信号からユーザ190Aの感情を推測する。プロセッサ10Aは、推測した190Aの感情が肯定的であるか否かを判断する。プロセッサ10Aは、190Aの感情が肯定的であると判断した場合(ステップS1840でYES)、ステップS1845の処理を実行する。そうでない場合(ステップS1840でNO)、プロセッサ10AはステップS1825の処理を再び実行する。
ステップS1845において、プロセッサ10Aは、ユーザ190Aの発話に対応する音声信号から文字列を抽出する。プロセッサ10Aは、抽出した文字列に予め定められた文字列が含まれているか否かを判断する。
プロセッサ10Aは、抽出した文字列に予め定められた文字列が含まれていると判断した場合(ステップS1845でYES)、ステップS1850の処理を実行する。そうでない場合(ステップS1845でNO)、プロセッサ10Aは、ステップS1825の処理を再び実行する。
ステップS1850において、プロセッサ10Aは、撮影制御モジュール235Aとして、アバターオブジェクト1100Aの位置および視線方向に基づいてカメラオブジェクト1710を移動する。より具体的には、プロセッサ10Aは、カメラオブジェクト1710の撮影範囲1730にアバターオブジェクト1100Aの少なくとも一部(例えば頭部)が含まれるように、カメラオブジェクト1710を移動させる。一例として、プロセッサ10Aは、カメラオブジェクト1710の撮影方向と、アバターオブジェクト1100Aの視線方向とが互いに向かい合う位置に、カメラオブジェクト1710を配置する。
ステップS1855において、プロセッサ10Aは、撮影制御モジュール235Aとして、今が撮影に適したタイミングであること、および、カメラオブジェクト1710の位置をユーザ190Aに通知する。
一例として、プロセッサ10Aは、これから撮影を行なう旨を表す音声(例えば、「はい、チーズ!」)をスピーカ118Aから出力することにより、撮影タイミングをユーザ190Aに通知する。他の例として、プロセッサ10Aは、これから撮影を行なう旨のメッセージ(例えば、撮影までの時間をカウントダウンする)をモニタ112Aに表示することにより、撮影タイミングをユーザ190Aに通知する。
一例として、プロセッサ10Aは、視認領域23Aにカメラオブジェクト1710を配置することにより、カメラオブジェクト1710の位置をユーザ190Aに通知する。他の例として、プロセッサ10Aは、音声(例えば、「後ろ向いて」)によりカメラオブジェクト1710の位置をユーザ190Aに通知する。
ステップS1860において、プロセッサ10Aは、撮影制御モジュール235Aとして、アバターオブジェクト1100Aがカメラオブジェクト1710に向いているか否かを判断する。基準視線5Aは、アバターオブジェクト1100Aの視線方向に対応する。そのため、プロセッサ10Aは、基準視線5Aがカメラオブジェクト1710に注がれている場合に、アバターオブジェクト1100Aがカメラオブジェクト1710に向いていると判断する。
プロセッサ10Aは、アバターオブジェクト1100Aがカメラオブジェクト1710に向いていると判断した場合(ステップS1860でYES)、ステップS1865の処理を実行する。そうでない場合(ステップS1860でNO)、プロセッサ10Aは、アバターオブジェクト1100Aがカメラオブジェクト1710に向くまで待機する。
ステップS1865において、プロセッサ10Aは、撮影制御モジュール235Aとして、カメラオブジェクト1710により撮影処理を実行する。より具体的には、プロセッサ10Aは、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成する。
上記によれば、コンピュータ200Aは、撮影に適したタイミングで、カメラ目線のアバターオブジェクト1100Aを含む画像を自動的に生成する。そのため、ユーザ190Aは、能動的に撮影操作を行なわなくても、撮影に適したタイミングで生成された写真を得ることができる。
なお、上記の例においてコンピュータ200Aは、ステップS1835〜S1845の3つの条件がいずれも満たされた場合に、自動的に撮影を行なうように構成されているが、他の局面において、3つの条件のうち少なくとも1つが満たされた場合に自動的に撮影を行なうように構成されてもよい。
ステップS1870において、プロセッサ10Aは、撮影情報をサーバ150に送信する。撮影情報は、ステップS1865で実行された撮影処理に関する情報である。サーバ150は、受信した撮影情報に基づいて自動撮影DB1646を更新する。
図19は、自動撮影DB1646のデータ構造の一例を表す図である。自動撮影DB1646は、ユーザIDと、パノラマ画像IDと、カメラ位置と、視点位置と、撮影タイミングとを互いに関連付けて保持する。
撮影タイミングは、パノラマ画像22が動画像である場合に、パノラマ画像22の再生開始を起点とする、撮影が行なわれたタイミング(ステップS1865)を表す。カメラ位置は、撮影タイミングにおけるカメラオブジェクト1710の位置である。視点位置は、撮影タイミングにおいてユーザ190の視線が注がれているパノラマ画像22の位置である。各コンピュータ200は、自動撮影処理が行なわれるごとに、ユーザID、パノラマ画像ID、カメラ位置、視点位置、および撮影タイミングをサーバ150に送信する。
上記の自動撮影処理は、ユーザ190Aが仮想空間2Aに展開されるコンテンツに関心を示したと推定されるタイミングで行なわれる。そのため、上記の撮影タイミングおよび視点位置は、ユーザが関心を示したコンテンツが表示されているタイミングおよび位置とも言える。サーバ150の管理者は、自動撮影DB1646(視点位置および撮影タイミング)に基づいて、ユーザ190の嗜好を分析できる。
(ユーザが関心を示したコンテンツを含む画像を生成する処理) 上記の例において、撮影制御モジュール235Aは、アバターオブジェクト1100Aの視線方向とカメラオブジェクト1710の撮影方向とが向かい合うようにカメラオブジェクト1710を仮想空間2Aに配置するように構成されている(ステップS1850)。
この場合、自動撮影処理により得られる画像には、ユーザ190Aがパノラマ画像22において関心を示したコンテンツは含まれない。ユーザによっては、自身のアバターオブジェクトを含むだけでなく、自身が関心を示したコンテンツも撮影して欲しいと考える。そこで、ある実施形態に従う撮影制御モジュール235Aは、ユーザ190Aが関心を示したコンテンツも含むように、カメラオブジェクト1710を仮想空間2Aに配置する。
図20は、ある実施形態に従うカメラオブジェクト1710の配置処理について説明するための図である。図21は、図20の状態において、モニタ112Aに表示される視界画像2100を表す。仮想空間2Aには、アバターオブジェクト1100Aおよび1100Bが配置されている。これらのアバターオブジェクトは互いに向かい合っている。この状態において、プロセッサ10Aは、マイク119Aにより出力されたユーザ190Aの音声信号に基づいて撮影タイミングを検出する。
プロセッサ10Aは、撮影タイミングを検出すると、アバターオブジェクト1100Aの視線方向とは逆方向にカメラオブジェクト1710を配置する。より具体的には、プロセッサ10Aは、基準視線5A(仮想カメラ1Aの撮影方向)と逆方向に延在する線上に、カメラオブジェクト1710を配置する。
プロセッサ10Aは、ユーザ190Aに対してカメラオブジェクト1710の位置を通知する。図21の例において、プロセッサ10Aは、矢印アイコン2110を配置することでカメラオブジェクト1710の位置を通知する。矢印アイコン2110は、アバターオブジェクト1100Aの仮想空間2Aにおける位置および視線方向を基準とした、カメラオブジェクト1710の位置を表す。
他の局面において、プロセッサ10Aは、ユーザ190Aに対して、カメラオブジェクト1710がアバターオブジェクト1100Aの後ろに配置されていることを知らせる音声(例えば、「後ろ向いて」)をスピーカ118Aから出力する。
これにより、ユーザ190A(アバターオブジェクト1100A)は後ろを振り向く。プロセッサ10Aは、ユーザ190Aが後ろを振り向いたときに、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成する。
この画像は、カメラ目線のアバターオブジェクト1100Aと、撮影タイミングでユーザ190Aが見ていたコンテンツ(例えば、アバターオブジェクト1100B)とを含む。
上記によれば、ある実施形態に従うコンピュータ200は、ユーザが関心を示したコンテンツを含む画像を自動で生成できる。
[表情に基づく自動撮影処理]
上記の例では、プロセッサ10Aは、音声信号に基づいて撮影タイミングを検出するように構成されている。他の局面において、プロセッサ10Aは、フェイストラッキングデータ(ユーザ190Aの表情)に基づいて撮影タイミングを検出する。図22および23を用いてこの処理を説明する。
図22Aは、ユーザ190Aが無表情時に取得される顔の特徴点を表す。図22Bは、ユーザ190Aが驚いたときに取得される顔の特徴点を表す。図22Aおよび図22Bに示される特徴点Pは、トラッキングモジュール226Aによって取得されるユーザ190Aの顔の特徴点を表す。
ある局面において、プロセッサ10Aは、第1カメラ115Aおよび第2カメラ117Aによってユーザ190Aの顔を撮影する。このとき、プロセッサ10Aは、モニタ112Aに、無表情での撮影を促すメッセージを表示する。プロセッサ10Aは、取得した画像に基づいてフェイストラッキングデータを生成する。このとき生成されたフェイストラッキングは基準データ248Aとして機能する。プロセッサ10Aは、生成した基準データ248をメモリモジュール240Aに保存する。
図22Aに示される特徴点Pは、基準データ248Aに対応する。一方、図22Bに示される特徴点Pは、ユーザ190Aが仮想空間2Aに没入している間に随時取得されるフェイストラッキングデータに対応する。
図22Bに示される例において、ユーザ190Aは驚いているため、図22Aと比較して目の特徴点Pが顔の高さ方向に広がり、眉の特徴点Pが上方向に移動している。このように、基準データに対するフェイストラッキングデータの変動量は、仮想空間2Aに展開されるコンテンツに対するユーザ190Aの関心の度合いを表す。
そこで、プロセッサ10Aは、基準データに対するフェイストラッキングデータの変動量が予め定められた変動量を上回った場合に、撮影タイミングを検出する。
ある局面において、プロセッサ10Aは、各々の特徴点ごとに基準データに対するフェイストラッキングデータの変動量を算出し、その総和に基づいて上記の判断を行なう。他の局面において、プロセッサ10Aは、感情による変化の度合いが大きい予め定められた特徴点(例えば、口角に対応する特徴点)についてのみ変動量を算出し、その総和に基づいて上記判断を行なう。
上記によれば、プロセッサ10Aは、ユーザ190Aがコンテンツに関心を示したときに自動撮影により画像を生成できる。
(制御構造)
図23は、フェイストラッキングデータに基づく自動撮影処理の一例を表すフローチャートである。なお、図23に示される処理のうち上述の処理には同じ符号を付している。そのため、それらの処理については繰り返し説明しない。
ステップS2310において、プロセッサ10Aは、トラッキングモジュール226Aとして、第1カメラ115Aおよび第2カメラ117Aによってユーザ190Aの顔を撮影する。このとき、プロセッサ10Aは、モニタ112Aに、無表情での撮影を促すメッセージを表示する。プロセッサ10Aは、取得した画像に基づいて基準データ248Aを生成し、生成したデータをメモリモジュール240Aに保存する。ある局面において、プロセッサ10Aは、モニタ112Aに初期の視界画像26を表示する前にステップS2310の処理を実行する。
ステップS2320において、プロセッサ10Aは、トラッキングモジュール226Aとして、ユーザ190Aの表情を表すフェイストラッキングデータを取得する。
ステップS2330において、プロセッサ10Aは、感情判断モジュール236Aとして、基準データ248Aに対するフェイストラッキングデータの変動量を算出する。
ステップS2340において、プロセッサ10Aは、算出した変動量が予め定められた値を超えたか否かを判断する。プロセッサ10Aは、算出した変動量が予め定められた値を超えたと判断した場合(ステップS2340でYES)、ステップS1850以降の処理を実行する。そうでない場合(ステップS2340でNO)、プロセッサ10Aは、ステップS1825の処理を再び実行する。
上記によれば、ある実施形態に従うコンピュータ200Aは、フェイストラッキングデータに基づいてユーザ190Aが仮想空間2Aに展開されるコンテンツに対して関心を示したと推定されるタイミングで自動撮影処理を実行できる。
[他人の履歴に基づく撮影タイミングの検出]
上記の例では、コンピュータ200Aがユーザ190Aの動作(発話、表情の動き)に基づいて自動撮影処理を行なうように構成されている。他の局面において、サーバ150は、ユーザ190Aとは異なる1以上の他のユーザ(例えばユーザ190B〜190D)のパノラマ画像22に関する履歴情報に基づいて、パノラマ画像22の中から他のユーザが関心を示した場所とタイミングとを検出する。サーバ150は、検出した情報をコンピュータ200Aに送信する。コンピュータ200Aは、サーバ150から受信した情報に基づいて自動撮影処理を行なう。
サーバ150は、撮影履歴DB1640、視点履歴DB1642、およびコメントDB1644のうち少なくともいずれか1つのデータベースを利用して、上記の場所とそのタイミングとを検出する。まず、図24および図25を用いて撮影履歴DB1640(撮影DB1648)に基づく検出処理について説明する。
(他のユーザの撮影履歴に基づく自動撮影処理)
図24は、ユーザ190Aが仮想空間2Aで能動的に撮影を行なう様子を表すための図である。視界画像2400は、アバターオブジェクト1100Aの手1110Aと、スクリーンオブジェクト2410とを含む。
スクリーンオブジェクト2410は、撮影機能を有する。一例として、スクリーンオブジェクト2410は矩形のオブジェクトであって、おもて面と裏面とを有し、おもて面がプレビュー画面として機能する。
手1110Aは、スクリーンオブジェクト2410を支持する棒を握っている。スマートフォン(あるいは撮影機能を有するデバイス)を支持する自撮り棒(セルフィースティック、セルカ棒とも称される)は、広く世間に認知されている。そのため、プレビュー画面を有するスクリーンオブジェクト2410と、棒状の支持部材とを併せて提示することで、ユーザ190Aがスクリーンオブジェクト2410の撮影機能を認知する可能性が高まる。
スクリーンオブジェクト2410は、おもて面側を撮影するインカメラモードと、裏面側を撮影するアウトカメラモードとを切り替え可能に構成される。図24に示される例において、スクリーンオブジェクト2410はインカメラモードとして機能している。そのため、スクリーンオブジェクト2410のおもて面(プレビュー画面)には、アバターオブジェクト1100Aが表示されている。ユーザ190Aは、コントローラ160Aの予め定められたボタンを押下することにより、スクリーンオブジェクト2410による撮影を実行する。これにより、スクリーンオブジェクト2410のプレビュー画面に表示されいる画像がメモリモジュール240Aに保存される。
プロセッサ10Aは、スクリーンオブジェクト2410による撮影を実行すると、当該撮影に関する撮影情報をサーバ150に送信する。サーバ150は、各コンピュータ200から受信する撮影情報に基づいて、撮影DB1648を更新する。
図25は、撮影DB1648のデータ構造の一例を表す図である。撮影DB1648は、ユーザIDと、パノラマ画像IDと、カメラ位置と、撮影位置と、撮影タイミングと、モード情報とを互いに関連付けて保持する。
撮影タイミングは、パノラマ画像22が動画像である場合に、パノラマ画像22の再生開始を起点とする、撮影が行なわれたタイミングである。カメラ位置は、撮影タイミングにおけるスクリーンオブジェクト2410の位置である。撮影位置は、撮影タイミング時にスクリーンオブジェクト2410の撮影方向(インカメラモード時はおもて面に対する法線、アウトカメラモード時は裏面に対する法線)により貫かれるパノラマ画像22の位置である。つまり、撮影位置は、パノラマ画像22のうち撮影された領域の中心を表す。モード情報は、撮影がインカメラモードおよびアウトカメラモードのいずれで行なわれたかを表す。各コンピュータ200は、対応するユーザ190が能動的に撮影を行なうごとに、ユーザIDと、パノラマ画像IDと、カメラ位置と、撮影位置と、撮影タイミングと、モード情報とを互いに関連付けてサーバ150に送信する。
ある局面において、サーバ150のプロセッサ1620は、パノラマ画像DB1636に格納される複数のパノラマ画像22のうち、いずれか1つを指定するパノラマ画像IDをコンピュータ200Aから受け付ける。以下、一例としてサーバ150は、パノラマ画像ID「22A」の入力を受け付ける。
プロセッサ1620は、パノラマ画像ID「22A」に対応するパノラマ画像22をコンピュータ200Aに配信する。プロセッサ1620はさらに、撮影DB1448を参照して、指定されたパノラマ画像ID「22A」が関連付けられた撮影情報のうち、ユーザ190AのユーザID「190A」が関連付けられていない撮影情報を取得する。図25に示される例において、プロセッサ1620は、ハッチングされた部分に対応する情報を取得する。
ある局面において、プロセッサ1620は、モード情報がインカメラモードである撮影情報のみを取得するように構成されてもよい。インカメラモードで生成された画像は、基本的にユーザに対応するアバターオブジェクトを含む。そのため、プロセッサ1620は、アバターオブジェクトを含む画像を自動的に生成するタイミングを検出するにあたり、インカメラモードである撮影情報のみを用いることにより、より撮影に適したタイミングを検出し得る。
プロセッサ1620は、撮影制御部1628として、取得した撮影情報のうち撮影位置と撮影タイミングとに基づいて、ユーザ190A以外の他のユーザがパノラマ画像ID「22A」のパノラマ画像22において関心を示した場所とタイミングを検出する。
一例として、プロセッサ1620は、予め定められた時間(例えば2秒間)内、かつ、予め定められた領域(例えば100pixel×100pixel)内で、予め定められた回数(例えば5回)以上撮影されているタイミングと場所(位置)とを検出する。具体例として、パノラマ画像22の再生を開始してから1分1秒〜1分3秒の間に、予め定められた領域内で5回撮影が行なわれたとする。この場合、プロセッサ1620は、上記再生時間の中間である再生時間1分2秒のタイミングと、5回分の撮影位置の中央位置とを検出する。
プロセッサ1620は、検出した他のユーザが関心を示した場所とタイミングとをコンピュータ200Aに送信する。コンピュータ200Aのプロセッサ10Aは、そのタイミング(上記の例では再生時間1分2秒)になると、カメラオブジェクト1710を配置する。このとき、プロセッサ10Aは、他のユーザの関心を示した場所が撮影範囲1730に含まれるようにカメラオブジェクト1710を配置する。例えば、プロセッサ10Aは、カメラオブジェクト1710の撮影方向とアバターオブジェクト1100Aの撮影方向とが互いに向かい合う位置にカメラオブジェクト1710を配置する。
プロセッサ10Aはさらに、ユーザ190Aに対して撮影タイミングの通知処理を行なう。その後、プロセッサ10Aは、カメラオブジェクト1710による撮影を実行する。
なお、他の局面において、プロセッサ10Aは、サーバ150から受信した情報が表すタイミングの少し前(例えば5秒前)にカメラオブジェクト1710の配置処理、および撮影タイミングの通知処理を行なってもよい。
上記によれば、ユーザ190Aは、パノラマ画像22のどのタイミング、どの位置が撮影ポイントであるかを把握していない場合であっても、撮影ポイントでの自撮り画像を確実に取得できる。
(他のユーザの視点履歴に基づく自動撮影処理)
図26は、視点履歴DB1642のデータ構造の一例を表す。視点履歴DB1642は、パノラマ画像IDと、ユーザIDと、視点位置と、タイミングとを含む。
視点位置は、パノラマ画像22のうちユーザ190が注視している位置(つまり、ユーザ190の視線が注がれている位置)を表す。タイミングは、パノラマ画像22が動画像である場合に、パノラマ画像22の再生開始を起点として、視点位置が取得されたタイミング(再生時間)である。
各コンピュータ200は、視点特定モジュール227により特定される視点位置(座標値)と、その視点位置が取得されたタイミングと、ユーザIDとを互いに関連付けてサーバ150に周期的(図26の例では1秒間隔)に送信する。サーバ150のプロセッサ1620は、受信した情報に基づいて視点履歴DB1642を更新する。
ある局面において、プロセッサ1620は、コンピュータ200Aからパノラマ画像ID「22A」の入力を受け付ける。プロセッサ1620は、視点履歴DB1642を参照して、パノラマ画像ID「22A」が関連付けられた視点位置と、当該視点位置に対応するタイミングとに基づいて、パノラマ画像ID「22A」のパノラマ画像22において他のユーザが関心を示した場所とタイミングとを検出する。例えば、プロセッサ1620は、予め定められた時間(例えば2秒間)内、かつ、予め定められた領域(例えば100pixel×100pixel)内に、視点位置が予め定められた個数(例えば3回)以上含まれるタイミングと場所(位置)とを検出する。
図27は、視点履歴に基づく自動撮影処理を説明するためのパノラマ画像2700を表す。パノラマ画像2700は、パノラマ画像ID「22A」のパノラマ動画像を構成する複数のパノラマ画像のうちの1つである。つまり、パノラマ画像2700は、パノラマ画像ID「22A」のパノラマ動画像の、あるタイミングの画像である。
図27に示されるパノラマ画像2700には、他のユーザがパノラマ画像2700のどの部分を見ていたかを表す視点位置2710が重畳されている。視点位置2710は、車や建物に重畳されている。
プロセッサ1620は、パノラマ画像2700の所定領域2720内に視点位置2710が3個含まれていることを検出する。これにより、プロセッサ1620は、パノラマ画像2700が再生されるタイミングと、所定領域2720内に含まれる3個の視点位置2710の中央位置とを検出する。
プロセッサ1620は、検出した他のユーザが関心を示した場所(位置)とそのタイミングとをコンピュータ200Aに送信する。その後の処理は、撮影履歴に基づく自動撮影処理と同じである。これにより、コンピュータ200Aのプロセッサ10Aは、他のユーザが関心を示した場所(図27の例では建物2730)と、アバターオブジェクト1100Aとを含む画像を自動的に生成できる。
(他のユーザのコメントに基づく自動撮影処理)
図17を参照して、パノラマ画像1700は、コメントオブジェクト1721〜1723を含む。各コンピュータ200は、パノラマ動画像の任意のタイミング(図17の例ではパノラマ画像1700が表示されているタイミング)および位置で、ユーザ190からコメントの入力を受け付ける。各コンピュータ200は、入力されたコメントと、パノラマ動画像の再生開始を起点としてコメントが投稿されたタイミング(投稿タイミング)と、コメントが投稿された位置(コメント位置)とをサーバ150に送信する。サーバ150のプロセッサ1620は、各コンピュータ200から受信した情報に基づいて、コメントDB1644を更新する。
図28は、コメントDB1644のデータ構造の一例を表す図である。コメントDB1644は、ユーザIDと、パノラマ画像IDと、コメントと、コメント位置と、投稿タイミングとを互いに関連付けて保持する。
ある局面において、プロセッサ1620は、コンピュータ200Aからパノラマ画像ID「22A」の入力を受け付ける。これを受け、プロセッサ1620は、コメントDB1644を参照してパノラマ画像ID「22A」が関連付けられたコメント、コメント位置、および投稿タイミングとをコンピュータ200Aに送信する。プロセッサ10Aは、投稿タイミングになるとコメント内容を含むコメントオブジェクトをコメント位置に配置する。これにより、ユーザ190Aは、他のユーザのコメントを視認できる。
また、プロセッサ1620は、コメントDB1644を参照して、パノラマ画像ID「22A」が関連付けられたコメント位置と投稿タイミングとに基づいて、パノラマ画像ID「22A」のパノラマ画像22において他のユーザが関心を示した場所とタイミングとを検出する。プロセッサ1620は、コメントDB1644を参照して、予め定められた時間(例えば2秒間)内、かつ、予め定められた領域(例えば100pixel×100pixel)内に、コメント位置が予め定められた個数(例えば3回)以上含まれるタイミングと場所(位置)とを検出する。
プロセッサ1620は、検出した他のユーザが関心を示した場所(位置)とそのタイミングとをコンピュータ200Aに送信する。その後の処理は、撮影履歴に基づく自動撮影処理と同じである。これにより、コンピュータ200Aのプロセッサ10Aは、他のユーザのコメント履歴に基づいて、他のユーザが関心を示した場所(図17の例では猫が表示されている場所)と、アバターオブジェクト1100Aとを含む画像を生成できる。
(制御構造)
図29は、サーバ150が撮影タイミングを検出する処理の概要を表すフローチャートである。ステップS2905において、サーバ150のプロセッサ1620は、コンピュータ200Aからパノラマ画像の指定を受け付ける。一例として、プロセッサ1620は、コンピュータ200Aからパノラマ画像IDの指定を受け付ける。
ステップS2910において、プロセッサ1620は、入力されたパノラマ画像IDに対応するパノラマ画像をコンピュータ200Aに配信する。
ステップS2920において、プロセッサ1620は、ユーザDB1638を参照して、ユーザ190Aの属性に基づいてユーザ190A以外の1以上の他のユーザを選定する。
図30は、ユーザDB1638のデータ構造の一例を表す。ユーザDB1638は、ユーザIDと、年齢と、性別と、地域と、好みとを含む。プロセッサ1620は、ユーザ190Aの属性(図30の例では年齢、性別、地域、好み)に近い属性の他のユーザ(ユーザID)を選定する。例えば、プロセッサ1620は、ユーザ190Aの年齢との差異が5才未満であって、ユーザ190Aと同性のユーザを選定する。
図29を再び参照して、ステップS2930において、プロセッサ1620は、選定された他のユーザの、指定されたパノラマ画像IDのパノラマ動画像に関する履歴情報を抽出する。例えば、履歴情報は、当該パノラマ動画像が展開される仮想空間において他のユーザが撮影を行なったときの撮影位置および撮影タイミングを含む。他の例として、履歴情報は、パノラマ動画像における他のユーザの視点位置と当該視点位置に対応するタイミングとを含む。さらに他の例として、履歴情報は、パノラマ動画像に対して他のユーザが投稿したコメントのコメント位置および投稿タイミングを含む。
ステップS2940において、プロセッサ1620は、履歴情報に基づいて、パノラマ動画像の中から他のユーザが関心を示した場所とタイミングとを検出する。プロセッサ1620は、撮影制御部1628として、ステップS2920〜S2940の処理を実行する。
ステップS2950において、プロセッサ1620は、検出した場所とタイミングとをコンピュータ200Aに送信する。コンピュータ200Aのプロセッサ10Aは、サーバ150から受信した情報に基づいて、他のユーザが関心を示した場所が撮影範囲1730に含まれるようにカメラオブジェクト1710を配置する。また、プロセッサ10Aは、他のユーザが関心を示したタイミングをユーザ190Aに通知する。その後、プロセッサ10Aは、カメラオブジェクト1710により撮影を実行する。
上記によれば、ある実施形態に従うHMDシステム100は、他のユーザの履歴情報に基づいて、他のユーザが関心を示した場所を含む画像を自動的に生成できる。
また、サーバ150は、ユーザ190Aに近い属性の他のユーザの履歴に基づいて撮影ポイントを検出する。これにより、HMDシステム100は、自動撮影により生成された画像がユーザ190Aに気に入られる可能性を高めることができる。
なお、他の局面において、サーバ150が他のユーザの履歴情報をコンピュータ200Aに送信し、コンピュータ200Aが履歴情報に基づいて他のユーザが関心を示した場所とそのタイミングとを検出するように構成されてもよい。一例として、サーバ150は、ステップS2930で抽出した履歴情報をコンピュータ200Aに送信する。コンピュータ200Aは、受信した履歴情報に基づいてステップS3040の処理を実行する。
[他人のアバターを含む画像を自動的に生成する処理]
上記の例では、コンピュータ200Aは、コンピュータ200Aのユーザ190Aに対応するアバターオブジェクト1100Aを含む画像を自動的に生成するように構成されている。ある局面においてユーザ190Aは、仮想空間2A上で他のユーザ190とコミュニケーションを図る。この場合、ユーザ190Aは、自身のアバターオブジェクト1100Aだけでなく、他のユーザ190に対応するアバターオブジェクトも含む画像を自動生成して欲しいと考え得る。そこで、以下に、他のユーザのアバターオブジェクトを含む画像を自動的に生成する処理について説明する。
図31は、他人のアバターオブジェクトを含む画像を生成するための処理を説明するための図である。図31を参照して、アバターオブジェクト1100Aとアバターオブジェクト1100Bとが間隔DISだけ離れた状態で仮想空間2Aに配置されている。ユーザ190Aは、仮想空間2A上でアバターオブジェクト1100Bに対応するユーザ190Bとコミュニケーションを図る。
コンピュータ200Aは、ユーザ190Aとユーザ190Bとが盛り上がっていると推定されるタイミングで両者のアバターオブジェクトの各々の少なくとも一部(例えば、頭部)を含む画像を自動的に生成する。一例として、コンピュータ200Aのプロセッサ10Aは、ユーザ190Aに対応する音声信号およびユーザ190Bに対応する音声信号をトリガとして自動撮影を実行する。例えば、プロセッサ10Aは、両者の音声信号が予め定められたレベル以上である場合に自動撮影を実行する。他の例として、プロセッサ10Aは、ユーザ190Aおよび190Bの各々のフェイストラッキングデータに基づいて自動撮影を実行する。
他の局面において、プロセッサ10Aは、両者のアバターオブジェクトが配置される間隔DISが予め定められた間隔(例えば、100pixel)未満であって、かつ、上記の条件を満たした場合に自動撮影を実行するように構成されてもよい。この場合、ユーザ190Aおよび190Bが仮想空間上でコミュニケーションを図っている可能性がより高くなるためである。以下、一例として、図32を用いて両者の音声信号に基づく自動撮影処理を説明する。
(制御構造)
図32は、プロセッサ10Aが、コンピュータ200Bと通信している状態においてアバターオブジェクト1100Bを含む画像を自動的に生成する処理を表すフローチャートである。図32に示される処理のうち上述と同じ処理については同じ符号を付している。そのため、その処理についての説明は繰り返さない。
ステップS3210において、プロセッサ10Aは、ユーザ190Aに対応するアバターオブジェクト1100Aを仮想空間2Aに配置する。プロセッサ10Aはさらに、コンピュータ200Bから受信した情報(例えば、モデリングデータ)に基づいて、ユーザ190Bに対応するアバターオブジェクト1100Bを仮想空間2Aに配置する。
ステップS3220において、プロセッサ10Aは、アバターオブジェクト1100Aの位置および視線方向(傾き)を更新する。プロセッサ10Aはさらに、傾き特定モジュール224Bが特定するHMD110Bの傾き情報と、アバターオブジェクト1100Bの位置情報とをコンピュータ200Bから受け付ける。プロセッサ10Aは、受け付けた情報に基づいて、アバターオブジェクト1100Bの位置および視線方向を更新する。
ステップS3230において、プロセッサ10Aは、マイク119Bによって取得されたユーザ190Bの音声信号の入力をコンピュータ200Bから受け付ける。
ステップS3240において、プロセッサ10Aは、アバターオブジェクト1100Aおよび1100Bの間隔DISを算出する。具体的には、プロセッサ10Aは、アバターオブジェクト1100Aの位置と、アバターオブジェクト1100Bの位置とに基づいて、これらの間隔DISを算出する。
ステップS3250において、プロセッサ10Aは、算出された間隔DISが予め定められた間隔(例えば100pixel)未満であるか否かを判断する。プロセッサ10Aは、間隔DISが予め定められた間隔未満であると判断した場合(ステップS3250でYES)、ステップS3260の処理を実行する。そうでない場合(ステップS3250でNO)、プロセッサ10Aは、ステップS3220の処理を再び実行する。
ステップS3260において、プロセッサ10Aは、ユーザ190Aの音声信号および190Bの音声信号がともに予め定められたレベル(例えば、70dB)以上であるか否かを判断する。プロセッサ10Aは、両者の音声信号が予め定められたレベル以上であると判断した場合(ステップS3260でYES)、ステップS3270の処理を実行する。そうでない場合(ステップS3260でNO)、プロセッサ10Aは、ステップS3220の処理を再び実行する。
ステップS3270において、プロセッサ10Aは、撮影制御モジュール235Aとして、アバターオブジェクト1100Aおよび1100Bの位置および視線方向に基づいてカメラオブジェクト1710を移動する。具体的には、プロセッサ10Aは、カメラオブジェクト1710の撮影範囲1730にアバターオブジェクト1100Aおよび1100Bが含まれるように、カメラオブジェクト1710を移動する。一例として、プロセッサ10Aは、アバターオブジェクト1100Aとカメラオブジェクト1710との間隔と、アバターオブジェクト1100Bとカメラオブジェクト1710との間隔とが等しくなるようにカメラオブジェクト1710を移動する。
他の局面において、プロセッサ10Aは、ステップS1820の処理を実行せず、ステップS3270の処理の時点においてカメラオブジェクト1710を仮想空間2Aに配置するように構成されてもよい。
ステップS1855において、プロセッサ10Aは、今が撮影に適したタイミングであること、および、カメラオブジェクト1710の位置をユーザ190Aに通知する。これにより、ユーザ190Aは、仮想空間2A上でカメラオブジェクト1710を見る。
ステップS3280において、プロセッサ10Aは、ステップS1855で通知した撮影タイミングとカメラオブジェクト1710の位置とをコンピュータ200Bに送信する。コンピュータ200Bは、撮影タイミングとカメラオブジェクト1710の位置とをユーザ190Bに通知する。これにより、ユーザ190Bは、仮想空間2B上でカメラオブジェクト1710を見る。その結果、仮想空間2B上のアバターオブジェクト1100Bの視線方向(および位置)が更新される。コンピュータ200Bは、更新後のアバターオブジェクト1100Bの視線方向(および位置)をコンピュータ200Aに送信する。
ステップS3290において、プロセッサ10Aは、アバターオブジェクト1100Aおよび1100Bがカメラオブジェクト1710に向いているか否かを判断する。プロセッサ10Aは、前述の判断手法を用いてアバターオブジェクト1100Aおよび1100Bの各々の視線(基準視線)がカメラオブジェクト1710に注がれていると判断した場合(ステップS3290でYES)ステップS1865の処理を実行する。そうでない場合(ステップS3290でNO)、プロセッサ10Aは、アバターオブジェクト1100Aおよび1100Bの各々の視線がカメラオブジェクト1710に注がれるまで待機する。
上記によれば、コンピュータ200Aは、ユーザ190Aおよび190Bの音声信号に基づいて両者が盛り上がっていると推測される場合に、両者のアバターオブジェクトを含む画像を自動的に生成できる。また、コンピュータ200Aは、両者のアバターオブジェクトがともにカメラ目線である画像を自動的に生成できる。その結果、ユーザ190Aは、自動的に生成された画像を話題の種にして、より円滑にユーザ190Bとコミュニケーションを図ることができる。
[構成]
以上に開示された技術的特徴は、以下のように要約され得る。
(構成1) ある実施形態に従うと、HMD110Aによって仮想空間2Aを提供するためにコンピュータ200Aで実行されるプログラムが提供される。このプログラムはコンピュータ200Aに、仮想空間2Aを定義するステップ(S1805)と、HMD110Aのユーザ190Aに対応するアバターオブジェクト1100Aを仮想空間2Aに配置するステップ(S1815)と、撮影機能を有するカメラオブジェクト1710を、当該カメラオブジェクト1710の撮影範囲にアバターオブジェクト1100Aの少なくとも一部が含まれるように仮想空間2Aに配置するステップ(S1850)と、仮想空間2Aにおける撮影に適したタイミングとカメラオブジェクト1710の位置とをユーザ190Aに通知するステップ(S1855)と、通知後に、カメラオブジェクト1710の撮影範囲1730に対応する画像を生成するステップ(S1865)とを実行させる。
(構成2) (構成1)のプログラムはコンピュータ200Aに、ユーザ190Aの発話に対応する音声信号の入力を受け付けるステップ(S1830)をさらに実行させる。通知するステップは、音声信号に基づいてタイミングをユーザ190Aに通知することを含む。
(構成3) (構成2)において、通知するステップは、音声信号のレベルが予め定められたレベル以上である場合に撮影タイミングをユーザ190Aに通知することを含む(S1935)。
(構成4) (構成2)または(構成3)において、通知するステップは、音声信号から文字列を抽出することと、抽出された文字列が予め定められた文字列を含む場合にタイミングをユーザ190Aに通知すること(S1945)を含む。
(構成5) (構成2)〜(構成4)のいずれかに従うプログラムは、コンピュータ200Aに、コンピュータ200Aと通信可能なコンピュータ200Bのユーザ190Bに対応するアバターオブジェクト1100Bを仮想空間2Aに配置するステップ(S3210)と、コンピュータ200Bのユーザ190Bに対応する音声信号の入力を受け付けるステップ(S3230)とをさらに実行させる。カメラオブジェクト1710を仮想空間2Aに配置するステップは、当該カメラオブジェクト1710の撮影範囲1730にアバターオブジェクト1100Aおよび1100Bの各々の少なくとも一部が含まれるようにカメラオブジェクト1710を仮想空間2Aに配置すること(S3270)を含む。通知するステップは、ユーザ190Aの音声信号とユーザ190Bの音声信号とに基づいてタイミングをユーザ190Aに通知すること(S3260)と、コンピュータ200Bに当該タイミングを表す情報とカメラオブジェクト1710の位置を表す情報とを送信すること(S3280)とを含む。
(構成6) (構成5)に従うプログラムは、コンピュータ200Aに、アバターオブジェクト1100Aとアバターオブジェクト1100Bとの間隔DISを算出するステップ(S3240)をさらに実行させる。通知するステップは、算出された間隔DISが予め定められた間隔未満である場合に、ユーザ190Aおよび190Bの音声信号に基づいてタイミングをユーザ190Aに通知すること(S3250)を含む。
(構成7) (構成5)または(構成6)において、通知するステップは、ユーザ190Aおよび190Bの音声信号が予め定められたレベルを超えた場合にタイミングをユーザ190Aに通知すること(S3260)を含む。
(構成8) (構成1)〜(構成7)のいずれかに従うプログラムは、コンピュータ200Aに、ユーザ190Aの表情を表すフェイストラッキングデータの入力を受け付けるステップ(S2320)をさらに実行させる。通知するステップは、フェイストラッキングデータに基づいてタイミングをユーザ190Aに通知すること(S2330〜S2340)を含む。
(構成9) (構成8)に従うプログラムはコンピュータ200Aに、フェイストラッキングデータとの比較に用いられる基準データの入力を受け付けるステップ(S2310)をさらに実行させる。フェイストラッキングデータに基づいて撮影タイミングをユーザ190Aに通知することは、フェイストラッキングデータの基準データに対する変動量が予め定められた変動量を超えた場合にタイミングをユーザ190Aに通知すること(S2340)を含む。
(構成10) (構成1)〜(構成9)のいずれかに従うプログラムはコンピュータ200Aに、仮想空間2Aにパノラマ動画像を展開するステップ(S1810)と、ユーザ190Aとは異なる1以上の他のユーザのパノラマ動画像に関する履歴情報(S2930で抽出された履歴情報)の入力をサーバ150から受け付けるステップと、履歴情報に基づいてパノラマ動画像の中から他のユーザが関心を示した関心場所と関心タイミングとを検出するステップとをさらに実行させる。通知するステップは、関心タイミングをユーザ190Aに通知することを含む。カメラオブジェクト1710を仮想空間2Aに配置するステップは、カメラオブジェクト1710の撮影範囲に関心場所が含まれるようにカメラオブジェクト1710を配置することを含む。
(構成11) (構成10)において、履歴情報の入力を受け付けるステップは、ユーザDB1638に基づいてサーバ150によって選定される、ユーザ190Aの属性に近い他のユーザの履歴情報の入力を受け付けることを含む。
(構成12) (構成10)または(構成11)において、履歴情報は、パノラマ動画像が展開される仮想空間2Aにおいて他のユーザが撮影を行なった際の、撮影タイミングと撮影位置とを含む。これらの情報は、サーバ150が撮影DB1648を参照して抽出する。検出するステップは、撮影タイミングと撮影位置とに基づいて関心場所と関心タイミングとを検出することを含む。
(構成13) (構成10)〜(構成12)のいずれかにおいて、履歴情報は、複数の他のユーザの各々の、パノラマ動画像における視点位置と当該視点位置に対応するタイミングとを含む。これらの情報は、サーバ150が視点履歴DB1642を参照して抽出する。検出するステップは、視点位置と、当該視点位置に対応するタイミングとに基づいて、関心場所と関心タイミングとを検出することを含む。
(構成14) (構成10)〜(構成13)のいずれかにおいて、履歴情報は、パノラマ動画像において複数の他のユーザの各々がコメントを投稿した投稿タイミングと、当該コメントが配置されるコメント位置とを含む。これらの情報は、サーバ150が、コメントDB1644を参照して抽出する。検出するステップは、投稿タイミングとコメント位置とに基づいて、関心場所と関心タイミングとを検出することを含む。
(構成15) (構成1)〜(構成9)に従うプログラムは、プログラムはコンピュータ200Aに、仮想空間2Aにパノラマ動画像を展開するステップ(S1810)と、ユーザ190Aとは異なる1以上の他のユーザがパノラマ動画において関心を示した関心場所と関心タイミングとの入力をサーバ150から受け付けるステップ(S3050でサーバ150が送信した情報を受信するステップ)とを含む。通知するステップは、入力を受け付けた関心タイミングをユーザ190Aに通知することを含む。カメラオブジェクト1710を仮想空間2Aに配置するステップは、カメラオブジェクト1710の撮影範囲1730に関心場所が含まれるようにカメラオブジェクト1710を配置することを含む。
(構成16) (構成1)〜(構成15)において、カメラオブジェクト1710の位置をユーザ190Aに通知することは、聴覚的または視覚的に通知することを含む。例えば、プログラムは、スピーカ118Aからカメラオブジェクト1710の位置を知らせる音声を出力する。この音声は、直接的にカメラオブジェクト1710の位置を知らせる内容(例えば、「右を向いて」)である。他の局面において、この音声は、左右の出力を調整したステレオ音声により間接的にカメラオブジェクト1710の位置を知らせるもの(例えば、スピーカ118Aの右側出力のみから「こっちを向いて」の音声を出力)であってもよい。
(構成17) (構成1)〜(構成16)のいずれかにおいて、画像を生成するステップは、アバターオブジェクト1100Aがカメラオブジェクト1710を向いていることを検出したこと(S1860)に基づいて、画像を生成することを含む。
今回開示された実施形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。