장용석, fmod를이용한사운드프로그래밍, ndc2010

Post on 03-Jul-2015

10.274 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fmod를 이용한 사운드 프로그래밍

넥슨신규개발3본부개발1실M2팀

장용석

• 이세션은튜토리얼세션입니다

• FMOD의장점을소개하고, 작업중경험했던일과사운드작업에대한이야기를진행합니다

• 시간관계상깊이있는설명까지다루지는못하고,쉽고간단하게설명할예정입니다

• 非프로그래머도쉽게이해할수있으리라생각됩니다프로그래머세션인데…

발표에앞서…

장용석

• 1998판타그램 킹덤언더파이어1, 샤이닝로어 온라인

• 2004엔플레버 라펠즈

• 2008넥슨 마비노기2

클라이언트, 툴프로그래머

발표자소개

• FMOD?

• Event System

• 작업경험과사례

• FMOD를사용하려면

• 정리

발표순서

• Firelight Technologies社에서제작한오디오라이브러리 (사운드엔진)

FMOD

• 다양한사운드파일포맷지원

• 다양한플랫폼지원 PC, Mac, 콘솔, 휴대용 게임기, iPhone, iPad …

• DSP, 사실적인 3D 사운드효과

많은 업체에서 널리 사용 / 유명 게임 엔진에 통합

FMOD

• 사운드엔진과함께

강력한디자인툴을제공

오늘 설명의 핵심

FMOD

• FMOD Ex

• FMOD Event System

• FMOD Designer

API

디자인 툴

• The low-level sound engine

• wav, mp3, mid 등 사운드 파일을 직접재생하는 low-level API 이것만으로도 사용 가능

• FMOD Ex의 상위 레이어

• FMOD Designer로 제작된 사운드 데이터를재생하는 data-driven API

API

• 사운드 디자인 툴

• 게임 안에서 각기 다른 상황에 따라

재생할지 미리 툴에서 제작!

• 프로그래머는 복잡하게 신경 쓸 필요 없이

단지 Play()만 하면 된다!

어떤 사운드를

어느 타이밍에

어떠한 이펙트를 주어서

…진짜 됩니다(물론 거짓말 조금 보태서)

EventSystem

•Event System을 전부 설명하기엔무리가 따르므로 …

•사운드 작업의 간단한 예를 들어극히일부 기능만 간단히 소개

예제

• 거리에따라소리가다르게들린다• 각각의거리에맞는사운드가필요총소리

• 바닥재질에따라소리가다르다• 하나의바닥재질당2~4개의사운드가필요발자국

소리

• 바람소리, 풀벌레소리, 부엉이소리등등…• 각각의사운드를일정주기또는랜덤하게재생환경음

하드코딩

아니면

총소리

데이터화

하지만 재생방법자체에 변화가생기면

결국코드수정이불가피!

• 역시비슷한작업필요발자국소리

• 각각의사운드에대해서재생주기및랜덤확률은어디서설정할것인가?

환경음

• 물론 작업 자체가 어려운 것은 아님

• 하지만 다양한 변화를 주는 시도나세세한 튜닝 작업은 어려움이 따르고

• 어떤한 방식으로든 프로그래머의추가 작업을 필요로 하게 된다

• 많은 부분을 사운드 디자이너의 손에 맡기고,프로그래머의 작업을 최소화 할 수 있다.

그렇다면 Event System을사용할경우?

• 많은 부분을 사운드 디자이너의 손에 맡기고,프로그래머의 작업을 최소화 할 수 있다.

그렇다면 Event System을사용할경우?

• 툴에서 “rifle” 사운드 이벤트를 제작한다.

총소리

• 툴에서 “rifle” 사운드 이벤트를 제작한다.

총소리

rifle_near.wavrifle_mid.wav rifle_far.wav

가로축은 거리 파라미터 부드러운트랜지션도 가능!

• 클라이언트 코드에서는 사운드 이벤트이름만 알면 된다

// 이벤트객체획득EventObj rifleSound = EventSystem->GetEvent( “rifle” );

