はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Sony ELF-SR1のSDKを眺めてみよう

前回→空間再現ディスプレイSONY ELF-SR1を触ってみた - はつねの日記
ELFちゃんこと、ELF-SR1のSDKをUnityにいれて、[Edit]-[Project Setting]-[Spatial Reallity Display]で「Run Without SR Display」をチェックすると実機がなくてもUnity Editor上で動作を確認できます。
f:id:hatsune_a:20201103111647p:plain
ただし、このチェックをしたままだと実機を接続した環境でEXEを起動しても動作しません。ビルドするときは必ずチェックを外しましょう
それでは、このチェックをONにして実機がなくても分かるSDK附属プレハブツアーを始めてみましょう。

SRDisplayManager

まずは何はなくても必要だとおもわれるSRDisplayMangerの中をみてみましょう。
f:id:hatsune_a:20201103114008p:plain
SRDisplayManagerプレハブの構造は次のようになっています。
SRDisplayManager
┗WatchAnchor
  ┗WatchCamera
 ┗LeftEyeAnchor
 ┗RightEyeAnchor
SRDisplayManagerの重要なプロパティとしては、「SRD View Space Scale」があります。初期値は1ですがサンプルなどでは100にしていますので、100にしておきましょう。

WatchAnchor

WatchAnchorの中にWatchCameraがあります。通常、Unityの世界ではCamera=視点位置となりますので、このプレハブをHierarchyに入れることで、WatchAnchorの座標がELF-SR1が検出した見ている人の視点位置に自動的に合うということです。
WatchAnchor座標の初期位置は、(x,y,x)=(0,0.2,-0.3)となります。通常、1Unity=1mみたいに考えますので、Unity Editor上での表示は正面より20cm上、筺体面より30cm離れたところからみたときと考えて、配置するオブジェクトの大きさなどをきめていくとよいでしょう。
また、Rotationがx=20ですので、20度下をみている感じでしょうか。

この20度というのは重要な数値で、テキストを表示するようなときもEditor上ではRotete=20で値をあわせておくと実機で見ても正面に正対した形でテキストが表示されているように見えます。

WatchCamera

WatchCameraには[Clipping Planes]プロパティがあります。[Near]が0.01、[Far]が1000となっています。
Unity Editor上では白い視野がこのプロパティの影響をうけます。この距離の時に描画されると考えるといいでしょう。
試しにNear=10、Far=15にしたときにはどうなるかを確認したのが次の図となります。
f:id:hatsune_a:20201103115933p:plain
上のNear=10、Far=15では視野が角錐台で表示され、図右下のCameraPreviewで正方体が映し出されていないのがわかります。
下のNear=0.01、Far=1000では四角推のように視野が表示され、図右下のCameraPreviewでも正方体が映し出されています。
f:id:hatsune_a:20201103120132p:plain
この視野距離を調整することで遠くにいると見えず、近づいてみると見えるような演出も可能になります。

WatchCameraをみてみるとちょっと気になることに「Audio Listener」コンポーネントが含まれています。これはUnityの標準コンポーネントで、ようはここから音が聞こえるような感じになります。
docs.unity3d.com
ELF-SR1にはスピーカーはついていないので、PCと接続したワイヤレスイヤフォンを装着しておくとスピーカーがついているので視点位置に合わせた音が再生されるのでしょう(視点位置にあわせてかは未検証)。

LeftEyeAnchor、RightEyeAnchro

この二つは左右それぞれの目の位置だと思うので、IPD(瞳孔間距離)あたりをとれるようになっているのかと思いましたが、WatchAnchor側もふくめてそれらしくプロパティはありませんでした。

SRDisplayBox

まずは、SRDisplayBoxです。これは、ELF-SR1の筐体そのものをとなります。
f:id:hatsune_a:20201103112828p:plain
これを配置することで、設置したオブジェクトが実物のELF-SR1の形にあった感じに表示されるようになります。たとえば、筺体にめり込んだような表示も可能です。
f:id:hatsune_a:20201103121845p:plain

FaceTrackStateMonitor

ファイストラッキングができなくなったときに自動的に警告表示を行うためのプレハブです。前回も記したように次のような条件で簡単にフェイストラッキングができなくなりますのでこの表示は配置しておいた方がいいでしょう。

  • マスクをつけている
  • つばのある帽子をかぶっている(つばを後ろにすればOK)
  • 眉に髪がかかっている
  • 眼帯をしている
AppStateController

アプリを終了するために操作を表示するためのプレハブです。UnityアプリはESCキーで終了できるのですが、Unityアプリの終了の仕方を知らないと戸惑いますので、表示があってもいいと思いますが、通常は、見ている人が終わらせる必要はないので、このプレハブの配置は不要だと思います。
ただし、便利だと思ったのが、このプレハブの[App Exit Key]で終了するためのキーを変更して、表示も例えば「Press Space to exit the app」のように割り当てたキーにしてくれるのは便利だと思います。
これ、Unityアプリの終わらせ方をしらないお偉いさんとかに見せて「これ、どうやって終わらせるんだ!キーは代えられないのか」とか言われて付け足したとかあるんでしょうか。開発側だと気づけない心遣いかもしれないと思いました。

3Dオブジェクトなど

SR1に表示する3DオブジェクトはUnityの3Dオブジェクトになります。
unity-chan.com
f:id:hatsune_a:20201103133529p:plain

Unity Editor上で確認が出来たらビルド(その前に「Run Without SR Display」のチェックを外して)しましょう。
あとは、ELF-SR1の筐体を購入するだけで、嫁をいつでも3Dで目の前に召喚することができるようになります。
pur.store.sony.jp

それでは、ELF-SR1楽しんでくださいね!