UnityからWintab APIを利用する方法

WintabをC#から利用する方法については以下の記事を参考にしました。

上記の記事で提供されているソースコードはほぼ改変の必要ありませんが、一点だけ問題があります。
UnityのC#ではウインドウプロシージャが存在しないため、別の方法でWindowsメッセージを受信する必要があります。

そこで、以下の様にuser32.dllをDLLImportすることで、UnityからWindowsメッセージを受信することが出来ます。
※ただし、32ビット版のUnityエディタでしか動作しません。

※参考にしたURLを紛失してしまったのですが、恐らくここを見て実装したと思われる。
http://forum.unity3d.com/threads/recieve-window_commands-in-unity.213741/

コンポーネントをGameObjectにアタッチして実行すると、以下の様なログが出力されます。
スクリーンショット 2015-09-08 02.40.35

フェードイン/フェードアウトを実装してみる

はじめに

目の前に半透明の板を置く方式で、フェードイン/フェードアウトを実装してみました。
フェード中の判定や、フェード完了コールバックも用意しています。

前提条件

  • Unity 5.0.3p3
  • Oculus Unity Integration 0.6.0.0

使い方

  1. OVRFadeコンポーネントをOVRCameraRigにアタッチ
    スクリーンショット 2015-09-07 21.19.46

    1. Fade Materialには、同梱のAlphaFadeを指定して下さい。
    2. Modeには、Alphaを指定して下さい。
  2. スクリプトからフェードアウト/フェードインのメソッドをコール

ダウンロード

ペンタVRの実装方式について

ペンタVRとは?

VRHMDとペンタブレットを利用して、仮想空間でお絵描きをする仕組みのことです。

発端となったのは、よー清水さんの下記ツイート

一連の流れは、栗坂こなべさんが纏めてくれています。

最新の情報はTwitterのハッシュタグ #ペンタVR で確認できます。

ペンタブレットの基本的な使い方、各部名称についてはこちら

開発環境

  • OS : Windows
  • ゲームエンジン : Unity
  • VRHMD : Oculus Rift
  • ペンタブレット : Intuos

どうやって実現するか?

ペンタブレットの情報を取得する方法

  1. マウスの座標を利用
    Unity標準のInput.mousePositionからマウスの座標として取得することが出来ます。
    筆圧などの付加情報が不要な場合はこちらでも良いではないでしょうか。

  2. Wintab APIを利用 ※こちらを採用しました。
    WACOMさんが提供しているWintab APIを利用することで、各種情報を取得することが出来ます。
    各種情報はWindowsメッセージとして送られてきますが、UnityからWindowsメッセージを取得するには一工夫必要になります。

  3. おまけ:Macの場合
    マウスイベントに筆圧情報が入ってくる様ですが、Unityから利用するにはNative Pluginの実装が必要となりそうです。

ペンタブレットを位置を現実とVRで関連づける方法

多くのOculus Rift向けVRコンテンツでは、仮想空間内のカメラ位置にプレイヤーを一致させますが、
今回は、タブレットの上部にOculus Riftの赤外線カメラを固定することで、現実の赤外線カメラとHMDの相対位置をそのまま仮想空間に持ち込みます。
これにより、現実と仮想空間でタブレットの位置を一致させることが出来ます。
ただし、タブレットの傾きは反映されません。

キャンバスを管理する方法

キャンバスの管理方法は、大まかに2つに分類できます。

  1. 既存のお絵描きアプリでキャンバスを管理
    デスクトップのキャプチャ画像をテクスチャに貼り付ける方式です。
    既存のお絵描きアプリの機能をそのまま仮想空間に持ち込むことが出来ますが、現状では遅延が大きく使い物にならないようです。

    • キャプチャアプリからGPU側のテクスチャ情報を直接更新できれば、遅延が改善するかも知れません。
    • 平面のお絵描きに限定すれば、APIを提供することでお絵描きアプリ側にペンタVR連携機能を組み込むことが出来る可能性があります。
  2. 新規のVRアプリでキャンバスを管理 ※こちらを採用しました。
    ゲームエンジンの機能を利用してテクスチャの更新を行う方式です。
    お絵描きアプリをフルスクラッチで実装するような手間が掛かりますが、VRならではの表現を行いやすいメリットがあります。

具体的な実装方法については次回以降に行いたいと思います。