48
Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Embed Size (px)

Citation preview

Page 1: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Audio TechFull Training

CryEngine3Tomas Neumann

(constantly WIP)

Page 2: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

FarCry Facts

• Shipped Sounds.pak 240MB– 1,400 individual wave files (reduced Wav)– 35 subfolders

• Shipped Music.pak 465MB– Low/high spec version (22k wav, OGG)– 2h 35 minutes

• Shipped English.pak 425MB– 3,700 lines of voice + lipsync files

• Total – 1.1 Gig of audio data for Audio of 3Gig– 35% of Gold-ISO were audio data

Page 3: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Crysis Facts

• Shipped Sounds.pak 656MB– 3,500 events in 170 groups in 9 projects (factor 20)– 15,000 individual wave files– 26 categories

• Shipped Music.pak 570MB– 3 Gig of adaptively-scored music data– 5h 10 minutes

• Shipped English.pak 190MB– 8,000 lines of voice + lipsync files

• Total – 18% of Gold-ISO were audio data– 20 Gig of data on Audio Build PC for Game02– 14 Languages, 250,000 voice files in overall process

Page 4: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Warhead Facts

• Shipped Sounds.pak 900MB– x events in x groups in x projects (factor x)– x individual wave files– 26 categories

• Shipped Music.pak 190MB– 1h 45 minutes

• Shipped English.pak 181MB– 5,000 lines of voice + lipsync files

• Total – 1,2 Gig of Audio of 5.5 Gig– 22% of Gold-ISO were audio data

Page 5: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Overview Audio• Level placed

– Volume-based (Area)– Spots– FlowGraph– DialogManager– Trackview

• Systematic– Weapons– Vehicles– Physics– Particles– Flash

• Animation– Blended / Layered– Foley– Footstep signals

• Asset Production– Data-driven events– FMOD Designer

• .FDP (xml project)• .FEV (bin. project)• .FSB (wavebank)

• Dialog– LocalizationManager– Sub-Titles

• Runtime Effects– SoundMoods– Reverb– Dialog effects

Page 6: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

FMOD EventsystemIntegration

Page 7: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Eventsystem Overview

• Data-driven– Distance, individual falloff curve, mixing– Looping, 3D, 2D, variations, priority

• Syntax – Path/project:group(/group):eventSounds/weapons:scar:select

• Code controlled– Start, stop, pause– Parameters: rpm, mass, speed, damage

Page 8: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Asset Production

Page 9: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Workflow

• Sound Designer– Create event (wave data + definition + behavior)– Save and checkin project file (.fdp)

• Audio Build PC– Build process, compress data per platform– Creates bin. project and wavebanks (.fev/.fsb)

• Game Programmer– Play sound when availible– Update parameter, communicate to directly to SD

• Sound Designer (or GameD, ParticleD, AnimationD)– Pick event from SoundBrowser– Implement in game (FlowGraph, TrackView, Particle, Facial..)

Page 10: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Workflow Example• Create project

– Project name has to be the same than folder it is placed in• Create group

– As many levels of group depths are supported• Create event

– „Holes“ in placing sound definition might cause unexpected problems– Add layer, assign to parameter– Add parameter controlled effect

• Create category– Sort event into category

• Save you work– Save and checkin project file (.fdp)

• Editor uses .fdp for sound browser functionality

Page 11: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Build Process

• Build process creates .fev and .fsb– Local / remote (dedicated audio build PC)– Create wavebank– Wavebank settings per platform– Creates bin. project and wavebanks (.fev/.fsb)

• Code uses .fev for accessing event structure• Restart audio while in Game/Editor

– #Sound.DeactivateAudioDevice()– #Sound.ActivateAudioDevice()– Mfx_reload tab– Reload... dialog

Page 12: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dynamic Event Behavior

• Individual Event Parameter– Distance-based aspects of sound („distance“)– Interactive:

