유니티 오디오 설정
압축
오디오 압축(Compression) 및 압축 해제(Decompression)를 수행하는 소프트웨어/알고리즘 또는 장치를 코덱(codec) 이라 한다. 그럼 PCM, ADPCM, Vorbis, MP3와 같은 다양한 **오디오 코덱들이 존재하는데, 어떤 코덱을 선택해야 할까?
먼저 코덱을 선택하기에 앞서, 오디오 압축이 필요한 이유를 알아야 하는데, 그 이유는 명확하게 파일 크기 및 메모리 사용량을 줄이기 위해서 이다. 그럼 위에 언급된 코덱들 중에서 파일 크기 및 메모리 사용량이 가장 작은 코덱을 선택하면 될 것 같지만 그렇게 쉽지는 않다. 왜냐하면 대부분의 코덱이 퀄리티를 저하 시키는 손실 압축(Lossy Compression)이며, 압축 해제 또한 공짜가 아니기 때문이다. 따라서 각 코덱의 특징을 알고 상황에 맞게 선택할 수 있어야 한다.
PCM (.wav)
PCM(Pulse-code modulation)은 압축을 하지 않는 코덱이며, 따라서 퀄리티 저하가 일어나지 않기 때문에 다른 코덱들에 비해서 최상의 퀄리티를 유지할 수 있고 압축 해제를 위한 CPU 부하가 없다. 하지만 파일 크기가 클 경우 빌드 크기 및 메모리 사용량이 빠르게 증가할 수 있다는 단점이 있다.
ADPCM (.wav)
ADPCM(Adaptive differential PCM)은 PCM과는 달리 손실 압축 코덱으로, PCM에 비해 약 3.5배 사이즈를 압축 시키며 아래에서 볼 Vorbis 코덱에 비해서 압축 해제를 위한 CPU 사용량이 매우 적다는 장점이 있다. 단점으로는 다른 코덱들에 비해서 노이즈가 심할 수 있다는 것이다[1][2]. 하지만 반드시 그런 것은 아니므로 압축 전/후를 비교 해봐야 한다.\
Vorbis (.ogg)
Vorbis 코덱 또한 손실 압축 코덱이다. Vorbis 코덱의 장점은 높은 압축률과 더불어 변환된 오디오의 퀄리티가 높다. 또한 슬라이더를 통해 퀄리티를 정할 수 있으며, 퀄리티를 낮추면 파일 크기도 줄어든다. 단점은 압축 해제를 위해 사용하는 CPU 사용량이 ADPCM에 비해 월등히 높다.
MP3 (.mp3)
MP3 코덱 또한 손실 압축 코덱으로, 유니티에서 모바일을 제외한 플랫폼에서는 MP3 코덱을 선택할 수 없다. 퀄리티는 쓸만하지만 더 높은 압축률로 더 좋은 퀄리티를 내는 Vorbis 코덱이 있으며, MP3 코덱은 압축 특성 상 루프에 적합하지 않다[3][4]. 이제는 굳이 쓸 필요가 없다는 분위기인 것 같다.
지금까지는 유니티에서 자체적으로 지원하는 코덱을 통해 압축하는 경우를 살펴보았다. 그럼 사전에 압축을 하고 나서 유니티에 임포트를 하면 어떻게 될까?
Vorbis(.ogg) 코덱으로 압축된 파일을 임포트하는 경우를 생각해보자.
PCM의 경우는 파일 크기가 무려 9배나 증가했다. 무압축 코덱이기 때문에 압축이 해제 된 것이다. 하지만 이미 우리는 사전에 손실 압축을 거진 오디오를 임포트 했기 때문에 퀄리티도 저하되고 파일 크기도 원래대로 돌아가는 문제가 발생한다.
Vorbis의 경우는 파일 크기가 감소했다. 원본 코덱과 임포트 설정에서의 코덱이 같으므로 유니티가 원본 오디오 파일을 그대로 사용할 것 같지만 사실 유니티는 압축을 해제 한 후 자체적으로 구현한 Vorbis 코덱으로 다시 압축을 한다[5]. 압축을 두 번 하게 되므로 퀄리티가 더 저하되는 결과를 가져오게 된다.
ADPCM의 경우 역시 압축 해제 후 다시 압축 하므로 원본 보다 퀄리티가 더 저하되게 된다.
결론은 압축된 오디오 파일을 임포트 하는 것은 퀄리티만 저하 시키게 되므로 오디오 파일 크기가 프로젝트 크기에 문제가 되는 경우 아니라면 지양해야 한다[5][6][7][8].
샘플 레이트
이미지가 픽셀들로 구성되어 있고 이미지가 얼마나 섬세한지 나타내는 정도를 해상도라고 한다면, 오디오는 샘플들로 구성되고 오디오의 해상도를 샘플 레이트(Sample Rate)로 표현할 수 있다. 또한 픽셀이 컬러 값과 강도를 가지고 있는 것처럼, 샘플 또한 볼륨 정보를 나타내는 진폭(amplitude) 정보를 가지고 있다.
샘플 레이트는 8000Hz 또는 8kHz와 같이 헤르츠(Hz) 단위로 표기하며, 오디오가 초당 몇 번 샘플링 되었는지를 나타낸다. 즉, 8000Hz는 초당 8000번 샘플링 되었고 1초에 8000개의 샘플들이 존재하게 된다. 가장 많이 사용되는 샘플 레이트는 44.1kHz와 48kHz로, 이 이상은 사람이 구별할 수 없다고 한다. (44.1kHz과 48kHz도 구별은 안된다고 한다.)
Preserve Sample Rate
원본 오디오 파일의 샘플 레이트를 사용한다. 오디오를 임포트 하면 기본적으로 이 옵션으로 설정된다.
Optimize Sample Rate
유니티가 오디오 파일을 분석해서 퀄리티를 유지한 채 샘플 레이트를 최적으로 맞춘다. 완벽하지는 않다고 하니 적용 후 퀄리티에 문제가 없는지 확인을 해보도록 하자[9]. PCM과 ADPCM 코덱만 사용할 수 있다.
Override Sample Rate
샘플 레이트를 직접 설정한다. 샘플 레이트 44.1kHz / 48kHz 이상은 사람이 구별할 수 없기 때문에 파일 크기만 늘리게 되며, 다운 샘플링을 하는 경우는 원본 오디오와 퀄리티에 차이가 생길 수 있으므로 주의 해야 한다. 또한 유니티에서 다운 샘플링을 하면 빌드 후 파일 크기에만 영향을 주므로 다운 샘플링을 하고 임포트를 하면 원본과 빌드 후 파일 크기를 모두 줄일 수 있다.
샘플 레이트는 웬만하면 원본 오디오 파일의 샘플 레이트를 변경하지 않는 것이 좋으며, 파일 크기가 문제가 될 경우 샘플 레이트를 변경하는 것 보단 압축을 활용하도록 하자.
로드 타입
Decompress On Load
이 옵션은 오디오 클립이 로드 될 때 압축을 해제한 후 메인 메모리에 올린다. 압축이 해제된 상태로 메인 메모리에 존재하므로 재생할 때 CPU를 가장 덜 사용하지만 메인 메모리를 가장 많이 사용하게 된다. 따라서 파일 크기가 큰 오디오는 적합하지 않다.
Compressed In Memory
이 옵션은 오디오 클립이 로드 될 때 압축된 상태로 메인 메모리에 올린다. 따라서 플레이 할 때 마다 압축을 해제해서 재생한다. (압축을 해제 한 상태로 유지하는 것이 아님) 압축한 상태 이므로 메인 메모리를 적게 사용하지만 재생할 때 압축 해제를 위해 CPU 사용량이 증가한다.
※ PCM 코덱으로 설정되어 있을 때 위 두 가지 옵션은 동일한 기능을 한다.
Streaming
이 옵션은 오디오 클립이 재생될 때 HDD/SDD와 같은 보조 기억 장치에서 바로 불러오면서 압축을 해제한다. 가장 적은 메인 메모리를 사용하지만 보조 기억 장치에 접근 하는 것은 매우 느린 작업이므로 CPU를 가장 많이 사용한다. 따라서 아주 가끔 재생되는 크기가 큰 배경 음악과 같은 것이 적합하다.
임포트 설정 가이드라인[10]
PC / Console
Sound | Type | Load In Background | Preload | Format |
Music | Streaming | n/a | n/a | Vorbis (80%) |
Ambience(long) | Streaming / Decompress | Yes | No | Vorbis (70%) |
Environmental (short) | Decompress | Yes | Yes | Vorbis (70%) |
Music (one shot) | Compressed | Yes | Yes | Vorbis (85%) |
Foley | Compressed | Yes | Yes | PCM |
Non-Dialogue VO | Decompress | Yes | Yes | Vorbis (70%) |
Dialogue | Compressed | Yes | Yes | Vorbis (70%) |
FX (long) | Decompress | No | Yes | Vorbis (70%) |
FX (short) | Compressed | Yes | Yes | PCM |
UI (long) | Decompress | No | Yes | Vorbis (70%) |
UI (short) | Compressed | Yes | Yes | PCM |
Mobile
Sound | Type | Load In Background | Preload | Format |
Music | Streaming | n/a | n/a | Vorbis (65%) |
Ambience(long) | Compressed | Yes | Yes | Vorbis (40%) |
Environmental (short) | Decompress | Yes | Yes | Vorbis (45%) |
Music (one shot) | Compressed | Yes | Yes | Vorbis (65%) |
Foley | Compressed | No | Yes | PCM/ADPCM |
Non-Dialogue VO | Decompress | Yes | Yes | Vorbis (45%) |
Dialogue | Compressed | Yes | Yes | Vorbis (45%) |
FX (long) | Decompress | No | Yes | Vorbis (45%) |
FX (short) | Compressed | Yes | Yes | PCM/ADPCM |
UI (long) | Decompress | No | Yes | Vorbis (45%) |
UI (short) | Compressed | Yes | Yes | PCM/ADPCM |
[ 참조 ]
[1] https://medium.com/@made-indrayana/understanding-audio-compression-settings-in-unity-e879a821023f
[2] https://docs.unity3d.com/ScriptReference/AudioCompressionFormat.ADPCM.html
[3] https://forum.unity.com/threads/seamless-audio-loop-impossible-in-unity.393032/
[4] https://www.reddit.com/r/GameAudio/comments/p2iwtx/til_unity_does_not_loop_mp3s_correctly_use_wav/
[5] https://gameaudio.fandom.com/wiki/Audio_In_Unity#cite_note-1
[6] https://forum.unity.com/threads/ogg-audio-size-getting-doubled.461074/
[7] https://www.reddit.com/r/GameAudio/comments/ejhcob/should_i_use_wav_files_in_unity/
[8] https://forum.unity.com/threads/size-of-audio-files.492810/
[10] https://cldn.dev/guides/Unity-Audio-Best-Practices/