カテゴリー別アーカイブ: Unity

初夏のひとりじっけんしつ 〜Release & Birthday ライブ〜 @AZUMAHITOMI @ohashitakashi @yk1021 @CobaltBombAO

logo_on

AZUMA HITOMIちゃんのアルバム発売記念ライブにVJで参加させて頂きます。今回は、なかうちゆきえ氏と大橋史氏と3プラトン方式で、我々は二人の素材をいじります。是非、お越しください!

日時:2014年6月27日(金)
会場:TSUTAYA O-nest
開場 18:00 / 開演 19:00
出演:AZUMA HITOMI(ワンマン)
ゲスト:立花ハジメ

料金:前売 3,000円 / 当日 3,500円(ドリンク別)
チケット発売日:4月19日(土)?
チケット:
・ローソンチケット(Lコード:77004)
・e+
・TSUTAYA O-nest店頭

問い合わせ:TSUTAYA O-nest 03-3462-4420
URL : http://azumahitomi.com/live.php#content


MIDI to OSC Deviceの試作とUnityを用いたVJについて 6 (まとめ)

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて書きました。やっつけで作るとまとめが大変だとわかりました。書いてるうちに渋谷2.5Dでも少しVJしました。

まとめ

ハードからPCまで、雑ですが構造だけ書いた感じです。

今後の課題

今のところ、VJソフトが付け焼き刃ですので、もっと色んなモデルやシェーダを作り、Unityを活かしたいと思っています。(Linuxの開発環境マジでおねがいします!)
また、操作性が非常に悪いので、そのへんも課題です。どうせなら操作もOSCかNIDでやりたいな。タブレットのマルチタッチをOSCで送るとかも便利そう。
また、デバイス側ですが、かなり処理能力的に余裕があると思っていて、様々な発展が可能と目論んでいます。BeagleBoneBlackはRaspberry PiやArduinoより遙かに重い処理が回せるはずです。
例えばKinect,XtionなどのNIDでモーションキャプチャしてOSCに乗せて飛ばすとか。実はUnityからOpenNIを呼んだVJはすでにやったことがあるのですが、OpenNIがARM対応したことですし、今後無線化してみたいと思います。

Demo

今回使用した1シーンをUnity Web Player向けにビルドしてみました。
キーボードの数字キーでなんか飛び出します。MIDIのNoteOnの代わりと思ってください。GUI領域のスライダで回転スピードが変わります。って全然MIDIのデモになりませんが、ご了承ください。。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 5

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて、何回かに分けてまとめていきます。

3DゲームエンジンUnityでのOSC受信処理とVJへの応用

前回まででデバイスとネットワーク関係が整ったので、PC側の実装に入ります。

3Dゲーム開発環境Unityについて

今回のVJでは、本来は3Dゲーム開発環境であるUnityを使いました。Linux界隈の人はUbuntuのGUIと紛らわしいですね。Unityは開発環境が使いやすく、物理エンジンなども統合されていて、インタラクティブなVJ用途にも使えると思い使ってみています。実際、かなり短期間で色んな3Dモデルを取り込んで自由に動かすことができました。
素晴らしい開発環境なのですが、個人的には以下の2点で不満もあります。
まず、Linuxで動く開発環境が無い。正直、このためだけにWindowsを使っています。オフィシャルページにも要望が上がっていて、投票もしていますので、ぜひみなさんも投票してみてください。
もう一つは、バージョン管理システムへの対応がイマイチな点。これに関しては徐々に改善しているらしいので、僕の勉強不足なのかも。

Unityでマルチディスプレイを使用したVJについて

