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

49
Fmod 를 이용한 사운드 프로그래밍 넥슨 신규개발 3 본부 개발 1 M2 장용석

Upload: devcat-studio-nexon

Post on 03-Jul-2015

10.274 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

장용석

Page 2: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

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

발표에앞서…

Page 3: 장용석, fmod를이용한사운드프로그래밍, NDC2010

장용석

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

• 2004엔플레버 라펠즈

• 2008넥슨 마비노기2

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

발표자소개

Page 4: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• FMOD?

• Event System

• 작업경험과사례

• FMOD를사용하려면

• 정리

발표순서

Page 5: 장용석, fmod를이용한사운드프로그래밍, NDC2010
Page 6: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

FMOD

Page 7: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

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

FMOD

Page 8: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• 사운드엔진과함께

강력한디자인툴을제공

오늘 설명의 핵심

FMOD

Page 9: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• FMOD Ex

• FMOD Event System

• FMOD Designer

API

디자인 툴

Page 10: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• The low-level sound engine

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

• FMOD Ex의 상위 레이어

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

API

Page 11: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• 사운드 디자인 툴

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

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

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

단지 Play()만 하면 된다!

어떤 사운드를

어느 타이밍에

어떠한 이펙트를 주어서

Page 12: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

Page 13: 장용석, fmod를이용한사운드프로그래밍, NDC2010

EventSystem

Page 14: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

예제

Page 15: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

소리

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

Page 16: 장용석, fmod를이용한사운드프로그래밍, NDC2010

하드코딩

아니면

총소리

데이터화

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

결국코드수정이불가피!

Page 17: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

환경음

Page 18: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

Page 19: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

Page 20: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

Page 21: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

총소리

Page 22: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

총소리

rifle_near.wavrifle_mid.wav rifle_far.wav

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

Page 23: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

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

총소리

Page 24: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

발자국소리

Page 25: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

발자국소리

각 바닥 재질 별 사운드들

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

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

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

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

Page 26: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

발자국소리

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

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

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

Page 27: 장용석, fmod를이용한사운드프로그래밍, NDC2010

환경음

Page 28: 장용석, fmod를이용한사운드프로그래밍, NDC2010

환경음

다중 레이어(멀티 트랙)

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

Page 29: 장용석, fmod를이용한사운드프로그래밍, NDC2010

작업경험과사례

Page 30: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

어떻게든 해줘요”

Page 31: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

Page 32: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

트랜지션 된다

거리가0m일 때에는 0

거리가4m이상인 경우 1

Page 33: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

트랜지션 된다

거리가0m일 때에는 0

거리가4m이상인 경우 1

Page 34: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

Page 35: 장용석, fmod를이용한사운드프로그래밍, NDC2010

원래 그래요… 가 아니고

• 원인을 찾아 헤맸는데…

?!

Page 36: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• 업데이트는 제때제때…

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

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

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

Page 37: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

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

Page 38: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

Calling FMOD commands from different threads.

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

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

Page 39: 장용석, fmod를이용한사운드프로그래밍, NDC2010

클라이언트가굳었을때

Page 40: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

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

Page 41: 장용석, fmod를이용한사운드프로그래밍, NDC2010

FMOD를사용하려면

Page 42: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

Page 43: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

Page 44: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

찾아보기 용이함

Email 답변도 빠른 편

Page 45: 장용석, fmod를이용한사운드프로그래밍, NDC2010
Page 46: 장용석, fmod를이용한사운드프로그래밍, NDC2010

• FMOD Event System을 사용하면

요약

프로그래머디자이너

Page 47: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

개인적인생각으로

Page 48: 장용석, fmod를이용한사운드프로그래밍, NDC2010

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

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

Page 49: 장용석, fmod를이용한사운드프로그래밍, NDC2010

감사합니다