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

33
FMOD 를 를를를 를를를 를를를를를 를를를 : 2011. 4. 8 를를를 : 를를를 를를를를 203 를

description

데브루키 203회 발표주제FMOD 소개튜토리얼FMOD 특징FMOD 유의사항실제 게임에 적용하기 위한 아키텍처

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

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

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

발표일 : 2011. 4. 8발표자 : 홍성복

데브루키 203 회

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

FMOD 소개 가장 유명한 사운드 엔진 미들웨어

모든 사운드 카드 지원

쉽고 빠르게 적용 가능

활발한 포럼 운용 다양한 질문 , 빠른 답변

Data-driven 프로그래밍 지향 사운드 디자이너를 위한 데이터 툴 지원

트리 개념의 쉬운 자원 관리

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

튜토리얼

일단 해보자 기본적인 코드는 매우 간단한다 Playsound, Playsream 소스 보기 및 실행

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

FMOD 구성 (1)

FMOD C 기반 API 가장 작은 규모의 사운드 API 포함 오래된 버전으로 거의 업데이트가 없다가 완전히

사장된 버전 2006 년까지는 FMOD Ex 의 반값에 사용 현재는 비상용 애플리케이션에 무료로 사용할 수

있다 절대 비추

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

FMOD 구성 (2)

FMOD Ex C, C++, C# API 제공 FMOD Designer API 포함

Event system 기반 API 일반적으로 쓰이는 FMOD 라이브러리 프로그래머는 반드시 이 라이브러리를 사용하여

개발하여야 한다

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

FMOD 구성 (3)

FMOD Designer GUI 툴을 통한 사운드 데이터 구성 복잡한 사운드 이벤트 , 효과를 이용한 재생을 지원 사운드 데이터 구성은 사운드 디자이너가 하며

사운드 프로그래머는 간단히 데이터 호출로 사운드를 사용할 수 있다

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

FMOD 라이센스 FMOD None commercial license

비상용 애플리케이션 무료

FMOD Commercial license Including designer 한 타이틀 당 9,000 USD 다른 플랫폼 출시시 한 플랫폼당 3,000 USD 추가

FMOD Casual license 500 USD 20 USD 이하의 제품 iOS/PSP 등등

각 라이센스별 상세한 추가 조건은 홈페이지 참고

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

FMOD 특징 _ 멀티 플랫폼 지원

PC(32bit, 64bit) Macintosh(PPC, x86) PS2, PS3, PSP, Xbox, XBox360 Wii, GameCube Linux(32bit, 64bit) iPhone, iPad 몇 년간 PC 보다는 콘솔용 게임기 지원에 주력

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

FMOD 특징 _ 다양한 엔진 지원

FMOD Designer 포함 Unreal engine 3 Cry engine Big world Unity engine Vision Scaleform

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

FMOD 특징 _ OBJECT ORIENTED API

C, C++, C# 지원 같은 기능이지만 언어별 전용 API 별도 제공 C, C++ 는 reference 문서 제공 API 자체가 그리 많지 않아 쉽게 배울 수 있다

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

FMOD 특징 _ 기타

Geometry occlusion engine 메모리 관리 커스터마이징 20 가지 이상의 사운드 포맷 지원

MP3 배포 라이선스를 포함하고 있지 않다 Plug in spupport – 주로 필터 ( 효과음 ) 등등…

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

FMOD 특징 _ FULL 3D 사운드 지원 (1)

Listener 3 차원 공간에서 3D 사운드를 듣는 청취자 Listener 의 위치와 3D 사운드간의 거리에 따라

볼륨이 감쇠 Listener 에 대한 3D 사운드의 상대위치에 따라 전후좌우의 스피커에 나는 소리의 볼륨이 다르다 Multiple listener 지원 – 한 화면에 분할된

장면에서 나오는 소리를 구현할 수 있다

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

FMOD 특징 _ FULL 3D 사운드 지원 (2)

3D 사운드 3 차원 공간의 어느 한 지점에 위치한 사운드 3D 사운드가 들리는 Min, Max 유효거리를 설정

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

FMOD 특징 _ FULL 3D 사운드 지원 (3)

3D 사운드Min distance

Max distance

Listener 3

Listener 2

Listener 1

Min distance : 볼륨 100%Min ~ Max distance : 볼륨이 100% ~ 0% 로 감쇠Max distance 이상 : 볼륨 0%

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

FMOD 특징 _ FULL 3D 사운드 지원 (4)

왼손 좌표계 기본 사용 오른손 좌표계 옵션으로 지원

감쇠 기본 옵션 Logarithmic 감쇠량을 잘 느끼기 힘듬 옵션으로 지원하는 선형감쇠 사용 커스터마이징 가능

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

FMOD 특징 _ 지형 충돌에 따른 볼륨 감쇠

3D 공간상의 정점으로 이루어진 폴리곤 지정 FMOD 내부적으로 Listener 와 3D 사운드간

