hisaitamiのブログ

とあるプログラマーの日常

Keiichi Matsudaさんの『Hyper Reality』をHoloLensで実現したい1年でした

Oculus Rift Advent Calendar 2017の18日目の記事です。

前回は@yutoVRさんのソードスキルを作っている話 - Qiitaです。SAOではないのですが、崩壊3rdに出てくる芽衣先輩のパワフルで切れ味鋭い刀さばきもすげぇなと思う今日この頃です。

はじめに

さて、今年はMircosoftのHoloLensや、AppleのARKit、GoogleのARCoreなど、MR/ARが面白くなりそうという1年でした。

VR/AR/MR/XRといった用語の定義に、バイクの型番のようだとか将来的に区別はなくなるとか多少の混乱を経て、HoloLensのようなデバイスがどのように使われていくかを模索しているうちに、Keiichi Matsudaさんの『Hyper Reality』というショートフィルムを見て感銘を受けたので、それについて書きます。

まずはこちらの動画、

キッチンのシーン

vimeo.com

親の敵のように壁を埋め尽くすデジタル広告に圧倒されます。しかし不思議とカッコよく見えるのは有名どころの洗練されたロゴだからでしょうか。これがターゲティング広告で直前にECサイトで検索した商品で溢れるとしたらキツいかもしれません。

キッチンで湯沸かしポットや冷蔵庫とリンクするのはとても便利そうです。自分は家電のUIが苦手で操作を覚えられないのですが、ARならデバイスの物理的な形状に縛られずに直感的なUIを実装する自由がありそうです。

もう一つの動画はこちら、

街中のシーン

vimeo.com

バスの中で、お互いに異なる言語でリアルタイムにチャットしてます。最近はクラウド型の翻訳エンジンが手軽に利用できるので、リアルタイム性や精度はともかくいけるかなと思って実装に挑戦して挫折しました。

街の中やスーパーの店内でも目眩するぐらいCGが氾濫しています。広告というかデザインの一部になっており、システムを再起動して広告が消えてしまうと殺風景な空間であることが露わになります。

その他にもいろいろな描写がありますがこの辺で。物語としてはシュールな感じで終わりますが、また見返して改めて面白い動画だなと思いました。

おわりに

さて、次回は@tarukosuさんの「Tango を HoloLens 用ガンコントローラとして使ってみる」です。おやTangoって今日のニュースでうわなにをするやめ

SciFiインターフェイスを作るのに便利なアセット

https://www.assetstore.unity3d.com/#!/content/69794?aid=ASV-F4ZE-PJ4H-ZN6X-7H6G-6KS3

はじめに

この記事は「Unity アセット真夏のアドベントカレンダー 2017」22日目の記事です。

昨日の記事は、ユノミさんの「Unity アセット真夏のアドベントカレンダー 2017 – コドモのころの夢」でした。

今回はSciFiインターフェイスのデザインテンプレートとして使えるアセットの「Customizable SciFi Holo Interface」を紹介します。

まずはサンプルのシーンを動かす

パッケージをインポートしてサンプルシーンを動かそうとするとエラーになりました。

Projectビューから「Standard Assets」をフォルダごと削除した後、改めて「Import Package > Effects」でStandard Assetsを追加するとエラーは解消しました。

f:id:hisaitami:20170821121335p:plain

どんなデザインが用意されているか調べる

CSFHI_Showroomシーンを実行すると次のような画面が表示されます。

最初に表示されるのは「Clean Welcome」という名前のウェルカム画面です。

f:id:hisaitami:20170821123218p:plain

Hierarchyビューで「HoloInterfaces」の下を展開すると、デザインは全部で18種類が用意されていることが分かります。

f:id:hisaitami:20170821123934p:plain

右下にある左右の矢印ボタンで中央に表示されているインターフェイスデザインを切り替えることができます。いくつかピックアップすると、、、

青白いネオンカラーが雰囲気を出してます

f:id:hisaitami:20170821124143p:plain

次に、意味は分からないけど重要そうなデータを可視化したイメージ

f:id:hisaitami:20170821124325p:plain

グラフもしくはインジケータ

f:id:hisaitami:20170821124526p:plain

Input Filedを含むデザインは次のような感じです。

f:id:hisaitami:20170821124258p:plain

「危険」とか「警告」とか表示させたいダイアログ

f:id:hisaitami:20170821125015p:plain

サンプルで使われているフレームやテキストボックスなどはプレハブとして部品化されているので、組み合わせて独自のインターフェイスを作ることができます。

