VRChatで意外とよくわからんくて後回しにされがちなサウンドの調整に関するTipsを雑にまとめました。
技術的なことや仕様・ディレクションのことなどごちゃ混ぜで雑多に書いています。
項ごとのつながりはあまりないので、単発の読み物として読んでください。
思いついたらちょっとずつ書いていきます(工事中)
できる限りVRChat特有の問題について書いていきますが、そうでないものもあります​​​​​​​
かなり我流なので、間違っている場所があったりしたら教えて下さい。
あと、文章がすごく概念的でわかりにくいのでほんと許して下さい
​​​​​​​ベース環境音と設置環境音
※参考:https://x.com/CAPCOM_SOUND/status/1718925640983032025?s=20

設置環境音とは、川や滝の音や鳥の鳴き声など、ピンポイントで鳴らす環境音
ベース環境音とは、風の音や空調音、空間を満たす大気の音などの、常に空間上で鳴っていて無意識に聞こえているような音を指します
この2つが環境音の基本構成要素です
VRChatのワールドは設置環境音が実装されているワールドはちょいちょいありますが、ベース環境音までちゃんと実装しているワールドはかなり少ないです
室内系ワールドでは薄い空調音、屋外系ワールドでは弱い風の音や遠くから聞こえる交通音などを言われてみると聞こえるぐらいの音量で流しましょう。それをするだけでリアル感や快適感がぐっと上がります。
2Dでワールド全体に聞こえるように雑に配置するだけでもかなりマシになるので、必ず置きましょう(2D/3Dのあれこれは後述)
言われてみると当たり前かもしれませんが、リアル世界では認識上無音に感じられる場面でも、ほぼ間違いなく何かしらの音が鳴っています。
なので、何かしらの演出意図もしくは真空空間でない限りは、ワールド上で無音な状態が発生しないように環境音設計をうまいことやりましょう
リアルvs認識
主に環境音の音量を調整するときに、実際のリアルの世界で鳴っている音量通りに実装すれば自然になるかといえば、そうではありません。
そこで押さえておくべき観点が2つほどあると考えています。
1つは、カクテルパーティ効果とかが結構有名だと思いますが、リアル世界で聞こえる音量をどう感じるかというのは、かなり認識というフィルターがかかっているという点です。

もう1つは、VRCやゲームなどでは主に触覚などの細やかな感覚の情報が欠けているからか、フィルターがかかりにくく、フラットな音量で聞こえるようになぜか感じてしまうという点です。(ここに関してはソースはないです。じぶんがそう思うだけです)
なので、VRCやゲームで音量を調整するときには、認識上あまり意識されない音は小さく・認識上意識されやすい音は大きくして、ある程度認識フィルターを掛けたあとの音量感で、自分が思うよりしっかりと緩急つけて調整したほうが結果的にリアルに聞こえます。

