Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

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

Transcript of Audio Tech Full Training CryEngine3 Tomas Neumann (constantly WIP)

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.