というわけで、物理エンジンをゴリゴリ使ってVJするぜ!と思ったんですが早速問題がひとつ。Unityでは複数のWindowを扱うプログラムを作成できないっぽく、一般的なVJソフトのような操作・Preview画面と出力画面の2画面構成がとれません。たぶん。GUIを一切廃してフルスクリーン1画面にするという手もありますが、さすがに不便です。
そこで今回は、PCをデュアルディスプレイに設定し、VJ出力として使うディスプレイを覆い隠すような大きいWindowを作ることにしました。
unityvjwindow
Window左側にGUI専用画面を用意することで、1つのWindowで出力と操作をする苦肉の策です。
幸い、Unityではカメラオブジェクトの設定により、簡単に上記のような画面構成をとることができます。カメラコンポーネントのNormalized View Port RectのXでWindow内のカメラ表示領域の開始位置を、Widthで幅を設定できます。
unityvjcamera
空いた左側の領域にはGUIを並べたり、情報を表示するわけですが、このままだとシーン切り替えがあった時などに背景がクリアされずに表示が乱れてしまいます。そこで、カメラをもう一つ配置し、GUI領域の背景を描写させました。ProjectionはOrthographicにして、Sizeは0.01とか、最小限に設定します。背景色はVJ画面と区別できる単色にしておきます。さらに、Audio Listenerなど、不要なコンポーネントを削除しておきましょう。そうしないと警告が出ちゃいます。
こうすることで、一般的なVJソフトのように操作画面とVJ出力画面を作れます。複数のシーンで使用することを考え、Prefabを作っておくといいと思います。でもWindowサイズを調整したり、操作中にWindowを最小化しちゃうリスクとかがあるので、もっと良いやり方があれば知りたいところです。

UnityでのOSC受信

作成したデバイスからはPCのIP宛に所定のポートでOSCが流れており、Unityで受信するわけですが、UDPの受信動作をどう実装するかも迷ったポイントの一つでした。
僕はC#のUDP送受信に関しては実装した経験はあるのですが、Unityの流儀的にこういったグローバルな動作をどこでするのが綺麗なのかイマイチわかっていません。動作としてはInputクラスなどが似ているかな、と思うのですが、無理やりStaticに実装するのも変な気がします。
結局今回は、子のGameObjectにBroadcastMessageを投げるスクリプトを作ることにしました。このスクリプトをルートになるようなGameObjectに持たせて、OSC受信を担当させます。OSCによって変化させたいオブジェクトはすべてこの中に配置しました。(ただ、このへんは将来、先のInputクラスを真似た実装にできないかと思案中です。)
OSC受信部分は、みなさん参考にしているらしいこちらのサンプルを参考にしています。
OSC受信を担当するGameObjectには、OSCのParserスクリプトも配置します。OSC受信スクリプトはとりあえずGameObject内のParserにSendMessageし、Parserが内容を見て、必要であればBroadcastします。今回はMIDIデータを使いたいので、メッセージ種類に応じて扱いやすい構造体にしてBroadcastするParserを作りました。例えば、NoteOnがきた時だけ整数配列を送るとか。
このようなルートになるGameObjectを作ることで、中のオブジェクト(のスクリプト)は決まった名前の関数を作るだけで、扱いやすい構造のMIDIメッセージ構造体を受け取れます。今回のVJでNoteOnに応じて物体を動かすスクリプトは、例えばこんな感じ。

void OscMidiNoteReceive(NoteOnMsg msg)
{
  var modnum = (msg.num/2) % Mod;
  if(modnum == Num)
  {
    StartMove();
  }
}

ちょっと詳細な構造をまとめる時間がないので雰囲気だけで申し訳ないですが、ノート番号を定数で割った余りが自分に指定されている番号と一致すれば、動作開始しろってことです。OSC受信オブジェクトによって、中の動作はとても簡素化できます。
ということで、簡単ですがUnity製VJプログラムの構造を書いてみました。そのうちコードサンプルなどをもっと入れてまとめられるといいな、と思います。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 2

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて、何回かに分けてまとめていきます。

AVR100円マイコンと小型LinuxボードによるMIDI→OSC変換 (前半)

AZUMAさんのライブといえば、両手両足で楽器を操る演奏が見どころです。りんご飴音楽祭では口まで使ってましたね。知らない人はこれ見てください。
この演奏情報(MIDI)をVJに利用したいなーと思ったのですが、普通ステージとVJブースは離れてるし、MIDIを無線化するデバイスは思ったより世の中に無いらしい。という訳で、他メンバーが使ってるMax等で扱いやすく、無線化が容易なOSCでVJに届けよう!と思い立ち、デバイスを自作してみました。