ここでは紹介できませんでしたが、アニメーションや効果音なども雰囲気があっていい感じでした。


次回(8/23)の「Unity アセット真夏のアドベントカレンダー 2017」は、n.ryotaさんの「Unicessingのある夏休み」です。

自分もProcessingやジェネレーティブアートに興味があって、Unicessingもゲットしてあるので楽しみです。

HoloLensアプリ開発(25日目)BlenderでPMXとVMDを読み込んでFBXに出力する

UnityとかUWPとか、HoloToolkitとかMRDesignLabとか、とにかく覚えることが沢山あるのですが、今日はBlenderにPMXとVMDを取り込んでFBXに出力する方法を見つけたので試してみました。

www.youtube.com

  • model: @aichan_nel
  • motion : @Somubu_Cho

やり方

次の記事を参考にさせていただきました。

以下、ハマりどころをピックアップ

PMXを読み込んだ直後の状態

灰色のモデルがポツンと表示された状態になる

f:id:hisaitami:20170718222238p:plain

  • テンキーの「1」を押してフロントビューに切り替える
  • テンキーの「5」を押して平行投影に切り替える
  • マウスホイールでモデルを拡大する
  • 「CTR+8」と「CTR+2」でモデルを画面中央に表示されるように調節する
  • MMD Toolsパネル > View > Shadelessボタンをクリックしてテクスチャーをレンダリングさせる

f:id:hisaitami:20170718224255p:plain

VMDを読み込む

f:id:hisaitami:20170718230712p:plain

  • 足の間にある三角錐みたいなオブジェクト(アーマチュア)を右クリックして選択状態にする
  • MMD Toolsパネル > Import > Motionボタンを押してVMDファイルをインポートする
  • もう一度アーマチュアを選択状態にする
  • キーボードで「M」を押して移動先のレイヤーをマウスで選択してアーマチュアを別レイヤーに移動する

f:id:hisaitami:20170718231215p:plain

これで、画面下部のPlay Animationボタンを押せばモーションが再生されるようになる。

FBXにエクスポートする

  • 「Shift+CTRL+↓」を押してモーションを先頭に戻しておく
  • File > Export > FBX

まとめ

  • Blendermmd_toolsアドオンを追加することでPMXとVMDを扱うことが可能になる
  • Blenderの操作はキーボード主体なのでやりながら覚える
  • VMDをインポートする前にアーマチュアを選択しておく必要がある
  • アーマチュアは別レイヤーに移動させることで非表示にできる
  • FBXにエクスポートする前に、モーションを先頭に戻しておくこと

HoloLensアプリ開発(24日目)SCI-FIなチャットを作る

HoloLensで動かすには課題が残ったままだけど、音声を文字列に変換する方法が分かってきたので、音声入力を自動翻訳してくれるチャットアプリを作ることにした。

進捗状況はこちらです。

www.youtube.com

アセットの用意

最初はフルスクラッチでやろうとしたけど、早々に行き詰ったのでアセットストアの力を頼ることにした。購入したのは次のアセット。

「UNET Multi-Channel Chat System」はUnity5のUNET APIを使ったマルチチャンネルのチャットシステムを実現するためのアセット。画面がシンプルで手を加えやすそうだし、値段も$1ドルだったので迷わず購入した。

「Customizable SciFi Holo Interface」はHoloLensにデプロイして実行すると例外が発生して落ちる。ただし、Holographic Remoting Playerを使えばHoloLensで動かすことも可能だった。デモシーンを動かすだけでも面白い。

画面のデザインは「Customizable SciFi Holo Interface」で解決だと思ったけど、「そのままだとつまらない」とか余計なことを考え始めてしまい時間を使ってしまった。最終的はUIは別の問題として触れないことに決めて、とにかくワチャワチャ賑やかにすればよしとした。

また、CanvasなどUnityの基本的なUIコンポーネントについて分かってなかったので、「UNET Multi-Channel Chat System」のUIとマージするのに苦労した。

なんとか2つのアセットを組み合わせることができたので、いよいよこれに音声入力と自動翻訳を組み合わせて行きたいと思いまーす。

まとめ

プロトタイピングなのでフルスクラッチのこだわりは捨てアセットストアを活用する方が時間を短縮できる。

ただし、購入したアセットがHoloLensで動くかは買って試さないと分からないし、アセットをカスタマイズする方法が分かるまでには結構時間が掛かった。

また、VR環境でのチャット機能を実装する方法については『UnityによるVRアプリケーション開発』に記載されていて参考になった。

HoloLensアプリ開発(23日目)Speech-to-Textアセットを試した

