2015年8月30日日曜日

バーチャルリアリティーのAndroid端末コントローラ

Android端末(スマホ、タブレット、スマートウオッチ)の傾きや加速度でバーチャル世界を操作できるコントローラソフトウエアを開発しました!無線(インターネット接続,LTEでもwifiでも遠隔地でも原理的に可能)でコントロールします!

バーチャルリアリティのコントローラ?バーチャル世界を現実っぽく人が感じるためには人間のバーチャル世界へのインタラクションが必要です。そこで通常人間がバーチャル世界に体の動きなどでインタラクションできるバーチャル世界用の特殊なコントローラを使用します。たとえば以下のようなものです。
Razer hydra

手をリアルタイムでスキャンしてバーチャル世界に送ってくれるLeap motionコントローラ

ヘッドマウントディスプレイの大手ベンチャーOculus VRのコントローラ Oculus Touch
手の動きと連動するwiimoteコントローラ

スマートウオッチ
STEM System. 全身がバーチャル世界と同期できるそうです。
全身VRセット KATWALK
体全身をカメラでリアルタイム3Dスキャンしてバーチャル世界に送れるKinect
手のジェスチャーを筋電で認識するmyo



脳波デバイスEPOC
ジェスチャーデバイス リング
オリジナルコントローラをintel edisonなどの組み込みIoT機器で開発する

ただこのデバイスの中には入手方法が期間限定のクラウドファンディングだけのものもあり入手が大変です。またこのデバイスたちは対応アプリケーションが少なく日常生活に使用できるにはまだ早いかと思われます。

 Android端末は世界で広く使われています。Androidはスマホ、タブレット、スマートウオッチからいろいろなプラットフォームをサポートします。Android端末はいろいろな種類があり世界中どこでも入手が簡単です。またandroid端末にはジャイロセンサ、加速度センサ、GPSセンサなどいろいろなセンサがついておりスマートウオッチやwiimote以上のバーチャル世界のインタラクションが可能です。

バーチャル世界のドローンをスマホでワイヤレスで傾きで操作します。実際に飛行機を操作している感覚が味わえます。

OculusとAndroidスマホ(タブレット・スマートウオッチも可)があれば飛行体験が可能です。
stereoscopic renderingによりバーチャル世界で高さも感じることができます。
Android端末ならバーチャル世界をより一般の人々に、より容易に体験することが可能です。またAndroidコントローラを使用してもゲームの速度(60-75FPS)やOculusに支障は出ません。
まだこのAndroid端末コントローラはプロトタイプです。これからさらに改良を加え色々な機能を追加していきたいと思います!










Virtual Reality World Android Controller

Hello!


I have developed a android wireless controller software for Virtual Reality game. You can control the virtual world by android phone/tablet/wear gyro/tilt.
The wireless controller is connected via wifi(Internet/UDP), so you can control the virtual world anywhere from the world.

Usually, the controllers for Augmented Reality/Virtual Reality are using special devices for realizing reality in the virtual world. Normal controller such as xbox/ps3/keyboard/gamecube controller is not good for sensing reality because human interaction is little controlling the normal controller.
These controllers are good sensing reality.

Razer Hydra
Your hand into the virtual world, Leap Motion(hand scanning virtual reality controller)
Oculus Touch

wiimote

smartwatch
STEM system
motion capture camera, kinect
gesture wristband myo
gesture device Ring



Original controller made by embedded chips
Full range VR set KAT WALK
Brain Wave Sensor EPOC



However, some of the controller can be only bought in crowdfund, and the application supporting the devices are limited now.

 How about android? Android have a lot of apps, and a lot of different platform. Android have smartphone, tablet, smartwatch, embedded IoT devices connected to android, and much more supported platform. You can easily buy android device from anywhere.

Virtual World Drone flight controlled from android wireless controller
You can sense flight experience.
Also you can sense height by stereoscopic rendering.

 So I developed this android wireless(internet connect) controller to control the virtual world for more people, for more beginners. I wrote TCP/IP multithread C# program with Unity to realize this. It is written in multithread, so it don't effect the game overall FPS 60 -75. You can enjoy great virtual reality experience with high FPS!
This controller is just a prototype. In future, I am going to use this controller more efficiently, and fuse with other devices such as kinect, leap motion. Check for my latest updates!

2015年8月29日土曜日

Drone Space Defenseゲーム開発

Drone Space Defense開発チームがシリコンバレーでのDrone Space Defenseデモ後解散したので今後からは僕がゲーム開発に携わっていきます!
Drone Space Defenese プロトタイプ
ドローンのリアルタイム3Dマッピング

