Pengembang biasanya tidak sepenuhnya memahami opsi untuk mengimpor suara ke Unity, dan pada saat penulisan ini, saya tidak dapat menemukan panduan terperinci tunggal untuk penggunaannya.
Dokumentasi Unity menjelaskan dengan baik apa yang dilakukan opsi impor suara, tetapi saya ingin menguraikan deskripsi ini untuk audiens yang lebih luas, dan juga menjelaskan secara lebih rinci bagaimana menerapkan parameter ini untuk mendapatkan hasil maksimal dari permainan.
Dokumen ini dibagi menjadi lima bagian:
- Bagaimana suara memengaruhi kinerja
- Kami berurusan dengan opsi impor
- Pengaturan Rekomendasi Saya untuk PC dan Konsol
- Pengaturan yang saya rekomendasikan untuk platform seluler
- Perhatian dan catatan
Mengoptimalkan opsi impor suara Unity adalah salah satu metode optimisasi termudah. Dalam kasus proyek kecil, mungkin diperlukan kurang dari satu jam untuk mencapai peningkatan yang signifikan dalam waktu boot, RAM, dan aspek kinerja lainnya. Semoga panduan ini bermanfaat bagi Anda. Informasi relevan untuk versi Persatuan 2018.3
1. Bagaimana suara memengaruhi kinerja
Data suara sangat banyak. Dalam banyak game, data audio menempati bagian terbesar dari ruang disk (disk / cartridge / disk optik tempat data game disimpan) dan RAM (memori yang berfungsi sistem). Tapi tidak hanya itu, mereka juga serius memuat CPU, terutama jika Anda menggunakan efek DSP (pemrosesan suara real-time), dan juga sangat meningkatkan waktu buka.
Di ketiga area ini (ruang disk yang ditempati oleh RAM, penggunaan CPU), optimisasi adalah tarik ulur tiga arah, mirip dengan masalah
βcepat murahβ . Jika ada aspek permainan yang paling banyak menyebabkan kerusakan, Anda dapat mempertahankan efektivitas satu aspek dengan mengorbankan aspek lainnya. Misalnya, jika suara yang tidak dikompresi membutuhkan terlalu banyak RAM, maka Anda dapat menyimpannya dalam bentuk Vorbis terkompresi - ini menghemat ruang dalam RAM, tetapi dengan biaya beban CPU, karena mengakses file yang dikompresi memerlukan lebih banyak daya pemrosesan untuk mendekodekannya. Di bawah ini adalah bagan dengan berbagai parameter dan efeknya pada tiga bidang ini:
Perlu dipertimbangkan bahwa diagram ini tidak memberi tahu kita apa pun tentang bandwidth data yang dibaca dari disk / RAM.
Pada kenyataannya, ada beberapa nuansa lagi, tetapi diagram harus memberi Anda gambaran umum tentang bagaimana masalah ini saling berhubungan. Untuk memahami cara menggunakan parameter ini (dan menangani masalah seperti waktu pemuatan terlalu lama), Anda perlu melihat setiap opsi impor suara secara detail.
2. Memahami opsi impor
Ketika Anda memilih AudioClip di editor Unity, panel berikut ini muncul di jendela inspektur:
Di bawah ini adalah daftar opsi suara dari atas ke bawah dengan deskripsi tentang apa yang mereka lakukan:
Paksa mono
- Ya: jika AudioClip direkam dalam stereo (atau dengan jumlah saluran yang berbeda), maka parameter ini menggabungkan semua saluran menjadi satu saluran mono.
- Tidak: jumlah saluran tidak berubah.
Dalam pekerjaan saya sebagai perancang suara, saya tidak pernah mengurangi sinyal audio menjadi mono, karena saya membuat suara untuk tujuan tertentu. Tetapi jika Anda menggunakan suara standar dari saham dan ingin mengaktifkan opsi ini, maka pastikan bahwa file mono tidak terdengar datar dan aneh karena interaksi antarmuka saluran kiri dan kanan. Anda dapat mempratinjau suara yang diproses dengan mengeklik tombol Mainkan di sudut kanan bawah jendela inspektur - jika Anda mendengar distorsi fase, Anda dapat mencoba memisahkan suara dalam editor audio pihak ketiga dan secara individual mengekspor saluran kiri dan kanan sebagai suara mono.
Normalisasi (hanya tersedia saat Force to Mono aktif)
- Ya: sesuaikan gain AudioClip sehingga suara monaural memiliki volume yang sama dengan file stereo asli.
- Tidak: Tidak menyesuaikan gain.
Jika Anda menggunakan Force to Mono, biasanya normalisasi normal saja. File stereo yang keras ketika dicampur dengan mono dapat menjadi lebih keras, melebihi amplitudo maksimum dan menyebabkan distorsi digital yang tajam, yang tidak diinginkan.
Muat di Background / Preload Data Audio
Parameter ini memiliki efek langsung satu sama lain, jadi saya menggabungkannya.
Muat di latar belakang | Muat ulang data audio | Hasil |
---|
Diaktifkan | Diaktifkan | Ketika adegan dimuat, klip suara dengan parameter ini mulai memuat, tetapi jangan menghentikan aliran utama. Jika saat adegan sudah dimuat penuh, belum semuanya dimuat, maka unduhan akan dilanjutkan di latar belakang saat adegan sudah berjalan. Jika suara tidak dimuat, tetapi sudah berjalan, maka ia akan berperilaku sama seperti ketika Dinonaktifkan Preload (lihat baris di bawah). |
Diaktifkan | Dinonaktifkan | Ketika suara mulai untuk pertama kalinya, itu akan dimuat di latar belakang dan diputar saat siap. Jika file tersebut besar, maka mungkin ada penundaan yang nyata antara mulai dan bermain, tetapi dengan pemutaran file selanjutnya semuanya akan baik-baik saja. |
Dinonaktifkan | Diaktifkan | Suara dimuat saat adegan sedang dimuat. Adegan tidak akan dimulai sampai semua suara dengan parameter ini dihidupkan dimuat ke dalam memori. |
Dinonaktifkan | Dinonaktifkan | Ketika suara dimulai untuk pertama kalinya, ia menggunakan aliran utama untuk memuat dirinya ke dalam memori - jika file besar, ini dapat menyebabkan perlambatan frame, tetapi dalam reproduksi berikutnya semuanya akan baik-baik saja.
Saya sarankan menggunakan konfigurasi ini hanya untuk file yang sangat kecil, tetapi bahkan dalam kasus ini, perlu mengukur efeknya pada kinerja di profiler, dan berpikir tentang apakah sejumlah besar suara tersebut dapat diluncurkan secara bersamaan, meningkatkan beban kinerja. |
Ambisonik
- Centang kotak ini jika suara dikodekan Ambisonic. Suara Ambisonic berguna untuk VR, AR, video panorama, dll., Tetapi parameter ini tidak terkait dengan manual kami.
Opsi Khusus Platform
- Tab ini memungkinkan Anda untuk mengatur parameter default dan parameter khusus platform untuk pengaturan yang tercantum di bawah ini. Beberapa platform memiliki format kompresi yang tidak tersedia pada platform lain, beberapa mungkin memiliki peralatan lain yang memerlukan optimasi berbeda. Untuk kompresi khusus platform, lihat catatan di bawah ini.
- Selalu periksa parameter spesifik platform, bahkan jika Anda ingin menggunakan parameter umum - terkadang Unity dapat secara otomatis mengatur parameter khusus platform. Misalnya, build untuk iOS mungkin default untuk "menentukan sample rate: 22kHz," yang dapat menyebabkan aliasing (cacat suara yang timbul dari downsampling yang salah).
Jenis beban
- Decompress on Load: Suara disimpan pada disk dalam Format Kompresi yang ditentukan, tetapi dibongkar dan dimuat ke dalam RAM tanpa kompresi dalam format PCM. Ini memakan banyak RAM dan sedikit meningkatkan waktu boot, tetapi sangat murah dari sudut pandang prosesor, dan aksesnya sangat cepat.
- Terkompresi dalam Memori: baik pada disk maupun dalam RAM, suara disimpan dalam format kompresi yang ditentukan. Tempat dan waktu muat yang digunakan dalam RAM berkurang, tetapi beban prosesor meningkat selama reproduksi suara, karena harus dibongkar pada setiap reproduksi.
- Streaming: Streaming audio dimainkan langsung dari disk, sepenuhnya mem-bypass RAM. Ini mengambil bagian dari bandwidth disk dan sumber daya CPU, tetapi pada PC dan konsol itu tidak mempengaruhi kinerja secara signifikan, asalkan tidak lebih dari dua suara yang dialirkan secara bersamaan. Pada platform seluler (terutama pada perangkat murah dan lama), streaming simultan dari beberapa file stereo memuat prosesor dengan berat (lihat bagian "Perhatian" di bawah).
Format kompresi
- PCM: data audio mentah, dibongkar sepenuhnya dan menempati banyak ruang pada disk dan RAM, tetapi hampir tidak memerlukan biaya apa pun karena tidak perlu dibongkar.
- ADPCM: format kompresi yang sangat lama dengan rasio kompresi 3,5: 1. Kompresi / dekompresi cukup murah dibandingkan dengan Vorbis atau format kompresi lainnya, tetapi memperkenalkan artefak noise digital ke dalam suara, jadi Anda hanya perlu menggunakannya dalam "suara bising", di mana itu tidak akan terlihat. Jika Anda tidak yakin apakah ADPCM cocok untuk suara tertentu, maka aktifkan pra-mendengarkan suara dalam format PCM dan ADPCM - jika Anda mendengar perbedaan, saya sarankan memilih PCM.
- Vorbis: Format terkompresi yang kompatibel dengan platform paling populer. Ini dapat memberikan rasio kompresi yang cukup tinggi, dengan tetap mempertahankan kualitas suara yang layak, tetapi cukup mahal untuk mengompres dan mendekompres dengan cepat.
Di sini saya hanya mencantumkan format editor standar, untuk informasi lebih lanjut tentang jenis dan kompresi khusus platform, lihat bagian "Keterangan" di bawah ini.
Berikut ini adalah perbandingan singkat dari beban prosesor untuk berbagai format pada PC saya di editor Unity:
Format kompresi | Penggunaan CPU dengan 1 suara | Penggunaan CPU dengan 6 suara |
---|
PCM | ~ 0,05% | ~ 0,3% |
ADPCM (dikompresi dalam memori) | ~ 0,2% | ~ 1,0% |
Vorbis (dikompresi dalam memori) | ~ 0,5% | ~ 3,2% |
Kualitas (tidak berlaku untuk PCM / ADPCM)
- 70-100%: hampir tidak dapat dibedakan dari PCM dalam kualitas penuh untuk semua kecuali audiophile dengan peralatan audio yang mahal
- 1-69%: tingkat kualitas yang bervariasi, nilai yang lebih rendah menciptakan artefak kebisingan yang kuat, mengurangi dinamika dan membuat suara datar dan tidak bernyawa. Anda dapat mengklik tombol pratinjau di panel inspektur untuk melihat seberapa nyata kualitas setiap suara menurun.
Parameter kualitas ini berarti bahwa suara akan direproduksi pada kecepatan 100%, sehingga mereka memotong beberapa frekuensi tinggi yang biasanya di luar rentang yang dapat didengar. Tetapi ketika bermain dengan kecepatan rendah, mereka bergeser ke bawah ke kisaran yang dapat didengar. Jika Anda berencana untuk mereproduksi suara dengan nada / kecepatan rendah, lebih baik memilih pengkodean dalam PCM.
Semakin rendah kualitas, semakin kuat file dikompresi:
Kualitas vorbis | % dari ukuran aslinya | Rasio kompresi |
---|
100 | ~ 20% | ~ 5: 1 |
75 | ~ 10% | ~ 10: 1 |
50 | ~ 7% | ~ 14: 1 |
25 | ~ 4% | ~ 25: 1 |
1 | ~ 2% | ~ 50: 1 |
Pengaturan tingkat sampel
- Preserve: Menggunakan laju sampling saat suara direkam.
- Optimize: Unity menganalisis suara dan menemukan frekuensi maksimumnya, dan kemudian menggunakan teorema Nyquist untuk menentukan frekuensi sampling terkecil yang dapat diterapkan tanpa kehilangan frekuensi ini. Misalnya, jika frekuensi suara maksimum adalah 10 kHz, maka frekuensi pengambilan sampel dapat dikurangi tanpa kehilangan konten suara hingga 20 kHz. Parameter ini hanya dapat digunakan untuk PCM / ADPCM.
- Override: Jika diinginkan, Anda dapat secara manual mengatur laju sampling baru untuk AudioClip. Secara umum, saya tidak merekomendasikan melakukan ini jika Anda tidak mengerti apa yang akan terjadi.
3. Pengaturan yang disarankan untuk PC dan konsol
Jenis suara | Muat di latar belakang
| Jenis beban | Muat ulang data audio | Format kompresi | Kualitas | Pengaturan tingkat sampel | Komentar |
---|
Dialog | Y | Terkompresi dalam memori | Y | Vorbis | 70 | Pertahankan | |
Putaran panjang suara ambient | t / a | Streaming | t / a | Vorbis | 70 | Pertahankan | |
Suara surround satu kali | Y | Dekompres pada beban | Y | Vorbis | 70 | Pertahankan | |
Efek kebisingan | N | Terkompresi dalam memori | Y | PCM | t / a | Optimalkan | Jika nada suara ini pernah turun, maka frekuensi pengambilan sampel harus dipertahankan.
|
Langkah kaki | N | Terkompresi dalam memori | Y | PCM | t / a | Optimalkan | |
Musik (lagu panjang) | t / a | Streaming | t / a | Vorbis | 85 | Pertahankan | Streaming mungkin tidak sesuai jika beberapa trek musik diputar secara bersamaan |
Musik (cuplikan pendek) | Y | Terkompresi dalam memori | Y | Vorbis | 85 | Pertahankan
| |
Suara non-dialog
| Y
| Dekompres pada beban
| Y
| Vorbis
| 70
| Pertahankan
| |
Efek Khusus (SFX, Pendek)
| N
| Terkompresi dalam memori
| Y
| PCM
| t / a
| Optimalkan
| Jika nada suara ini pernah turun, maka frekuensi pengambilan sampel harus dipertahankan.
|
Efek khusus (panjang)
| N
| Dekompres pada beban
| Y
| Vorbis
| 70
| Pertahankan
| |
Suara UI (panjang)
| Y
| Dekompres pada beban
| Y
| Vorbis
| 70
| Pertahankan
| |
Suara UI (pendek)
| N
| Terkompresi dalam memori
| Y
| PCM
| t / a
| Optimalkan
| |
Rekomendasi ini cocok untuk game di mana terdapat hingga 10 ribu klip suara. Untuk sebagian besar suara, saya sarankan Dekompresi pada Load, yaitu, dalam RAM mereka akan disimpan sebagai data audio yang tidak dibongkar. Jika ukuran total file suara yang dibongkar lebih dari batasan yang Anda tetapkan pada RAM, maka untuk file terpanjang, Anda dapat memilih parameter Compressed in Memory. Tetapi perlu diingat bahwa dengan setiap peluncuran suara seperti itu, beban CPU akan sedikit meningkat.
Versi PDF dari tabel-tabel ini dapat diunduh dari sini .
4. Pengaturan yang disarankan untuk platform seluler
Jenis suara
| Muat di latar belakang
| Jenis beban
| Muat ulang data audio
| Format kompresi
| Kualitas
| Pengaturan tingkat sampel
| Komentar
|
---|
Dialog
| Y
| Terkompresi dalam memori
| Y
| Vorbis / MP3
| 50
| Pertahankan
| |
Putaran panjang suara ambient
| Y
| Terkompresi dalam memori
| Y
| Vorbis
| 35
| Pertahankan
| Untuk suara tanpa noise, gunakan kualitas yang lebih tinggi.
|
Suara surround satu kali
| Y
| Dekompres pada beban
| Y
| Vorbis / MP3
| 50
| Pertahankan
| |
Efek kebisingan
| N
| Terkompresi dalam memori
| Y
| PCM / ADPCM *
| t / a
| Pertahankan
| |
Langkah kaki
| N
| Terkompresi dalam memori
| Y
| PCM / ADPCM *
| t / a
| Optimalkan
| |
Musik (lagu panjang)
| t / a
| Streaming
| t / a
| Vorbis
| 70
| Pertahankan
| Lihat peringatan streaming di bawah ini. |
Musik (cuplikan pendek)
| Y
| Terkompresi dalam memori
| Y
| Vorbis / MP3
| 70
| Pertahankan
| |
Suara non-dialog
| Y
| Dekompres pada beban
| Y
| Vorbis / MP3
| 50
| Pertahankan
| |
Efek Khusus (SFX, Pendek)
| N
| Terkompresi dalam memori
| Y
| PCM / ADPCM *
| t / a
| Optimalkan
| Jika nada suara ini pernah turun, maka frekuensi pengambilan sampel harus dipertahankan.
|
Efek khusus (panjang)
| N
| Dekompres pada beban
| Y
| Vorbis / MP3
| 50
| Pertahankan
| |
Suara UI (panjang)
| Y
| Dekompres pada beban
| Y
| Vorbis / MP3
| 50
| Pertahankan
| |
Suara UI (pendek)
| N
| Terkompresi dalam memori
| Y
| PCM / ADPCM *
| t / a
| Optimalkan
| |
* Jika Anda tidak tahu harus memilih apa, PCM atau ADPCM, maka lihat deskripsi format
ADPCM di bagian
"Memahami Parameter" di atas. Jika menghemat ruang disk masih sangat dibutuhkan, saya sarankan condong ke PCM.
Panduan ini akan berfungsi dengan baik di sebagian besar game seluler; setidaknya mereka dapat digunakan sebagai titik awal. Jika Anda berpikir bahwa parameter ini mungkin tidak cocok untuk permainan Anda, maka baca deskripsi parameter lengkap di atas.
Versi PDF dari tabel-tabel ini dapat diunduh di sini .5. Perhatian dan komentar
Peringatan
- Streaming simultan (Streaming) dari beberapa file audio mewakili beban yang cukup kecil pada prosesor di PC dan konsol, tetapi dapat menciptakan masalah serius pada platform seluler (terutama pada perangkat murah atau lama). Di bawah ini adalah grafik pengukuran saya di profiler Unity. Ini menilai dampak streaming beberapa file audio pada berbagai ponsel Samsung Galaxy dan PC saya. Grafik pertama menunjukkan 1-12 sumber audio yang direproduksi secara bersamaan, yang kedua - 1-3 sumber pada skala yang diperbesar.


