(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-08
(45)【発行日】2022-07-19
(54)【発明の名称】スケルトンモデル更新装置、スケルトンモデル更新方法及びプログラム
(51)【国際特許分類】
G01B 21/00 20060101AFI20220711BHJP
【FI】
G01B21/00 E
(21)【出願番号】P 2021530395
(86)(22)【出願日】2019-07-09
(86)【国際出願番号】 JP2019027120
(87)【国際公開番号】W WO2021005708
(87)【国際公開日】2021-01-14
【審査請求日】2021-08-12
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】110000154
【氏名又は名称】特許業務法人はるか国際特許事務所
(72)【発明者】
【氏名】大橋 良徳
【審査官】九鬼 一慶
(56)【参考文献】
【文献】特開2008-052726(JP,A)
【文献】特開2014-157608(JP,A)
【文献】国際公開第2017/170264(WO,A1)
【文献】金子徳秀,ほか2名,骨格の類似度を考慮したモーションパペトリー,映像情報メディア学会技術報告,日本,2015年03月,Vol.39, No.14,43-46
(58)【調査した分野】(Int.Cl.,DB名)
G01B 21/00
A61B 5/11
A63F 13/655
G06T 13/40
(57)【特許請求の範囲】
【請求項1】
既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定するターゲットノード特定部と、
前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定する基準ノード特定部と、
前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定する位置決定部と、
決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新する姿勢更新部と、
を含むことを特徴とするスケルトンモデル更新装置。
【請求項2】
前記ターゲットノード特定部は、左手に相当するノード、及び、右手に相当するノードを前記ターゲットノードに特定する、
ことを特徴とする請求項1に記載のスケルトンモデル更新装置。
【請求項3】
前記ターゲットノード特定部は、左手に相当するノード、右手に相当するノード、及び頭部に相当するノードを前記ターゲットノードに特定する、
ことを特徴とする請求項1に記載のスケルトンモデル更新装置。
【請求項4】
前記ターゲットノード特定部は、左足に相当するノード、及び、右足に相当するノードを前記ターゲットノードに特定する、
ことを特徴とする請求項1から3のいずれか一項に記載のスケルトンモデル更新装置。
【請求項5】
既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定するステップと、
前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定するステップと、
前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定するステップと、
決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新するステップと、
を含むことを特徴とするスケルトンモデル更新方法。
【請求項6】
既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定する手順、
前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定する手順、
前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定する手順、
決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新する手順、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、スケルトンモデル更新装置、スケルトンモデル更新方法及びプログラムに関する。
【背景技術】
【0002】
ユーザが装着する複数のトラッカーの姿勢を示すデータに基づいて、当該ユーザに対応付けられるスケルトンモデルの姿勢を更新するボディトラッキング技術が知られている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
例えば、犬、龍、たこなどといった、人間ではないスケルトンモデル(
図17参照)を用いたボディトラッキングを行いたい場面がある。このようなボディトラッキングの前提として、スケルトンモデルのデフォルトの姿勢がどのようなものであっても、その姿勢をTポーズやAポーズなどといった既知の基本姿勢に変形したものを用意する必要がある。
【0004】
従来は、このようなスケルトンモデルの基本姿勢への変形を手作業で行う必要があったため、作業者の手間がかかっていた。
【0005】
本発明は上記課題に鑑みてなされたものであって、その目的の1つは、スケルトンモデルを既知の基本姿勢に変形する手間を軽減できるスケルトンモデル更新装置、スケルトンモデル更新方法及びプログラムを提供することにある。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明に係るスケルトンモデル更新装置は、既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定するターゲットノード特定部と、前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定する基準ノード特定部と、前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定する位置決定部と、決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新する姿勢更新部と、を含む。
【0007】
本発明の一態様では、前記ターゲットノード特定部は、左手に相当するノード、及び、右手に相当するノードを前記ターゲットノードに特定する。
【0008】
また、本発明の一態様では、前記ターゲットノード特定部は、左手に相当するノード、右手に相当するノード、及び頭部に相当するノードを前記ターゲットノードに特定する。
【0009】
また、本発明の一態様では、前記ターゲットノード特定部は、左足に相当するノード、及び、右足に相当するノードを前記ターゲットノードに特定する。
【0010】
また、本発明に係るスケルトンモデル更新方法は、既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定するステップと、前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定するステップと、前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定するステップと、決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新するステップと、を含む。
【0011】
また、本発明に係るプログラムは、既知の基本姿勢ではない姿勢のスケルトンモデルに含まれる複数のノードのうちから複数のターゲットノードを特定する手順、前記複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定する手順、前記基準ノードの位置を基準とした前記複数のターゲットノードの相対的な位置が所定の位置となるよう、前記複数のターゲットノード又は前記基準ノードの位置を決定する手順、決定される前記複数のターゲットノードの位置に基づいて、前記スケルトンモデルの姿勢を前記基本姿勢に更新する手順、をコンピュータに実行させる。
【図面の簡単な説明】
【0012】
【
図1】本発明の一実施形態に係るエンタテインメントシステムの一例を示す構成図である。
【
図2】本発明の一実施形態に係るエンタテインメント装置の一例を示す構成図である。
【
図4】FABRIK計算における前方到達フェーズの一例を模式的に示す図である。
【
図5】FABRIK計算における後方到達フェーズの一例を模式的に示す図である。
【
図6】本発明の一実施形態に係るエンタテインメント装置で実装される機能の一例を示す機能ブロック図である。
【
図7】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【
図8】ノードの初期位置の決定の一例を説明する図である。
【
図9】ノードの初期位置の決定の一例を説明する図である。
【
図10】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【
図11】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【
図12】ノードの回転の決定の一例を説明する図である。
【
図13】ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルの学習の一例を示す図である。
【
図14】
図13に示す学習済の機械学習モデルを用いた、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定の一例を示す図である。
【
図15】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【
図16】ユーザがゲームをプレイしている様子の一例を示す模式図である。
【
図17】スケルトンモデルのデフォルトの姿勢の一例を示す図である。
【
図18】Tポーズに変形されたスケルトンモデルの一例を示す図である。
【
図19】本発明の一実施形態に係るエンタテインメント装置で実装される機能の一例を示す機能ブロック図である。
【
図20】本発明の一実施形態に係るエンタテインメント装置で行われる処理の流れの一例を示すフロー図である。
【発明を実施するための形態】
【0013】
図1は、本発明の一実施形態に係るエンタテインメントシステム10の構成の一例を示す図である。
図2は、本実施形態に係るエンタテインメント装置14の構成の一例を示す図である。
【0014】
図1に示すように、本実施形態に係るエンタテインメントシステム10は、複数のトラッカー12(
図1の例ではトラッカー12a~12e)とエンタテインメント装置14と中継装置16とディスプレイ18とカメラマイクユニット20とを含んでいる。
【0015】
本実施形態に係るトラッカー12は、例えば、当該トラッカー12の位置や向きを追跡するためのデバイスである。ここでトラッカー12が、例えばカメラ、慣性センサ(IMU)、地磁気センサ(方位センサ)、加速度センサ、モーションセンサ、GPS(Global Positioning System)モジュールなどといった各種センサを備えていてもよい。そしてトラッカー12は、当該トラッカー12が備えるセンサによる計測結果であるセンシングデータに基づいて、当該トラッカー12の姿勢を特定してもよい。
【0016】
また例えば、後述するカメラマイクユニット20に含まれるカメラ20aが撮影する、トラッカー12の像が含まれる画像に基づいて、当該トラッカー12の姿勢が特定されてもよい。
【0017】
本実施形態ではトラッカー12a、トラッカー12b、トラッカー12c、トラッカー12d、トラッカー12eは、それぞれ、ユーザの頭部、左手、右手、左足、右足に装着される。ここで
図1に示すようにトラッカー12bやトラッカー12cはユーザによって手で把持されるものであってもよい。本実施形態ではトラッカー12a、トラッカー12b、トラッカー12c、トラッカー12d、トラッカー12eによって特定される姿勢は、それぞれ、ユーザの頭部、左手、右手、左足、右足の姿勢に相当する。このように本実施形態では複数のトラッカー12によって、ユーザの体に含まれる複数の部位の姿勢が特定されることとなる。
【0018】
本実施形態に係るエンタテインメント装置14は、例えばゲームコンソール、DVDプレイヤ、Blu-ray(登録商標)プレイヤなどといったコンピュータである。本実施形態に係るエンタテインメント装置14は、例えば記憶されている、あるいは、光ディスクに記録された、ゲームプログラムの実行やコンテンツの再生などによって映像や音声を生成する。そして本実施形態に係るエンタテインメント装置14は、生成される映像を表す映像信号や生成される音声を表す音声信号を、中継装置16を経由してディスプレイ18に出力する。
【0019】
本実施形態に係るエンタテインメント装置14には、例えば
図2に示すように、プロセッサ30、記憶部32、通信部34、入出力部36が含まれる。
【0020】
プロセッサ30は、例えばエンタテインメント装置14にインストールされるプログラムに従って動作するCPU等のプログラム制御デバイスである。本実施形態に係るプロセッサ30には、CPUから供給されるグラフィックスコマンドやデータに基づいてフレームバッファに画像を描画するGPU(Graphics Processing Unit)も含まれている。
【0021】
記憶部32は、例えばROMやRAM等の記憶素子やハードディスクドライブなどである。記憶部32には、プロセッサ30によって実行されるプログラムなどが記憶される。また、本実施形態に係る記憶部32には、GPUにより画像が描画されるフレームバッファの領域が確保されている。
【0022】
通信部34は、例えば無線LANモジュールなどの通信インタフェースなどである。
【0023】
入出力部36は、HDMI(登録商標)(High-Definition Multimedia Interface)ポート、USBポートなどの入出力ポートである。
【0024】
本実施形態に係る中継装置16は、エンタテインメント装置14から出力される映像信号や音声信号を中継してディスプレイ18に出力するコンピュータである。
【0025】
本実施形態に係るディスプレイ18は、例えば液晶ディスプレイ等であり、エンタテインメント装置14から出力される映像信号が表す映像などを表示させる。
【0026】
本実施形態に係るカメラマイクユニット20は、例えば被写体を撮像した画像をエンタテインメント装置14に出力するカメラ20a及び周囲の音声を取得して当該音声を音声データに変換してエンタテインメント装置14に出力するマイク20bを含んでいる。また本実施形態に係るカメラ20aはステレオカメラである。
【0027】
トラッカー12と中継装置16とは、例えば、無線によるデータの送受信が互いに可能になっている。エンタテインメント装置14と中継装置16とは、例えば、HDMIケーブルやUSBケーブルなどを介して接続されており、データの送受信が互いに可能になっている。中継装置16とディスプレイ18とは、例えば、HDMIケーブルなどを介して接続されている。エンタテインメント装置14とカメラマイクユニット20とは、例えば、AUXケーブルなどを介して接続されている。
【0028】
本実施形態では例えば、エンタテインメント装置14によってゲームプログラムが実行されている際に、
図3に示すスケルトンモデル40における、ユーザの体に含まれる複数の部位の姿勢に応じたゲーム処理等の各種の処理が実行される。そして当該処理の結果に応じた映像が例えばディスプレイ18に表示される。例えばスケルトンモデル40の姿勢に応じたプレイヤオブジェクトのポリゴンモデルの映像がディスプレイ18に表示される。
【0029】
図3に示すように、本実施形態に係るスケルトンモデル40には、頭部ノード42a、左手ノード42b、右手ノード42c、左足ノード42d、右足ノード42eが含まれている。頭部ノード42aは、トラッカー12aが装着されるユーザの頭部に相当する。左手ノード42bは、トラッカー12bが装着されるユーザの左手に相当する。右手ノード42cは、トラッカー12cが装着されるユーザの右手に相当する。左足ノード42dは、トラッカー12dが装着されるユーザの左足に相当する。右足ノード42eは、トラッカー12eが装着されるユーザの右足に相当する。
【0030】
またスケルトンモデル40には、上記のノード42の他に、骨盤ノード42f、第1脊柱ノード42g、第2脊柱ノード42h、第3脊柱ノード42i、首ノード42jが含まれる。本実施形態では例えば、骨盤ノード42fが、スケルトンモデル40全体におけるルートノードの役割を担う。また本実施形態では例えば、骨盤ノード42fが、腰部のノードに相当する。
【0031】
またスケルトンモデル40には、さらに、左鎖骨ノード42k、左上腕ノード42l、左前腕ノード42m、右鎖骨ノード42n、右上腕ノード42o、右前腕ノード42pが含まれている。
【0032】
またスケルトンモデル40には、さらに、左大腿部ノード42q、左ふくらはぎノード42r、左母指球ノード42s、右大腿部ノード42t、右ふくらはぎノード42u、右母指球ノード42vが含まれている。
【0033】
ここで
図3に示すように、骨盤ノード42fと第1脊柱ノード42gとの間はボーン44aで接続されている。また第1脊柱ノード42gと第2脊柱ノード42hとの間はボーン44bで接続されている。また第2脊柱ノード42hと第3脊柱ノード42iとの間はボーン44cで接続されている。また第3脊柱ノード42iと首ノード42jとの間はボーン44dで接続されている。また首ノード42jと頭部ノード42aとの間はボーン44eで接続されている。
【0034】
そして第3脊柱ノード42iと左鎖骨ノード42kとの間はボーン44fで接続されている。また左鎖骨ノード42kと左上腕ノード42lとの間はボーン44gで接続されている。また左上腕ノード42lと左前腕ノード42mとの間はボーン44hで接続されている。また左前腕ノード42mと左手ノード42bとの間はボーン44iで接続されている。
【0035】
そして第3脊柱ノード42iと右鎖骨ノード42nとの間はボーン44jで接続されている。また右鎖骨ノード42nと右上腕ノード42oとの間はボーン44kで接続されている。また右上腕ノード42oと右前腕ノード42pとの間はボーン44lで接続されている。また右前腕ノード42pと右手ノード42cとの間はボーン44mで接続されている。
【0036】
そして骨盤ノード42fと左大腿部ノード42qとの間はボーン44nで接続されている。また左大腿部ノード42qと左ふくらはぎノード42rとの間はボーン44oで接続されている。また左ふくらはぎノード42rと左足ノード42dとの間はボーン44pで接続されている。また左足ノード42dと左母指球ノード42sとの間はボーン44qで接続されている。
【0037】
そして骨盤ノード42fと右大腿部ノード42tとの間はボーン44rで接続されている。また右大腿部ノード42tと右ふくらはぎノード42uとの間はボーン44sで接続されている。また右ふくらはぎノード42uと右足ノード42eとの間はボーン44tで接続されている。また右足ノード42eと右母指球ノード42vとの間はボーン44uで接続されている。
【0038】
図3には、初期状態におけるスケルトンモデル40である、基本姿勢の(ここでは例えば、脚を開き腕を斜め下に下した、いわゆるAポーズの)スケルトンモデル40が示されている。
【0039】
そして本実施形態では例えば、複数のトラッカー12について特定される姿勢に基づくボディトラッキングが行える。ここでは例えば、スケルトンモデル40に含まれる複数のノード42のそれぞれについての、初期状態における基準の位置に対する位置及び初期状態における基準の向きに対する向きの決定が実行される。またスケルトンモデル40に含まれる複数のボーン44のそれぞれについての、初期状態における基準の向きに対する向きの決定が実行される。
【0040】
ここで例えば、トラッカー12aについて特定される姿勢を示すデータに基づいて、頭部ノード42aの姿勢は決定できる。同様に、トラッカー12bについて特定される姿勢を示すデータに基づいて、左手ノード42bの姿勢は決定できる。また、トラッカー12cについて特定される姿勢を示すデータに基づいて、右手ノード42cの姿勢は決定できる。また、トラッカー12dについて特定される姿勢を示すデータに基づいて、左足ノード42dの姿勢は決定できる。また、トラッカー12eについて特定される姿勢を示すデータに基づいて、右足ノード42eの姿勢は決定できる。
【0041】
また、骨盤ノード42fの姿勢の決定も、例えば決定される頭部ノード42aの姿勢に基づいて可能である。ここで例えば、トラッカー12a~トラッカー12eについて特定される姿勢に基づいて、学習済の機械学習モデルを用いた骨盤ノード42fの姿勢の推定が実行されてもよい。また同様に、第3脊柱ノード42iの姿勢の決定も可能である。
【0042】
そして以上の決定結果や推定結果に基づいて、前方後方到達逆運動学(FABRIK)計算によって、残りのノード42の位置及び向きやボーン44の向きを決定することが考えられる。ここでは例えば、頭部ノード42a、左手ノード42b、右手ノード42c、左足ノード42d、及び、右足ノード42eが、FABRIKにおけるエフェクタに相当することとなる。そしてエフェクタの運動に応じて、スケルトンモデル40に含まれるノード42の位置及び向きやボーン44の向きが決定される。
【0043】
図4、及び、
図5は、FABRIK計算の一例を模式的に示す図である。
図4、及び、
図5では、一例として、右手ノード42c、右鎖骨ノード42n、右上腕ノード42o、及び、右前腕ノード42pについて実行されるFABRIK計算が示されている。
【0044】
図4では、スケルトンモデル40における右手ノード42c、右鎖骨ノード42n、右上腕ノード42o、及び、右前腕ノード42pの現在の位置がそれぞれP(c1)、P(n1)、P(o1)、P(p1)と示されている。またボーン44m、ボーン44l、ボーン44k、ボーン44jの長さは、それぞれd1、d2、d3であることとする。
【0045】
この状況でトラッカー12cの計測結果に基づいて、右手ノード42cが移動すべき位置T1が特定されたとする。
【0046】
以下、FABRIK計算における前方到達フェーズについて
図4を参照しながら説明する。
【0047】
前方到達フェーズでは、まず、右手ノード42cが位置T1に移動する。
図4では移動後の右手ノード42cの位置がP(c2)と示されている。そして右前腕ノード42pが、位置P(c2)から位置P(p1)に向かう方向に、位置P(c2)から長さd1だけ離れた位置P(p2)に移動する。そして右上腕ノード42oが、位置P(p2)から位置P(o1)に向かう方向に、位置P(p2)から長さd2だけ離れた位置P(o2)に移動する。そして右鎖骨ノード42nが、位置P(o2)から位置P(n1)に向かう方向に、位置P(o2)から長さd3だけ離れた位置P(n2)に移動する。
【0048】
このように、FABRIK計算における前方到達フェーズの処理には、トラッカー12に対応付けられるノード42が移動すべき位置と当該ノード42の親のノード42の現在の位置とに基づく当該親のノード42の新たな位置の決定が含まれている。また当該決定は、トラッカー12に対応付けられるノード42と当該親のノード42との間の長さを一定に保つという条件で実行される。以下、トラッカー12に対応付けられるノード42をターゲットノードと呼ぶこととする。
【0049】
以下、FABRIK計算における後方到達フェーズについて
図5を参照しながら説明する。
【0050】
まず、右鎖骨ノード42nが、位置P(n2)から位置P(n3)に移動する。ここで
図5に示す位置P(n3)は、FABRIK計算の開始時における右鎖骨ノード42nの位置P(n1)と同じ位置である。そして右上腕ノード42oが、位置P(n3)から位置P(o2)に向かう方向に、位置P(n3)から長さd3だけ離れた位置P(o3)に移動する。そして右前腕ノード42pが、位置P(o3)から位置P(p2)に向かう方向に、位置P(o3)から長さd2だけ離れた位置P(p3)に移動する。そして右手ノード42cが、位置P(p3)から位置P(c2)に向かう方向に、位置P(p3)から長さd1だけ離れた位置P(c3)に移動する。
【0051】
そして右手ノード42cの位置と位置T1との間の長さが所定の閾値以下になるまで、前方到達フェーズと後方到達フェーズとが繰り返し実行される。なお右手ノード42cの位置と位置T1との間の長さが所定の閾値以下にならなくても、前方到達フェーズと後方到達フェーズとが所定回数(例えば10回)繰り返し実行されるとFABRIK計算は終了される。
【0052】
このように、FABRIK計算では簡易なアルゴリズムによってスケルトンモデル40の姿勢が決定される。しかしその結果、関節が自然な方向に曲がらず、人体ではありえないようなスケルトンモデル40の姿勢が決定されることがある。
【0053】
またFABRIK計算による姿勢の決定では、トラッカー12bやトラッカー12cから腕方向を軸とした手の回転の情報を取得できるにも関わらず、この情報が腕方向を軸とした肘の回転に反映されない。
【0054】
また木構造のスケルトンモデル40に対するFABRIK計算では、複数のターゲットノードのそれぞれを起点とした、当該ターゲットノードを含むノード群に対して独立した前方到達フェーズの処理を実行する必要がある。そのため例えば胸から肩までのような、全体としての姿勢が大きくゆがむべきではない、木構造のスケルトンモデル40の結節点の近傍の複数のノード42の全体としての姿勢が、前方到達フェーズの処理により大きくゆがむことがある。
【0055】
以上のように、FABRIK計算を用いたスケルトンモデル40の姿勢の決定において、妥当性が低い結果が得られることがあった。
【0056】
このことを踏まえ本実施形態では以下のようにして、FABRIK計算を用いたスケルトンモデル40の姿勢の決定結果の妥当性を向上できるようにした。
【0057】
以下、本実施形態に係るエンタテインメント装置14の機能、及び、本実施形態に係るエンタテインメント装置14で実行される処理についてさらに説明する。
【0058】
図6は、本実施形態に係るエンタテインメント装置14の機能の一例を示す機能ブロック図である。なお、本実施形態に係るエンタテインメント装置14で、
図6に示す機能のすべてが実装される必要はなく、また、
図6に示す機能以外の機能が実装されていても構わない。
【0059】
図6に示すように、本実施形態に係るエンタテインメント装置14には、機能的には例えば、スケルトンモデルデータ記憶部50、姿勢データ取得部52、初期位置決定部54、姿勢更新部56、が含まれる。
【0060】
スケルトンモデルデータ記憶部50は、記憶部32を主として実装される。姿勢データ取得部52は、プロセッサ30及び入出力部36を主として実装される。初期位置決定部54、姿勢更新部56は、プロセッサ30を主として実装される。
【0061】
以上の機能は、コンピュータであるエンタテインメント装置14にインストールされた、以上の機能に対応する指令を含むプログラムをプロセッサ30で実行することにより実装されてもよい。このプログラムは、例えば、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ読み取り可能な情報記憶媒体を介して、あるいは、インターネットなどを介してエンタテインメント装置14に供給されてもよい。
【0062】
スケルトンモデルデータ記憶部50は、本実施形態では例えば、スケルトンモデル40の姿勢を示すスケルトンモデルデータを記憶する。スケルトンモデルデータには、例えば、複数のノード42のそれぞれの位置を示すデータが含まれていてもよい。またスケルトンモデルデータにはノード42の向きを示すデータが含まれていてもよい。ここで向きを示すデータは例えば三軸方向それぞれについての回転量を示すデータであってもよい。またスケルトンモデルデータには、ボーン44の位置及び向きを示すデータが含まれていてもよい。ボーン44の位置及び向きは、当該ボーン44の両端のノード42の位置に基づいて一意に定まる。
【0063】
また本実施形態では、スケルトンモデルデータ記憶部50には、最新のスケルトンモデル40の姿勢を示すスケルトンモデルデータが記憶されていることとする。またスケルトンモデルデータ記憶部50には、Aポーズなどの基本姿勢をとる初期状態のスケルトンモデル40の姿勢を示すスケルトンモデルデータも記憶されていることとする。
【0064】
姿勢データ取得部52は、本実施形態では例えば、所定のサンプリングレートで特定されるトラッカー12a~12eの位置及び向きを示す姿勢データを取得する。ここで例えば、所定のサンプリングレートでトラッカー12が、当該トラッカー12の位置及び向きを示す姿勢データを生成してもよい。そして生成に応じてトラッカー12が、当該トラッカー12が生成した姿勢データを、中継装置16経由でエンタテインメント装置14に送信してもよい。また例えば、カメラマイクユニット20が、所定のサンプリングレートでトラッカー12a~12eの位置及び向きを示す姿勢データを生成してもよい。そして生成に応じてカメラマイクユニット20が、当該カメラマイクユニット20が生成した姿勢データを、エンタテインメント装置14に送信してもよい。
【0065】
初期位置決定部54は、本実施形態では例えば、姿勢データ取得部52が取得する姿勢データに基づいて、いくつかのノード42の初期位置を決定する。
【0066】
姿勢更新部56は、本実施形態では例えば、スケルトンモデル40の姿勢を更新する。ここでは例えば、スケルトンモデルデータ記憶部50に記憶されているスケルトンモデルデータが更新される。姿勢更新部56は、姿勢データ取得部52が取得する姿勢データ、及び、初期位置決定部54が決定する初期位置に基づいて、前方後方到達逆運動学(FABRIK)計算によりスケルトンモデル40の姿勢を更新してもよい。
【0067】
ここで、本実施形態に係るエンタテインメント装置14で行われる処理の流れの一例を、
図7に例示するフロー図を参照しながら説明する。
【0068】
まず、姿勢データ取得部52が、トラッカー12によって生成される最新の特定タイミングにおける当該トラッカー12の位置及び向きを示す姿勢データを取得する(S101)。ここでは例えば、姿勢データ取得部52は、トラッカー12a~12eのそれぞれについての、当該トラッカー12の位置及び向きを示す姿勢データを取得する。
【0069】
そして、姿勢更新部56が、S101に示す処理で取得された姿勢データに基づいて、骨盤ノード42fの位置及び向きを推定する(S102)。ここで例えば骨盤ノード42fの代わりに、第3脊柱ノード42iの位置及び向きが推定されてもよい。また例えば、骨盤ノード42f及び第3脊柱ノード42iの位置及び向きが推定されてもよい。
【0070】
そして姿勢更新部56が、S102に示す処理の推定結果に基づいて、スケルトンモデルデータを更新する(S103)。S103に示す処理では例えば、最新のスケルトンモデル40及び初期状態のスケルトンモデル40を回転させる処理が実行される。
【0071】
そして初期位置決定部54が、スケルトンモデル40に含まれる一部のノード42の初期位置を決定する(S104)。
【0072】
ここでは例えば
図8に示すように、S101に示す処理で取得された姿勢データが示すトラッカー12cの位置に基づいて、ターゲットノードである右手ノード42cが移動すべき位置T2及び右手ノード42cが向くべき向きA2が特定される。そして、向きA2に沿った、向きA2とは逆の向きに、位置T2から長さd1だけ離れた位置P2が、右手ノード42cの親のノード42である右前腕ノード42pの初期位置として決定される。ここで長さd1は、上述のようにボーン44mの長さである。
【0073】
なおここで右前腕ノード42pの現在の位置と位置P2とを所定の重みにより補間した位置が右前腕ノード42pの初期位置として決定されてもよい。
【0074】
また当該重みが、トラッカー12cの速度に対応付けられる、右手ノード42cの現在の位置と位置T2との間の長さに基づいて、決定されてもよい。例えば右手ノード42cの現在の位置と位置T2との間の長さが短いほど、右前腕ノード42pの現在の位置に近い位置が右前腕ノード42pの初期位置として決定されるようにしてもよい。このようにすれば例えばプレイヤが手首だけを回転させた場合にプレイヤオブジェクトの肘が大きく動いてしまう事態を避けることができる。
【0075】
また
図9に示すように、例えば、S101に示す処理で取得された姿勢データが示すトラッカー12eの位置に基づいて、ターゲットノードである右足ノード42eが移動すべき位置T3及び右足ノード42eが向くべき向きA3が特定される。そして向きA3を基準の向きとした際の左右方向を軸として所定の角度(例えば90度)回転させた方向に、位置T3から長さd4だけ離れた位置P3が、右足ノード42eの親のノード42である右ふくらはぎノード42uの初期位置として決定される。ここで長さd4は、ボーン44tの長さである。
【0076】
なお上述の例と同様に右ふくらはぎノード42uの現在の位置と位置P3とを補間した位置が右ふくらはぎノード42uの初期位置として決定されてもよい。
【0077】
同様にして例えば、S101に示す処理で取得された姿勢データが示すトラッカー12bの位置に基づいて、ターゲットノードである左手ノード42bが移動すべき位置及び左手ノード42bが向くべき向きが特定される。また、同様にして例えば、S101に示す処理で取得された姿勢データが示すトラッカー12dの位置に基づいて、ターゲットノードである左足ノード42dが移動すべき位置及び左足ノード42dが向くべき向きが特定される。そして、同様にして例えば、左前腕ノード42m、左ふくらはぎノード42r、などといった他のノード42の初期位置が決定される。
【0078】
そして姿勢更新部56が、頭部ノード42a、左手ノード42b、右手ノード42c、左足ノード42d、右足ノード42eのリストを引数TNsとする、
図10のS201~S208に示す処理を実行する(S105)。
【0079】
ノード42のリストTNsを引数とするS105に示す処理では、TNsに含まれるすべての要素niに対して、以下で説明するS201~S206に示す処理が繰り返し実行される。
【0080】
まず、姿勢更新部56が、niがルートノード(骨盤ノード42f)であるか否かを確認する(S201)。niがルートノードである場合は(S201:Y)、S201~S206に示す処理のループから抜ける。
【0081】
niがルートノードでない場合は(S201:N)、姿勢更新部56が、S201~S206に示す処理の今回のループにおける、前方到達ノード群を表すリストFNsにniを追加する(S202)。
【0082】
そして姿勢更新部56が、niを、niの親のノード42に更新する(S203)。
【0083】
そして姿勢更新部56が、niが子のノード42の数が2以上であるノード42、又は、ルートノードである骨盤ノード42fであるか否かを確認する(S204)。
【0084】
niが子のノード42の数が2以上であるノード42でもルートノードでもない場合は(S204:N)、S202に示す処理に戻る。
【0085】
niが子のノード42の数が2以上であるノード42、又は、ルートノードである場合は(S205:Y)、姿勢更新部56が、サブルートノード群を表すリストRNsにniを追加する(S205)。
【0086】
そして姿勢更新部56が、FNsに含まれるノード42に対して、
図4を参照して説明したFABRIKの前方到達フェーズの処理を実行する(S206)。
【0087】
TNsに含まれるすべての要素niに対して、S201~S206に示す処理が実行されると、姿勢更新部56が、リストRNsに含まれるノード42があるか否かを確認する(S207)。
【0088】
リストRNsに含まれるノード42がある場合は(S207:Y)、姿勢更新部56が、リストRNsを次のループにおけるリストTNsに設定して(S208)、S201に示す処理に戻る。この場合、次にS202に示す処理が実行される際には、新たなリストFNsにniが追加されることとなる。
【0089】
S207に示す処理でリストRNsに含まれるノード42がないことが確認された場合は(S207:N)、S105に示す処理は終了となる。
【0090】
以上の処理により
図3に示すスケルトンモデル40については、S201~S208に示す処理の初回のループにおいて、前方到達ノード群を表すリストFNsが5個生成される。1番目のFNsには例えば、頭部ノード42a、及び、首ノード42jが含まれることとなる。2番目のFNsには例えば、左手ノード42b、左前腕ノード42m、左上腕ノード42l、及び、左鎖骨ノード42kが含まれることとなる。3番目のFNsには例えば、右手ノード42c、右前腕ノード42p、右上腕ノード42o、及び、右鎖骨ノード42nが含まれることとなる。4番目のFNsには例えば、左足ノード42d、左ふくらはぎノード42r、及び、左大腿部ノード42qが含まれることとなる。5番目のFNsには例えば、右足ノード42e、右ふくらはぎノード42u、及び、右大腿部ノード42tが含まれることとなる。
【0091】
そしてS201~S208に示す処理の初回のループにおけるサブルートノード群のリストRNsには、ルートノードである骨盤ノード42f、及び、第3脊柱ノード42iが含まれる。これらのノード42は、スケルトンモデル40における結節点のノード42である。
【0092】
そしてS201~S208に示す処理の2回目のループでは前方到達ノード群のリストFNsが1個生成される。当該リストFNsには、骨盤ノード42f、第1脊柱ノード42g、第2脊柱ノード42h、及び、第3脊柱ノード42iが含まれる。そしてS201~S208に示す処理の2回目のループではサブルートノード群のリストRNsは空となる。
【0093】
S105に示す処理が終了すると、姿勢更新部56が、
図11のS301~S309に示す処理を実行する(S106)。
【0094】
S106に示す処理では、S201~S208に示す処理の初回のループにおけるリストRNsに含まれるすべてのノード42(サブルートノード)のそれぞれを引数とする、S301~S309に示す処理が実行される。ここで上述のようにRNsに含まれるノード42の数が2である場合は、S301~S309に示す処理は2回実行されることとなる。なおS301~S309に示す処理は、S105に示す処理が実行されたノード42に対して実行される。そのため例えば、左母指球ノード42s、及び、右母指球ノード42vについてはスケルトンモデル40に含まれないこととして、S301~S309に示す処理は実行される。
【0095】
まず、姿勢更新部56が、引数であるサブルートノードを要素nに設定する(S301)。
【0096】
そして、姿勢更新部56が、後方到達ノード群を表すリストBNsにnを追加する(S302)。
【0097】
そして、姿勢更新部56が、nが子のノード42の数が1であるノード42であるか否かを確認する(S303)。
【0098】
nが子のノード42の数が1であるノード42である場合は(S303:Y)、姿勢更新部56が、nを、nの子のノード42に更新して(S304)、S302に示す処理に戻る。
【0099】
nが子のノード42の数が1であるノード42でない場合は(S303:N)、姿勢更新部56が、BNsに含まれるノード42に対して、
図5を参照して説明したFABRIKの後方到達フェーズの処理を実行する(S305)。なおここでBNsに含まれるノード42の数が1である場合は、後方到達フェーズの処理は実行されない。
【0100】
そして、姿勢更新部56が、nが子のノード42の数が2以上であるノード42であるか否かを確認する(S306)。
【0101】
nが子のノード42の数が2以上であるノード42である場合は(S306:Y)、姿勢更新部56が、ルートトランスフォームの処理を実行する(S307)。
【0102】
S307に示すルートトランスフォームの処理とは、例えば、スケルトンモデル40に含まれる一部のノード42の姿勢を更新する処理を指す。nが子のノード42の数が2以上であるノード42である場合は、nはスケルトンモデル40に含まれる結節点のノード42であることとなる。ここで例えば、当該結節点のノード42を含む複数のノード42の位置及び向きが、基本姿勢における相対的な位置及び向きと合致するよう更新されてもよい。
【0103】
ここで例えば第3脊柱ノード42iを基準にして、第3脊柱ノード42i、左鎖骨ノード42k、及び、右鎖骨ノード42nの姿勢が更新されるようにしてもよい。ここで例えば、左上腕ノード42lの位置に基づいて、第3脊柱ノード42iと第2脊柱ノード42hとを接続するボーン44cを軸とした、基本姿勢を基準とした左上腕ノード42lの回転が特定されてもよい。また例えば、右上腕ノード42oの位置に基づいて、ボーン44cを軸とした、基本姿勢を基準とした右上腕ノード42oの回転が特定されてもよい。そしてこのようにして特定される2つの回転に基づいて、クォータニオンの球面線形補間を実行することで、第3脊柱ノード42i、左鎖骨ノード42k、及び、右鎖骨ノード42nの姿勢が更新されるようにしてもよい。また同様に、骨盤ノード42fを基準にして、骨盤ノード42f、左大腿部ノード42q、及び、右大腿部ノード42tの姿勢が更新されるようにしてもよい。
【0104】
そして、初期位置決定部54が、スケルトンモデル40に含まれるいくつかのノード42についての初期位置を決定する(S308)。例えば、S307に示す処理で第3脊柱ノード42i、左鎖骨ノード42k、及び、右鎖骨ノード42nの姿勢が更新されたとする。この場合、更新後のこれらのノード42の姿勢、及び、スケルトンモデル40の基本姿勢に基づいて、右上腕ノード42o、左上腕ノード42l、首ノード42j、及び、第2脊柱ノード42hの初期位置が決定される。ここで例えば基本姿勢におけるサブルートノードである第3脊柱ノード42iを基準とする位置や向きとなるよう、これらのノード42の初期位置が決定されてもよい。また例えば、S307に示す処理で骨盤ノード42f、左大腿部ノード42q、及び、右大腿部ノード42tの姿勢が更新されたとする。この場合、更新後のこれらのノード42の姿勢、及び、スケルトンモデル40の基本姿勢に基づいて、第1脊柱ノード42gの初期位置が決定されてもよい。例えば基本姿勢におけるサブルートノードである骨盤ノード42fを基準とする位置や向きとなるよう、第1脊柱ノード42gの初期位置が決定されてもよい。
【0105】
そして、nの子のノード42である要素nciのすべてについて、nciを次のサブルートノードとした、S301以降の処理が再帰的に繰り返し実行される(S309)。
【0106】
S306に示す処理でnが子のノード42の数が2以上であるノード42でないことが確認された場合は(S306:N)、当該サブルートノードにおけるS309に示す処理が終了される。すなわちnが、S301~S309に示す処理が実行されるスケルトンモデル40における末端のノード42である場合は、当該サブルートノードにおけるS309に示す処理が終了される。
【0107】
そして、S309に示す処理が実行される要素nciがなくなった際に、S106に示す処理は終了される。
【0108】
S106に示す処理では例えば、骨盤ノード42f、左大腿部ノード42q、左ふくらはぎノード42r、及び、左足ノード42dに対して後方到達フェーズの処理が実行される。
【0109】
また、骨盤ノード42f、右大腿部ノード42t、右ふくらはぎノード42u、及び、右足ノード42eに対して後方到達フェーズの処理が実行される。
【0110】
また、骨盤ノード42f、第1脊柱ノード42g、第2脊柱ノード42h、及び、第3脊柱ノード42iに対して後方到達フェーズの処理が実行される。
【0111】
また、第3脊柱ノード42i、首ノード42j、及び、頭部ノード42aに対して後方到達フェーズの処理が実行される。
【0112】
また、第3脊柱ノード42i、左鎖骨ノード42k、左上腕ノード42l、左前腕ノード42m、及び、左手ノード42bに対して後方到達フェーズの処理が実行される。
【0113】
また、第3脊柱ノード42i、右鎖骨ノード42n、右上腕ノード42o、右前腕ノード42p、及び、右手ノード42cに対して後方到達フェーズの処理が実行される。
【0114】
S106に示す処理が終了すると、姿勢更新部56が、ターゲットノードにおける位置の誤差が所定の閾値以下であるか否かを確認する(S107)。ここでは例えば、ノード42の位置と、トラッカー12の計測結果に基づいて特定される当該ノード42が移動すべき位置と、の間の長さの合計が所定の閾値以下であるか否かが確認される。
【0115】
ターゲットノードにおける位置の誤差が所定の閾値以下でない場合は(S107:N)、姿勢更新部56が、S105に示す処理と同様の処理を実行する(S108)。そして、姿勢更新部56が、S106に示す処理と同様の処理を実行する(S109)。そして、S107に示す処理に戻る。S108及びS109に示す処理では、上述のリストが再利用されるようにしてもよい。
【0116】
S107に示す処理において、ターゲットノードにおける位置の誤差が所定の閾値以下であることが確認された場合は(S107:Y)、姿勢更新部56は、姿勢が未決定であるノード42の姿勢を更新する(S110)。なお、S108に示す処理、及び、S109に示す処理が、所定回数実行された場合に、ターゲットノードにおける位置の誤差が所定の閾値以下でなくてもS110に示す処理が実行されるようにしてもよい。
【0117】
S110に示す処理では例えば、左母指球ノード42s、及び、右母指球ノード42vの姿勢が更新される。この場合、左母指球ノード42sの姿勢は、左足ノード42dの姿勢を基準とした相対的な姿勢が基本姿勢における当該相対的な姿勢となるよう更新されてもよい。また右母指球ノード42vの姿勢は、右足ノード42eの姿勢を基準とした相対的な姿勢が基本姿勢における当該相対的な姿勢となるよう更新されてもよい。
【0118】
そして、姿勢更新部56が、ボーン44の向き、及び、ノード42の回転を更新して(S111)、S101に示す処理に戻る。そして新たに取得される最新の特定タイミングにおけるトラッカー12の位置及び向きを示す姿勢データに基づく、S101~S111に示す処理が実行される。このようにしてS101~S111に示す処理は繰り返し実行されることとなる。
【0119】
ここでは例えば、ボーン44の向きは、当該ボーン44の両端のノード42の位置に基づいて一意に特定可能である。ところが、ボーン44を軸とした回転については、ボーン44の両端のノード42の位置からはわからない。
【0120】
そこでS111に示す処理では例えば、姿勢更新部56が、姿勢データが示すトラッカー12bやトラッカー12cの回転を、腕に対する手首の曲がりの成分、基本姿勢に対する腕の回転の成分、及び、腕の方向を軸とした回転の成分に分離する。
図12には、右手ノード42cにおけるボーン44mに沿った方向を軸とした回転の成分がQroll1として示されている。
【0121】
そして姿勢更新部56が、腕の方向を軸とした回転に基づいて、上腕や前腕の回転を決定する。ここでは例えば、右手ノード42cについてのボーン44mを軸とした回転の成分が、右前腕ノード42pの腕の方向を軸とした回転Qroll2、及び、右上腕ノード42oの腕の方向を軸とした回転Qroll3として決定される。同様に、左手ノード42bについてのボーン44iを軸とした回転の成分が、左前腕ノード42m、及び、左上腕ノード42lの腕の方向を軸とした回転として決定される。
【0122】
ここで例えば、Qroll1とQroll2との差や、Qroll2とQroll3の差に、例えば60度などの上限が予め設定されていてもよい。またQroll2の値として、Qroll1の値に1以下の所定の係数を乗じた値が設定されてもよい。またQroll3の値として、Qroll2の値に1以下の所定の係数を乗じた値が設定されてもよい。
【0123】
以上のように、本実施形態では例えば、S101に示す処理において姿勢データ取得部52が、木構造のスケルトンモデル40に含まれるターゲットノードの姿勢を示す姿勢データを取得する。そしてS104に示す処理において、初期位置決定部54が、姿勢データに基づいてターゲットノードが移動すべき位置を決定する。そしてS104に示す処理において、初期位置決定部54が、FABRIK計算における当該ターゲットノードの親のノード42の初期位置を、当該ターゲットノードが移動すべき位置と、スケルトンモデル40の所与の姿勢に基づいて決定する。またS308に示す処理において、初期位置決定部54が、いくつかのノード42の初期位置を、ターゲットノードが移動すべき位置と、スケルトンモデル40の所与の姿勢に基づいて決定する。
【0124】
上述の例では例えば、向きA2に沿った向きA2とは逆の向きに、右手ノード42cが移動すべき位置T2から長さd1だけ離れた位置が、右前腕ノード42pの初期位置についての所与の姿勢に相当する。また例えば、向きA3を基準の向きとした際の左右方向を軸として所定の角度(例えば90度)回転させた方向に、位置T3から長さd4だけ離れた位置が、右ふくらはぎノード42uの初期位置についての所与の姿勢に相当する。
【0125】
また基本姿勢におけるルートノードを基準とする所与の位置や向きが、右上腕ノード42o、左上腕ノード42l、首ノード42j、第2脊柱ノード42h、及び、第1脊柱ノード42gの初期位置についての所与の姿勢に相当する。
【0126】
また、S105~S111に示す処理において、姿勢更新部56が、ターゲットノードが移動すべき位置と当該ターゲットノードの親のノード42の初期位置とに基づいて、当該親のノード42の新たな位置の決定を含むFABRIK計算を実行する。その結果、スケルトンモデル40の姿勢が更新される。
【0127】
このようにして本実施形態によれば、FABRIK計算を用いた姿勢の決定においても、関節が自然な方向に曲がらず、人体ではありえないような妥当性を欠く姿勢が決定されるおそれが下がる。その結果、スケルトンモデル40の姿勢の決定結果の妥当性を向上できることとなる。
【0128】
また本実施形態では例えば、S101に示す処理において、姿勢データ取得部52が、木構造のスケルトンモデル40に含まれるターゲットノードの姿勢を示す姿勢データを取得する。そしてS102~S109に示す処理において、姿勢更新部56が、当該ターゲットノードの親のノード42の新たな位置の決定を含むFABRIK計算を実行することで、スケルトンモデル40の姿勢を更新する。そしてS111に示す処理において、姿勢更新部56が、姿勢データに基づいて、ターゲットノードと当該ターゲットノードの親のノード42とを接続するボーン44を軸とした当該ターゲットノードの回転を特定する。そしてS111に示す処理において、姿勢更新部56が、ターゲットノードの回転に基づいて、当該ターゲットノードの親のノード42の回転を決定する。
【0129】
このようにして本実施形態によれば、トラッカー12による計測結果に基づく腕方向を軸とした回転の決定が行えることとなる。その結果、スケルトンモデル40の姿勢の決定結果の妥当性を向上できることとなる。
【0130】
また本実施形態では例えば、S101に示す処理において、姿勢データ取得部52が、木構造のスケルトンモデル40に含まれる第1のターゲットノードの姿勢、及び、第2のターゲットノードを含む複数のノード42の姿勢を示す姿勢データを取得する。
【0131】
そしてS207に示す処理において、姿勢更新部56が、姿勢データに基づいて、第1のターゲットノードを含む互いに接続された第1のノード群に対して、FABRIK計算における前方到達フェーズの処理により当該第1のノード群の姿勢を更新する。また同じくS207に示す処理において、姿勢更新部56が、第2のターゲットノードを含む互いに接続された第2のノード群に対して、FABRIK計算における前方到達フェーズの処理により当該第2のノード群の姿勢を更新する。
【0132】
そしてS307に示す処理において、姿勢更新部56が、第1のノード群及び第2のノード群の更新の後に、複数のノード42の姿勢を更新する。ここでは例えば、当該複数のノード42には、第1のノード群に含まれる、スケルトンモデル40に含まれる結節点に最も近いノード42と、第2のノード群に含まれる、スケルトンモデル40に含まれる結節点に最も近いノード42と、が含まれる。
【0133】
またS304に示す処理において、姿勢更新部56が、FABRIK計算における後方到達フェーズの処理によりスケルトンモデル40の姿勢を更新する。
【0134】
本実施形態ではこのようにして、例えば胸から肩までのような、全体としての姿勢が大きくゆがむべきではない、木構造のスケルトンモデル40の結節点の近傍の複数のノード42の全体としての姿勢が大きくゆがむことを防ぐことができる。その結果、スケルトンモデル40の姿勢の決定結果の妥当性を向上できることとなる。
【0135】
また、本実施形態のS102に示す処理において、姿勢更新部46が、S101に示す処理で取得される姿勢データに基づいて、軸足を推定してもよい。
【0136】
以下の説明では、姿勢データが示す位置について、水平面上の座標値をXY座標値と呼び、高さ方向の座標値をZ座標値と呼ぶこととする。なお、Z座標値は位置が上にあるほど大きな値であることとする。
【0137】
例えば、姿勢更新部46が、S101に示す処理で取得された姿勢データが示す、左足に相当するトラッカー12dのZ座標値と、右足に相当するトラッカー12eのZ座標値と、を比較してもよい。
【0138】
そして、姿勢更新部46が、Z座標値の差が所定値よりも大きい場合に、下の方にある足、すなわち、Z座標値が小さな方に対応する足を軸足と推定してもよい。例えば、Z座標値の差が所定値よりも大きく、トラッカー12dのZ座標値の方がトラッカー12eのZ座標値よりも小さい場合は、左足が軸足と推定されてもよい。逆に、Z座標値の差が所定値よりも大きく、トラッカー12eのZ座標値の方がトラッカー12dのZ座標値よりも小さい場合は、右足が軸足と推定されてもよい。
【0139】
そして姿勢更新部46は、軸足の位置に基づいて、FABRIK計算における骨盤ノード42f(腰部のノード)の初期位置を決定してもよい。
【0140】
例えば姿勢更新部46は、軸足のXY座標値と同じXY座標値を、S102に示す処理における骨盤ノード42fのFABRIK計算の初期位置におけるXY座標値と決定してもよい。
【0141】
また例えば、Z座標値の差が所定値より小さい場合などには、姿勢更新部46は、いずれの足も軸足と推定しなくてもよい。この場合、姿勢更新部46は、例えば、トラッカー12dの位置とトラッカー12eの位置を通る楕円上の位置のうち、S101に示す処理で取得された姿勢データが示すトラッカー12aの位置を通る鉛直線に最も近い位置のXY座標値を特定してもよい。そして特定されるXY座標値が、S102に示す処理における骨盤ノード42fのFABRIK計算の初期位置におけるXY座標値と決定されてもよい。ここで当該楕円は、長軸方向の長さがトラッカー12dの位置とトラッカー12eの位置との間の長さであり、短軸方向の長さが所定の長さである楕円であってもよい。
【0142】
また、軸足のXY座標値と同じXY座標値と、トラッカー12dの位置とトラッカー12eの位置を通る楕円上の上述の位置のXY座標値と、を線形補間したXY座標値が、骨盤ノード42fの初期位置におけるXY座標値と決定されてもよい。
【0143】
線形補間における重みは、例えば、トラッカー12dのZ座標値と、トラッカー12eのZ座標値と、の差に基づいて決定されてもよい。例えば、当該Z座標値の差が小さいほど、上述の楕円上の位置のXY座標値に近いXY座標値が、骨盤ノード42fの初期位置におけるXY座標値と決定されてもよい。そして、当該Z座標値の差が大きいほど、軸足のXY座標値と同じXY座標値に近いXY座標値が、骨盤ノード42fの初期位置におけるXY座標値と決定されてもよい。
【0144】
また、姿勢更新部46は、以上のようにして決定される骨盤ノード42fの初期位置におけるXY座標値を、S101に示す処理で取得された姿勢データが示すトラッカー12aの位置に基づいて補正してもよい。例えば、軸足あるいは両足の中心の位置からトラッカー12aの位置に向かう向きとは逆の向きに、骨盤ノード42fの初期位置が水平面に沿って移動するよう、骨盤ノード42fの初期位置におけるXY座標値が補正されてもよい。例えば、軸足あるいは両足の中心の位置よりもトラッカー12aの位置が前にある場合は、骨盤ノード42fの初期位置が後ろに移動するよう、骨盤ノード42fの初期位置におけるXY座標値が補正されてもよい。また、軸足あるいは両足の中心の位置よりもトラッカー12aの位置が後ろにある場合は、骨盤ノード42fの初期位置が前に移動するよう、骨盤ノード42fの初期位置におけるXY座標値が補正されてもよい。
【0145】
そして、トラッカー12aの位置及び向きに基づいて、ボーン44e、ボーン44d、ボーン44c、ボーン44b、ボーン44aの初期位置、及び、骨盤ノード42fのFABRIK計算の初期位置におけるZ座標値が決定されてもよい。
【0146】
また、本実施形態において、姿勢更新部46が、以下のようにして、学習済の機械学習モデルを用いてユーザが着座姿勢にあるか立ち姿勢にあるかを推定してもよい。そして、ユーザが立ち姿勢であると推定される場合に、上述のようにして軸足の推定処理、及び、軸足の推定結果に基づくFABRIK計算における骨盤ノード42f(腰部のノード)の初期位置の決定が行われるようにしてもよい。
【0147】
図13は、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルの学習の一例を示す図である。
図13に示すように、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定に用いられる機械学習モデルには、入力層60と、中間ブロック62と、第1中間層64と、第2中間層66と、出力層68と、が含まれている。
【0148】
本実施形態では例えば、
図13に示す機械学習モデルの学習において、それぞれ互いに異なるタイミングに対応付けられる、当該タイミングにおける、腰部(骨盤ノード42f)の回転によりオフセットされた(腰部の向きを基準とした)、頭部の向き、右足の位置を基準とした頭の位置、左足の位置を基準とした頭の位置を示す部位データを複数含む学習データが取得される。
【0149】
ここで例えば、例えば、頭部、右足、左足、腰部のそれぞれにトラッカー12を装着したユーザが着座姿勢で様々な動きをした際の、これらのトラッカー12から出力されるセンシングデータに基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。また例えば、着座姿勢で様々な動きをするユーザを外部のカメラから撮影した動画像に基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。また、このような動画像を見ているオペレータによる操作に基づいて、着座姿勢に対応する一連の部位データが生成されてもよい。
【0150】
そして例えば、上述の着座姿勢に対応する一連の部位データと、値に1が設定された教師データと、を含む学習データが生成されてもよい。
【0151】
また例えば、頭部、右足、左足、腰部のそれぞれにトラッカー12を装着したユーザが立ち姿勢で様々な動きをした際の、これらのトラッカー12から出力されるセンシングデータに基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。また例えば、立ち姿勢で様々な動きをするユーザを外部のカメラから撮影した、t個のフレームを含む動画像に基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。また、このような動画像を見ているオペレータによる操作に基づいて、立ち姿勢に対応する一連の部位データが生成されてもよい。
【0152】
そして例えば、上述の立ち姿勢に対応する一連の部位データと、値に0が設定された教師データと、を含む学習データが生成されてもよい。
【0153】
そして、入力層60に、対応付けられるタイミングが古いものから順次、当該学習データに含まれる部位データが入力される。ここでは例えば、部位データには、腰部の回転によりオフセットされた、頭部の向きを示す頭部向きデータD1、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置を示す右足基準頭部位置データD2、及び、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置を示す左足基準頭部位置データD3が含まれていることとする。
【0154】
ここでは例えば、対応付けられるタイミングがs番目に古い頭部向きデータがD1(s)と表現されている。また、対応付けられるタイミングがs番目に古い右足基準頭部位置データがD2(s)と表現されている。また、対応付けられるタイミングがs番目に古い左足基準頭部位置データがD3(s)と表現されている。ここで値sは、1以上t以下の整数である。
【0155】
また本実施形態では
図13に示すように、頭部向きデータD1(s)には、それぞれ、x、y、zといった、3個の要素が含まれている。当該3個の要素は、それぞれ、胸部の回転によりオフセットされた、頭部の向きを表すベクトルのx座標値、y座標値、z座標値に相当する。ここで胸部の回転によりオフセットされた、頭部の向きを表すベクトルは、例えば、胸部の回転によりオフセットされた、頭部(頭部ノード42a)の向き(例えば頭部における視線方向)を表す単位ベクトルであってもよい。なお、胸部の回転によりオフセットされた、頭部の向きを表すベクトルが、首(首ノード42j)の位置を基準とした頭部(頭部ノード42a)の位置を表すベクトルであってもよい。この場合、学習データに含まれる部位データは、頭部、右足、左足、腰部、首のそれぞれにトラッカー12を装着したユーザが様々な動きをした際の、これらのトラッカー12から出力されるセンシングデータに基づいて、生成されてもよい。
【0156】
また本実施形態では
図13に示すように、右足基準頭部位置データD2(s)には、それぞれ、x、y、zといった3個の要素が含まれている。当該3個の要素は、それぞれ、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置のx座標値、y座標値、z座標値に相当する。
【0157】
また本実施形態では
図13に示すように、左足基準頭部位置データD3(s)には、それぞれ、x、y、zといった3個の要素が含まれている。当該3個の要素は、それぞれ、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置のx座標値、y座標値、z座標値に相当する。
【0158】
本実施形態では、入力層60に、9個(3×3)の要素を含む部位データが入力されることとなる。
【0159】
そして入力層60に入力された部位データが直前の入力に応じた中間ブロック62の出力と結合された入力データが、中間ブロック62に入力される。中間ブロック62は、本実施形態では例えば、LSTM(Long short-term memory)が実装されたRNN(Recurrent Neural Network)(LSTMブロック)である。
【0160】
ここで中間ブロック62の出力は、部位データが位置、姿勢、又は動きを示す体の部位についての位置、姿勢、又は動きの時系列推移の特徴を示すデータである。以下、中間ブロック62が出力するデータを特徴データと呼ぶこととする。例えばLSTMの状態変数が当該特徴データに相当する。
【0161】
ここで例えば、中間ブロック62に、あるタイミングに対応付けられる部位データと、当該タイミングよりも前における上述の時系列推移の特徴を示す特徴データと、を含む入力データが入力されるとする。この場合、中間ブロック62は、当該タイミングまでの上述の時系列推移の特徴を示す特徴データを出力する。例えば中間ブロック62に、s番目の部位データと、(s-1)番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データと、を含む入力データが入力されるとする。この場合、中間ブロック62は、s番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データを出力する。以下、s番目の部位データに対応するタイミングまでの上述の時系列推移の特徴を示す特徴データをs番目の特徴データと呼ぶこととする。
【0162】
そして最後の部位データ(t番目の部位データ)を含む入力データの入力に対する中間ブロック62の出力であるt番目の特徴データが、第1中間層64に入力される。そして第1中間層64からの出力が第2中間層66に入力される。第1中間層64及び第2中間層66は、例えば正規化線形関数(ReLU)を活性化関数とする全結合層である。
【0163】
そして第2中間層66からの出力が出力層68に入力される。出力層68は、例えば線形関数を活性化関数とする層である。そして出力層68からは、最新のタイミング(t番目のタイミング)における、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定結果に相当する着座確率データD4(t)が出力70として出力される。着座確率データは、例えば0以上1以下の実数で表現されるデータである。着座確率データの値が大きいほど、ユーザが着座姿勢にある可能性が高く、着座確率データの値が小さいほど、ユーザが着座姿勢にある可能性が低い。
【0164】
そして本実施形態では例えば、推定結果を示す着座確率データD4(t)に基づいて、中間ブロック62、第1中間層64、第2中間層66、出力層68の学習が実行される。ここで例えば、上述の一連の部位データを含む学習データに含まれる教師データと推定結果を示す着座確率データD4(t)との差が特定されてもよい。そして特定される差に基づいて、中間ブロック62、第1中間層64、第2中間層66、及び、出力層68のパラメータの値が更新される教師あり学習が実行されてもよい。
【0165】
本実施形態では例えば、1番目の部位データからt番目の部位データまでのt個の部位データを含む学習データによる学習が行われる。ここで例えば、1番目の部位データからt番目の部位データまでのt個の部位データ、及び、当該t個の部位データに対応付けられる上述の教師データ、を含む学習データによる学習が行われてもよい。そして例えば着座姿勢に対応する互いに異なる複数の学習データ、及び、立ち姿勢に対応する互いに異なる複数の学習データによる学習が行われた学習済の機械学習モデルを用いて、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定が実行される。
【0166】
図14は、学習済の機械学習モデルを用いた、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定の一例を示す図である。
【0167】
上述のように本実施形態では例えば、所定のサンプリングレートでトラッカー12a~12eのそれぞれについて、当該トラッカー12の位置及び向きの特定が行われる。そしてトラッカー12の位置及び向きの特定に応じて、当該トラッカー12の位置及び向きを示すデータが、エンタテインメント装置14に送信される。
【0168】
そしてこのようにして送信されるトラッカー12の位置及び向きを示すデータに基づいて、上述の部位データが生成されることとする。このようにして本実施形態では例えば、部位データが繰り返し生成されることとなる。
【0169】
ここでは上述のように、部位データには、腰部の回転によりオフセットされた、頭部の向きを示す頭部向きデータD1、腰部の回転によりオフセットされた、右足の位置を基準とした頭部の位置を示す右足基準頭部位置データD2、及び、腰部の回転によりオフセットされた、左足の位置を基準とした頭部の位置を示す左足基準頭部位置データD3が含まれていることとする。なお、頭部向きデータD1が、首(首ノード42j)の位置を基準とした頭部(頭部ノード42a)の位置を表すベクトルである場合は、首ノード42j及び頭部ノード42aの最新の位置に基づいて、頭部向きデータD1が生成されてもよい。
【0170】
そして本実施形態では例えば、入力層60に、最新の部位データ(最後に生成された部位データ)が入力される。
図14には、最新の部位データに含まれる頭部向きデータがD1(u)と表現されている。また、最新の部位データに含まれる右足基準頭部位置データがD2(u)と表現されている。また、最新の部位データに含まれる左足基準頭部位置データがD3(u)と表現されている。
【0171】
上述のように、頭部向きデータD1(u)には、x、y、zといった、3個の要素が含まれている。また、右足基準頭部位置データD2(u)には、x、y、zといった3個の要素が含まれている。また、左足基準頭部位置データD3(u)には、x、y、zといった3個の要素が含まれている。
【0172】
そして入力層60に入力された9個(3×3)の要素を含む部位データが直前の入力に応じた中間ブロック62の出力である特徴データと結合された入力データが、中間ブロック62に入力される。
【0173】
そして中間ブロック62の出力である特徴データが、第1中間層64に入力される。そして第1中間層64からの出力が第2中間層66に入力される。
【0174】
そして第2中間層66からの出力が出力層68に入力される。そして出力層68からは、当該タイミングにおける、ユーザが着座姿勢にあるか立ち姿勢にあるかの推定結果に相当する着座確率データD4(u)が出力70として出力される。
【0175】
ここで例えば、着座確率データD4(u)の値が0.5以上である場合に、ユーザが着座姿勢であると推定し、そうでない場合に、ユーザが立ち姿勢であると推定されてもよい。
【0176】
そして、ユーザが立ち姿勢であると推定された場合に、上述のようにして軸足の推定処理、及び、軸足の推定結果に基づく骨盤ノード42fの初期位置の決定が行われるようにしてもよい。
【0177】
なお、機械学習モデルを用いて、ユーザが着座姿勢であるか立ち姿勢であるかが推定される必要はない。例えば、作成された所与のロジックを用いてユーザが着座姿勢であるか立ち姿勢であるかが推定されてもよい。
【0178】
また、右足基準頭部位置データD2の値、及び、左足基準頭部位置データD3の値として、身体サイズを基準とした相対値、すなわち、足の位置を基準とした頭の位置の座標値を身体サイズで割った値が用いられてもよい。
【0179】
ここで身体サイズは、ユーザにより予め入力されたものであってもよいし、例えば、以下のようにして、ユーザが着座姿勢であるか立ち姿勢であるかの推定が行われる度に、トラッカー12の位置に基づいて逐次推定されるものであってもよい。
【0180】
ここで、本実施形態に係るエンタテインメント装置14で行われる身体サイズ推定処理の流れの一例を、
図15に例示するフロー図、及び、
図16に示す模式図を参照しながら説明する。
図16は、ユーザがゲームをプレイしている様子の一例を示す模式図である。本処理例では、以下のS401~S413に示す処理が所定のサンプリングレートで繰り返し実行される。本処理例に示す処理は、例えば、上述の軸足の推定処理が実行される直前に実行されるようにしてもよい。また以下の説明では、ユーザの前後方向がX軸方向であり、左右方向がY軸方向であり、高さ方向がZ軸方向であることとする。
【0181】
また、以下の説明では、
図16に示すように、S101に示す処理で取得された姿勢データが示すトラッカー12a、トラッカー12b、トラッカー12c、トラッカー12d、トラッカー12eの位置をそれぞれT1、T2、T3、T4、T5と表現する。
【0182】
また、以下の説明では、スケルトンモデルデータ記憶部50に、ユーザの身体サイズを示す身体サイズデータが記憶されていることとする。ここで例えば身体サイズデータの初期値として所定値が設定されるようにしてもよい。あるいは、身体サイズデータの初期値としてユーザの年齢に応じた値が設定されるようにしてもよい。後述のように身体サイズデータが示す身体サイズは次第に大きくなるよう当該身体サイズデータは更新されていくので、身体サイズデータの初期値としては、ユーザの一般的な身体サイズを示す値よりも少し小さな値が設定されるようにすることが望ましい。
【0183】
なお、スケルトンモデルデータ記憶部50は、ユーザの身長を示す身長データを記憶してもよい。また、スケルトンモデルデータ記憶部50は、ユーザの腕の長さを示す腕長さデータを記憶してもよい。また、スケルトンモデルデータ記憶部50は、ユーザの左右方向の身体サイズを示す左右身体サイズデータを記憶してもよい。
【0184】
まず、姿勢更新部56は、位置T1のZ座標値h1に所定のオフセット値loを加えた値を頭頂部のZ座標値htとして算出する(S401)。
【0185】
そして姿勢更新部56は、位置T4のZ座標値と位置T5のZ座標値との差が所定の閾値t1以下であるか否かを確認する(S402)。
【0186】
位置T4のZ座標値と位置T5のZ座標値との差が閾値t1以下であることが確認された場合は(S402:Y)、姿勢更新部56は、位置T4のZ座標値と位置T5のZ座標値の平均値であるZ座標値h4を算出する(S403)。
【0187】
そして姿勢更新部56は、S401に示す処理で算出された頭頂部のZ座標値htとS403に示す処理で算出されたZ座標値h4との差を、身長の推定値ltとして算出する(S404)。
【0188】
そして姿勢更新部56は、S404に示す処理で算出された身体サイズの推定値ltが、スケルトンモデルデータ記憶部50に記憶されている身長データが示す身長の値よりも大きいか否かを確認する(S405)。
【0189】
値ltがスケルトンモデルデータ記憶部50に記憶されている身長データが示す身長の値よりも大きいことが確認されたとする(S405:Y)。この場合は、姿勢更新部56は、S404に示す処理で算出された身体サイズの推定値ltを示すようスケルトンモデルデータ記憶部50に記憶されている身長データを更新する(S406)。
【0190】
そして姿勢更新部56は、ユーザの肩の位置を推定する(S407)。ここでは例えば、位置T1を示す値に所定のオフセット値psroを加えることで右肩の位置psrを示す値が推定されるようにしてもよい。また例えば、位置T1を示す値に別の所定のオフセット値psloを加えることで左肩の位置pslを示す値が推定されるようにしてもよい。なお、S403に示す処理で位置T4のZ座標値と位置T5のZ座標値との差が閾値t1以下でないことが確認された場合も(S402:N)、S407に示す処理が実行される。この場合は、位置T4を示す値や位置T5を示す値がエラーに基づく異常値である可能性が高いため、S403~S406に示す処理がスキップされる。また、S405に示す処理で値ltがスケルトンモデルデータ記憶部50に記憶されている身長データが示す身長の値よりも大きくないことが確認された場合も(S405:N)、S407に示す処理が実行される。
【0191】
そして姿勢更新部56は、S407に示す処理で推定された右肩の位置psrと左肩の位置pslとの間の長さを肩幅lsとして算出する(S408)。
【0192】
そして姿勢更新部56は、位置T2と位置pslとの間の長さと、位置T3と位置psrとの間の長さと、の差が所定の閾値t2以下であるか否かを確認する(S409)。
【0193】
位置T2と位置pslとの間の長さla1と、位置T3と位置psrとの間の長さla2と、の差が所定の閾値t2以下であることが確認されたとする(S409:Y)。この場合は、姿勢更新部56が、位置T2と位置psrとの間の長さla1を示す値と位置T3と位置pslとの間の長さla2を示す値との平均値を腕の長さの推定値laとして算出する(S410)。
【0194】
そして姿勢更新部56が、S410に示す処理で算出された推定値laが、スケルトンモデルデータ記憶部50に記憶されている腕長さデータが示す腕の長さの値よりも大きいか否かを確認する(S411)。
【0195】
値laがスケルトンモデルデータ記憶部50に記憶されている腕長さデータの値よりも大きいことが確認されたとする(S411:Y)。この場合は、姿勢更新部56は、S410に示す処理で算出された腕の長さの推定値laを示すようスケルトンモデルデータ記憶部50に記憶されている腕長さデータを更新する(S412)。
【0196】
そして姿勢更新部56が、腕長さデータの値の2倍と上述の肩幅lsの値との和を示すようスケルトンモデルデータ記憶部50に記憶されている左右身体サイズデータを更新する(S413)。そして、S401に示す処理に戻る。
【0197】
なお、S409に示す処理で、位置T2と位置pslとの間の長さと、位置T3と位置psrとの間の長さと、の差が所定の閾値t2以下でないことが確認された場合も(S409:N)、S401に示す処理に戻る。この場合は、位置T2を示す値や位置T3を示す値がエラーに基づく異常値である可能性が高いため、S410~S413に示す処理がスキップされる。また、S411に示す処理で値laが、スケルトンモデルデータ記憶部50に記憶されている腕長さデータが示す腕の長さの値よりも大きくないことが確認された場合も(S411:N)、S401に示す処理に戻る。
【0198】
例えば、右足基準頭部位置データD2の値、及び、左足基準頭部位置データD3の値として、足の位置を基準とした頭の位置の座標値を、スケルトンモデルデータ記憶部50に記憶されている、身長サイズデータの値、腕長さデータの値、又は、左右身体サイズデータの値のいずれかで割った値が用いられてもよい。
【0199】
また、
図13に示す機械学習モデルの学習においても、上述のS401~S413に示す処理が実行されるようにしてもよい。そして、右足基準頭部位置データD2の値、及び、左足基準頭部位置データD3の値として、足の位置を基準とした頭の位置の座標値を、上述の身長サイズデータの値、腕長さデータの値、又は、左右身体サイズデータの値のいずれかで割った値が用いられてもよい。
【0200】
なお、以上の説明において、基本姿勢のスケルトンモデル40として、Aポーズのスケルトンモデル40の代わりに、足を開き腕を横方向に伸ばした、いわゆるTポーズのスケルトンモデル40が用いられてもよい。
【0201】
本実施形態において、例えば、犬、龍、たこ、などの、人間ではないスケルトンモデル40を用いたボディトラッキングを行いたい場面がある。
【0202】
図17には、人間ではないスケルトンモデル40の一例として、四つ足の犬のスケルトンモデル40が示されている。
【0203】
図17に示すように、スケルトンモデル40のなかには、デフォルトの姿勢がTポーズやAポーズなどといった既知の基本姿勢ではないものがある。このようなスケルトンモデル40を用いて本実施形態に係るボディトラッキングを行う場合は、上述のように、その姿勢を既知の基本姿勢に変形したものを用意する必要がある。
【0204】
図18は、既知の基本姿勢の1つであるTポーズに
図17に示すスケルトンモデル40を変形した一例を示す図である。
【0205】
ここで、
図17に示すスケルトンモデル40の
図18に示すような基本姿勢への変形を手作業で行うことは、作業者の手間である。そこで本実施形態では以下のようにして、スケルトンモデル40を既知の基本姿勢に変形する手間を低減できるようにした。
【0206】
以下、Tポーズのスケルトンモデル40への変形に関する、本実施形態に係るエンタテインメント装置14の機能、及び、本実施形態に係るエンタテインメント装置14で実行される処理についてさらに説明する。
【0207】
図19は、Tポーズのスケルトンモデル40への変形に関する、本実施形態に係るエンタテインメント装置14の機能の一例を示す機能ブロック図である。なお、本実施形態に係るエンタテインメント装置14で、
図19に示す機能のすべてが実装される必要はなく、また、
図19に示す機能以外の機能が実装されていても構わない。
【0208】
図19に示すように、本実施形態に係るエンタテインメント装置14には、機能的には例えば、スケルトンモデルデータ記憶部50、姿勢更新部56、ターゲットノード特定部80、基準ノード特定部82、位置決定部84、が含まれる。
【0209】
スケルトンモデルデータ記憶部50は、記憶部32を主として実装される。姿勢更新部56、ターゲットノード特定部80、基準ノード特定部82、位置決定部84は、プロセッサ30を主として実装される。
【0210】
以上の機能は、コンピュータであるエンタテインメント装置14にインストールされた、以上の機能に対応する指令を含むプログラムをプロセッサ30で実行することにより実装されてもよい。このプログラムは、例えば、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ読み取り可能な情報記憶媒体を介して、あるいは、インターネットなどを介してエンタテインメント装置14に供給されてもよい。
【0211】
スケルトンモデルデータ記憶部50は、本実施形態では例えば、上述のように、スケルトンモデル40の姿勢を示すスケルトンモデルデータを記憶する。ここでは例えば、
図17に示すような、既知の基本姿勢ではない姿勢のスケルトンモデル40の姿勢を示すスケルトンデータが、スケルトンモデルデータ記憶部50に予め記憶されていることとする。
【0212】
ターゲットノード特定部80は、本実施形態では例えば、既知の基本姿勢ではない姿勢のスケルトンモデル40に含まれる複数のノードのうちから複数のターゲットノードを特定する。ここで例えば、ユーザが、エンタテインメント装置14と通信可能なコントローラを介してエンタテインメント装置14に対する操作入力を行えてもよい。そして、ユーザによるターゲットノードの選択操作に応じて、ターゲットノード特定部80が、ユーザによって選択されたノードをターゲットノードと特定してもよい。
【0213】
ここでは例えば、ボディトラッキングにおけるトラッカー12に対応付けられるノード(頭部ノード42a、左手ノード42b、右手ノード42c、左足ノード42d、及び、右足ノード42e)がターゲットノードに特定されることとする。なおここで、末端のノードがターゲットノードに特定されてもよい。また、各ノード42に名前が関連付けられている場合は、ターゲットノード特定部80は、ノード42の名前に基づいて、ターゲットノードを特定してもよい。
【0214】
また、3つに分岐しているノードにおける先端のノードで、分岐点のノードから先端のノードまでのノード数が同じであるもののそれぞれが、右手に相当するターゲットノード、及び、左手に相当するターゲットノードに特定されてもよい。そして、残りの1つの先端のノードが頭部に相当するターゲットノードに特定されてもよい。
【0215】
また、2つに分岐しているノードにおける先端のノードのそれぞれが、右足に相当するターゲットノード、及び、左足に相当するターゲットノードに特定されてもよい。
【0216】
また、スケルトンモデル40にしっぽのノードが含まれている場合には、3つに分岐しているノードが2組存在する可能性がある。この場合は、それぞれの先端のノードの相対的な位置(上下、左右、前後)に基づいて、頭部、左手、右手、右足、左足、しっぽのそれぞれに相当するノードが特定されてもよい。
【0217】
基準ノード特定部82は、本実施形態では例えば、複数のターゲットノードのいずれにも1又は複数のボーンを介して接続されているノードのうち最も当該複数のターゲットノード側にある基準ノードを特定する。ここでは例えば、骨盤ノード42fが、左足ノード42d、及び、右足ノード42eに対応する基準ノードと特定される。また、第3脊柱ノード42iが、頭部ノード42a、左手ノード42b、及び、右手ノード42cに対応する基準ノードと特定される。
【0218】
位置決定部84は、本実施形態では例えば、基準ノード及びターゲットノードの位置を決定する。ここで位置決定部84は、基準ノードの位置を基準とした複数のターゲットノードの相対的な位置が所定の位置となるよう、複数のターゲットノード又は基準ノードの位置を決定する。
【0219】
姿勢更新部56は、本実施形態では例えば、位置決定部84により決定される複数のターゲットノードの位置に基づいて、スケルトンモデル40の姿勢を既知の基本姿勢に更新する。姿勢更新部56は、例えば、上述のS105~S111に示す処理を実行することで、スケルトンモデル40の姿勢を既知の基本姿勢に更新する。ここでは例えば、スケルトンモデル40の姿勢が
図18に示すようなTポーズに更新される。
【0220】
ここで、本実施形態に係るエンタテインメント装置14で行われる処理の流れの一例を、
図20に例示するフロー図を参照しながら説明する。
【0221】
本処理例においては、スケルトンモデルデータ記憶部50に、予め、
図17に示す、既知の基本姿勢ではない姿勢のスケルトンモデル40が記憶されていることとする。また、エンタテインメント装置14と通信可能なコントローラを介して、ユーザがエンタテインメント装置14に対する操作入力を行えることとする。
【0222】
まず、ターゲットノード特定部80が、ユーザによる選択操作による選択されるターゲットノードを特定する(S501)。ここでは例えば、頭部ノード42a、左手ノード42b、右手ノード42c、左足ノード42d、及び、右足ノード42eがターゲットノードと特定されることとする。
【0223】
そして、姿勢更新部56が、左足ノード42dから右足ノード42eに向かう向きが座標系の右手軸と一致するよう、スケルトンモデル40の全体を回転させる(S502)。なお、以下の説明では、左足ノード42dと右足ノード42eとをつなぐ直線に対して、頭部ノード42aがあるべき所与の方向が上方向であることとする。
【0224】
そして、基準ノード特定部82が、基準ノードを特定する(S503)。ここでは例えば、上述のように、骨盤ノード42f、及び、第3脊柱ノード42iが基準ノードと特定される。
【0225】
そして、位置決定部84が、基準ノード及びターゲットノードの位置を決定する(S504)。
【0226】
ここでは例えば、基準ノードである骨盤ノード42fの位置を基準とした、ターゲットノードである左足ノード42d及び右足ノード42eの相対的な位置が所定の位置となるよう、骨盤ノード42fの位置が決定される。具体的には例えば、左足ノード42dの位置と右足ノード42eの位置との間の中央の位置x1が特定される。そして、位置x1の真上であって、位置x1からの距離がボーン44t、ボーン44s、及び、ボーン44rの長さの和L1となる位置が、骨盤ノード42fの位置x2と決定される。なお、位置x1の真上であって、位置x1からの距離がボーン44p、ボーン44o、及び、ボーン44nの長さの和L2となる位置が、骨盤ノード42fの位置x2と決定されてもよい。あるいは、位置x1の真上であって、位置x1からの距離が、長さの和L1と長さの和L2の平均の長さである位置が、骨盤ノード42fの位置x2と決定されてもよい。
【0227】
そして、位置x2の真上であって、位置x2からの距離がボーン44aの長さとなる位置が、第1脊柱ノード42gの位置x3と決定されてもよい。そして、位置x3の真上であって、位置x3からの距離がボーン44bの長さとなる位置が、第2脊柱ノード42hの位置x4と決定されてもよい。そして、位置x4の真上であって、位置x4からの距離がボーン44cの長さとなる位置が、第3脊柱ノード42iの位置x5と決定されてもよい。そして、位置x5の真上であって、位置x5からの距離がボーン44dの長さとなる位置が、首ノード42jの位置x6と決定されてもよい。そして、そして、位置x6の真上であって、位置x6からの距離がボーン44eの長さとなる位置が、ターゲットノードである頭部ノード42aの位置x7と決定されてもよい。
【0228】
そして例えば、基準ノードである第3脊柱ノード42iの位置を基準とした、ターゲットノードである左手ノード42b及び右手ノード42cの相対的な位置が所定の位置となるよう、左手ノード42b及び右手ノード42cの位置が決定される。
【0229】
ここでは例えば、基準ノードである第3脊柱ノード42iの位置を基準とした、左手ノード42b及び右手ノード42cの相対的な位置が所定の位置となるよう、左手ノード42b及び右手ノード42cの位置が決定される。
【0230】
具体的には、例えば、第3脊柱ノード42iの位置x5の真上であって、位置x5から所定長L3だけ離れた位置x8が特定されてもよい。そして位置x8から、座標系の右手軸に沿って正方向に、ボーン44j、ボーン44k、ボーン44l、ボーン44mの長さの和L4だけ離れた位置が、右手ノード42cの位置x9と決定されてもよい。そして、位置x9から、座標系の右手軸に沿って負方向に、ボーン44f、ボーン44g、ボーン44h、ボーン44iの長さの和L5だけ離れた位置が、左手ノード42bの位置x10と決定されてもよい。
【0231】
なお、ここで、第3脊柱ノード42iの位置を基準とした右鎖骨ノード42nの相対的な位置がデフォルトの姿勢と同じになるような、右鎖骨ノード42nの位置が特定されてもよい。そして右鎖骨ノード42nの位置から、座標系の右手軸に沿って正方向に、ボーン44k、ボーン44l、ボーン44mの長さの和L6だけ離れた位置が、右手ノード42cの位置x9と決定されてもよい。また、第3脊柱ノード42iの位置を基準とした左鎖骨ノード42kの相対的な位置がデフォルトの姿勢と同じになるような、左鎖骨ノード42kの位置が特定されてもよい。そして左鎖骨ノード42kの位置から、座標系の右手軸に沿って負方向に、ボーン44g、ボーン44h、ボーン44iの長さの和L7だけ離れた位置が、左手ノード42bの位置x10と決定されてもよい。
【0232】
そして、姿勢更新部56が、上述のS105~S111に示す処理を実行して(S505)、本処理例に示す処理は終了される。
【0233】
本実施形態では以上のようにして、スケルトンモデル40を既知の基本姿勢に変形する際の手作業の量が低減される。そのため、本実施形態によれば、スケルトンモデル40を既知の基本姿勢に変形する手間を軽減できることとなる。
【0234】
以上の例では、既知の基本姿勢としてTポーズを採用したが、既知の基本姿勢としてAポーズなどの他の姿勢を採用してもよい。
【0235】
この場合、例えば、S504に示す処理で、第3脊柱ノード42iの位置x5の真下であって、位置x5から所定長L8だけ離れた位置x11が特定されてもよい。そして位置x11から、座標系の右手軸に沿って正方向に、ボーン44j、ボーン44k、ボーン44l、ボーン44mの長さの和L4だけ離れた位置が、右手ノード42cの位置x9と決定されてもよい。そして、位置x11から、座標系の右手軸に沿って負方向に、ボーン44f、ボーン44g、ボーン44h、ボーン44iの長さの和L5だけ離れた位置が、左手ノード42bの位置x10と決定されてもよい。
【0236】
また、本処理例では、
図3に示すスケルトンモデル40と同じ構造のスケルトンモデル40を例に説明したが、本実施形態は、
図3に示すスケルトンモデル40と構造が異なるスケルトンモデル40にも適用可能である。例えば、羽の生えた龍のスケルトンモデル40に対しても本実施形態が適用可能である。この場合、例えば、龍の手のノードがターゲットノードと特定されると、龍の手の動きがユーザの手の動きに連動したボディトラッキングが可能となる。また例えば、龍の羽のノードがターゲットノードと特定されると、龍の羽の動きがユーザの手の動きに連動したボディトラッキングが可能となる。このように本実施形態によれば、ボディトラッキングにおいてトラッカー12の動きに連動させるターゲットノードを自由に設定できることとなる。
【0237】
また、スケルトンモデル40に、さらに、左手首に相当する左手首ノードが含まれるとする。ここで、左手首ノードは、例えば、左手ノード42bと左前腕ノード42mの間にあり、左手ノード42b及び左前腕ノード42mとボーンを介して接続されたノードであってもよい。この場合に、姿勢更新部56は、S505に示す処理の終了後に、デフォルトの姿勢における左手首ノードを基準としたS501~S505に示す処理の終了後における左手首ノードの回転を、左手ノード42bの回転に適用してもよい。
【0238】
同様に、スケルトンモデル40に、さらに、右手首に相当する右手首ノードが含まれる場合に、デフォルトの姿勢における右手首ノードを基準としたS501~S505に示す処理の終了後における右手首ノードの回転が、右手ノード42cの回転に適用されてもよい。ここで、右手首ノードは、例えば、右手ノード42cと右前腕ノード42pの間にあり、右手ノード42c及び右前腕ノード42pとボーンを介して接続されたノードであってもよい。
【0239】
また、スケルトンモデル40に、さらに、右手の指のノードが含まれていてもよい。これらの指のノードは、例えば、右手ノード42cとボーンを介して接続される。この場合、姿勢更新部56は、S505に示す処理の終了後に、右手ノード42cの位置から右手の中指のノードの位置に向かう向きが座標系の右手軸の正方向の向きに一致し、右手の小指のノードの位置から右手の親指のノードの位置に向かう向きが座標系の正面軸に一致するよう、少なくとも1つのボーンを回転させてもよい。
【0240】
同様に、スケルトンモデル40に、さらに、左手の指のノードが含まれていてもよい。これらの指のノードは、例えば、左手ノード42bとボーンを介して接続される。この場合、姿勢更新部56は、S505に示す処理の終了後に、左手ノード42bの位置から左手の中指のノードの位置に向かう向きが座標系の右手軸の負方向の向きに一致し、左手の小指のノードの位置から左手の親指のノードの位置に向かう向きが座標系の正面軸に一致するよう、少なくとも1つのボーンを回転させてもよい。
【0241】
本実施形態では以上のようにして、スケルトンモデル40を既知の基本姿勢に変形する手間を低減できることとなる。
【0242】
また、本実施形態では、スケルトンモデル40の向き、姿勢、関節数、形態がどのようなものであっても、スケルトンモデル40を既知の基本姿勢に変形させることができる。例えば、正面を向いていないもの、手が水平に広げられていないもの、四つ這いであるもの、寝た姿勢のもの、足の関節数が多いもの、羽や尻尾があるもの、形態がイカ、タコ、木であるものなど、あらゆる種類のスケルトンモデル40に本実施形態は適用可能である。
【0243】
また、本実施形態は、既存のアニメーションを別のモデルに適用するリターゲティングの用途に活用することができる。本実施形態によれば、様々なモデルに対してリターゲティングできるため、既存のアニメーションが簡単に流用可能となる。
【0244】
既存技術のリターゲティングでは、スケルトンモデル40がある程度近いもの同士でないとうまく機能しない。例えば人体アニメーションでは、スケルトンモデル40が人体モデルである必要がある。しかし、本実施形態によれば、より汎用的、かつ動的に、リターゲティングを行うことができ、新たなモデルを入手した途端に、当該モデルに本実施形態を適用して、動作させることが可能となる。
【0245】
なお、本発明は上述の実施形態に限定されるものではない。
【0246】
例えば本発明の適用範囲は、トラッカー12の実際の動きに応じたリアルタイムでのスケルトンモデル40の姿勢の更新には限定されない。例えば本発明が、エンタテインメント装置14に予め記録された、一連の姿勢データの時系列に基づいて、スケルトンモデル40や当該スケルトンモデル40に応じたプレイヤオブジェクトが動く様子を再生する場面に適用されてもよい。
【0247】
また例えばトラッカー12aは、ヘッドマウントディスプレイ(HMD)であってもよい。この場合に、ユーザに含まれる複数の部位の位置又は向きに応じたゲーム処理等の各種の処理の結果に応じた映像が例えばHMDの表示部に表示されるようにしてもよい。
【0248】
また例えば、
図6に示す機能の一部又は全部がトラッカー12によって実装されてもよい。
【0249】
また、上記の具体的な文字列や数値及び図面中の具体的な文字列や数値は例示であり、これらの文字列や数値には限定されない。