同じネットワークにあるUnityアプリのタイムラインをマルチキャストで同期する

マルチキャストを使ってみたら、IPアドレスの設定必要なく、シンプルで便利でした。

同じネットワーク内で起動しているUnityアプリのタイムラインの時間をUDPで同期するサンプル。 一応ブロードキャストもサポートしてます。

gif

github.com


マルチキャストについてはこの記事が参考になりました。 www.infraexpert.com


複数台の端末同期は皆よくやる要件で

  • OSC
  • WebSocket
  • MTC
  • 音に信号埋め込んで同期 → これ*1

と何度もやっている気がする。 8年前の初めてoFでc++書きはじめたときから同じようなことやってますね…

マルチキャストはシンプルなので、ささっと使いたい時に便利かもかも。
(もっと厳しい要件のときには、ネットワークの遅延測ってとかやろうとおもいます)

アルプス電気 ハプティック®の展示コンテンツ

去年の仕事ですがやってた仕事をブログにもちょっとずつまとめとこうと。

ALPSSHOW 2016, CEATEC JAPAN 2016で
アルプス電気 様のハプティック®の展示をお手伝いしました。

今回、開発中のデバイスと連携するUnityアプリケーションを担当しました。

展示したものは3つ

  • ハプティック®トリガー: 小さな丸い玉が、プチトマト、かぼす、グミ、心臓の4種類の触感に変わる
  • ハプティック®トリガー プラス東京大学舘暲先生との温冷感共同研究。コップに冷たい水、熱いお茶を注ぐ。温度が変わる。コップを振ると水の入っている触感がする
  • ハプティック®パッドトラックパッドが、タイル、ジーンズ、モルタルの触感にかわる

ほんとはも一個あったのですが、CEATECでは展示エリアの関係で3つ。
デザインはブルーパドル佐藤ねじさんにお願いしました。

開発中のデバイスについてはこんな技術です。 www.alps.com

ネット上の評判については概ね好評。リアルさはまだまだだけど、これからに期待といった感想も多かったです。テレビにも何社もとりあげられ、安倍首相も体験したそうです。 news.mynavi.jp www.seikatsukaden.com

Haptic-Design

制作しての気づいたこと。
余談ですが、ペルチェ素子で温度を変えたときに、実際は5℃程度の変化にもかかわらず、熱そうなお湯が注がれる映像と音を聞くと、コップを落としてしまうくらい熱いと人は騙されてしまっていました。

よく考えれば当たり前ですが、触覚も、視覚と聴覚にかなり影響されていると気づきました。正確に表現するよりも、VR空間内では触感を強調した嘘をつくほうが良さそう。

今回感じたのはこのような触感の試行錯誤は、サウンドエンジニアの仕事ととても似ているということ。 実際にはありえないけど、ちょっと大げさに作る効果音。嘘なんだけど、ある方がリアリティを感じてしまう。
…なんだかそっくりな気がします。

もう研究分野では全盛だけど、コンテンツとして触感が流行ってきた時に、Haptic-Designなる分野が立ち上がってきたら面白いなあと。
そしてこれを教えるのは音響系の学科や、映画学科がこんな授業をやってたりするんじゃないかなーと想像してしまいました。

Unity Editorでグラフを表示するAttribute

UnityとセンサーをUARTでつなげる。センサーの値で動くコンテンツを作るような仕事が多く。 時系列で変化する値を観測するときに、グラフで確認できると捗ります。

今までは別のデバッグ用シーンを作って確認したり、Debug.Logで頑張ったりしていたのですが、
シンプルにEditorのときだけ確認できると便利だなーと思ったので、Attributeでつくってみました。

https://camo.githubusercontent.com/b1b984f1782331e5f1966ef7ba1ba97874f5d7bd/68747470733a2f2f692e6779617a6f2e636f6d2f32623638373439376230386334363434333932333037333039333861313134332e676966

使い方は超絶シンプルで、[Graph(frame_count)]っていうアトリビュートをつけるだけ。

 [Graph(100)]
public int fps;

[Graph(100)]
public float positionX;

[Graph(100)]
public Vector2 positionXY;

[Graph(50)]
public Vector3 position;

[Graph(50)]
public Quaternion rotation;

[Graph(20)]
public Color color;

エディタないだけで、簡単にグラフを表示できるので、センサーの値のデバッグが捗りそう。

ソースコードはこちら

Show graph as unity custom attribute · GitHub

参考

Unity の Editor 拡張でインスペクタにグラフを描画する方法を色々調べてみた - 凹みTips

360°動画にイメージマップ的に画像を貼り付ける

360°動画の中の扉を自由に出入りしたいという要件があって、どうやって実現しようかと調べていたら、
Unityエディタ上で直接ポリゴンをつくれて、4点を指定すると、歪みを計算して、ポリゴンを配置してくれる素敵ライブラリを見つけました。

使い方はテラシュールブログさんが詳しい。

素敵なライブラリなんだけど、実際に使ってみると、ランタイム上でしか生成できない。あんまり動的に作るケースは少なく。メッシュとして保存したかったので、ちょっと改良してみました。

github.com

追加機能

  • エディタ上でメッシュに保存できる。
  • Undo機能

参考

【Unity】Unity-VR360-OverlayGridで、全方位写真の一部にポスターを貼ったり動画を仕込んだり - テラシュールブログ

iOS/Androidで4k動画を再生できるか調べる + Unityプラグイン

360°動画を再生するUnityスマホアプリ増えてる。
スマホで360°動画を再生するときにやはり気になるのは、解像度。画面の解像度はどんどん上がっているのに、FullHDだとかなり汚く見えてしまう。

iOSではiPhone6s以上から。Androidでも2016年に発売されているものは4k再生をサポートしているのが多い。
そこで、サポートしているものは4k, それ以外はFullHDを再生するために、そもそも指定のフォーマットをサポートしているか調べるネイティブプラグインを作ってみました。

Unity5.6のVideoPlayerはいけてるけど、まだAndroidはサポートしてないので、EasyMovieTextureで確認。

GitHub - asus4/unity-video-supported-plugin: Check iOS/Android supported video format from unity

使い方は簡単。

using AppKit;

VideoSupported.IsSupported(1920, 1080, 29.97f);
VideoSupported.IsSupported(3840, 1920, 29.97f);

手元の環境ではうまく言ってるんだけど、Android端末をそんなに持ってないので、
試して問題合ったらプルリクください。