程序员角度理解的Wwise
Wwise概述
- 强大的游戏音频中间件
- 游戏程序员与音频艺术家解开耦合,各司其职
- 强大的混音台
- 较多的内存及CPU优化手段
- 内置的多语言支持
- 多平台支持,每个平台可以独立调整各种设置
程序员须要了解的
事件 Event
- 这是游戏引擎发送给Wwise引擎的Game Call,告诉wwise游戏内发生了某些事情,通常用来触发/停止声音,或者修改声音属性
- 两边的事件名称必须对应,对象名称不区分大小写
游戏同步 GameSync ,包括如下几个方面
1,开关 Switch
- 由游戏引擎发送,用来表示游戏内以条件来决定的情景,如:切换昼夜、地表类型等
- 使用切换开关组(Switch Group)来实现多选一,类似于游戏内的Toggle Group
2,参数控制 RTPC(Real Time Parameter Control)
- 一般表示游戏中在一定范围内连续变化的信息,例如背景音乐音量、音效音量控制
- 可以设置数值范围,又游戏引擎传入
- 例:第一人称游戏中,玩家血量越低,心跳声越剧烈
3,状态 State
- 可用于标识个体的状态,例如玩家状态,生存、死亡、陆地上、水中等等
- 个体处于不同状态,则可以使用不同的声音
- 例:玩家从濒死状态切换到死亡,则可以心跳声由十分快速,逐渐减弱为0
4,触发器 Trigger
- Wwise 中根据游戏中发生的事件来自动触发的反馈方式
- 例,忍者拔出武器时,可以在已在播放中的动作音乐上插入强调类型的音乐效果,以增加场景的感染力
音频艺术家专业领域
随机化 Random Sounds
- Random Attribute 随机属性 例如:Pitch 音高,每次播放一个声音都会随机一个范围内的音高属性
- Random Container,随机容器,每次播放,在容器内随机一个声音进行播放
序列化 Sequence Sounds
- Sequance Container 序列容器
- 可以在序列容器里包含普通声音,静音,甚至随机容器
- 可以多个随机容器拆出首声尾声,再用序列容器播放,用最少的音频资源做最多的变化
3D空间化 3D Spatialization
- 衰减 Attenuation 指定衰减曲线后,表示根据距离作出何种衰减
- 可以指定位置或位置+朝向
- 因为声音的高频分量会随着距离增加快速衰减,所以一般配合低通滤波器,也就是低频
分量更容易通过 - 声锥衰减 Cone Attenuation 可以理解为喇叭,越正面声音越大,越背面声音最小
声相偏移Speaker Panning
- 2d剧情对话等声音,是不适合使用3d定位的,这种情况可以使用声像偏移技术来实现
效果器
可以给声音单独或批量加入效果,例如混响等效果
声音选角器 Soundcaster
- 用来调整和处理相互关联的声音,例如主角所有动作相关的所有声音相互影响是否合适,例如,跑动中开枪的主角,枪声和脚步声是否合理
调音台 Mixing Desk
- 声音艺术家专业
以及更多专业领域......
优化
1,内存优化
- 控制sound bank粒度,不需要的语音包不加载,例如以关卡或角色为单位划分
- 减小音频包的体积,例如修改音频格式 wav->mp3(但是会降低声音品质,但很难避免)
- Conversion Setting,设置共享集批量转码,是否立体声,采样率,Vorbis格式等设置
- 关于格式,在我心目中 iOS使用mp3格式,Android使用Vorbis格式(也就是ogg),会是在压缩比、解压效率和效果中比较均衡的设置
- 启用/关闭不重要的声音(会降低品质和随机性)
- Streaming,流式播放,大量降低内存,但有延迟,适合背景音乐和对声音及时性不那么敏感的游戏
2,CPU优化
- 项目级 Volume Threshold 可以缩减动态范围,裁剪一些声音
- 项目级 Max Voice Instances 设置同时播放的数量
- 物体级 Playback Limit ,可以给物体加最大限制,可以是PerObject或Global
- 优先级系统Priority,优先级越低,越会被优先裁减掉