OculusQuestハンドトラッキング実装によせて(エッセイ

概要

OculusQuestがハンドトラッキングを実装します。

www.oculus.com

それに伴って「コントローラは要らなくなる!」とか「どうせ使いものにならない!」とかtwitter上で色んな意見を見たので僕の気持ちをまとめておきます。

入力デバイスの「決定」を示す操作の歴史

タップやマウスクリック相当をハードウェア無しのハンドトラッキングでどうやるか、みたいなのは結構大事です。 (大雑把に言って)入力デバイスは「選択」と「決定」を行うためのものです。

マウスクリックやキーボード打ち込みは物理的な押し込みフィードバックがあります。これはユーザが決定をした、という意図を検出するのがかなり容易で正確です。
スマートフォンというかタッチパネルは、押し込みフィードバックが無い代わりに、ユーザにとっては「板に触れた」というフィードバックがあり、画面上の音やグラフィックの遷移によって実際に作用したのが分かるようになっています。

このスマートフォンのタッチパネルも、最初は「いや、板を指で触るだけだとキー入力が出来ないやんけ」となってましたが、フリック入力が結構使える(そして音と見た目で押したと分かる)ようになって、結構文字打ったり操作するのはハードウェア的にはタダの板であるスマホでもいける。となっているのが現在の様子です。

この「決定」を示す操作が物理フィードバック無くてもいける、というのが個人的に印象に残っています。

ハンドトラッキングや視線トラッキングにおける「決定」を示す操作

それに対してLeapMotionやOculusQuestのハンドトラッキング、あるいはカッコ良い視線入力で問題になるのが、ユーザが行う「決定」をどうやって判断するか、という点です。板に触れる、というのに比べて、ハンドトラッキングや視線入力は(多くの人が知っている)決定的な解決策が提示されていません。

HololensのAirTapや、視線入力のサッカード、LeapMotionの押し込みタップ、OculusQuestのつまんで選択、など様々な方法が試行錯誤されています。そう、今は試行錯誤のフェーズ です。

ハンドトラッキングに対するポジティブな見方とネガティブな見方

ポジティブに考えると決定時の物理フィードバックが無いスマホがなんとかなったように、ハンドトラッキングや視線入力も何とかなる。 という説があります。

ネガティブに見ると「スマホは物理的なフィードバックは無いけど板に触れるという物理的な仕組みがあったので良かった。視線入力やハンドトラッキングはそれが無いからダメ」とも取れます。

僕の考え:ポジティブ

僕の立場はポジティブです。
例えば指のめっちゃ細かい動きがセンシング出来るようになったと仮定します。 そうなると、太ももの上に指を置いたら、スマホの板の代わりを自分の太ももにすれば良くなります。

ハンドトラッキングの検出範囲が広がったら、手を胸の高さに上げなくても、手をブラリと下げた状態でも認識できるようになります。

現時点のOculusQuestに実装されたハンドトラッキングは処理速度と精度の問題で手を胸の高さに上げて、大きな動きが必要だから、疲れるとか実用的ではない。と言う話に対しては、同意します。

でもiPhoneのタッチパネルがありえん精度(とソフトウェアの良さ)で普及したのと同じで、精度が良くなれば解決する問題なら、それは解決される可能性を見越しておく方がお得、というのが僕の考えです。

もちろん、それが一年後なのか百年後なのかはおいておいて…

という感じのことを深夜にツイートしてたんですが、まとめておきたくなったのでまとめました。

元値15万円の人型ロボット「プリメイドAI」が2万円で買えるようになったのでハックして遊ぶとすごく楽しい。という話

簡潔なまとめ

人型ロボットが2万円で買えます。 元値が高いだけあってしっかりした作りなのでおすすめ。

ハードウェア無改造でPCから、こんな感じで操作できます。

こちらから買えます。

【楽天市場】ホビーロボット > ロボット完成品:グラスロードカンパニー

f:id:izm_11:20190704103937p:plain

f:id:izm_11:20190706021443j:plain
ウキウキでプリメイドAIの良さを語る様子
illustrated by 河地りん 河地りん💡三日目西Q30a (@gingatrain814) | Twitter さん、ありがとうございます!!!

経緯

DMM.make ROBOTS さんで取り扱いがあるプリメイドAIという50cmくらいの25軸(25個のサーボが入っている)人型ロボットがあります。

プリメイドAI - 世界最高水準ダンスコミュニケーションロボット - DMM.make ROBOTS

本来は15万円+ 操作するには専用アプリ(Androidのみ対応) + モーション自作は出来ない という商品でした。2015年発売です。

ところが、最近になって一部ショップで2万円(税別)まで値下がりしています。
それだけ安くなると、何かに使えないかなあ…と思って買う人が出てきます。僕とか @GOROman さんとか @kirurobo さんとかです。

6/21購入で 6/27 くらいに届きました。

プリメイドAIを動かすための仕組み

プリメイドAIを動かすにはAndroidアプリを眺める限り

  • ハードウェア的に組み込みの既定ポーズが20種
  • Androidアプリ内からダンスモーションの追加ダウンロード→プリメイドAIに転送→再生

の2種類の動かすルートがあります。

前者はファームウェア吸出とかが必要そう&自由度が少ない予感です。
なので後者を利用して「任意のダンスモーションを生成」→プリメイドAIに転送→再生 を行うアプローチを取ります。

ハックの様子

ハードウェアの信号解析を GOROmanさんが始めて、Androidアプリとプリメイド間の通信はBTのSPP(要するに、Bluetooth接続になっただけのシリアル通信プロトコル)であることを確認しています。

僕はAndroidアプリ側でダウンロード出来るダンスモーションファイルの解析をUnity上で実装していました。

Windows上でBluetoothでプリメイドAIとペアリング(RNBT-で始まるデバイスです)すると、普通にデバイスマネージャー上ではシリアルポートとして認識されます。

そしてUnityEditor上からシリアルポートを使って信号を送れることを確認出来ました。

現在の成果物

pmaファイルのモーションプレビュー

@kirurobo さんによる解析と @Schwarz_Sardine さんのモデルによって高精度なモーションプレビューが実現できました。 https://user-images.githubusercontent.com/3115650/60764234-fcfb3f80-a0c0-11e9-9ae9-88d45da23fc4.gif

簡易リモコン

簡易リモコン的なサンプルシーンを作りました。秒間1フレームだけ転送することでインチキなリアルタイムモーション反映を実現しています。

https://user-images.githubusercontent.com/3115650/60763727-7db43e80-a0b5-11e9-859a-88568630d1bb.gif

ビルド済みのWindows向けバイナリはこちら。

https://www.dropbox.com/s/6eof04lvtyd17u5/Build_RremoteControl.zip?dl=0

Unity Mecanim Animatorのモーション反映

https://user-images.githubusercontent.com/3115650/61169086-3a653e80-a593-11e9-8836-fb726bd9d9f1.gif

VR-HMDを使ったマスタースレーブシステムデモ

https://user-images.githubusercontent.com/3115650/61320956-8b9c5900-a845-11e9-9578-00d1973acd3c.gif

以上の成果をUnityプロジェクトとしてApache2.0ライセンスで公開しています。 github.com

また、信号解析については以下のGoogle SpreadSheetにあります。

docs.google.com

まとめ

2万円で買えて(本来は出来ないんだけど) Unityから ラジコン制御出来そうな25軸の人型ロボット があります。破格だと思うのでみんな買いましょう!そしてハックして遊びませんか。

最後に大事な事なのでもう1度書くと ハードウェア無改造で遊べます。

モノビットエンジンについて調べてみたので書く

概要

先のエントリでPUNの話をしたとき、モノビットエンジンはどうなっているのか気になったのでサイトを見たり、モノビットの人に教えてもらいました。 幾つかの点で競合の他サービスと比較して採用を検討する利点や、あるいは難点もあったので情報をまとめておきます。
調べて書いた程度なので、実案件運用をしての感想ではない事ご容赦ください。

前提として個人あるいは小規模のUnity向けMOゲーム開発を想定しています。

モノビットエンジンでネットワークゲームを作る、という時に取りうる選択肢

Photonには、PUNというUnitySDKがあります。このSDKを使って

  1. Windowsサーバを建ててPhoton Serverのプログラムをホストして、クライアントはPUN。サーバロジックを自由にPhotonServerに書く。
  2. PhotonCloud ,世界中にあるPUN用のリレーサーバを使って、クライアントはPUN(クライアントの内、一台をサーバロジックが動くHOST、マスタークライアントとする)

という2種類の選択肢があります。

モノビットエンジンの場合も、このPhotonと同じようにMUNというUnity向けSDKがあります。

  1. MUN Server。サーバを開発者が自前で立てて、MUNのサーバプログラムをホストして、クライアントはMUNクライアント。サーバロジックを自由にMUN Serverに書く。
  2. モノビットエンジンクラウド。モノビット社が用意して建てている各地のMUN用のリレーサーバを使って、クライアントはMUN(クライアントの内、一台をサーバロジックが動くHOST、マスタークライアントとする)

の2種類があります。個人開発を行うなら2.が気になります。なぜなら1.は100CCU以上だと330万円/年と書いてあるので…(それにサーバの面倒を見たくないです…)

というわけで2.の使い方をする前提でこのエントリは話を進めます。

モノビットエンジンクラウドはPhotonCloudと比べてどこが良さそう?

ルーム毎の秒間メッセージ数制限が無い

これはかなり魅力的です。
このメッセージ数制限は特に4人以上などの多人数ルームを想定したゲームでは問題になりやすいです。
RPCを打つたびにルーム内の人数分のメッセージが走るので、思ったより制限は厳しいです。
メッセージ数制限について触れられている、とりすーぷさんのスライド参照ください。

https://niconare.nicovideo.jp/watch/kn3705

通信量が多いゲームも金で解決出来る

大体100CCUで月1CCUあたり3GB、つまり1000CCUプランだったら月3TBという無料通信量の制限はPhotonと同じですが、モノビットクラウドは明示的に超過通信量について従量課金で対応できます。

つまり、高音質ボイスチャットを垂れ流す、みたいなゲームでもお金を払うだけで使う事が出来ます。 やろうと思えば映像伝送もいけますね!!!

モノビットエンジンクラウドはPhotonCloudと比べてここは怖いかも

NAT越えはしない

基本的に全部の通信をモノビットクラウドのリレーサーバ経由で行います。モバイル端末のネットワーク不安定さをカバーする点では魅力的ですが、原理的にpingは増えやすいかもしれません。(でも確かPUNのリレーサーバもNAT越えしなかった気もします。そうなると差はありませんね)

モノビットエンジンクラウドの海外対応

どのリージョン(地域)をカバーしているか、分かると嬉しいですが東京や大阪にはあると思います。海外展開を想定している場合、展開先の近所にサーバがあると嬉しいです。Photonは欧州、北米、インドなど主要地域ごとにリレーサーバが建っています。
モノビットエンジンクラウドは、導入事例を見る限り国内例が多いので、リリース後間もないので日本リージョンのサーバだけが建っています。(世界展開予定)

具体的な料金比較

大体PhotonCloudとモノビットエンジンクラウド両方とも、同じような価格ですね。

f:id:izm_11:20190508203133p:plain f:id:izm_11:20190508203220p:plain

ちなみに先のエントリで僕が気になっていたNobleConnectはこちら。約半額で済んでいるのは、NAT越えを頑張ることで、リレーサーバを通さない通信を増やしてサーバを節約しているから、と説明されています。

Noble Connect - Asset Store

f:id:izm_11:20190508203455p:plain

感想

おおよそPhotonCloudとモノビットエンジンクラウド、どちらを選ぶかは好みで良い気はします。SDKの持ちうる機能は大体同じだと感じました。

ただ、ゲームが良い感じに進んで、セルフホストをする(つまり、自前でサーバを建てる)ようになったとき、Linux上でも動くモノビットサーバはエンジニアを見つけやすいかもしれません。 PhotonServerはWindowsServer限定なので…

一方でユーザ数が多いことによるインターネット上にある技術情報の数はPhotonの方が多いので、そこに魅力を感じるのであればPUNを選ぶのも良いと思います。

2019年における個人開発あるいは小規模開発のUnityリアルタイムネットワークの技術選定

概要

Unityネットワーク完全に理解した勉強会でしゃべったことのフォローアップエントリです。

基本的にはPUN2(あるいはPUN1)を推奨していますが、PUNがマッチしないときの技術選定についての話をします。

リアルタイムネットワークゲームをUnityで作る時に考える事

  • 何人同時に動かす必要があるか(つまり、対戦人数)
  • LAN外と通信するかどうか(つまり、NAT越えが必要か)
  • オフラインのLAN環境で動く必要があるか

みたいなことを最初に考える必要があります。
1個目は「PUBGが作りたい、50人が同時対戦するやつを作りたい」と言われるとちゃんとしたエンジニアを集めてください!!で終わっちゃうので、そこは勘弁してください。ラフに言うと10人以上を一緒に動かすのは、結構大変です。

2個目は「ルータの設定やPC設定、あるいはスマホのセキュリティ設定によってP2Pが成立しないことが多い」ので、NAT越えを頑張って、それでもダメならリレーサーバを使う必要があります。
ネットワークエンジンから自作する人は、この辺りも自作することになります。リレーサーバを書くのはめちゃくちゃ大変、と言うわけではないですが、なるべくNAT越えで解決しないとPing増えちゃうのでSTUN、TURN、ICE辺りをゴリゴリやっていく必要があります、この辺は書いてると結構つらいと思います。はい。

ここまで話してて「何言ってるか分かんないな…」みたいに感じた人は、たぶんPUNを使っておくのが一番良いと思います!(あるいはモノビットエンジンもあるのですが、残念ながら僕は触ったことが無いので…ごめんなさい…)

3個目がポイントで、諸事情でインターネットが無い環境でのLAN内動作をしなきゃいけない、みたいなことになるとPUNが使えなくなって死にます。 例えば博物館向け納品とか、おカタい会社向け納品とか、あとTGSなどで回線が死んだ時とか…ですね(遠い目)

この

  • 比較的小人数(x<10)
  • リレーサーバとNAT越えを備えて、つまりネットワーク越しに対戦出来て
  • 必要であればオフラインLAN対戦も成立する

を満たすUnityでの組み合わせは、実は結構少ないです。UNETを使うしかなかったくらいに少ないです…

ただ、UNetを使うと
「ネットワークライブラリ自身のバグを踏む(自分のゲームコードのバグと切り分けるので消耗する)」
「リレーサーバの代金がボッタクリみたいに高い」
「NAT越え出来る確率がめっちゃ低い(さてはSTUNさぼってますね)」
みたいなツラい点と向き合う必要があって、ちょっと大変です。

そこで2019年の僕なら何を選ぶかという話をこれから書きます。

Mirror + NobleConnectという技術選定

ネットワークライブラリをMirrorにして https://github.com/vis2k/Mirror

LLAPIをTelepathyじゃなくてLiteNetLib4Mirrorにして https://github.com/MichalPetryka/LiteNetLib4Mirror

リレーとNAT越えはNobleConnect https://assetstore.unity.com/packages/tools/network/noble-connect-140535

という構成を最近は試しています。

NobleConnectは聞きなれない感じですが、UNet及びMirror向けのNAT越え+リレーサーバソリューションです。積極的にP2Pを使うように気合いを入れたNAT越え実装が入っています。
さらにNobleConnectの会社はマッチメイキングも有料アセットで提供してるので、結構楽が出来ます。

気になるNobleConnectの価格ですがCCU100まではPUNと同額で、それ以上のプランはPUNの約半額といったところなので、ゲームが大ヒットしても安心ですね(?)

また、PUNにあった秒間の通信量制限(秒間500メッセージ制限)も無いので、考える事が減ります。

Mirror + NobleConnectを選ぶことの欠点

  1. ドキュメントがあまりない
  2. 日本リージョンのリレーサーバが無い
  3. 採用例が少ない

という辺りが欠点というかリスクになると思います。

  1. についてはMirror自体のドキュメントは少ないですが、以前よりサンプルも増えていて、またUNETソースからのマイグレーションツールも提供してくれています。 UNET入門 目次 - MOTOYAMA BLOG このUNET入門を読んでおけば、ほぼそのままMirrorでも同じように書けます。
  2. については結構ネックになるかもしれなくて、遅延をなるべく少なくしたいならモノビットさんとか日本リージョンにサーバが置いてあるところの方が良いかもしれません。
  3. については、これを読んだ人が採用例になってほしいです。よろしくおねがいします!

ほかに検討した選択肢

  • Dedicated ServerをMirrorで立ててNAT越えとかを考えなくて済むようにするプラン→Mirrorで書いたマスターゲームサーバが動くVPS代を払うと家計が死にかけたのでボツ
  • MLAPIをネットワークライブラリに採用してMLAPI.Relayを自宅サーバで走らせてリレーサーバにする→さらにドキュメントが少ないのと、MLAPI.RelayはNAT越えに熱心じゃなさそうだったので…でもMLAPIは設計がキレイなので気になっています。LLAPIがENETとUNET LLAPIの2択なのが若干つらいところですが…

最後に

モノビットさん、企業ベースの例は多いけどあまり個人開発者向けのドキュメントそろってなさそうな印象があり、ラーニングパスや、具体的な価格とかをどこかに書いてくれてるとうれしい…(僕が見つけられていないだけかもですが)(どこかにPUNを使わずにモノビットを使うに足る優位性があるはず)

VRChatに例のプールワールドを作ってPublic化した

概要

一年位前に例のプールでオフ会 ( 例のプールでオフ会をしてきたので知見を公開します - izm_11's blog ) をした時にロケハンも済ませていたので、 3D Artistのごきげんさんがコツコツモデリングしてくれました。

ごきげん👶🍼 (@hello_cg) | Twitter

良い感じにプールが出来上がったので、VRChatでみんなに見てもらえたら嬉しいね、という話になりました。 モデルを受け取ってVRCSDKを入れたり、パーティクル仕込んだり、小物を入れたりしてアップロード。

そしてpublic化申請を出したら2日くらいで許可されて公開になりました。

VRChat内の検索で「thatpool」と入れると出てきます。photorealisticって付いてる方が今回作ったワールドです。

f:id:izm_11:20190409124903p:plain

https://www.vrchat.net/home/world/wrld_ef2f300d-4e4a-4a9f-ba93-b63931f9249f

こんな感じで遊べます。

VR-HMD無くてもVRChatは遊べるので、試しに入ってみてくれると嬉しいです。

知見の様子

  • BGMというか環境音(適当な環境音ループを微音量で)
  • 入店チャイム(OnPlayerJoinでイベントフック)

などは、確かにあると嬉しいので、なるほどと言いながら実装しました。

作っている様子

3/27に一旦アップロードだけ通ることを確認して、空いた時間にギミックを仕込んでます。

感想

本職のCG屋さんはすごい(小学生並の感想)