사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 1부

사운드 디자인 / Wwise에 대한 팁과 도구

 

많은 사운드 디자이너들이 오디오 플러그인 개발을 오디오 프로그래머의 '흑마법' 영역이라 생각합니다. 보통 코딩 기술뿐만 아니라 수학, 물리학, 디지털 신호 처리 등 사운드 디자이너에게 꼭 필요하지 않은 기술을 필요로 하기 때문이죠. 

사운드 디자이너가 Wwise에서 제공되지 않는 DSP 효과를 다른 프로젝트에서 들을 경우, 아마도 이 효과가 어떻게 작동하는지 빠르게 이해하고 일반적인 도구를 사용하여 동일한 기능을 재현하는 기술적 프로토타입을 만들어낼 수 있을 겁니다. 하지만 성능에 제약이 있거나 이러한 도구의 출력을 저작 도구나 엔진 안에서의 플러그인으로 배포하기가 어렵기 때문에, 대부분의 아이디어가 프로토타입 단계에서 멈추고 실제 게임에서 활용되지 않는 경우가 많죠.

다행히 PureData(퓨어데이터)와 Heavy(헤비)라는 도구를 사용하면 저작 도구에서 사용하고 실제 게임에서 실행할 수 있는 효과나 음원 플러그인을 사운드 디자이너가 직접 제작할 수 있습니다.

PureData란 무엇인가요?

image001

PureData (PD)는 1990년대에 밀러 퍼켓(Miller Puckette)라는 사람이 상호작용 음악 제작과 멀티미디어 작업을 위해 개발한 시각적 프로그래밍 언어입니다. PD는 오픈 소스 프로젝트이며 새로운 확장을 작업하는 대규모의 개발자 기반을 갖고 있습니다. 이제는 심지어 이 안에 VST 플러그인도 로드할 수 있죠!

PD 코드를 담은 파일은 Patch(패치)라고 부릅니다. 그리고 PD는 SubPatch(하위패치)도 지원합니다. 모듈식 코드 단위를 사용하면 사용자가 복잡한 PD 프로젝트를 만들어낼 수 있습니다.

하지만 이 글은 PD 초보자 튜토리얼이 아닙니다. 이 도구에 대해 더 알고 싶은 분들은 https://puredata.info/를 참고해 주세요.

 

'Hello World'의 PD 버전 (중국어를 원하시면 여기를 클릭하여 동영상을 시청하세요)

 

위의 동영상에서 볼 수 있듯이 PD는 모듈식 신시사이저와 거의 동일한 방식으로 사용됩니다. 서로 다른 오브젝트를 연결하여 신호 시스템을 제작하고 매개 변수를 조절하여 실시간으로 상호작용할 수 있죠.

PD는 사운드 디자이너가 일반 도구를 사용해서 기술적 프로토타입을 제작한 후 올바른 컴파일러로 플러그인을 생성하게 해주는 '블루프린트 환경'이라고 할 수 있습니다.

image004마치 레고 블록으로 흥미로운 것들을 제작하는 것과 같죠

 

Heavy는 무엇인가요?

Heavy는 Enzien Audio(엔지안 오디오)가 개발한 PD Patch 컴파일러로, 사운드 디자이너가 제작한 PD Patch를 C/C++ 코드로 변환해 줍니다. 이 도구를 사용하면 사운드 디자이너가 직접 코드를 제작할 필요 없이 PD 환경에서 대상 플랫폼에서 실행할 수 있는 코드를 생성할 수 있죠.

Heavy는 사운드 디자이너가 제작한 '블루프린트'로 무언가를 제작해 낼 수 있는 '자동 워크숍'이라고 생각하시면 됩니다.

image006

그러면 이 도구로 무엇을 할 수 있을까요?

PD + Heavy로 제작한 플러그인으로 무엇을 할 수 있을까요?

1. 사운드 디자이너가 설계한 PD Patch를 기반으로 실시간 DSP 작동하기.

2. 오디오 입력과 출력 지원하기. 음원 Patch에 adc~ 오브젝트가 있을 경우 효과 플러그인이 생성됩니다. 이 오브젝트가 없을 경우 음원 플러그인  (예: Wwise SoundSeed Wind, Wwise SynthOne) 이 생성됩니다.

3. 제어 매개 변수의 입력과 출력 지원 제공. Wwise Sound Engine의 Game Parameter에 의해 제어되거나 Game Parameter로 데이터를 전송하여 LFO와 같은 여러 기능으로 사용될 수 있습니다.

4. UI 이벤트의 입력과 출력 지원 (Unity에만 해당).

이제 사운드 디자이너가 이러한 도구로 무엇을 할 수 있는지 알아보았으니, 이 도구로 무언가를 제작해봅시다.

Sample Divider(샘플 분리기)

 

image008래스터화(rasterized) 효과의 오디오 버전이라고 할 수 있습니다