具体的には、ベース環境音はかなり小さく調整して、高所やビルの間などで風が鳴る音をちょっと音量大きめで配置すると、あ、結構高いところにきたなぁとか、あ、ビル風強くて都会っぽいなぁみたいな情報が提供できます
調整をミスると、なんか風の音うるさいワールドだなってなります。非常に調整が難しいです。
あと、音の範囲設定のとき良くする考え方ですが、
音を発生するものが見えていない場合は認識外なので音量を小さめor聞こえない、見えだしたら認識されるので聞こえだす、みたいな調整はとてもよくやります。
部屋の外だと音はほぼ聞こえないけど、ドアの前あたりからぐっと音量が上がって部屋に入るとガッツリ聞こえる、みたいな調整は非常にエモいです。おすすめ。
こんな感じで演出意図をもちつつ認識に寄り添って調整するといい感じになると思います。
以上!(わかりにくい!ごめん!
VRC Spatial Audio Sourceの仕様
Audio SourceのComponentにVRC Spatial Audio SourceというComponentをつけられます。
そもそもなにやってんのとかどのパラメータがどういう挙動するかなどの基本的な仕様に関しては、公式ドキュメントを参照してください
https://docs.vrchat.com/docs/vrc_spatialaudiosource

ワールドビルド時にAudio SourceにVRC Spatial Audio Sourceがついてないと、Warningが出ます。
Auto fixを押すと自動的にComponentが追加されます。
また、Component追加前のAudioSourceのSpatial Blendが2D(値が0)だった場合、
デフォルト状態ではEnable Spatializationのチェックが入っていないので、とりあえず追加されただけの無効状態です。
逆にSpatial Blendが3D(値が0より大きい)だった場合、
デフォルト状態でEnable Spatializationのチェックが入っており、有効の状態で追加されます。
有効状態(Enable Spatializationにチェックをつける)と、以下の設定がオーバーライドされます。
つまるところ、どんなにAudio Source側でいじっても意味無くなります
・Spatial Blendが3Dになる
・Spreadが何かしらの値で固定される?(たぶん)
・3D Sound Settings内のVolumeのカスタムカーブとかDistanceがVRC Spatial Audio Sourceにオーバーライドされる
※Use AudioSource Volume Curveにチェックを入れるとこの項目はAudioSource側の設定が使える
・Audio Reverb Zoneの影響を全く受けなくなる(Reverb Zone Mixが0でオーバーライドされるんか?)

ちなみに、Audio Low Pass FilterのComponentを追加したときに設定できるLow Passのカーブは有効でした。

そしてここからは完全に個人的な意見ですが、VRC Spatial Audio Sourceを使用すると上記の通り
Spatial Blend・Spread・
Audio Reverb Zoneが全くいじれなくなるのがクッソきついので、
ワールド制作においては、
Enable Spatializationのチェックを外して使用しないのをお勧めします。
アバター制作では割と使いやすいと思いますが、ワールド制作では使ったとしてもピンポイントにならざるを得ないと思います
Audio Sourceの位置はバレないようにしよう
VRChatは音源の定位感がゲームや映像作品などよりかなり強く感じられるので、
あ、あそこにAudioSourceおいてあるなってのがバレないように音源の配置やパラメーター設定など注意する必要があります(明確な発生源があるものはこの限りではない)
定位感がブーストされる要因としてあげられるのは、
・VRChatはFPS(一人称視点)である
・HMDの視野角やUI等様々な要因により、一般的なゲームなどに比べて視野が狭い→かなり視点を動かす
・視点を動かしてないつもりでも無意識で細かくプルプルします。
・行動範囲が制限されずすみずみ動き回れるワールドがとても多い
・前述の、感覚情報の乏しさによる認識の問題

とかかなと思ってます
AudioSourceの配置
これ環境音実装などで結構やってしまいがちなのですが、明確な音源がある音でない限り、AudioSourceの中心をプレイヤーが移動できるところに置くのはNGです
というのも、Audio Sourceの中心近くを横切ると、音の発生源がぐりんっと180度変わるのでめちゃくちゃ違和感があります
横切れるようなレベルの位置でないにしても、Audio Sourceの中心がプレイヤーから近すぎると不自然な定位感が生まれてしまうので、
発生源が曖昧な音に関しては、大きい範囲のAudioSourceを離して配置する、というのをよくやります

別のアプローチとしては、複数のAudio Sourceをちょっとずつ重ねながら配置するというのもよくやります。
これをやる場合は、音のフランジングに注意してください。
フランジングとは、全く同じ波形の音を重ねると音がピチューンって変な感じに聞こえるアレです。
それを回避するには、音の差分を複数作るか、同じ音を使う場合は隣り合う音のピッチをちょっとずつ変えてランダマイズするようにしてください。
Spread
Spreadは3Dオーディオの音の定位感をわりと気軽に調整できるので、かなりおすすめです。
Spreadのデフォルトでは0ですが、0だと定位感が強すぎてほぼ点で聞こえてかなり不自然に聞こえるため、Spread 0はホントやめたほうがいいです
リアルの音はそもそも拡散して聞こえるし、障害物の反射などで色んなところから聞こえるので、0で使用するのはかなり限られた状況かと思います。
Spreadについて詳しく書かれているドキュメントが存在しないのでどうなっているかは謎ですが、
実際のAudioSourceの位置を中心に、入れた数値ぶん広がった角度の位置から擬似的に聞こえるような挙動をする気がします。
数値が大きくなるほど音の定位感が曖昧になり、また180度ではどこから聞こえているかわからなくなります。

また、180度を超えると実際のAudio Sourceの位置とは逆から音が聞こえ始めるので注意です。
例えばSpread 300はSpread 60の真逆版みたいな挙動をします。Spread 360はSpread 0の音源が真逆から聞こえます。
ぶっちゃけ181以上の数値はあまり使ったことがないです。
音の範囲について
音の範囲についても、あ、AudioSourceの範囲に入ったな、ってバレないように調整しましょう。
リアルの音を観察するとよくわかりますが、けっこう音って遠くまで実は聞こえてます。
なので、MaxDistanceは広めに取るのが良いです

実際に音が鳴っている=聞こえる ではないので、ベストな範囲は何回も聞いて調整を繰り返してベストな値を探しましょう
Audio Sourceをたくさん置いた時に起きること​​​​​​​
要検証な部分がとても多いので、メモ程度です(23年10月現在)
・VRChatのメニューUIのSEが消える
→おそらく内部でPriorityが低めに設定されている?それ以外は影響はなし
→UIの音が消えだすと、おっこのワールドはたくさん音置いたなぁってなる(?)
・ただし、VRC Spatial Audio Sourceを有効にしたAudioSourceが一定数を超えると、上限超えた分が鳴らなくなる?
→無効にすると解決することがある

VRC Spatial Audio Sourceを使用しなければ、50個以上ポン置きの再生しっぱなしのAudioSourceがあっても特に何も置きなかった​​​​​​​
→VRC Spatial Audio Sourceがくっついていると常に同時再生数にカウントされるっぽい?
ちなみにAudioSourceいっぱいつけたプレイヤーが現れるとそこもカウントされるのですべてが台無しになる
プレイヤーから一定距離離れたAudioSourceはinactiveにするUdonを書いたり、その他のギミックに合わせて消したりするのがもちろんベターと思われる。
Spatial(2D/3D)あれこれ​​​​​​​
仕様
・2Dはステレオで3Dはモノラルになります
・2Dはプレイヤーの位置や向きに関わらずステレオで聞こえます

・2D音源を指定の範囲内のみで再生したい場合
→以下の画像のように3D Spatial Settingsのカーブを設定し、右端のMax Distranceで完全3DかつVolume0にする必要がある
→これやらないとワールド全体で2Dが再生されてしまう(ギミックの効果音などでやってしまいがち)
基本的にサウンドは3Dで設定するのが良いです
理由は、当たり前ですが世の中のすべての音は何かしらの発生源があるからです
2Dはプレイヤーの位置や向きに関わらずステレオで聞こえ、定位感が完全に失われてしまう仕様のため基本的には避けるべきです
ただし、ベース環境音は2Dで設定することもあります
世の中のすべての音は何かしらの発生源があるとは言いましたが、距離や壁などの反射や他の音の影響など様々な理由により、認識上ではほぼ発生源を感じられない、ということも多いです
なのでその場合は、割り切って2Dで実装しても違和感が少ない、という理屈で2Dにすることがあります
2Dの場合は3DをいっぱいばらまくよりAudioSourceを無駄遣いしなくていいというメリットもあるので、全然ありです。
その他2Dにすることが多いのは、BGMやUIの音などです
が、明確な発生源がある場合は3Dのほうがいいことも多いので、脳死で2Dにせずにより良い方を選択しましょう
脳死が一番良くない
VRChatではAudioMixerが使えない
これ本当につらい
この制限によって、Unity上で再生されている音をルーティングしたり細かいエフェクトかけ分けたりみたいなのがほぼできません。
なので、音源は波形編集ソフトなどである程度編集した状態で格納する必要がありますし、Unity上でも1つ1つのAudio Source単位でパラメーターやAudio Filterなどのコンポーネントをいじる必要があります

もちろんWwiseやCRI ADXなどのオーディオミドルウェアも使用できません
遮蔽や反射などのリアルの物理挙動をいいかんじにシミュレートしたり、大量の音源を配置してプレイヤーの近くの音源だけ有効にするなどその他もろもろの一般的に3Dゲームで採用されているような凝った実装は、Udon(VRChatのスクリプト言語的なの)でゴリゴリ最初から実装する必要があります
なので場合によっては、かなり割り切った仕様でできるだけシンプルに、でもいい感じに聞こえるように実装するといったことが必要になります
めも:いつか書くかも
・VRCでのボイス系の実装について
・Reverbはいいぞ
・素材はここでさがせばいいんじゃね
・サウンドデザイナーってなんだよ

Back to Top