勉強会のレポート(メモ)です。
参加したのはこちら、「UnityAudio 完全に理解した」
ハッシュタグ :
#UnityAudio完全に理解した
#anysync完全に理解したい
イベントの動画はこちらから視聴できます。
- タイムスケジュール
- 0. イントロダクション
- 1. 音量の基礎&Unity上での音量演出
- 2. サウンド実装の手間を省くためのCRI ADX2
- 3. VR音響のための鏡像法による距離減衰の再現
- 感想
- タイムライン
- 他の方のブログ
- 次回予告
タイムスケジュール
内容 | 担当 | |
---|---|---|
19:00 | 受付開始 | - |
19:30 | イントロダクション | - |
19:35 | 音量の基礎&Unity上での音量演出 | @8bitdots |
20:05 | サウンド実装の手間を省くためのCRI ADX2 | @Takaaki_Ichijo |
20:40 | 休憩 | - |
20:45 | VR音響のための鏡像法による距離減衰の再現 | @TyounanMOTI |
21:15 | 懇親会 | - |
22:15 | 片付け | - |
0. イントロダクション
もんりぃさんの挨拶。
2月9~10日に日本科学未来館にて、ワンダーメイクフェスというイベントがあります。
子供向けのモノづくりのイベントで、弊社も出店中です。
会場の提供・懇親会・動画撮影・生放送。
ミクシィさんがやってくれました。ほんとうにありがとう。
1. 音量の基礎&Unity上での音量演出
speakerdeck.com初心者向けライトな部分をやります。
音量について
音量という言葉はない。
音圧、音の強さ、音響パワーなどの物理量で定義されています。
音圧は波形や音量は0~1で正規化されているので、その対数をとるとdBがとれる。
ラウドネス
人間の感覚に合わせた音量。周波数によって聞こえ方にずれがあります。
CEDECなどで統一しましょうという話がでたりしてますが、だいたい多くの企業では0~1で扱われます。
UnityではAudioMixerなどいろいろ追加されましたが、現実ではラウドネスを扱えてません。
音割れ
波形が正規化されるので、波形が1以上は全て1に、-1以下は全て-1に圧縮されるため音割れします。
この辺は波形とフーリエ級数展開ごにょごに。
音を重ねて鳴らす時は注意しましょう。
音量に関する演出例
フィルタ、エフェクトによる制御、簡単に2種類紹介します。
ローパスフィルタ
高音域をカット。
くぐもった感じをかけることができます。
ポーズ画面で使われます。
ハイパスフィルタ
低音域をカット
ローパスを2000に、ハイパスを4000くらいまでにし、
低域と高域をカットした状態でノイズを足すとラジオノイズになったりします。
意外とこういうのやられてないかなと思います。だいたいサウンドさんにあらかじめ作ってもらうパターンが多い気がする。
AudioMixerを使った表現
・フィルタ
・フェードインフェードアウト
・ダッキング
ボイス再生時にBGMを下げるなど
サイドチェーン入力のダッキング
この辺は試してみてください
スクリプトの制御
・フェードインフェードアウト
簡単にできます
ついでにダッキングもできます
イントロ付きBGM再生も
インタラクティブミュージック
フェード実装のテクニック
クロスフェードの注意点として、直線に音量変化をすると音の量が中間あたりでへこみます。
解決策として三角関数をフェードカーブに用いましょう。
まとめ
dBよりもラウドネスの方がいい。
音割れすると音がゆがむ。
フェードでいろんな演出を実装することができます。
2. サウンド実装の手間を省くためのCRI ADX2
スライド
ADX2について
ゲーム向けのサウンドミドルウェアです。音を使った演出が組み込まれたライブラリ&ツールです。
ゲームに最適化された音声圧縮形式も備えています。
今回は「実装の手を抜くためのADX2」「エンクセル管理から脱却するためのADX2」について話します。
やらなければならない実装
・負荷軽減
・管理
・演出設計
ボイスデータ管理
excel管理だとデータがずれる可能性があるし、どういうふうに使うのかわからない。
じゃあどう管理ツールを開発する?しかしそれも大変。
そこでADX2
Atom Craftをいうツールを使いましょう。
どういうふうにならされるかを作りこんでいきます
ワークフローはどう変わるか
ADX2では再生単位キューを作成します。
このキューにはフェードやダッキングなどのメタデータを埋め込むことができます。
ここでデモ
ありえるフロー
・ボイスデータの管理
1. wavを全て登録
2. キューシートを作成
3. キューを作成
4. キューにコメントをいれる、パラーメータを設定する(同時再生数や優先度など)
5. キュー名称あるいはIDで再生処理を組む、IDは重複しない
・確認と調整
BGMを流しつつツールで確認再生ができるリアルタイム調整機能。
音が大きいところをすぐに調整できる。
サウンドの演出
再生状況が複雑になりそうだったらADX2の利用を考えましょう。
・バッキング
・ランダム再生 同時再生数の設定
・音のグルーピング
スクリプト側は非常にシンプル。
カテゴリ
同一キャラの声が2つ以上再生されないようにできる。
クロスフェード
いくつかアプローチがありますか
エンベローブのアタック(再生時)とリリース(終了時)を使う
ダッキング
キューシート
キューをまとめたキューシートが出力ファイルの単位になる。
キューシートが別ならキューの名前が被っても大丈夫。
複数のキャラクターがいる場合などに有効。
まとめ
・オーディオは考えることがいっぱい
・大量のデータ管理はツールで乗り越えよう、ADX2は管理が得意ですよ
・個人向けは有償と違って更新が遅いんですが近日アップデートされます
・書籍も書いています 会社に一冊どうぞ
3. VR音響のための鏡像法による距離減衰の再現
スライド
テーマは距離減衰
距離感は音量との相対的な変化で表現できます。
約1mの距離感(NearFieldEffect)を表現する立体音響プラグインも。
距離減衰カーブはUnityデフォルトだと減衰しすぎ、これを演出意図をもって書きましょう
重要なサウンドはゆるい減衰、重要でないサウンド(環境音など)は強い減衰がおすすめ。
リアリティのある距離減衰とは?
Unityデフォルトの距離減衰カーブは逆2乗則。
これは無響室での点音源の法則。リバーブなし。
しかし現実空間は無響室ではない。
リバーブとは
・直接音 口からでた音が耳まで届く最短距離
・初期反射 天井などすぐに反射する音
・後期残響 壁に何回も反射した音
で構成される。
このリバーブをいじると距離を感じます。
後期残響はそのまま、直接音や初期反射を小さくすると遠く感じます。
じゃあどうやって点をうってカーブを作るか?コンピュータに任せましょう。
ここでシュミレーション
鏡像法を使います。
この辺は参考文献を見てね。
ここで機材トラブル。
画面が映らないのでインタビュータイム。
デモ
ここでデモ
インパルス応答から距離減衰を推定します。
実は1mを離れるとあまり変わらない。
6畳間と多きめの部屋を比べてみると
・至近距離では点音源なので急速に減衰する
・しかし少し離れるとほとんど減衰しない
部屋の違い
狭いと減衰しなくなるのが早い
広いと減衰はしないが小さな音に収束する
そのまま使うときの課題
・音量変化が急なのでgainをかけるといいでしょう
・ゲーム内の環境に応じて部屋の大きさを変えましょう
・C#で書いているので重いです、高速化が必要
・インパルス応答の畳み込みをする場合
・フラッターエコーがきついかも
カーブを書くときの応用
・最大減衰距離は部屋の大きさよりも小さい
・なだらかなカーブは物理的に間違っていない
・周囲の広さに応じてカーブをかくとよりリアリスティックになるでしょう
今後の課題
・音量だけでなくリバーブも変化させる、音量ミキサーのリバーブを変えるなど
・面音源でもやってみるとまた違うのかなと思います。
・フラッターエコーなど可聴化してみる
・正直にシミュレーションするのではなく統計的にカーブを割り出す
「部屋がこのくらいだからカーブはこのくらいだろう」 といった感じ
感想
オーディオ関係はいままで気にしたことのない領域だったのでなかなか面白かった。
正直AudioMixer自体使ったことが・・・
各フィルタの演出ならすぐに試すことができてよさそうかも。
AnySyncになった時のichijoさんのファシリテーション能力?すごい。
タイムライン
【Unity Audio完全に理解した】
— 青木とと(ˊᗜˋ*)UnityAudio完全理解 1/29(火) (@lycoris102) January 29, 2019
設営準備中です!受付開始は19時から
よろしくお願いしますー!💨#UnityAudio完全に理解した pic.twitter.com/HQ90NI7l5Y
そろそろ始まります😆
— もんりぃ先生👨🏫マンガでわかるUnity連載中! (@monry) January 29, 2019
ライブ配信 URL はコチラ!https://t.co/JtNGSidR6Z
#UnityAudio完全に理解した pic.twitter.com/MTCo9uBj39
音を人間の感覚に合わせるならラウドネスで表記した方がいい #UnityAudio完全に理解した
— KappaBull🥒 (@KappaBull) January 29, 2019
ちなみにdBがx10ではなく「x20」になる理由は、値を途中で2乗して計算してるからゾ(2乗はlogに突っ込むとx2になるので結果として20倍になる) #UnityAudio完全に理解した
— とりすーぷ (@toRisouP) January 29, 2019
ローパスフィルタをかけてやるとくぐもった音になるので pause 画面とかで割と有効とのこと
— あすてろ だいき (@Asteroid_1) January 29, 2019
#unityaudio完全に理解した
音がクランプされて矩形に近付くと音が矩形になっていく→高音が混ざって音が変わる#UnityAudio完全に理解した
— Haruka Kajita@vマケfuture terminal A (@kajitaj63b3) January 29, 2019
DOTweenとか使っている人は AudioSourceにDOFadeメソッドが生えているので簡単にフェードイン/フェードアウト実装できるよ#UnityAudio完全に理解した
— 青木とと(ˊᗜˋ*)UnityAudio完全理解 1/29(火) (@lycoris102) 2019年1月29日
トレンド入りしました!ありがとうございます!!! #UnityAudio完全に理解した pic.twitter.com/L3SX8DSAdN
— もんりぃ先生👨🏫マンガでわかるUnity連載中! (@monry) January 29, 2019
#UnityAudio完全に理解した#anysync完全に理解したい pic.twitter.com/PkFbpESSYY
— 青木とと(ˊᗜˋ*)UnityAudio完全理解 1/29(火) (@lycoris102) January 29, 2019
ループのBGMと終わりのBGMのつなぎ目をクロスフェードでつなぐと任意のアクションで音楽を終わらせる演出を作ることができる。
— あすてろ だいき (@Asteroid_1) January 29, 2019
#unityaudio完全に理解した
AtomCraft使えばキュー単位のオーディを管理になって、スクリプト側でランダム再生や重複回避をせずにキューのファイル側に任せられる。
— Haruka Kajita@vマケfuture terminal A (@kajitaj63b3) January 29, 2019
リアルタイムプレビュー機能とかもあるらしい。#UnityAudio完全に理解した
#UnityAudio完全に理解した
— ザバイオーネ (@z_zabaglione) January 29, 2019
良いまとめ pic.twitter.com/1tF0qNUXCF
🍣🍣🍣 #UnityAudio完全に理解した pic.twitter.com/5yDpfnO02Z
— 青木とと(ˊᗜˋ*)UnityAudio完全理解 1/29(火) (@lycoris102) January 29, 2019
距離感の表現
— Kazushige Mori(Cz_mirror) (@Cz_mirror) January 29, 2019
音量とリバーブの相対的な変化で表現できる#UnityAudio完全に理解した
リアリティのある距離減衰とは?
— Kazushige Mori(Cz_mirror) (@Cz_mirror) January 29, 2019
なぜ逆二乗則どおりではない?
無響室での点音源の法則
1.点音源ではない
2.残響(リバーブ)がある
現実空間は無響室ではない#UnityAudio完全に理解した
距離減衰の作り方
— らくとあいす@Raku_Phys (@rakuraku_vtube) January 29, 2019
・Unityデフォルトは逆二乗則(点音源、無残響)
・実際は(近くでは近似がよくないほど)点ではないし、残響(初期反射・後期残響)が効く。
・初期反射と後期残響の比によって空間スケールを変えられる#UnityAudio完全に理解した
#anysync完全に理解したい けどできなていないので、
— mr@UnityAudio (@MasujimaRyohei) January 29, 2019
突然始まったインタビューw#UnityAudio完全に理解した pic.twitter.com/fz4J0cDuNZ
最後に表示されたGithubのリンクはこちらhttps://t.co/iDwCF8qsgR#UnityAudio完全に理解した
— mr@UnityAudio (@MasujimaRyohei) January 29, 2019
izm神降臨のお知らせ(φωφ)?
— IZUN∀♡VR頑張るPG (@mizuki_izuna) January 29, 2019
#unityaudio完全に理解した pic.twitter.com/hkn9LcUK4C
ひたすら受付に座るおじさんでした!
— 青木とと(ˊᗜˋ*)UnityAudio完全理解 1/29(火) (@lycoris102) January 29, 2019
ご参加頂いた皆さん、登壇された皆さん、会場/懇親会のスポンサーをしてくださったmixiさん、ありがとうございましたー!#UnityAudio完全に理解した
他の方のブログ
次回予告
次回は「AssetBundle完全に理解した」です。正気か?
最悪死人がでますよこいつぁ