らくとあいすの備忘録

twitter : lactoice251

VRChatではじめるVR楽器演奏

こんにちは。memexさんの企画されている、VR音楽活動のススメ Advent Calendar 2020 23日目の記事です*1

なぜVR楽器か?

まずはVR楽器についての思想の話をします。

今回のAdvent Calendar企画でも数多く紹介されているように、VRChatでは様々な音楽の発信手段があります。そしてそれらの多くは、現実の楽器の演奏の音やそれに伴う動作を、何らかの方法でVR上に共有するものです。

しかし今回はそうではなく、楽器そのものがVR空間内にあるようなものを考えます。ぱっと見ると難しそうですが、簡単なものでも例えば、横に並んだキューブを叩いていくとそれぞれ違う音がなる、としたらそれは一応楽器と呼ぶことが出来ますよね。

とはいえ、構造はシンプルであるとしてその演奏はあまり容易ではありません。触覚的なフィードバックが薄いために正確なリズムを刻むことは困難で、精度よく同期を取るためにはあまり細かい構造も使えません。ほとんどの環境ではソフト的ハード的な問題で楽器演奏において重要な指の動きを用いることも極めて困難です。そもそもして、現実で得意な楽器がある人からしたらそのスキルをほぼほぼ活かせないVR楽器を触る意味はあるのか?と思われるかもしれません。

では、何故そんなVR楽器に焦点を当てたいかというと、それがVR空間内において、最も直接的に演奏を聴かせかつ見せることが出来る手段の一つであると考えているからです。例えば鍵盤を棒で叩くと音がするVR楽器があったとします。この時、もちろん鍵盤を叩けば音が鳴りますし、鍵盤を叩かなければ音が鳴りません。当たり前のことです。しかし、そこが重要で叩く動作を観測したとしたら必ず音が鳴るし観測していなければ音が鳴ることはないという、納得感があります。因果をくみ取れると言っても良いでしょう。

一方、現実の楽器を演奏する場合でもその演奏動作をキャプチャーして、聴き手と共有することももちろん可能です。 キャプチャーの精度をどこまでも高めていけば、聴き手にとってそれがVR内で演奏されているかそうでないかを区別することは本質的に困難になっていくのかもしれません。しかし少なくとも今現状において、今聴こえている音が、今居る空間に起こっている現象であると強く訴えた表現をしたい時にはVR楽器は良い手段になりうると思っています。

VR楽器を作って演奏する

次に、実際どうやってVR楽器を作って演奏するのかという話をします。そして実際に作って演奏します。

目的の設定

VR楽器の設計の上で大切だと思っていることは、目的を絞ることだと思っています。 現実の楽器は基本的に「色々な曲が演奏できる」、「誰でも演奏しやすい」、「幅の広い表現が出来る」等々、基本的には汎用性のある多いと思います。 少なくともそういう楽器が生き残っています。しかし、VR楽器でそれをやるのはあまりにも大変です。*2

一方VR楽器であれば、「使い捨て」出来ます。現実の楽器で、一曲のためにだけ楽器を作って使い捨てるなんてことはそうそう出来ませんが、VR楽器では思い切り使い捨てが可能です。逆に言えば、極論その演奏会なり、動画作品なりを作る上で必要十分な機能さえ備わっていれば別の曲はまったく演奏出来なくても構わないわけです。

というわけで、まず今回の目的を定めましょう。 目的を定めるときは、その音が演奏される背景に目を向けることが多いです。何のために演奏して、どんな人が聴くのかを想像します。

ひとまず書いてみました。正しいですがちょっと弱いですね。演奏動機に意思が欠如しています。 もうちょっと欲張って目的を立て直してみます。

  • 何のために? → VR楽器の制作・演奏の例を見せる。そして楽しそうと思ってもらう。
  • どんな人が聴く? → 本アドベントカレンダーの読者。きっとmemexのファンの方が多そう。

はい。少し動機を欲張って修正しました。その代わり対象を少し限定しました。 というわけで、今回のVR楽器制作・演奏は、「非常にシンプルな構造でその仕組みの理解がしやすいようにしつつ、さらにその先を見せることで読者 (とりわけmemexのファンの人達) に楽しいと思ってもらう」ことが目的となります。

作戦を立てる

上記の目的を実現するための作戦をたてていきます。 今回は、先に演奏楽曲から決めてしまおうかなと思っています。 というのも、memexのファンの方々が見ていることを想定するのであれば、memexの曲のカバーが最も導入として訴求力が高そうと思ったからです。

memexの曲を今再び聴き返します*3VR楽器で演奏するという視点で聴いたときの第一感は、「難しすぎる、無理」です。 細かな変拍子の多用、劇的なコードチェンジ・転調、めちゃくちゃ格好良いですがこれを演奏するための楽器を設計するのは相当に骨が折れる作業になりそうです。 そもそもして、第一の目的「非常にシンプルな構造でその仕組みの理解がしやすいようにしつつ」との両立は難しいでしょう...。 なにより現在12/25、12/23のアドベントカレンダーを書いています。一刻も早く仕上げなければなりません。

