Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What are the problem?

posted at

updated at

【VRChat】空間の広がり・指向性・定位感を余さず伝える音響環境の構築

概要

  • 「広い空間で」「中央から聞こえるように」「定位感を失わずに」音を届けたい
    • これらは得てしてトレードオフの関係にある(疑似モノラル・3D vs 2D)
  • Head のボーンに追従しワールド中央を向く複数の音源を用いることでこれらの問題を解決した

はじめに

私の作成したVRCWorld「Music Stellar Lake」の公開に際して
ワールド作成で得られた知見のうち
特に汎用的(?)かどうかはともかく面白いものをピックアップしていくつか紹介しています

もし「役に立ったー!」となったらワールドに遊びに行ってもらえると
(ついでに #musicstellarlake のハッシュタグでツイートしてもらえると)
嬉しいです!

今回は読み物的な要素が多いです

環境

  • VRCSDK 3.0 2021.08.04.15.07
  • Unity 2019.4.29f1
  • Usharp v0.20.2

解決したい課題

「広い湖で音楽を聴く」というシチュエーションを解決するにあたり、
音楽を以下の条件で聴きたいというモチベーションが生まれました

  1. 広い空間で聴いている感覚(空間的広がり)
  2. 中央のモニュメント方向から音がなっている感覚(指向性)
  3. 音楽の左右のパンは失いたくない(定位感)

それぞれの条件に対する当初のアプローチ

以下のように各課題にアプローチしましたが、
それぞれの課題の対策が別の課題に対して悪影響を及ぼしていました

空間的広がり

  • ワールドの外周に沿って3D音源を配置する
    • 定位感・指向性が失われる(外周に沿って聞こえる)
  • リバーブ空間をつける
    • 「好きな音楽を流して交流したい」という目的にそぐわない(過度な装飾感がある)

指向性

  • 中央のモニュメントに3D極振りの音源を配置し、減衰距離を大きくする
    • 空間的広がり、定位感が失われる(疑似モノラル)

定位感

  • 頭に沿って動く2D音源を配置する
    • 空間的広がり、指向性が失われる(頭の中で常に音が鳴る)

解決方法

空間的広がり

  • 頭から15mほど離れた左右の位置にLR各チャンネルの音を出す音源を左右に配置する
  • この際、High が聴きやすい音源(3D音源)を上部に、Low が聴きやすい音源(2D音源)を下部に配置する
    • 完全に 3D / 2D にせず Audio Source Component のカーブで適当に混ぜるのがコツです
  • 合計4音源を Head のボーンに対して動くように追加
  • 2D / 3D 音源の聞こえ方の違いについてはこちらをご参考にしてください

指向性

  • 上記の音源をモニュメントの中央に向けて動くように Aim Constraint で制御
    • モニュメントの上部に Aim At の transform を置くことで、近くまで行った際に「上から音が降ってくる」ような感覚を得られます
  • AimConstraint の具体的な設定方法はこちらをご参考にしてください

定位感

  • 上記音源だけでも良かったのですが、頭に追従する2D音源を小さく入れています
    • 音源のステレオ感が増幅されて聴きやすくなります
      • 半面モニュメントから背を向けると若干聞こえが悪くなりますが、指向性を持たせるのに一役買っているとも言えます

実際のワールドではこれらに加えてモニュメント内部を包むように音源を4つ配置しています
モニュメント内部に入る特別感を音響的に演出しています

音源の配置

speakeriti.png

Head のボーンについてくる音響のU#コード

HeadTrackingAudioSource.cs
public class HeadTrackingAudioSource: UdonSharpBehaviour
{
    private VRCPlayerApi _localPlayer;

    void Start()
    {

        _localPlayer = Networking.LocalPlayer;
    }

    private void Update()
    {

        if (_localPlayer != null)
        {

            var trackingData = _localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head);

            this.gameObject.transform.position = trackingData.position;
            this.gameObject.transform.rotation = trackingData.rotation;
        }
    }
}

まとめ

上記のように音源の配置を工夫することで

  • 広い空間で聴いている
  • 中央から聞こえる
  • ステレオ感が失われない

というワールドに最適な音響空間を生み出すことができました

参考

謝辞

2D音源と3D音源の High / Low の聞こえ方の違い、および High / Low の音源の置き方については Mazzn1987 さん(Twitter: @Mazzn1987_TRPG)に
頭に追従する2D音源によるステレオ感のブーストに関してはだいふくさん(Twitter: @Daifuku_VRC)にご教授いただきました
また、頭に追随する3D音源のアイディアはお二人とのディスカッションにより生まれたものです
ここに深くお礼申し上げます

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?