Sample Divider 효과는 보통 Bitcrusher(비트크러셔)와 같은 디스토션 플러그인에 들어있습니다. 이 기능을 PD + Heavy를 사용해서 재현해봅시다.

이 효과를 재현해보려는 이유는 다음과 같습니다:

1. Wwise에는 Sample Divider 플러그인이 없습니다.

2. Sample Divider는 사실 굉장히 유용합니다. 특히 사이버펑크가 다시 인기 있어진다면요 (예를 들어 니어 오토마타나 타이탄 폴 2에서 흔히 등장하는 오작동 효과를 사용하고 싶다면 Sample Divider 없이 어떻게  이 효과를 낼 수가 있을까요?).

걱정 없는 DSP 처리

Patch 파일을 사용해서 '블루프린트'를 제작하기 전에 먼저 Sample Divider가 어떻게 작동하는지 이해해야 합니다.

Sample Divider는 원래의 샘플 레이트(표본화율)보다 낮은 주파수로 입력 신호를 다시 샘플링한 후 보다 낮은 출력 음질로 원본 신호를 왜곡합니다.

다음 이미지는 Sample and Hold (S/H) 모듈이 작동하는 방식을 보여줍니다 (밀러 퍼켓의 '전자 음악의 이론과 기술'에서 가져옴).

image009입력 신호
샘플 클록
샘플 출력

S/H 모듈

위의 이미지에서는 정현파 신호가 S/H 모듈의 IN 지점으로 전송되며, 톱니파  신호가 Sample & Hold 작업을 트리거 하기 위해 OUT 지점으로 전송됩니다. 톱니파 값이 0으로 떨어지면, S/H 오브젝트가 남은 시간 동안 샘플값을 그대로 유지하면서 입력 신호를 다시 샘플링하도록 트리거 합니다. 이렇게 하면 톱니파 주파수가 입력 신호의 샘플 레이트와 비슷해져서 출력 신호가 입력 신호와 비슷해집니다. 그렇지 않으면 디스토션이 더 심하게 되죠.

다음은 VCVRack (물리적 신시사이저와 비슷함)에서 S/H 모듈이 작동하는 방식을 보여줍니다.

SCOPE를 사용하여 계단 모앙을 만드는 법 (중국어를 원하시면 여기를 클릭하여 동영상을 시청하세요)

블루프린트 제작하기

이제 S/H 모듈이 작동하는 방식을 알아보았으니 Patch 파일을 사용해서 '블루프린트'를 제작해봅시다.

Heavy로 Patch 파일을 올바르게 컴파일하기 위해서는 지원되는 PD 오브젝트만 사용해야 합니다. 그렇지 않으면 컴파일 오류가 생기게 됩니다. Heavy가 지원하지 않는 PD 오브젝트의 목록은 제 2부에서 알려드리겠습니다.

대상 플랫폼 (이 경우 Wwise)에서 매개 변수가 보이도록 하기 위해서는 다음 방식으로 매개 변수를 선언해야 합니다.

  • PD에서 Ctrl+1을 눌러 오브젝트를 생성하고 'r SampleRateDivisionL @hv_param 4 24000 24000'을 입력합니다.
  • 'r'은 PD 밖에서 정보를 수신하는 오브젝트를 나타냅니다.
  • SampleRateDivisionL이 플러그인 UI에서 매개 변수 이름을 표시합니다.
  • '@hv_param'은 이 오브젝트가 Heavy에 의해 인터페이스 매개 변수로 컴파일될 것을 의미합니다.
  • 4, 24000, 24000은 최소, 최대, 기본 매개 변수 값입니다.

image014

r은 이 오브젝트가 외부에서 매개 변수 값을 수신함을 의미합니다.
(필수) @hv-param은 입력/출력값이 매개 변수임을 의미합니다. @hv_event는 이 매개 변수가 이벤트임을 의미합니다.
SampleRateDivisionL은 Wwise 안의 플러그인 UI에서 매개 변수 이름을 표시해 줍니다.
최소값
최대값
기본값

1. 좌우 채널에서 입력 신호를 개별적으로 처리하여 더 비대칭적으로 만들기 위해서 각 채널에 매개 변수를 만들어봅시다.

  • phasor~ 오브젝트는 샘플 클록으로 사용되는 톱니파 발진기입니다.
  • samphold~ 오브젝트는 S/H 모듈 자체입니다.
  • dac~ 오브젝트는 오디오 신호가 출력되는 대상입니다.

image015

참고: 이 Patch에서 adc~는 입력 신호를 말합니다. 음원 Patch에 adc~ 오브젝트가 들어있을 경우 효과 플러그인이 생성되며, 그렇지 않을 경우 음원 플러그인이 생성됩니다.

2. Patch 코드가 작동하는 방식을 살펴봅시다.

 

