메타사운드 소개
언리얼 엔진 5에서 도입된 메타사운드(MetaSounds) 는 오디오 디자이너가 사운드 소스를 생성하기 위한 디지털 신호 처리(DSP) 그래프를 완벽하게 제어할 수 있는 하이 퍼포먼스 오디오 시스템입니다.
메타사운드는 사용자 커스터마이제이션, 타사 확장성, 그래프 재사용, 에디터 내에서 사운드를 디자인할 수 있는 강력한 툴을 제공합니다.
완벽한 프로시저럴 오디오 엔진
사운드 큐와 달리 메타사운드는 근본적으로 디지털 신호 처리(DSP) 렌더링 그래프입니다. 따라서 오디오 디자이너는 오디오 버퍼 수준에서 샘플 수준으로 정밀한 타이밍과 제어를 지원하는 강력한 프로시저럴 오디오 시스템을 구축할 수 있습니다.
메타사운드를 사용하면 오디오 디자이너는 런타임에 오디오를 합성하여 생성하고, 프로시저럴 방식으로 생성된 사운드를 다른 오디오 소스와 자유롭게 조합하고 연결할 수 있습니다.
또한 메타사운드는 게임 데이터 및 플레이어의 상호작용과 손쉽게 통합됨으로써 게임플레이 이벤트로 트리거되는 몰입감 있는 경험을 만들 수 있도록 디자인되었습니다.
오디오 디자이너에게 더 많은 제어권 부여
각 메타사운드는 그 자체로 오디오 렌더링 엔진입니다. 서로 병렬로 렌더링되며, 샘플 레이트, 버퍼 크기, 채널 수 등의 독립될 수 있는 렌더링 포맷을 갖습니다
메타사운드는 새로운 메타사운드 에디터(MetaSound Editor) 에서 생성할 수 있습니다. 메타사운드 에디터를 활용하면 프로그래밍 경험이 전혀 없는 오디오 디자이너도 노드 기반 인터페이스로 프로시저럴 사운드를 만들 수 있습니다. 메타사운드 에디터는 모든 오디오 입력 파라미터의 실시간 프리뷰를 지원하며, 메타사운드의 여러 사전 제작된 노드는 전체 오디오 렌더링 파이프라인에 대해 디테일한 제어 옵션을 제공합니다.
메타사운드 에디터에는 리얼타임 출력 미터, 파라미터를 제어 및 시각화하는 그래프 내 위젯(다이얼 및 슬라이더), 이벤트와 실시간으로 상호작용하는 버튼이 있습니다.
샘플 수준으로 정밀한 오디오 제어
메타사운드는 오디오 소스를 샘플 수준으로 정밀하게 제어할 수 있도록 지원합니다. 샘플 수준의 정밀함(Sample Accuracy)이란 타이밍을 단일 오디오 샘플에 맞출 수 있다는 의미입니다. 즉, 샘플 레이트가 초당 48,000인 경우 샘플 수준으로 정밀한 이벤트의 타이밍 해상도는 1/48,000초 또는 0.02밀리초입니다.
메타사운드는 샘플 수준으로 정밀한 제어를 다양한 방식으로 제공합니다. 메타사운드 트리거는 그래프 내에서 샘플 수준으로 정밀한 이벤트를 실행합니다. 트리거는 게임플레이 이벤트, 메타사운드 노드, 그래프 자체에서 발생할 수 있습니다.
메타사운드의 웨이브 플레이어(Wave Player) 노드는 샘플 수준으로 정밀한 연결을 지원합니다. 즉, 재생 중인 사운드 웨이브의 재생이 종료되면 끊김이나 중단 없이 대기열의 다음 사운드 웨이브를 매끄럽게 재생합니다.
많은 메타사운드 노드 파라미터는 오디오 버퍼에 의해 변조될 수 있으며, 따라서 '오디오 레이트' 파라미터 변조가 가능합니다. 이를 통해 강력한 합성 및 사운드 디자인 기법을 사용할 수 있습니다.
개선된 워크플로
메타사운드를 사용하면 프리셋을 통해 메타사운드 그래프를 재사용 및 레퍼런스할 수 있습니다. 프리셋은 기존 메타사운드 그래프를 레퍼런스하며, 그래프의 입력은 오버라이드될 수 있습니다.
오디오 디자이너는 단일 그래프에서 여러 프리셋으로 베이스 그래프를 레퍼런스하여 생산성을 크게 높일 수 있습니다. 프리셋에 따라 동일한 베이스 그래프에 대해 고유한 차이점을 갖습니다. 프리셋이 없이 여러 베리에이션을 처리하려면 수백 가지의 유사한 그래프를 관리해야 할 것입니다.
프리셋 사용의 또 다른 장점은 베이스 그래프를 업데이트하고 변경 사항이 해당 그래프를 레퍼런스하는 프리셋에 자동으로 전파되게 하는 것입니다. 이를 통해 개발 프로세스 전반에서 생산성을 크게 향상할 수 있습니다.
메타사운드는 프리셋뿐 아니라 메타사운드를 다른 메타사운드 그래프에서 직접 사용하는 기능인 그래프 합성도 지원합니다. 커스텀 메타사운드 노드도 다른 메타사운드 그래프 내에서 생성 및 사용할 수 있습니다. 커스텀 노드는 입력과 출력을 정의하고 툴팁 및 버전 관리 정보를 제공할 수 있습니다.
이렇게 하면 공통 기능 노드의 라이브러리를 빌드하고 여러 그래프에서 재사용할 수 있습니다. 프리셋과 마찬가지로 커스텀 메타사운드 노드 또한 그 노드를 레퍼런스하는 모든 메타사운드에 변경 사항을 자동 전파하므로, 복잡하고 변경이 잦은 프로젝트에서 생산성을 한층 높입니다.
향상된 퍼포먼스
메타사운드는 비동기 사운드 소스 디코딩에 사용되는 것과 동일한 아키텍처 및 작업을 사용하여 메인 오디오 믹서에 비동기적으로 렌더링됩니다.
각 메타사운드 DSP 그래프는 레퍼런스에 의해 전달되었지만 복사되지는 않은 노드 간 데이터와 함께 최적화된 스태틱 비가상 C++ 오브젝트로 자동 변환됩니다. 그래서 바이트코드 런타임 해석, 비용이 높은 가상 함수 오버헤드, 데이터 복사 등 이런 타입의 시스템에 일반적으로 따르는 불리점을 피할 수 있습니다.
성장하는 노드 라이브러리
메타사운드는 점점 늘어나고 있는 메타사운드 노드 라이브러리와 함께 배포됩니다. 이 라이브러리는 프로시저럴 사운드 디자인 및 음악을 위한 강력하고 다양한 옵션을 제공합니다.
라이브러리에는 탐색, 루프 포인트, 샘플 수준으로 정밀한 연결, 피치 스케일 변조, 오디오 파일의 큐 포인트에서 읽기 등을 지원하는 풍부한 웨이브 플레이어 노드 기능이 있습니다.
그 외의 노드로는 다양한 트리거 유틸리티 라이브러리, DSP 수학 연산, DSP 필터, 다이내믹 프로세싱, 공간화, 리얼타임 합성 생성기 등이 있습니다.
이식 및 확장 가능
메타사운드는 C++ 노드 API를 사용하여 서드파티 플러그인으로 확장할 수도 있습니다.
메타사운드 에디터용으로 새 노드를 생성하려면 프로그래머가 노드의 입력과 출력, 실행 콜백을 정의하는 C++ 클래스를 생성해야 합니다. 이 클래스에는 실제 오디오 렌더링의 코드 및 로직도 포함됩니다. 새 노드는 몇백 줄의 코드만으로 이루어진 단일 '.cpp' 파일로 작성할 수 있습니다.
다채로운 게임플레이 상호작용
메타사운드는 머티리얼 및 나이아가라 VFX 시스템에서 사용되는 입력 파라미터와 비슷한 커스텀 유저 입력 파라미터를 지원합니다. 이 파라미터는 블루프린트 내에서 직접, 또는 게임플레이 C++ 코드에서 오디오 컴포넌트 파라미터 인터페이스를 통해 게임플레이 시스템에 연결될 수 있습니다.
메타사운드에는 파라미터 변조 플러그인(Parameter Modulation Plugin)도 통합되어 있습니다. 이 플러그인은 모든 변조 소스(블루프린트 포함)에서 변조 버스 에셋에 작성하는 시스템을 제공하는 옵션 플러그인입니다. 메타사운드는 파라미터 버스를 읽을 수 있으며, 이를 사용하면 메타사운드 시스템을 변조할 수 있습니다.