鉄騎コンのあれを作ってる時に得られたOculusRift DK2 memo

豆知識集です。

鉄騎コントローラをPCで使う

XBOX用のコントローラは、コネクタ形状こそ異なる物の、中身の信号はUSBそのものなので、コントローラの先端を切って、USBコネクタをはんだ付けすれば使えます。
貴重な鉄騎コントローラに手を入れたく無い場合は、

Amazon.co.jp: Xbox用コントローラー延長ケーブル ( 初代XBOXで使用可能 ): ゲーム

こういった延長ケーブルを購入し、こちらを改造すれば大丈夫です。

参考URL nWorld: PCでXBOXのコントローラーを使う

また、PC用のデバイスドライバは幾つか種類がありますが、DirectInput用の物より、 SteelBattalion.NETの方が最近のOSでは安定して動くようです。 Win8.1Pro(x64)で動作確認済みです。 dmanning23/SteelBattalion.NET · GitHub

これを元に単独のプログラムを作成し、適当なボタンを適当なキー入力にアサインして、SendInput()でUnity側に送っています。

インストール時のメモ書きと、最小テストプログラムを以下に置きました。

鉄騎コントローラをWindows7,8(64bit)で使うメモ書き

Kinectの位置合わせ

真正面にKinect v2を設置すると、操縦桿が邪魔で手の認識に失敗することが多い為、Kinectを打ち下ろす形で設置しています。 その場合、Kinectから得られるKinect座標系での関節の座標は当然斜めになってしまう為、適当に補正しています。

MMD4MecanimでFinalIKのFullBodyIKへのボーン指定

こういった感じです。

最新版のMMD4MecanimはFinalIKとの親和性も考えられている為、この設定は使う機会が増えるかもしれません。

f:id:izm_11:20140918001347p:plain

FinalIKのTips

ヘッドトラッキングをしていて、頭を前に出すと胴体も一緒にそれっぽく動くと楽しいです。 これはFinalIKだと簡単に実装できます。

頭の位置に親になるEmptyObjectを作成し、子を二個作って両肩位置に設置。 FinalIKを触っているスクリプト内でShoulderEffectorのpositionをこの両肩の子に追従するように LastUpdate()内で指定しています。

最後に告知

来る9/28(日)に名古屋栄のニコニコ町会議で、コッソリ今回のめかしむ☆(鉄騎のやつ)を展示出来そうです。
お近くにお越しの際にはフラリと立ち寄って冷やかしに来ていただけると嬉しいです。

ニコニコ町会議 全国ツアー2014 | niconico

鉄騎コントローラを使ってロボットを操縦して戦うOculusコンテンツを作った

去る9/14(日) Ocufes名古屋 http://ocufesnagoya.jimdo.com/ に表題の物を作って展示してきました。
このエントリは備忘録と技術要素が半々くらいです

f:id:izm_11:20140916224644p:plain

製作動機

お世話になっているフィーバー柳橋 https://ja-jp.facebook.com/fever.yanagibashi のオーナーさんが、中古で鉄騎コントローラを入手したと連絡があり、僕自身もロボット物が好きなので、鉄騎リスペクトなコンテンツを作ろうと言うのが最初の取っ掛かりです。

コンテンツ設計指針

酔わない、没入感がある。と言うのを意識して設計しました。

VR酔い対策

例えば高速で飛び回るアーマードコア系のゲームをゲームパッド+OculusRiftでプレイすると、大体酔うことが先行研究から明らかになっています。また、乗り物に乗って移動する系のコンテンツはVR酔いを起こしやすい傾向があります。
今回は「なるべくVR酔いを起こす要素を消していく」「ゲームとして成立させる」と言うのが主な設計指針です。

ゲーム展開速度

一般にVR上でプレーヤーが高速で移動する場合は、人の目から得た加速度と、体が感じている加速度(停止してる)の差が大きいと酔います。なので今回は「鈍重なロボットを操作する」というゲームに仕立てました。イメージ的には鉄騎の第一世代くらいです。