しかしここで、唯一出来そうな曲が発見されます。「Secret Protocol」です。

もちろんこの曲も完璧に演奏しようと思うととても出来るものではありません。 ただ、特筆すべきは「memex」をモールス信号で置き換えることで出来た、1曲を通じて流れるリズムです。 これさえあれば、この曲のアレンジとして認識されうる楽曲に出来るのではないでしょうか。そのぐらい強力なものです。(乗っている情報からして、memexですからね。)

また、元ツイートの構成も良いですよね。今回の趣旨にぴったりなのでここも引用しましょう。 はじめのモールス信号の提示の代わりに、単純なサイン波の音が入ったキューブを叩くところを作って"最もシンプルな"VR楽器を提示します。 そこからモールス信号にうつって曲に入る流れ、ありそうです。

さて、ここまでで目的の「前半」は概ねクリアでしょう。 次にその先ですが、ここはやはり曲として盛り上がりを見せたいところです。 とはいえ、ずっと私がはじめのテーマを演奏したのでは、やっぱり「その先」とはいえないですよね。 第一、同じ音を繰り返し演奏し続ける様をみてやってみたいと思う人はそう居ないはずです。

ということで、この「同じ音を繰り返し演奏し続ける様」というのを逆手に考えてみます。 つまり、はじめにその演奏を示したら、後は別の存在にまかせても良いわけです。 単純にシーケンサーでも良いですが、視覚的にはやっぱり意味のある存在...例えば...

と行きつきました。途中からオルタナティブぴぼさんに演奏してもらうことにしましょう。

後は、自分が空いているのでもう少し自由に演奏出来そうな楽器、例えば鍵盤のようなものを置いてその上で少し遊んでみることにします。 ここは、Secret Protocolに調を合わせた鍵盤を置いておけばある程度何をやっても映えそうなので、作ってから詰めれば良いでしょう。

検証

実現可能な範囲に絞りこんだ「目的」を設定した後、勢いに任せて作戦を立てました。 次は、作戦を自分のスキルセットや工数と照らしあわせて、実装不可能な部分が発生していないかを確認します。 今回一番不安要素が大きかったのは、「動くオルタナティブぴぼアバター」です。 これは単純に私が、3DHumanoidモデルを動かした経験がないからです。なので、本実装に入る前にここだけ現実的かを確認しておくことにしました。

今回は、ありふれた技術ということもあり参考になる情報*4もすぐ集まって、なんとか使えるレベルにはすぐ動いたので良しとしました。 ここで上手くいかない場合は、また一つ段階に戻って目的を満たす別の実装案を探すことになります。 ともあれ、これでひとまず今日は寝れます。

実装

さて、ここまででほとんどVR楽器制作の核となる部分は終了したと言って良いと思います。 後は作るだけです。もし、とにかくどんなものが出来るのか気になるから早くしてくれ!という場合この章は読み飛ばしてもらっても大丈夫です。

音作り

VR楽器を作るためには、当然鳴らすための音を用意する必要があります。 ここで大きく二つの選択肢があります:

  • 使用可能な音源の中で適切なものを探す
  • 自作する

残念ながら前者の方法について私はあまり多くの知見がないのですが、例えばfreesoundを見たりすることはあります。 そして、後者についてですがつい先日Amebient Advent Calendarに音作りの記事を書いたので読んで頂けると、少なくとも"私の"音作り方法についてはある程度書かれているかと思います。 というわけで、今回も楽器に使用する音は自作していくことにします。

