webに載せている内容はレーザーを使った案件が多く、一見プログラミングやインタラクティブコンテンツの制作はやっていないんじゃないか・・・?と言われることが増えていますが、実際はバリバリ作っていますよ!
ただ、案件の性質上なかなか公開しにくいものが多いのですが、、、。
今回の案件も完全に非公開の場所の体験型コンテンツなので具体的なことを書くことができなくてもどかしい・・・!が技術的にチャレンジした内容があったので書いておきます。
制作内容 – 多人数でのVR体験
音と映像の多人数VRコンテンツ。
視覚全体に映像を投影し、投影面をタッチすると臨場感のある音がなります。
このコンテンツの実装を担当しました。
仕組みとしてはこういう内容です。
音の制御方法 – Maxを採用
タッチ操作に合わせて、チャンネルと再生する音声ファイルを指定して、音を流します。
最大で192chあり、流石に192ch全てをフルで使い切ることはないですが今まで扱ったのは最大でも8ch程度だったのでイメージできないことばかりだったので、実現方法を検証しました。
インタラクティブ機能はUnityで作っているのでUnity内で完結できるように、nAudio (https://github.com/naudio/NAudio)などのライブラリを使うことも検討していたのですが、多チャンネルの実装が難しそうなのと同時に音を8つくらい再生させると途切れ途切れになることが多かったので、別の実現方法を探すことにしました。
そこでMax(https://cycling74.com/)を使うことにしました。
Maxは多チャンネルの耐久テストをするのも簡単だし、実際192chとは行かなくても同時に150ch程度であれば途切れることがなく再生もできたので採用しました。
Maxの経験があまり無くても簡単にテストができることは安心できて良いですね。
Maxはチャンネルも数値を変更するだけで良いし、ファイルの切り替えも比較的簡単でした。
パッチをつなぐプログラミングが慣れないので、しばらくは苦労しましたが、C++で記述するプラグインのような、エクスターナルオブジェクトやjavascriptと組み合わせることでMaxのルールを知らないという経験不足による問題を回避することができました。
注:nAudioは時間をかけてさらに調査すると実現できたのかもしれないのですが、納期が迫っていたので断念することにしましたが、オーディオインターフェースなど標準のオーディオ出力以外に音を出力する場合、C#で音を制御する上ではとても有用なライブラリです。
おまけ – タッチ検知について
多人数で体験するコンテンツなので、タッチ機能はレーザーセンサーを採用しています。
これは以前にも行ったことがあり、あまり苦労しませんでした。
タップ、ダブルタップ、ドラッグなど細かいインタラクションよりは、「触った」程度の大まかなインタラクションにする方が作りやすいという印象です。
大きな壁にプロジェクションされた映像に対するインタラクション(タッチ)を検知する必要があったので等身大でデバッグできるように作りました。
タッチについては手の置き方によっては指を個別に認識することがあったので、
誤操作を防ぐためにある程度の範囲の座標はグルーピングして処理しました。
最後に
なかなか内容については書くことができないのですが、今回私にとっては初めてMaxを使いました。
音にエフェクトをつけたり、という派手な使い方ではないですが、システム自体とても安定していてコンテンツ自体も好評のようです。
これからもっとMaxを使った仕事もしたいなあと思っています。
Maxについては不慣れで苦労したことがあったので、制作時のメモをブログにでも書いていければと思います。
※ちょっと紛らわしいですが、MaxはMax/MSPです。3DソフトのMaxではありません。3Dと連携することも多いので紛らわしいですね・・・