注視点の設計

Ocufesで展示するということは、普段VR-HMDを被っていない人が多く遊ぶ可能性があります。この時に全周を見渡せると言う事実で調子に乗ってグルグル首を振って遊ぶと一気に酔います。
なので今回はコクピットに座って、前の方(視野角で言うと水平70度程度)だけ外の景色が見えるようにして、横や後ろはコクピット内部を表示していました。
これによって自然にプレーヤーが前を見続けるように仕向けています。

f:id:izm_11:20140916225735p:plain

操作の複雑さ

これは棚から牡丹餅的な部分もありますが、鉄騎コントローラは両手両足を使うコントローラで、初見のプレーヤーは操作するのに精一杯になる傾向にあります。逆に言うと、それだけ操作に集中して、前方を注視しているとVR酔いが起きにくいという効果が期待できます。
また、Twitter上で仮説として教えてもらったのが、「足を使って操作すると酔いにくい」という説があります。足を動かして操作すると体が揺れて、それが見た目と体感の加速度差という違和感の解消に役立つかもしれない。とのことです。

f:id:izm_11:20140916225307j:plain

75FPSの死守

OculusRift DK2のSDK0.4.2時点では、少しでも75FPSを切ると、ジャイロセンサによる先読み遅延軽減を行った遅れ補償描画が機能しなくなります。
これは有ると無いでは大幅な差があるので、Unity上で色々と小細工をしてFPSを稼いでいます。 (大体200万ポリゴン、1000ドローコールです)

没入感

プレーヤーの描画