システム概要

とりあえず、MIDI信号の仕様を見てみると、中途半端なBaud rateのUARTだということがわかってきたので、適当なマイコンで受信するのは簡単そうだと思い、メインとなるボードをどうするか考えました。候補としては、下記のようなものが挙げられます。

流行のArduino系は独特の生態系で僕には逆に取っ付きづらいのと、非力な割に周辺機器を考えると意外と高価なので今回も手を出しませんでした。そうなるとメジャーどころはRPiですが、RPiとBBB(注:BeagleBoneBlackね。DJじゃないよ!)だと後者の方がだいぶ高スペックで、IOピンが非常に沢山使えます。情報は少ないですが。しかも、MIDIをすぐに受信できそうなUARTがデバッグシリアルとは別ピンで3本も出ています。
というわけで、結論としてはマイコンでMIDI→UART変換してBBBにつっこみ、BBBでOSC変換してEthernetに流すことに決めました。

MIDI信号のBaudRate変換

まずはMIDI側から作っていくことにしました。BBBのLinuxの設定を書き換えて再ビルドすれば直接MIDI信号を受信できそうですが、後々アップデートするときに面倒そうだし、BBBは他のことにも使いたいので、外部基板で変換を行います。
以前遊んだことのあるAVRマイコンで作ろうと思ったのですが、調べてみるとMIDI→USBインターフェースを作ってる方がいたり、MIDIUART変換を作ってる方がいました。今回はUART3本を並列に受信できるBBBを使おうと考えていたので、BBBの貴重なUSBの帯域を使わなくても、上記のMIDI→UART変換プログラムを焼けばそのまま使えそうです。回路図も公開してくださっているので、MIDI受信のフォトカプラ周りの作り方も参考にさせていただきました。というか、ほとんどそのままです。

midicast_board

AVRマイコンとしては、上記の方も使っているTiny2313は秋月電子で100円で売っているので、使わない手はないでしょう。千石で探しまわって買ったMIDIのDIN5ピンコネクタのほうがよっぽど高くつきました。しかも一応MIDI THRUもつけたので、6個必要でした。フォトカプラも以前秋月で買ったPC900Vを使いました。クリスタルは1個だけつけて、他2つのAVRは外部クロックにしています。もちろん謎の8分周もなしです。この辺のヒューズビットの設定は間違えるとヤバいので気をつけましょう。
回路もプログラムもそのままですし、以前遊んでいたAVRライタもあったので、3チャンネルMIDI→UART変換基板は難なくできました。ハンダ付けは得意じゃないので、そのへんの難はありましたが。
ちなみに電源はBBBから供給していますが、おそらくこの電源供給によってUSBの動作が不安定なので、後々別電源に変えようと考えてます。試行錯誤の結果配線もぐちゃぐちゃなので、もっと綺麗に作り直したい!

本当はBBBの中身も書く予定でしたが、長くなっちゃったので次回にします。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 1

2013.11.04に行われた、りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJを担当させていただきましたが、今回新たに導入したデバイスなどの技術的なことについて、何回かに分けてまとめていきます。
項目としては、以下の様な内容にしようと思っています。

  • AVR100円マイコンと小型LinuxボードによるMIDI→OSC変換
    • AVRの100円マイコンを用いたMIDI to UART変換基板と、ARMコアを搭載したLinuxボードであるBeagleBone Blackを組み合わせて、MIDI情報をOSCに変換してEthernetで送信できるようにしました。
  • MIDI→OSC変換基板の筐体製作と小型WiFiルータと組み合わせた遠隔操作
    • MIDIの演奏者からOSC利用者(VJ)までの細かいインフラ等について、意外と難点が多かった!
  • 3DゲームエンジンUnityでのOSC受信処理とVJへの応用
    • UnityでのOSC受信と、Unityを無理やりVJに利用する際にとった苦肉の策についてまとめます。誰かがもっと良いやり方を教えてくれることを願いつつ。。