충돌을 계산하여 볼륨을 감쇠시킨다 Geometry.exe 예제 시연 Geometry 프로젝트 참고

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

FMOD 특징 _ VIRTUAL VOICE

사운드 카드에 한정된 채널을 극복할 수 있는 방법 무한에 가까운 사운드를 3D 월드상에 배치하여

동시에 플레이 할 수 있다 . Virtualvoice.exe 예제 시연 실제로 사람이 듣고 판별할 수 있는 사운드의

개수는 한정되어 있다 일부 사운드만 실제로 플레이하고 그 외의

사운드는 플레이되고 있는 것처럼 시뮬레이팅한다

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

FMOD API 소개 SYSTEM

FMOD 메인 시스템 객체 하위 시스템 생성 , 소멸 관리

DSP, Sound, Channel, Channel group, geometry 등등

사운드 리소스 로딩 사운드 스트리밍 로딩

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

FMOD API 소개 SOUND

사운드 리소스 관리 객체 사운드 리소스 해제 사운드 리소스 Refence 관리 사운드 플레이 루프 여부 , 루프 카운트 지정 등등

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

FMOD API 소개 CHANNEL

로딩한 사운드 리소스의 재생 관리 객체 볼륨 루프 카운트 Position Mute 등등

한 Sound 객체에서 여러 개의 Channel 을 생성하여 재생 가능

실제로는 Sound 객체와 Channel 객체는 기능이 겹치는 인터페이스가 많다 .

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

FMOD API 소개 CHANNEL GROUP

한 Channel group 은 여러 개의 Channel 을 자식으로 가지며 일괄적으로 관리할 수 있습니다 . 볼륨 Mute 등등

기본적으로 최상위 부모인 Master channel group 이 있다 . System::getMasterChannelGroup

Master channel group 하위로 channel group 을 자식으로 붙여야 한다

모든 Channel group 은 Channel group 을 자식으로 붙일 수 있다 Master channel group 제외

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

FMOD API 소개 GEOMETRY

3D 월드 폴리곤 좌표 3D 사운드와 listener 사이의 폴리곤이 존재하면 볼륨 감쇠

Scale, Rotation, Position

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

FMOD API 소개 DSP

Digital signal processor 사운드에 Effect 를 적용하기 위한 객체 사운드 필터링을 통한 사운드 변화

Echo, Chorus, lowpass, flange, distortiom, 등등…

Effect.exe 시연 개인적으로 Echo, Chorus 외에는 잘 구별 안됨 Channel, Channel group 에 적용하는 구조

Chennal::addDSP, ChannelGroup::addDSP 중복해서 여러 DSP 를 적용할 수 있다

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

FMOD 유의사항 (1)

하드웨어 가속을 지원하지만 불특정 사운드 카드에서 System 객체 생성 실패 , 사운드 재생 실패 등의 문제가 있다 퍼포먼스에 별 차이 없다

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

FMOD 유의사항 (2)

DSP 객체를 이용하여 하드웨어 가속을 받으면 사운드 카드에 따라 제대로 되지 않는 것이 많다

5 년전에 하드웨어 가속이 불안정했는데 현재는 어떠한지 모르겠다

많은 컴퓨터에서 테스트를 해봐야 알 수 있다

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

FMOD 유의사항 (3)

볼륨을 Fade In/out 할 수 있는 기능이 없다

게임 상황에 따라 반드시 필요할 것이다

미리 특정 Channel, Channel Group 을 Fade In/Out 할 수 있는 기능을 구현해 두자

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

실제 게임에 적용하기 위한 아키텍처 구성

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

사운드 프로그램을 하기 전에… .

프로그래머는 FMOD 를 Rapping 한 사운드 플레이어가 아닌 게임 상황에 맞는 사운드 재생을 할 수 있는 SoundManager 를 생각하고 프로그램해야 한다

사운드 기획은 기획자도 신경쓰지 않는다

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

요구사항 파악

BGM 간의 전환 방법 Fade In/Out ??

게임 상황에 따라 어떠한 사운드라도 컨트롤 할 수 있어야 한다

사운드의 상태에 따라 게임에 영향을 끼쳐야 하는가 ? MMO 보다는 리듬액션 게임등에 매우 중요하다

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

요구사항 파악

예상되는 사운드의 종류 BGM UI 사운드 유저의 플레이어 음성 , 이펙트 사운드 일단 음성 , 이펙트 사운드 오브젝트 사운드 환경음 날씨 이펙트

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

요구사항 파악

예상되는 BGM 종류 존 Music 특정 구역 Music( 작은 상점 같이 협소한 지역 ) 전투 Music 시네마틱 Music

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

FMOD

Sound Manager

Game Condition Manager

Game Layer

SOUND ARCHITECTURE

Master Channel Group

Channel Group

Channel Group

Channel Group

ETC

Channel

Channel

Channel

ETC

BGM Condition

Environment Condition

Player Condition

ETC

Play sound

Player HP, Level upChange world, zoneBossWhether

Play sound

Observe condition