// 좌표설정rifleSound->SetPosition(currentPos);

// 사운드재생 (객체는이후재사용가능)rifleSound->Play();

총소리

• 역시 툴에서 “footstep” 사운드 이벤트 제작

발자국소리

• 역시 툴에서 “footstep” 사운드 이벤트 제작

발자국소리

각 바닥 재질 별 사운드들

파라미터는 바닥 재질 타입으로 사용

현재 파라미터값에해당하는 사운드가 재생!

여러 개의 사운드 파일을정의할 수 있다

각 파일의 재생 빈도도 설정 가능!

• 코드에서는 바닥 재질만 설정해주면 된다

발자국소리

// 이벤트객체획득EventObj footstepSound = EventSystem->GetEvent( “footstep” );

// 재질설정 (바뀔때만 처리해주면OK)footstepSound->SetParameter(groundType);

// 사운드재생footstepSound->Play();

환경음

환경음

다중 레이어(멀티 트랙)

파라미터를 타임라인으로 사용(지정한 속도에 따라 자동 변화)

작업경험과사례

“소리가 왼쪽에서 오른쪽으로 지나갈 때부드럽게 연결되지 않고

왼쪽 스피커에서 들리다가갑자기 오른쪽 스피커로 튀는데

어떻게든 해줘요”

• 특별히 무슨 문제가 있었던 것은 아님

하지만 확실히 듣기에 거슬린다

원래그래요… 다른게임도그렇던데

• 거리가 가까울 때에는2D 사운드로 재생하면 된다

3D Pan Level 이펙트0일때 2D 사운드로,1일때 3D 사운드로

트랜지션 된다

거리가0m일 때에는 0

거리가4m이상인 경우 1

• 거리가 가까울 때에는2D 사운드로 재생하면 된다

3D Pan Level 이펙트0일때 2D 사운드로,1일때 3D 사운드로

트랜지션 된다

거리가0m일 때에는 0

거리가4m이상인 경우 1

“제 컴퓨터에서 소리가작게 들리고 좀 이상한 것 같아요”

원래 그래요… 가 아니고

• 원인을 찾아 헤맸는데…

?!

• 업데이트는 제때제때…

• 사실 이런 간단한 문제 외에도…

• 사운드 하드웨어 표준화가 잘 안되어 있는지사운드칩셋마다 동작 차이를 보이는 경우도 약간 발생

• 별로 문제된 적은 없지만, 적절한 테스트는 필수

•바쁘게 다른 작업을 하고 있었는데…

마일스톤을사흘앞둔어느날

“자꾸 클라이언트가굳는데, 브레이크

걸어보니 FMOD 내부에서무한루프 돌잖아?!”

• 최근 멀티코어 지원을 위해로직, 렌더링, 애니메이션 처리가 스레드 분리

Calling FMOD commands from different threads.

Do not call FMOD commands from different threads!This will lead to instability, corruption and possible crashes.

(헬프 문서 Threads 항목 최하단) ※안됨 ㄳ

클라이언트가굳었을때

사운드 시스템 및 사운드 인스턴스 클래스내부에서 처리되던 모든 작업을…

• Command Queue에 명령을 쌓아두는 것으로 변경

• 메인 스레드에서 Queue를 일괄 처리하도록 수정

FMOD를사용하려면

공식 사이트http://www.fmod.org/

별도의 trial 버전 없이full 버전의 툴과 API를마음껏 다운로드 가능

자체적인 Forum이 있어문제 발생시 정보를

찾아보기 용이함

Email 답변도 빠른 편

• FMOD Event System을 사용하면

요약

프로그래머디자이너

• 게임개발시사운드작업은다른부분에비해상대적으로비중을낮게두는경향이있지않은지…

개인적인생각으로

• 당연한이야기지만소홀히할수없는부분좋은사운드가게임을돋보이게만들어줄수있을것이다

• FMOD Designer라는강력한툴을사용하여더 나은 결과물 제작, 다양한 사운드 연출이 가능+ 게임의 생산성 및 작업 능률 향상

감사합니다

top related