참고: 샘플 레이트를 제어하기 위해 hslider 오브젝트를 추가했습니다. 플러그인을 생성한 후에는 이 오브젝트가 불필요하기 때문에 꼭 제거해 주세요.

3. 이 Patch 파일을 J:\HeavyAudioPlayground\bitcrusher.pd로 저장하세요.

image019

이제 '블루프린트'가 생겼습니다. 이 블로그의 제 2부에서는 Heavy 컴파일러를 사용하여 '자동 워크숍'을 제작하고 이 워크숍을 사용하여 플러그인을 생성하고 게임에 배포하는 법을 알아보겠습니다. 기대해 주세요!

 

이 블로그는 중국어에서 영어로 번역되었으며, 그 후 한글로 번역되었습니다.
 

 

천종 호우 (Chenzhong Hou)

제품 전문, 개발자 관계 - 대중화권

천종 호우 (Chenzhong Hou)

제품 전문, 개발자 관계 - 대중화권

천종 호는 사운드 디자이너 겸 작곡가 및 음악 기술 연구자입니다. Ubisoft Shanghai(유비소프트 상하이)에서 일한 경력이 있으며 저스트 댄스(Just Dance)와 파 크라이(Far Cry) 시리즈의 사운드 디자인에 참여했습니다. 현재 Audiokinetic(오디오키네틱)의 대중화권에서 제품 전문가로 활동하고 있습니다.

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

AI를 활용한 Pagan Online의 다이얼로그(대화) 관리 개선

오디오 프로그래밍 / 게임 오디오 / 사운드 디자인 니콜라 루키치 (NIKOLA LUKIĆ) 우리는 인공지능의 연구개발이 상당한 추진력을 얻고 있는 시대에 살고 있습니다....

24.3.2020 - 작성자: 니콜라 루키치 (NIKOLA LUKIĆ)

Impacter와 Unreal - 게임 물리를 사용하여 Impacter 플러그인 제어하기

소개 Impacter(임팩터)는 Wwise를 위한 새로운 타격음 모델링 플러그인입니다. 플러그인 소개는 이 글을 통해 확인해주세요. 이 글에서는 Impacter를 사용하여...

3.6.2021 - 작성자: 션 소라한 (Sean Soraghan)

게임 음악은 단순히 그냥 음악이 아니다: 제 2부

게임 음악이란 무엇일까요? 상호작용 음악이란 무엇일까요? 이 질문에 답하기란 생각만큼 그리 간단하지 않습니다. 올리비에 더리비에르(Olivier Derivière)는 이 글을 통해...

27.10.2021 - 작성자: 올리비에 더리비에르 (OLIVIER DERIVIÈRE)

Wwise+GME 게임 음성 솔루션: 다양한 음성 플레이 대방출, 생생한 몰입감 선사

AppAnnie2021 모바일 게임 리포트는 강력한 소셜 인터랙션 속성을 가진 배틀 그라운드, 슈팅 및 온라인 MOBA가 플레이어들의 사랑을 많이 받았으며 게임 시간 증가를...

13.1.2022 - 작성자: Tencent Cloud

대사 | Wwise와 Unreal Engine에서의 나레이션

현대 게임의 필수 요소 중 하나인 보이스오버 대사는 플레이어가 캐릭터를 특정 목소리와 연관지을 수 있을 뿐만 아니라 전반적인 억양을 통해 캐릭터의 감정을 더 잘 이해할 수 있게...

11.4.2023 - 작성자: Jake Gamelin (제이크 겜린)

WAQL 2.0

Wwise Authoring Query Language (WAQL, 와클) 첫 번째 버전이 출시된 지 벌써 몇 년이 지났습니다. 첫 버전 이후 크게 변경된 점은 없습니다. 가장...

10.8.2023 - 작성자: 베르나르 로드리그 (Bernard Rodrigue)

다른 글

AI를 활용한 Pagan Online의 다이얼로그(대화) 관리 개선

오디오 프로그래밍 / 게임 오디오 / 사운드 디자인 니콜라 루키치 (NIKOLA LUKIĆ) 우리는 인공지능의 연구개발이 상당한 추진력을 얻고 있는 시대에 살고 있습니다....

Impacter와 Unreal - 게임 물리를 사용하여 Impacter 플러그인 제어하기

소개 Impacter(임팩터)는 Wwise를 위한 새로운 타격음 모델링 플러그인입니다. 플러그인 소개는 이 글을 통해 확인해주세요. 이 글에서는 Impacter를 사용하여...

게임 음악은 단순히 그냥 음악이 아니다: 제 2부

게임 음악이란 무엇일까요? 상호작용 음악이란 무엇일까요? 이 질문에 답하기란 생각만큼 그리 간단하지 않습니다. 올리비에 더리비에르(Olivier Derivière)는 이 글을 통해...