まずメインとなる歌声パートの部分ですが、今回は(も?)GLSLSoundを使って作ってみました。 GLSL Soundでの音作りについては過去の記事があるのでここでは深入りしませんが、今回もそうですが前に作った音を手軽に改変して勝手良く使えるのはやっぱり便利ですね...。GLSL Sound音にValhalla reverb (https://valhalladsp.com/shop/reverb/valhalla-vintage-verb/)をほんのりかけてひとまず完成です。

後半私が演奏する鍵盤の音も同様に作っていきます。意識したのは、比較的バックが激しくなっても埋もれないように倍音の多い音にすることです。

VRCSDK2上での音ギミック作り

次は作った音を、実際にVRChatのギミックとして鳴らせるようにしていきます。 ここでは、導入に用いるもっともシンプルな楽器についてのみ作り方を書いていきます。

楽器のモデルとコライダーを配置する

今回は、ただのキューブをモデルとします。 自作のモデルを使いたい場合は、FBXをインポートして配置します。 キューブの場合ははじめからコライダーが入っていますが、FBXをインポートした場合は、音を鳴らす判定を付けたい場所にコライダーを設定しましょう。 この際、下記のようにIsTriggerにチェックを入れておくのが無難です。 現実の楽器はもちろんコライダー抜けなどはしませんが、VR楽器はコライダー抜けするようにしておいた方が演奏上都合が良いことが多いです。 f:id:Raku_Phys:20201225211759p:plain

AudioSourceを配置する

次に音源を鳴らすためのAudioSourceを配置します。 AudioClipに鳴らしたい音源をセットしましょう。 AudioSourceの設定ではいくつか気を付けるべきポイントがあります。

  • Play On Awake: オブジェクトの有効化で音を鳴らしたい場合には有効にしますが、後述のAudioTriggerなどで鳴らしたい場合にはオフにします。
  • Loop: 単発の楽器音であればオフです。
  • Spatial Blend: デフォルトでは2Dになっていますが、ある地点から鳴るような音にしたい場合は3Dに変更します。
  • Doppler Level: デフォルトでは1になっていますが、めちゃくちゃ気持ち悪いです。歩いたりするとドップラー効果がかかって、特に立体音響の時音にうなりが起きて大変なことになります。意図が無い限り原則0にします。
  • Spread: デフォルトでは0になっていますが、ややくどいです。音が非常に鋭く一つの地点から聴こえてしまいます。値をあげることでふんわりします。逆に鋭く定位させたい時は、値を下げて下さい。

f:id:Raku_Phys:20201225212504p:plain

演奏のためのスティックを作る

体を使った判定を使わない限り、音を鳴らすためにはtriggerを発火するための道具が必要です。 例えばここでは、スティックを使います。 スティックは持てないといけないので、持ち手の部分にPickupを設定します。 ここで、自動的に負荷されたRigidbodyのIsKinematicsを有効化、Use Gravityを無効化しておきます。 これで、スティックは物理に従って勝手に動くことは無くなります。 また、同期のためにObjectSyncを忘れずにつけておきます。

f:id:Raku_Phys:20201225213625p:plain

次にスティックの先端に接触判定用のコライダーを付けます。 ここでは、球のコライダーをそのまま使いました。 楽器に触れたときに、それがスティックであるのかどうかを区別するため、この球のレイヤーを分けました。(ここではInteractive Layerに設定。)

f:id:Raku_Phys:20201225213407p:plain

Triggerを設定して楽器が鳴るようにする

最後に、スティックの先端がキューブに触れた時に、音が鳴るようにVRC_Triggerを設定します。 ここは、ハマりそうなところがいくつかあるので、ポイントを列挙します。

  • スティックとキューブのコライダーのいずれかがIsTrigger (=接触しない) なら、OnEnterTriggerで接触判定を取ります。どうしても接触させなければいけないのであれば、OnEnterColliderで判定を取ります。
  • スティックにObjectSyncがついているのであれば、Triggerの同期は必要ないのでLocalにします。この時、他の人から見てスティックがキューブに触れたとき、各自のローカルで音が発火します。(どうしても音の方を同期させたいのであれば、スティックのコライダーローカルでのみ有効にした上で、TriggerをAlways Unbufferedにする手もあるにはありますが...。)
  • TriggerIndividualsはチェックを外してしまうと、音を連続で鳴らすことが出来なくなります。
  • Layersには、スティックの先端のコライダーのレイヤーをセットします。
  • Actionsは、AudioTriggerがおすすめです。長い音源をずっと鳴らしたいというような場合には、SetGemeObjectActive + PlayOnAwakeという手もありますが...。
  • AudioSourceの設定と同時にClipを忘れずに指定しましょう。

f:id:Raku_Phys:20201225220640p:plain

VRでの試奏

ここまで出来たら、一度VRChatにアップロードしてテストしてみましょう。

無事動いていそうですね。今回は非常にシンプルな楽器だったので特に問題なかったですが、複雑な楽器になってくると大きさが不適切で演奏しづらい、細かすぎて制御出来ないなどVRで演奏する時特有の様々な問題が生じることがあります。何度もVRで試奏を重ねて自分がもっとも演奏しやすい配置や形状にチューニングしていきましょう。

実演

では、上記の作戦に基づいて実装したVRライブを実際にやってみましょう...。

youtu.be

いかがだったでしょうか。 果たして、本番上手くいったんですかね...。

演奏後追記: 音声を全部モノラルにするというやらかしをしました...。 というわけで、動画版も併せて貼っておきます。[Cover] Secret Protocol (memex) 動画版 - YouTube

おわりに

本記事では、VRChatではじめるVR楽器演奏と題して、VR楽器を作る動機、構想の立て方、ごく簡単なVR楽器の実装を説明し、最後に実演をさせて頂きました。 ライブに仕立てる作業や、VR楽器を使いこんでいくための練習はなかなかコストが大きいものですが、その分うまく演奏出来た時は現実の楽器を弾くのと同様にすごく楽しいものです。しかも、VRChat上でならその感覚を、その場の人と共有出来ます。

是非、色々なVR楽器を作って楽しいVRChat音楽活動に役立ててみて下さい。

*1:現在12/26です。遅れてすみませんでした...。

*2:もちろん出来たなら素晴らしいことです。

*3:memexはいいぞ

*4:FinalIK(VRIK)+Animationでアバター制御: https://qiita.com/yuto_onizakura/items/fe77706e14adf981b7d9