Audio / Sound 최적화 및 설정
Unity에서 Audio 설정과 옵션에 대해서 테스트하면서 해당 최적화에 대한 고민을 진행했고 그 결과에 대한 포스팅이다.
Unity에서는 전체적인 Project Setting - Audio 옵션과 / 각 개별의 Audio Clip에서의 설정 2가지 설정이 가능하다.
Project Setting Audio
Global Volume | 전체적인 볼륨 |
Vloume Rolloff Scale | 로그 롤 오프 기반의 소스에 대한 전역 감쇠 설정 |
Doppler Factor | 도플러 효과에 대한 설정 처리 |
Default Speaker Mode | 기본 스피커 모드(Mono/ Stereo/ Quad / Surrond / Mode5point1/ Mode7Point1 / Prologic) |
System Sample Rate | 출력 샘플 속도 0을 설정하면 Unity 시스템의 샘플 속도로 사용 |
DSP Buffer Size | Default - 기본 버퍼 Best Latency - 지연시간 최적화 Good Latency - 성능과 지연시간 균형 Best Performance - 성능 최적화 |
Max Virtual Voices | 가상 음성 수 (음수보다 커야함) |
Max Real Voices | 동시에 재생할수 있는 음성수 설정 |
Spatializer Plugin | 3D 공간에서의 네이티브 플러그인 오디오 선택 |
Ambisonic Decoder Plugin | Ambisonic 네이티브 오디오 플러그인 활성화 |
Disable Unity Audio | 독립형 빌드 오디오 시스템을 활성화 |
Virtuallize Effect | CPU 절약하기 위한 컬링된 Audio Sources에서 효과 및 공간 활성화 |
<Audio Clip 설정>
읽기 방식(Load Type)
Decompress On Load | 오디오 파일은로드되는 즉시 압축이 해제됩니다. 즉석에서 압축을 풀 때의 성능 오버 헤드를 피하기 위해 더 작은 압축 사운드에이 옵션을 사용합니다. 로드시 Vorbis로 인코딩 된 사운드를 압축 해제하면 압축 된 상태로 유지하는 것보다 약 10 배 더 많은 메모리를 사용하므로 (ADPCM 인코딩의 경우 약 3.5 배) 대용량 파일에는이 옵션을 사용하지 마십시오. |
Compressed In Memory | 사운드는 메모리에 압축 된 상태로 유지하고 재생하는 동안 압축을 해제합니다. 이 옵션은 약간의 성능 오버 헤드 (특히 Ogg / Vorbis 압축 파일의 경우)가 있으므로로드시 압축 해제가 엄청난 양의 메모리를 사용하는 더 큰 파일에만 사용합니다. 압축 해제는 믹서 스레드에서 발생하며 오디오 패널의 "DSP CPU"섹션에서 모니터링 할 수 있습니다 |
Streaming | 즉석에서 소리를 디코딩합니다. 이 방법은 최소한의 메모리를 사용하여 디스크에서 점진적으로 읽고 즉시 디코딩되는 압축 된 데이터를 버퍼링합니다. 압축 해제는 프로파일 러 창의 오디오 창에있는 "스트리밍 CPU"섹션에서 CPU 사용량을 모니터링 할 수있는 별도의 스트리밍 스레드에서 발생합니다. 참고 : 스트리밍 클립에는 오디오 데이터가로드되지 않은 경우에도 약 200KB의 오버로드가 있습니다. |
압축 형식(Compression Format)
PCM | 이 옵션은 파일 크기가 커지면서 고품질을 제공하며 매우 짧은 사운드 효과에 가장 적합하다(무압축) |
ADPCM | 이 형식은 약간의 소음이 포함되어 있고 발자국, 충격, 무기와 같이 대량으로 재생해야하는 사운드에 유용합니다. 그만큼압축 비율은 PCM보다 3.5 배 작지만 CPU 사용량은 MP3 / Vorbis 형식보다 훨씬 낮기 때문에 앞서 언급 한 사운드 범주에 선호되는 선택입니다. (약간 압축) |
Vorbis/MP3 | 압축하면 파일 크기가 작아 지지만 PCM 오디오에 비해 품질이 다소 떨어집니다. 압축 정도는 품질 슬라이더를 통해 구성 할 수 있습니다. 이 형식은 중간 길이의 음향 효과 및 음악에 가장 적합합니다. (완전 압축) |
샘플 속도 설정
Preserve Sample Rate | 이 설정은 샘플 속도를 수정하지 않은 상태로 유지합니다 (기본값). |
Optimize Sample Rate | 유니티에서 자동으로 최적화 |
Override Sample Rate | 샘플 속도 무시 수동으로 재정의 |
Force To Mono | 활성화하면 오디오 클립이 단일 채널 사운드로 다운 믹스됩니다. 다운 믹싱 후 신호는 피크 정규화됩니다. |
Load In Background | 활성화되면 오디오 클립이 메인 스레드에서 중단없이 백그라운드에서로드됩니다. 모든 AudioClip이로드를 완료 한 표준 Unity 동작을 보장하기 위해 기본적으로 꺼져 있습니다 |
Preload Audio Data | 활성화하면 장면이로드 될 때 오디오 클립이 미리로드됩니다. 씬 재생이 시작될 때 모든 AudioClip로드가 완료된 표준 Unity 동작을 반영하기 위해 기본적으로 켜져 있습니다. |
Quality | 압축 된 클립에 적용 할 압축의 양을 결정합니다 . PCM / ADPCM / HEVAG 형식에는 적용되지 않습니다. 파일 크기에 대한 통계는 검사기에서 볼 수 있습니다. |
간단하게 2D 에서는 Mono(싱글 채널)로 설정을 기본적으로 하고 3D 공간에서는 Force To Mono로 설정을 해야
공간에 비례한 대한 사운드 음량 처리가 가능하다.
런타임 시 위치에 따라 멀티채널 사운드가 실시간으로 모노 소스로 평탄화되어 CPU 소모가 증가하고 메모리가 낭비될수 있어서 설정 확인이 필요하다.
사운드에 대한 딜레이가 중요하다고 하면 Best latency설정을 추천한다.
오디오 클립에 대한 설정은 Project Setting의 기본을 기준으로 사운드 처리를 기반으로 처리한다.
< 사운드에 따른 비교 >
대략 사용하는 Audio의 형태를 기준으로 정리하면 다음 과 같다.
Audio 파일 용량 | Audio 길이 | 빈도 | 재생 설정 | |
BGM | 크다. | 길다. | 한번 | 중요하지 않다. |
Voice | 크다. | 길다. | 보통 | 중요 함 |
Effect | 작다. | 작다. | 자주 | 중요 함 |
Enviornment | 보통. | 보통 | 보통 | 중요하지 않다. |
해당 환경에 맞춰서 Audio Clip의 설정을 변경하는 것을 권장한다.
대부분의 오디오 클립에서는 Load Type을 Compressed In Memory로 설정하는 것이 적절한 기본값이다.
콘솔에는 자체 커스텀 포맷이 있으며, 그 외의 모든 플랫폼에는 Vorbis가 적합하다고 한다.
Unity는 모바일 환경에서 하드웨어 압축 해제를 사용하지 않으므로 iOS에서 MP3를 채택해도 별다른 장점이 없다.
타겟 플랫폼에 적합한 샘플 속도를 선택합니다.
예를 들어, 모바일 기기에서 짧은 사운드 효과는 최대 22050Hz 이하여야 하며,
대부분의 경우 이보다 훨씬 낮아도 최종 품질에 미치는영향은 미미하다.
긴 음악이나 효과음의 Load Type이 Streaming으로 설정되어 있는지 설정 확인 해보자. 설정 되어있다면 전체 에셋이 한
번에 메모리에 로드된다.
Load Type을 Decompress On Load로 설정하면 원시 16비트 PCM 오디오 데이터로 사운드 압축을 풀어 CPU 및
메모리 소모가 발생한다.
이 설정은 여러 동시 인스턴스가 자주 발생하는 발소리나 칼이 부딪히는 소리와 같은 짧은 사운드에만 적합하다.
가능하면 원본의(압축되지 않은) 비압축 WAV 파일을 소스 에셋으로 사용하는것을 권장한다.
MP3나 Vorbis 등의 압축 포맷을 사용하면 Unity는 빌드 시간 동안 압축을 풀고 다시 압축하며, 이로 인해 손실이 있는 패스가 두 번 발생하기 때문에 최종품질이 저하된다.
Audio Clip : [링크]
Project Setting Audio : [링크]
★★☆☆☆
'개발 > Unity' 카테고리의 다른 글
Unity)EDM4U(External Dependency Manager for Unity) (0) | 2021.05.26 |
---|---|
Unity)Android Gradle Plugin Version Change (4) | 2021.05.13 |
Unity) URP(Universal Render Pipeline) 셰이더 사용하는 방법 (3) | 2021.04.30 |
Unity)점진적 가비지 컬렉션 (User Incremental GC) (0) | 2021.04.26 |
Unity)어드레서블(Addressables) (0) | 2021.04.15 |
댓글