- Jika suara diatur ke Dekompresi pada Beban, maka menggunakan kompresi Vorbis akan mengurangi ukurannya sepuluh kali pada disk, tetapi tidak dalam RAM, di mana data PCM mentah masih akan disimpan. Jika Anda mengatur parameter Compressed in Memory, Anda dapat menghemat RAM, tetapi dengan biaya waktu CPU, yang membongkar suara dengan cepat.
- Setiap tipe data, kecuali Streaming, secara default memuat suara ke dalam RAM dan membiarkannya di sana sampai adegan diturunkan. Jika seluruh permainan dimainkan pada satu panggung besar, maka suara dapat mengisi semua RAM yang tersedia. Lebih buruk lagi, menghapus klip suara secara manual dari RAM sangat tidak efisien dan dapat menyebabkan penurunan frame rate, yang dapat terjadi jika Anda menetapkan tugas ini ke pengumpul sampah. Jika Anda memiliki banyak data audio, maka Anda mungkin perlu melakukan optimasi untuk mengurangi RAM yang digunakan di area lain menggunakan Unity AssetBundles. Parameter Data Audio Preload tidak dapat mengubah ini juga, karena hanya menentukan kapan data dimuat ke dalam RAM, dan bukan apa yang terjadi setelahnya.
- Jika platform target mendukung format MP3, harap dicatat bahwa perulangan otomatis tidak dilakukan untuk itu, jadi saya tidak menyarankan menggunakan kompresi MP3 untuk loop atmosfer dan musik. Karena sifat encoding MP3, sepotong tanpa suara sering ditambahkan ke akhir file sehingga jumlah sampel secara merata dibagi menjadi "bingkai" dari 1.152 sampel. Ada beberapa cara untuk membuat loop MP3 yang mulus, tetapi ini adalah topik untuk panduan lain.
- Ketika Anda mematikan Preload Audio Data dan nyalakan Load in Background, file besar tidak akan segera diputar, tetapi beban prosesor tidak akan meningkat. Ini karena butuh waktu untuk mengunduh, tetapi utas utama dalam kasus ini tidak menganggur.
- Saat menonaktifkan Preload Audio Data dan menonaktifkan Load in Background, file besar pada panggilan pertama menempati aliran utama. Namun, ini bukan masalah ketika menggunakan FMOD, yang melakukan decoding dalam aliran yang terpisah.
Komentar
Format kompresi:- Saat mengimpor file ke Unity, mereka harus selalu dalam format yang tidak terkompresi, misalnya, dalam WAVE (.wav) atau AIFF (.aiff). Banyak format terkompresi adalah format lossy , yaitu, ketika dikodekan, informasi hilang. Jika Anda mengimpor file terkompresi, seperti MP3 atau Vorbis, ke Unity, maka Unity pertama menerjemahkannya ke dalam format yang tidak terkompresi, dan kemudian menyandikan ulang ke dalam format pilihan Anda, bahkan jika ini adalah format yang sama dengan yang Anda mulai. Ini dapat menambahkan artefak kompresi baru, yang umumnya tidak diinginkan.
- Dokumentasi middleware AudioKinetic Wwise memiliki artikel yang sangat baik tentang berbagai format kompresi suara, pro dan kontra mereka, dan platform yang didukung.
- Jika Anda menggunakan FMOD, maka Anda memiliki akses ke format FADPCM-nya, yang jauh lebih baik daripada format ADPCM yang lama. Namun, itu tidak dibangun ke dalam Unity.
- Ada kemungkinan bahwa pada iPhone Anda ingin menggunakan, misalnya, MP3 bukan Vorbis, karena memiliki dekoder MP3 perangkat keras yang memungkinkan prosesor untuk tidak membongkar file MP3 yang disimpan dalam RAM atau pada disk. Tapi hati-hati - ini mungkin tidak cocok untuk perulangan suara (lihat bagian "Perhatian" di atas); selain itu, hanya dapat mendekode satu MP3 pada satu waktu. Jika Anda perlu membongkar beberapa MP3 secara bersamaan, operasi ini akan dilakukan secara terprogram, seperti dalam kasus Vorbis. Ini seharusnya tidak menimbulkan masalah serius, tetapi perlu dicatat bahwa decoding MP3 memuat prosesor sedikit lebih dari decoding Vorbis.
- Jika platform targetnya adalah Playstation 4, format ATRAC9 memberikan rasio kompresi yang cukup tinggi dengan beban CPU lebih sedikit daripada Vorbis atau MP3.
- Untuk Xbox One, format Microsoft XMA adalah pengganti yang baik untuk Vorbis atau MP3. Microsoft 8:1 15:1.
:- PCM ( ) Compressed in Memory. Decompress on Load , , Streaming.
- , FMOD Wwise , Unity ( - ).
- Β« Β» (Foley), , , . , . , , .
- (Sample Rate), Unity . , 100%, Optimise Sample Rate, / , . , , .