Successfully reported this slideshow.

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

12,782 views

Published on

Published in: Technology, Business
  • Be the first to comment

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

  1. 1. Fmod를 이용한 사운드 프로그래밍 넥슨 신규개발3본부 개발1실 M2팀 장용석
  2. 2. 발표에 앞서… • 이 세션은 튜토리얼 세션입니다 • FMOD의 장점을 소개하고, 작업 중 경험했던 일과 사운드 작업에 대한 이야기를 진행합니다 • 시간 관계상 깊이 있는 설명까지 다루지는 못하고, 쉽고 간단하게 설명할 예정입니다 • 非 프로그래머도 쉽게 이해할 수 있으리라 생각됩니다 프로그래머 세션인데…
  3. 3. 발표자 소개 장용석 • 1998 판타그램 킹덤언더파이어1, 샤이닝로어 온라인 • 2004 엔플레버 라펠즈 • 2008 넥슨 마비노기2 클라이언트, 툴 프로그래머
  4. 4. 발표 순서 • FMOD? • Event System • 작업 경험과 사례 • FMOD를 사용하려면 • 정리
  5. 5. FMOD • Firelight Technologies社에서 제작한 오디오 라이브러리 (사운드 엔진)
  6. 6. FMOD • 다양한 사운드 파일 포맷 지원 • 다양한 플랫폼 지원 PC, Mac, 콘솔, 휴대용 게임기, iPhone, iPad … • DSP, 사실적인 3D 사운드 효과 많은 업체에서 널리 사용 / 유명 게임 엔진에 통합
  7. 7. FMOD • 사운드 엔진과 함께 강력한 디자인 툴을 제공 오늘 설명의 핵심
  8. 8. • FMOD Ex API • FMOD Event System • FMOD Designer 디자인 툴
  9. 9. • The low-level sound engine • wav, mp3, mid 등 사운드 파일을 직접 재생하는 low-level API 이것만으로도 사용 가능 • FMOD Ex의 상위 레이어 • FMOD Designer로 제작된 사운드 데이터를 API 재생하는 data-driven API
  10. 10. • 사운드 디자인 툴 • 게임 안에서 각기 다른 상황에 따라 어떤 사운드를 어느 타이밍에 어떠한 이펙트를 주어서 재생할지 미리 툴에서 제작! • 프로그래머는 복잡하게 신경 쓸 필요 없이 단지 Play()만 하면 된다!
  11. 11. …진짜 됩니다 (물론 거짓말 조금 보태서)
  12. 12. Event System
  13. 13. 예제 •Event System을 전부 설명하기엔 무리가 따르므로 … •사운드 작업의 간단한 예를 들어 극히 일부 기능만 간단히 소개
  14. 14. 총소리 • 거리에따라소리가다르게들린다 • 각각의거리에맞는사운드가필요 발자국 • 바닥재질에따라소리가다르다 • 하나의바닥재질당2~4개의사운드가필요 소리 환경음 • 바람소리, 풀벌레소리, 부엉이소리등등… • 각각의사운드를일정주기또는랜덤하게재생
  15. 15. 총소리 하드코딩 하지만 재생방법 자체에 변화가생기면 결국코드수정이불가피! 아니면 데이터화
  16. 16. 발자국 • 역시비슷한작업필요 소리 환경음 • 각각의사운드에대해서 재생주기및랜덤확률은어디서설정할것인 가?
  17. 17. • 물론 작업 자체가 어려운 것은 아님 • 하지만 다양한 변화를 주는 시도나 세세한 튜닝 작업은 어려움이 따르고 • 어떤한 방식으로든 프로그래머의 추가 작업을 필요로 하게 된다
  18. 18. 그렇다면 Event System을 사용할 경우? • 많은 부분을 사운드 디자이너의 손에 맡기고, 프로그래머의 작업을 최소화 할 수 있다.
  19. 19. 그렇다면 Event System을 사용할 경우? • 많은 부분을 사운드 디자이너의 손에 맡기고, 프로그래머의 작업을 최소화 할 수 있다.
  20. 20. 총소리 • 툴에서 “rifle” 사운드 이벤트를 제작한다.
  21. 21. 총소리 • 툴에서 “rifle” 사운드 이벤트를 제작한다. 가로축은 거리 파라미터 부드러운 트랜지션도 가능! rifle_near.wav rifle_mid.wav rifle_far.wav
  22. 22. 총소리 // 이벤트 객체 획득 EventObj rifleSound = EventSystem->GetEvent( “rifle” ); // 좌표 설정 rifleSound->SetPosition(currentPos); // 사운드 재생 (객체는 이후 재사용 가능) rifleSound->Play(); • 클라이언트 코드에서는 사운드 이벤트 이름만 알면 된다
  23. 23. 발자국 소리 • 역시 툴에서 “footstep” 사운드 이벤트 제작
  24. 24. 발자국 소리 여러 개의 사운드 파일을 정의할 수 있다 • 역시 툴에서 “footstep” 사운드 이벤트 제작 파라미터는 바닥 재질 타입으로 사용 각 파일의 재생 빈도도 설정 가능! 현재 파라미터값에 각 바닥 재질 별 사운드들 해당하는 사운드가 재생!
  25. 25. 발자국 소리 // 이벤트 객체 획득 EventObj footstepSound = EventSystem->GetEvent( “footstep” ); // 재질 설정 (바뀔때만 처리해주면 OK) footstepSound->SetParameter(groundType); // 사운드 재생 footstepSound->Play(); • 코드에서는 바닥 재질만 설정해주면 된다
  26. 26. 환경음
  27. 27. 환경음 파라미터를 타임라인으로 사용 (지정한 속도에 따라 자동 변화) 다중 레이어 (멀티 트랙)
  28. 28. 작업 경험과 사례
  29. 29. “소리가 왼쪽에서 오른쪽으로 지나갈 때 부드럽게 연결되지 않고 왼쪽 스피커에서 들리다가 갑자기 오른쪽 스피커로 튀는데 어떻게든 해줘요”
  30. 30. • 특별히 무슨 문제가 있었던 것은 아님 원래그래요…다른게임도 그렇던데 하지만 확실히 듣기에 거슬린다
  31. 31. • 거리가 가까울 때에는 2D 사운드로 재생하면 된다 3D Pan Level 이펙트 0일때 2D 사운드로, 1일때 3D 사운드로 트랜지션 된다 거리가 4m이상인 경우 1 거리가 0m일 때에는 0
  32. 32. • 거리가 가까울 때에는 2D 사운드로 재생하면 된다 3D Pan Level 이펙트 0일때 2D 사운드로, 1일때 3D 사운드로 트랜지션 된다 거리가 4m이상인 경우 1 거리가 0m일 때에는 0
  33. 33. “제 컴퓨터에서 소리가 작게 들리고 좀 이상한 것 같아요”
  34. 34. 원래 그래요… 가 아니고 • 원인을 찾아 헤맸는데… ?!
  35. 35. • 업데이트는 제때제때… • 사실 이런 간단한 문제 외에도… • 사운드 하드웨어 표준화가 잘 안되어 있는지 사운드칩셋마다 동작 차이를 보이는 경우도 약간 발생 • 별로 문제된 적은 없지만, 적절한 테스트는 필수
  36. 36. 마일스톤을 사흘 앞둔 어느날 •바쁘게 다른 작업을 하고 있었는데… “자꾸 클라이언트가 굳는데, 브레이크 걸어보니 FMOD 내부에서 무한루프 돌잖아?!”
  37. 37. • 최근 멀티코어 지원을 위해 로직, 렌더링, 애니메이션 처리가 스레드 분리 Calling FMOD commands from different threads. Do not call FMOD commands from different threads! This will lead to instability, corruption and possible crashes. (헬프 문서 Threads 항목 최하단) ※안됨 ㄳ
  38. 38. 클라이언트가굳었을때
  39. 39. 사운드 시스템 및 사운드 인스턴스 클래스 내부에서 처리되던 모든 작업을… • Command Queue에 명령을 쌓아두는 것으로 변경 • 메인 스레드에서 Queue를 일괄 처리하도록 수정
  40. 40. FMOD를 사용하려면
  41. 41. 공식 사이트 http://www.fmod.org/
  42. 42. 별도의 trial 버전 없이 full 버전의 툴과 API를 마음껏 다운로드 가능
  43. 43. 자체적인 Forum이 있어 문제 발생시 정보를 찾아보기 용이함 Email 답변도 빠른 편
  44. 44. 요약 • FMOD Event System을 사용하면 디자이너 프로그래머
  45. 45. 개인적인 생각으로 • 게임 개발시 사운드 작업은 다른 부분에 비해 상대적으로 비중을 낮게 두는 경향이 있지 않은지…
  46. 46. • 당연한 이야기지만 소홀히 할 수 없는 부분 좋은사운드가게임을돋보이게만들어줄수있을것이다 • FMOD Designer라는 강력한 툴을 사용하여 더 나은 결과물 제작, 다양한 사운드 연출이 가능 + 게임의 생산성 및 작업 능률 향상
  47. 47. 감사합니다

×