プレーヤーの分身としてキャラクターを一人称視点位置に描画しています。 株式会社インフィニットループ様の「あいえるたん」を使用しました。 (可愛いです!!!!デモ使用に許諾が不要でとても有難かったです。 http://www.infiniteloop.co.jp/special/iltan/3d-dl.php )   また、椅子に座ったプレーヤーの頭と両手首の位置を斜め前に設置したKinect v2でトラッキングして、このあいえるたんの動きを同期させています。 これで自分の手の動きに合わせてCGの自キャラの絵も動くので、没入感を稼げるのではないか、と思い採用しました。
Kinect v2がベストの解だったわけではなく、指の形等が取得できないので、大雑把になってしまっています。このデバイス選定については調査結果を先日のエントリでまとめています。
http://izm-11.hatenablog.com/entry/2014/08/09/172147

また、Kinect v2で取得できる細かい関節をそのまま使うのではなく、一旦頭と両手先だけを使い、時分割でフィルタを掛けて鈍らせて、Unity上でFinal IKと言うアセットを使って、IK GoalとしてKinectからの値を使っています。これによってCGモデルのポーズ破綻を防いでいます。

余談ですが鉄騎コントローラ自体もCGでコクピット内に描画しています。

座面の振動

ロボットに乗ってガションガションと歩き回るのに足元が一切揺れないと、没入感を損ないます。
なので座面をロボットの歩行に合わせて揺らしてやる事で、これに対処しました。
どちらかと言うと、「正確なフィードバックで没入感を足す」と言うより「それっぽく揺らしてやることで無振動の違和感を消す」と言う意図です。

今回は 50Wハイパワー振動ユニット ボディソニック トランスデューサ http://www.donya.jp/item/23738.html を椅子の座面裏に固定しています。
こういった振動ユニットの素晴らしい点は、ゲーム内で低音のSE(ロボットのガションガション言う音や、武器の発射音)を再生すると、ノンコーディングで勝手にブルブルと、「それっぽく」震えてくれる事です。
この製品は50Wと比較的パワーがあり、同等製品は軒並み1万円以上する中で、わずか4000円で購入出来て非常にコストパフォーマンスが高い逸品です。お勧めします。

反省

良かったこと

  • 会場では鉄騎プレイ済みのオジサマがいっぱい来てくれて、同窓会みたいになりました。
    刺さる人には刺さるコンテンツになったのではないかと思います。
  • プレイ後に汗をかいている人が多かったのは、会場の気温を別にしても没入してプレイをしてもらえたのだと思います。
  • ヒアリングした限りでは、VR酔いになっている人はいませんでした。良かったです。
  • ロボット操縦するの楽しい!!! 

(体験中に目元は分からないけど口元に笑みを浮かべてくれる人が割と居てくれたのは、やったぜ感あります)

悪かったこと

  • 会場の体験時間制限を大幅に超過するコンテンツになってしまって、スタッフさんやお客さんに迷惑を掛けました。(導入とロボットの操作説明をフルボイスで収録したらこれだけで4分ありました…)
  • 上記対策の為、操作方法を僕が口頭で説明していきなり戦闘、と言う形になってしまって、慌ただしくなってしまいました。
  • 当日、僕の体調が良くないおかげで、説明が投げやりになってしまっていた可能性があります。不快に思われた方がいたら申し訳なかったです。
  • 敵のAIがしょぼいので、もっと緊張感を与えられるようにすべきでした。
  • 制作スケジュールが完全に修羅場っぽくてかなり汚いコードになってしまって、改修が困難になっています。リファクタリングします…

OculusRift DK2(0.4.2-0.4.4)をUnity(windows)でデバッグする時に楽できるエディタ拡張を作った

概要

OculusRift DK2を使ったコンテンツをUnityで作っているとき、「拡張ディスプレイ扱いのDK2側に、今のシーンを全画面表示したい」 ことが良くあります。
そんな感じの事を行うUnityのエディタ拡張スクリプトを先人が書いていた(DK1用)ので、それをアップデートしました。
GameViewをフローティングにして、右側のRift画面に持っていって、頑張って右上の最大化ボタンをマウスで押す、と言うのが辛すぎたのが製作動機です。

個人的にはDK2をUnityで開発する上では、使うと結構楽になると思うので、お試し頂けると嬉しいです。
DK2がExtendモードで、セカンダリモニタ、右側にある前提です。

  • Unity 4.5.5pro -4.6.1
  • Windows8.1Pro(64bit)
  • OculusSDK0.4.2-0.4.4(0.4.3以上を推奨) で動作確認済


"Rift DK2 Extend Display" editor script demo YouTube

きゅーこん@自作シリコン型でチョコ作り中 (@cubic9com) | Twitter
スペシャルサンクスきゅーこんさん
再生中のEscキーによる通常モードへの復帰が追加されました!

スペシャルサンクスgtk2kさん

追記ここまで

インストール方法

neon-izm/OculusRiftDK2ExtendPreview · GitHub

Download Zipを選んで解凍して、unitypackageをインポート

pullreqや動作報告歓迎です!

使い方

  1. UnityEditor上でWindow → Rift VR Game Modeをクリック f:id:izm_11:20140813183516p:plain
  2. 通常通りUnityEditor上でPlayすると、自動的にGameViewが拡張モニタ側のDK2でほぼ全画面で表示されます。 f:id:izm_11:20140813183535p:plain
  3. RiftMode の右上の×を押すと通常の処理に戻ります。 f:id:izm_11:20140813183559p:plain

補足

GameViewの実質解像度(Rift Display Size)及びGameViewを表示する座標(Rift Display Position)は、僕の環境での決め打ちの値を入れてしまっているので、見え方がおかしい場合は調整を行ってください。

f:id:izm_11:20140813183526p:plain

OculusSDK0.4.2以前で、うまく動かなかった場合の旧バージョンはこちら

https://copy.com/3rcEmiEYlQnMNu1L

ビジョンベースのジェスチャコントロール系デバイスの使い分けメモ

概要

ユーザの腕の動きや指の動きを取得したい事はとてもよくあるシチュエーションで、それを安価に済ませるには幾つかのデバイスの選択肢があります。
それらデバイスの腕や指のトラッキングの面から見た場合の使い分けについて、個人的にメモを兼ねて書きます。
VRHMDを被ったユーザが、例えば椅子に座ってドライブシミュレータみたいなソフトウェアを体験 することを想定しています。
DepthSense DS325は実質的にIntel Creative* Interactive Gesture Camera Developer Kit( http://click.intel.com/creative-interactive-gesture-camera-developer-kit.html )が上位互換と言うかOEMなので、1個に纏めました。

Kinect v1

人に正対した数m離れた手前に設置。HMDマウントは現実的ではない(トラッキング出来ない)
2万円くらい 関連情報:各種書籍

良いところ

  • 枯れてる
  • PCスペックのハードルが低い

悪いところ

  • 指は取得できない
  • 今後の入手性が怖い

Kinect v2

人に正対した数m離れた手前に設置。HMDマウントは現実的ではない(トラッキング出来ない)
2万円くらい 三脚必須(だと思う)
関連情報: Kinect for Windows v2 Developer Preview入門 ― C++プログラマー向け連載 http://www.buildinsider.net/small/kinectv2cpp

良いところ

  • 全身の骨格推定が出来る。v1よりは高精度
  • 音声認識、顔認識も(調べてないですが)出来る

悪いところ

  • OSやハードウェアの要求が厳しい(USB3.0のチップ相性が厳しい…)
  • まだSDKがバギー
  • 体積が大きい
  • 指の骨格推定は出来ない

LeapMotion

机の上に設置。あるいは最新版のSDKではHMDマウントも対応。有効認識範囲-1mくらい。
正体はかなり広角の赤外線カメラ
1万円くらい

良いところ

  • 指の骨格推定が一番簡単に取得出来る(最新SDK
  • 腕の骨格推定も、あまり精度が良くないが取得できる
  • 安価、軽量

悪いところ

  • HMDマウントして、椅子に座る場合、机の材質等のノイズによって指の認識率が落ちる(Leapの視界に、腕以外が見えないのをSDKは想定しています)
  • 机の上に設置した場合、机の上20cm以上の高さが無いとマトモに使えない(つまり、常に手を空中に出していないと認識しない。疲れます)

Intel Creative* Interactive Gesture Camera Developer Kit

ノートPCのwebcamのように設置。有効範囲 -1mくらい。軽量。HMDマウントも可能
2万円くらい
SDKがiisuSDKとIntel PCSDKの2種類あるので個別に

Intel PCSDK

関連情報:連載:Intel Perceptual Computing(PerCSDK入門 http://www.buildinsider.net/small/perc

良いところ

悪いところ

iisu SDK

関連情報:Oculus Rift + Senz3D + iisu で VR 空間内に手を入れて遊んでみた  http://tips.hecomi.com/entry/2014/05/15/025129

良いところ

  • 腕の骨格推定は比較的高精度に取れる(Leapくらい)
  • 他のデバイスも使いまわせる

悪いところ

  • Free版では商用利用不可、6時間以上の連続稼働不可、商用版高い
  • 音声認識や顔認識は出来ない
  • SDKの関連情報が少ない

結論

これ買いましょう https://www.kickstarter.com/projects/controlvr/control-vr-motion-capture-for-vr-animation-and-mor

OculusRift DK2 memo

概要

本当に自分用のメモ。

導入

楽しく使うOculus Rift DK2
https://docs.google.com/spreadsheets/d/1PtYxl2VmlNTJIxU-yrwEXCwGhYaT7bihKGqvfL7k5oE/edit#gid=0

DisplayLink Uninstaller
http://displaylink.com/support/sla.php?fileid=121

memo

  • 一部Unity製デモは -force-d3d11 オプションで起動する必要がある
  • 体験会等のときのIPDは60mmくらいが大体の人に合う

  • DK2のレンダーターゲット解像度(FBOサイズ)は2364x1461なので、UnityAAは切って良い 野生の男さんがリサーチ http://togetter.com/li/701523

  • extend mode+Unity4.5.2の場合、プライマリモニタをDK2にする必要があり、それはDisMon とかで湾クリック切り替えを用意しておくと良い http://dualmonitortool.sourceforge.net/dismon.html