前回までに調べたこと

  • HoloToolkit-TestのTextSpeechManagerを使うとTTS(Text To Speech)とキーワードベースのSTT(Speech To Text)が実現できる

  • Intel RealSense SDK for WindowsでSTTが実現できるがHoloLens(UWP)にビルドできなかった。

  • クラウドベースのWatson Speech to Textがよさそう。連続してマイク入力を受け付ける方法が知りたい。

ということで、次の記事を参考にSpeech-to-Textというアセットを試してみた。

magicbullet.hatenablog.jp

やってみたこと

Speech-to-Textアセットをプロジェクトに追加するとC#スクリプトエラーが発生する。参考記事に書かれているようにWatson Developer Cloud Unity SDKをインストールする必要がある。今回は最新版の0.13.0をインストールした。最新のSDKではSpeechResultList→SpeechRecognitionEventを使うように仕様が変更されてるので次の記事を参考に修正する。

developer.ibm.com

Speech-to-Textは複数の音声認識エンジンに対応している。UnityEngine.Windows.Speech、Google Cloud Speech API、Watson、Wit.aiの4つが使える。アカウントを作るのが面倒くさいので今回はWindows.SpeechとWatsonだけを試すことにした。参考記事ではGoogleやWit.aiのサービスをアクティベートする方法が詳しく解説してあるので時間があれば後で試してみたい。

Speech-toTextアセットに含まれるspeechTextComparison.unityというシーンを開くと、複数のエンジンで同時に音声認識を試すことができる。使わないエンジンのモジュールは Hierarchy > Canvas > SpeechToTextServiceWidget の下から削除した後、SpeechToTextComparisonWidgetを選択し Inspector > Speech To Text Comparison Widget (Script) > Speech To Text Service Widget から参照を削除する。

マイクに向かって「What time is it?」と発音したところこんな感じになって笑ってしまった。

f:id:hisaitami:20170705085340p:plain

Game画面の右側に認識結果が表示されている。上からWindows.Speech、Watson(Streaming)、Watson(Non Streaming)となっている。Windows.Speechは入力言語が日本語になっているようで日本語で話しかけるといい感じに認識してくれた。

まとめ

Speech-to-Textのサンプルシーンを使って、連続してマイクから入力された音声をテキストに変換できることが確かめられた。

しかし残念ながらHoloLens(UWP)としてビルドすることができなかった。WatsonのUnity SDKに頼らず自力でなんとかする必要がありそう。

HoloLensアプリ開発(22日目)WatsonのText to Speechサービスを試す

音声をテキストに変換する方法の続き、

IBMのWatsonをUnityから使う方法を見つけたので試してみました。

noshipu.hateblo.jp

この記事に従って、IBM Bluemixにアカウントを作り、GitHubからUnity SDKをダウンロードします。SDKのバージョンは0.13.0に上がっていたのでそちらを使いました。「Speech to Textのコードを書く」を参考にC#スクリプトをコピペして動かそうとすると「SpeechResultListが見つからない」というエラーになります。

次の記事を参考にコードを修正しました。最新のSDKではSpeechResultList→SpeechRecognitionEventを使うように仕様が変更されたようです。

developer.ibm.com

これで、マイクで英語を話すとコンソールにテキストが出力されることを確認できました。

ただ日本語音声をテキストに変換する方法が分かってません。試しに「こんにちは」と入力すると「on each of our」と変換されました。

また、一回だけでなく連続してマイクから音声を拾ってテキストに変換したいところです。

そこで、Unity公式のSpeech-toTextアセットについて調べてみることに。。。

HoloLensアプリ開発(21日目)音声を文字列にしたいのですが...

昨日はHoloToolkit-TestのTextSpeechManagerに手を加えることで「What time is it?」というフレーズに反応して時刻を音声で返す方法が分かったけど、予めキーワードとして登録された言葉以外も認識させるにはどうすればいいのか調べているところ。

一旦、HoloLensにこだわらずWindowsとUnityで音声を文字列に変換する方法を調べることにした。以前にも試したことがあるけど次の記事がヒットしたのでおさらいしてみた。

qiita.com

Intel RealSense SDK for Windowsの最新バージョンはこの記事に書かれているものと同じだったので問題なく動かすことができた。マイクに向かって本を読み上げてみたところ思ったより正確に日本語の文字列に変換してくれることが確かめられた。

HoloLensで動くかなと、ちょっと期待してビルドしてみたけど「私がなんで怒っているか分かる?」と言われてしまい、やれやれ、どうやら別の方法を探さないといけないようだ。