• Vehicles: rpm, speed, surface, damage• Weapons: spin-up• Particles: lifetime• Physics: mass, speed• More: „doppler“, „front_left_rear“, „top_rear_down“, „top_left_down“

– Battle-sensitive animal ambiences („battle“)– Area-sensitive via reverb area („environment“)– Dynamic background noise on radio chats

• Global Parameter– TimeOfDay-sensitive ambiences („daylight“)– SP/MP tweak („sp_coop_mp“)

Page 13: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dynamic System Behavior

• CVar-based volume• SoundMoods

– Category-based mixing system

– Mixing deskish control over faders and effects

– Effects:• Volume / Pitch• Lowpass / Highpass• Compressor• 2 ParamEQs• (Any VST-Plugin)

• SoundMoods:– Mission objective– Underwater– Low-health– Explosion– Vehicle– Cloak– Frozen– Cutscene– Huge alien

Page 14: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Mixing

• Static Mix– Set volume on event prop, not in sound definition– Network Audition

• Enable cvar s_NetworkAudition 1 (opens port)• Connect to localhost or remote machine• Ingame mixing and profiling

• Dynamic in-game mix: Soundmoods!– Category based mixing– Music ducking

Page 15: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Other Audio Middleware

• FMOD Eventsystem in CE2 since mid.‘05• Audiokinetic‘s WWise• CRI Audio• Unreal engine integrate FMOD and WWise

•                       

FMOD (Firelight Technologies)

•                       

Wwise (Audiokinetic)

Page 16: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Audio GUI

Page 17: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Sound Scripts

Page 18: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Sound/Dialog Browser

• SoundBrowser– shows all curent events

scanning FDP files

• DialogBrowser– Shows all entries in

LocalizationManager

Page 19: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Database Music

Page 20: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Database SoundMoods

Page 21: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Database Reverb Presets

Page 22: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dialog Editor

Page 23: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Cutscene Audio

• Place events from SoundBrowser– Use Sound-Track, don‘t add SoundEventSpot

• Place dialog from DialogBrowser

Page 24: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Audio Details

Page 25: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Sound Implementation

• Volumetric Effects– Ambience– Random Oneshots– Reverb– Opt. Soundmoods

• FlowGraph– PlaySound-Node– Dialog-Node– Use instances of sound entities

Page 26: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Script Entities• Sound

– SoundEventSpot (simple placable sound)– AmbientVolume (attachable to area)– RandomVolume (attachable to area)– SoundMood (attachable to area or flowgraph)– ReverbVolume (attachable to area)

• Dialog– Dialog (also flowgraph)

• Music– ThemeSelector (attachable to area or flowgraph)– MoodSelector (attachable to area or flowgraph)– EndTheme (attachable to area or flowgraph)– Stinger (also flowgraph)– MusicLogic (also flowgraph)– PlayPattern

Page 27: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Volumetric Sounds

• Point– Simple radial propagation (arbritary volume behavior)

• Line– 2 points, closest to listener

• Sphere– Radius, closest or at listener if inside

• Cone– Specified by sound designers

• Area-attached (shape, box, sphere)– Reverb, ambiences, randomsound, soundmood

Page 28: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Obstruction

• Effect if sound is blocked from listener– Direkt (dry) signal by ray cast– Indirekt (wet) signal by Visarea

• Controllable by CVars

• Obstruction flag set by code (might change)

• Listener spawned sounds usually skipped

• Material based by pierceability

Page 29: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Culling

• Effect if playback gets skipped

• Outdoor– Distance is larger than radius

• Indoor– Max. visarea propagation reached

• Priority– Event priority lower than current threshold– (FMOD counts zero as being highest)

Page 30: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dialog

Page 31: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dialog

• Playback– 2D– 3D on character‘s head bone position

Page 32: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Dialog

• Source– Languages/Dialog/– Uncompressed WAVs– Dialog_recording

Excel

• Build– Localized/English.pak– Compressed

MP2/MP3– XMA in development

via FSB

