前回の記事ではオーディオクリップのCompression Formatによる音質とデータサイズの違いに触れました。
ここからは複数回に分けて、様々な条件でCPUやメモリ負荷の比較をしていきたいと思います。
初回は、オブジェクト数による比較と、3D音響を使用する/しない場合の比較を行ってみます。
はじめに
オーディオ関連の計測には、UnityのProfiler内にあるAudioグラフを使用します。
検証を行った環境は以下の通りです。
OS | Windows10 Home |
CPU | Intel Core i7-7700 |
メモリ | 16GB |
Unityバージョン | 2019.4.2 |
また、オーディオクリップは前回も使用したサウンドを、以下の設定で使用します。
Load Type | Decompress On Load |
Preload Audio Data | On |
Compression Format | Vorbis |
Quality | 100 |
Sample Rate Setting | Preserve Sample Rate |
オブジェクト数での比較
スクリプトでAudioSourceのついたオブジェクト(エミッター)を好きなだけ自動生成できるようにして、鳴らすオーディオ数による負荷の違いを確かめます。
発音タイミングはいずれもランダムですが、発音しているオブジェクトが分かるように、発音時には赤くなるようにしています。
ためしに1個と100個で比較をしてみましょう。
鳴らす数が増えれば当然負荷も増えそうですが、実際はどうでしょうか……?
オブジェクト1個 | オブジェクト100個 | |
---|---|---|
Total Audio CPU(%) | 約0.6 | 約1.5 |
-DSP CPU(%) | 約0.5 | 約1.3 |
-Streaming CPU(%) | 0.0 | 0.0 |
-Other CPU(%) | 約0.1 | 約0.2 |
Total Audio Memory(MB) | 2.3 | 2.5 |
-Streaming File Memory(MB) | 0 | 0 |
-Streaming Decode Memory(MB) | 0 | 0 |
-Sample Sound Memory(MB) | 0.5 | 0.5 |
-Other Memory(MB) | 1.7 | 1.9 |
やはり100個のほうが総合的な負荷は上がっていますね!
主にDSP CPUが大きな要因となっているようです。
2D/3Dの比較
オブジェクトにランダム速度で円運動する機能をつけてみます。
その際、円運動を有効にした場合はAudioSourceのSpatialBlendパラメータが1.0(3D全振り)になるようスクリプトを組みました。
動く場合は3D音響を適用、動かない場合は2Dで普段通り鳴らすだけ、ということですね。
先ほどのオブジェクト100個の状態で比較をしてみます。
3D音響のほうが空間のパラメータが多く、負荷が大きくなりそうですが、はたして……?
オブジェクト100個2D | オブジェクト100個3D | |
---|---|---|
Total Audio CPU(%) | 約1.5 | 約2.1 |
-DSP CPU(%) | 約1.3 | 約1.8 |
-Streaming CPU(%) | 0.0 | 0.0 |
-Other CPU(%) | 約0.2 | 約0.3 |
Total Audio Memory(MB) | 2.5 | 2.5 |
-Streaming File Memory(MB) | 0 | 0 |
-Streaming Decode Memory(MB) | 0 | 0 |
-Sample Sound Memory(MB) | 0.5 | 0.5 |
-Other Memory(MB) | 1.9 | 1.9 |
予想通り、3D音響のほうがCPU負荷が増加しましたね!
今回はここまで!
次回はさらに掘り下げて、Load TypeやCompression Formatの違いによる比較を行っていきたいと思います。