パソコンからのA.R. Drone PS3テレオペレーション
Drone Space Defenseでは今までDrone Space Defenseのプロトタイプ(ゲーム)の開発、ドローンの画像追跡、リアルタイム3Dマッピング、nodejsを使ったwebsocketサーバーの実装、ドローンをPS3で操作できるようにしたり、クラウド構築、ドローンシミュレータの設定をしていました!
 
ゲーム製作を本格的に始めてそろそろ12日目です!  
現在Unityというゲームエンジンで開発を進めています。





Unityボールゲームチュートリアル
Unityサバイバルゲームチュートリアル
Unityサバイバルゲームをブラウザにビルド

5日間はunityのチュートリアルのビデオ2本、ネットのC#で書くUnity入門とC#の並列プログラミング、非同期プログラミング技法の学習をしていました。


6日目はOculus Rift DK2がWindows10で認識されないためwindows8.1のダウングレードを行っていました。

画像処理を使った拡張現実のアセット


C#のOpenCvSharpで画像処理
Virtual Realityとwebカメラと地形データの統合
Drone Space Defense Oculus Rift バージョンのモックアップ
7日目にVRゲーム開発に取り組みました!12時間でunityのアセット調査、C#/Unityでの画像処理の調査・実験、12時間でDrone Space Defense Oculus対応のモックを完成させました。


Unreal Engine Oculus祭りで最新モックとプロトタイプの展示

8日目の午後はG-tune&AMD OcuFes2015夏に参加して他の開発者のVRアプリを楽しみ、夜はUnreal Engine主催のOculus祭り2015でDrone Space DefenseのOculus対応モックとDrone Space Defenseプロトタイプ2Dモニターバージョンの展示を行いました!
leap motion届く。



ゲームセット


VR Planetarium


9日目にはLeap Motionが届きました!Leap Motionは手をコンピュータの世界にもっていくことのできるVirtual Realityのデバイスです。Leap Motion + Oculus Riftのアプリケーションを色々動かしてみました。Leap Motionで広がるDrone Space Defenseの可能性を感じました。

UnityちゃんとJapanese Otaku CityとVR

10-12日目はUnreal Engine Oculus 祭り2015で指摘されたOculus酔いを解消しようとUnityとVRの最適化に取り組みました。Oculus酔いを解消するにはFPSの早さが関係するそうです。今回のモックはオブジェクトが3,4個くらいしかなかったので簡単な最適化を行ったところ75FPS以上出て問題解決なのですが、一般的なVRの最適化技術を習得しようとポリゴン数が多いUnityちゃん、Pocket QueryちゃんとJapanese Otaku City Assetを使ったものでVRのFPSを上げることに取り組みました。Oculus Riftの推奨FPSは75FPSで酔いを軽減するために必要です。
1. ビルドの最適化オプションをすべて適用したら、20FPS前後出た。
2. 光、空の焼きこみ、static/dynamic batching, forward light renderingを適用したがFPSが変わっていない。
Japanese Otaku CityのOcculusion Culling
3. Japanese Otaku City AssetのOcculusion Cullingをしたが重すぎてRAMメモリエラーになったので別のAssetに変更。
4. Occulusion Cullingをしたが、FPSに変化なし。
5.UnityのTarget.FrameRateを75にしたが、変化なし。
Profilerで解析
6. Unity ProfilerとUnity Frame Debuggerで解析を行ったところ、drawcall数が1000以上でshadow renderに最も時間とdrawcallが使われていることが判明(800 drawcallくらい)

7. Lightingのauto設定をすべて解除しすべてマニュアルでlightmapをビルドしたところ、drawcallが500-600減少。

bakeしたunityちゃんとpocket queryちゃん
8. 次の最大のオーバーヘッドはキャラクターのskin mesh rendering. (drawcall が400) mesh bakerを使いすべてのオブジェクト群のskin mesh renderingのdrawcallを10以下に。
快適FPS.

9. CPUは余裕の75FPS越え。GPUも50FPSくらい出るように。現在最大のオーバーヘッドがopaque.forward rendering(10ms)でOculus酔いの問題はOculus DK2の画面のブレだけに。これはOculus Tracking Cameraをつけるとブレが解消できる。 syncの時間はprofilerを閉じるとなくなるので実際は問題ない。
なぜかDraw Callが900.

10.Japanese Otaku City Assetに変更しJapanese Otaku City bake後Occulusion Cullingに成功。すべてのオブジェクトをbakeしたがなぜかDraw Callが900もある。原因はJapanese Otaku Cityのポリゴン数が多くDynamic Batchingをしてしまったため。これを解決するにはCuda Coreのより多いGPUかpolygon数の減少が必要。polygon数を減少させるには外部の3Dモデリングソフトを使用する必要がある。コンピュータグラフィクスを勉強中。
unity in android

AndroidのUnityプロジェクトにも現在挑戦中です!