• Syntax (File/key)File:

languages/dialog/subfolder/soundfile.wav

Key: subfolder/soundfile

• Playback– SoundBuffer of wav

attached to empty prototype event

sounds/dialog:dialog:clean

• Format priority– s_MpegCompression 1/2/3

Page 33: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Localization Manager

• Xml sheet– Stores keys/parameter– Dialog_recording_list.xml (ai/story/mp)

Page 34: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Code

Page 35: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Overview Code

• SoundSystem– Sound

• PlatformSound

– AssetManager• Manages audio cache• Controls SoundBuffer

– MoodManager– ReverbManager

• NULL Implementation

• Sound and parameter names are lower case

• Prevent hardcoded sound names

• gEnv->pSoundSystem is always valid

Page 36: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Overview Code

SoundSystem

Interface

Sound

AudioDevice

FMOD-Ex (4.26.00)

EventSystem GroupProject Event

Buffer PlatformSound

Xbox360 XAudio2 PS3 XP: DSound Vista: WASAPI (OpenAL)

Parameter

Reverb SoundMoods

PSP Mac

FMOD specific code FMOD Designer (4.27.00)

Page 37: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Code Interface

• ISound.h for ISoundSystem and ISound– Sound will not move unless you do it

• IEntitySoundProxy for sounds on entities– Sound will move/rotate with entity– Faster access to find a sound by SoundID– Hidden entities (layer) dont play sounds

Page 38: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Modular Interfaces

• ISoundSystem and ISound– Core functionality– GetExtended()

• know what you are doing• Ask me if you are unsure!

– GetDeprecated()• No support• Dont count on it

– GetWorkInProgress()• Might have bugs

Page 39: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Ref Counting

• Sounds, SoundBuffers, Platformsounds– Release() dont destroy– Reset and stored in pool to be reused

• SoundIDs used to prevent ref-couting– No guarantee sound still exist– Test for valid SoundID– Only use scoped smart_ptr

Page 40: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Script Interface

• ScriptBind_Sound.h– Most functionality– Also Reverb, SoundMood, Music

• ScriptBind_Entity.h– proxy access

• ScriptBind_MusicLogic.h

Page 41: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Golden Rules

• Query information– Create the sound– Query: Loop, 3D/2D, Radius

• Dont hardcode:

• Sound references

• Parameter names

• Set Flags: Event, Voice

Page 42: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Music

Page 43: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Overview Music

• MusicSystem– Theme

• Mood– Pattern

• MusicLogic (optional)– AnimationGraph– MusicLogic events

• Editor– Database-Music– Animationgraph

• Sources– Music: Game/Music– Events:

Game/Libs/MusicLogic– Music graph:

Game/Animation/graphs/ (will change)

Page 44: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Database View

• Theme– Wider range of music

of a certain area or situation

• Mood– Special motive

• PatternBlock– Variation of motive

• Layer– Start (optional)– Main (loop)– Rythmic (synched)– Incidental (synched)– Stinger (async)– End (optional)

• Pattern– Reference to file– Always link to WAV

Page 45: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Music Logic

• Dynamic Music– Picks Mood– AI Intensity

• Idle/alerted/combat• 100 m radius

– Player Intensity• Wounded• Killed enemy• Suit Mode

– Game Intensity• OR of above

• Code– CryAction

• Specification– Music Events and

Points– Game/Libs/MusicLogic

• Graph– /Animation/Graphs

Page 46: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Music Graph

• Animation Graph Code

• Traverse Nodes– Match input values– Enter wait time– Leave wait time– Allow change early

• Mood Node– Set Mood on enter– Wait leave time– Leave early on Allow

Change

• Stinger Node

Page 47: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Script / FlowGraph Control

• Script Entity– SetTheme– SetMood– EndTheme

• Can be triggered or linked to area

• Flowgraph– SetMusicLogic

Page 48: Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

Questions?

Please post them in the Sound and Music forum on MyCryENGINE.