Wwise for Unity探索流程

Wwise优势

在这里插入图片描述
(1)Unity跟音效模块完全分离。音效完全交给音效师或者外包来完成,程序只管调用事件即可,耦合性低。
(2)具有性能调试工具。类似Unity的Profiler,能够分析性能瓶颈,方便优化。
(3)具有丰富的混音器。如果我们要实现一个百鸟争鸣的效果,在Unity或许我们调用多个AudioClip都难以达到我们想要的效果,Wwise只要将这些Audio音效做一个Blend音效即可。
(4)开关切换。例如,我们要实现角色在不同材质上实现不同的音效控制,就可以用switch完成。策划配置不同材料的switch名,客户端根据导表信息自动设置switch,就会播放对应的音效。
(5)具有动态混淆功能。例如:吃鸡游戏,在房间里打枪和在平地上打枪,由于房间内声音会来回反射,所以混响效果应该是不同的。通过游戏过程中对RTPC实时变量的控制,可以达到逐如此类的效果。
(6)音效播放各种效果。例如:淡入淡出,播放之后停顿几秒继续播放。
(7)支持多平台。只要设置相关平台就会为不同平台导出不同的音效bank。
(8)对音源文件的内存优化。例如,一段很长的背景音乐,可以设置只加载正在播放的那一段,从而降低Unity的内存占用。
(9)多语言版本。例如:不同语种的配音。
(10)随机播放音效。例如,当一类音效需要随机播放一个的时候,原来Unity的设计可以通过代码来随机播放某个clip,但Wwise有随机container,我们程序只管发送事件即可,引擎内部可以帮我们随机选择一个。
(11)多Listener支持,可以多达八个。Unity原生的AudioListener只能有一个。

Wwise安装与接入Unity

  1. 安装Wwise插件,离线安装包:https://download.csdn.net/download/qq_30869757/13122006

  2. 对WwiseSettings进行配置
    在这里插入图片描述

  3. 将音频工程GeneratedSoundBanks文件夹拷贝到项目SoundBanks加载路径

  4. 检查Wwise Picker成功加载音频工程,程序只关心Wwise Picker中的Wwise的事件(Events)、SoundBanks、Switches、States等,配合音频组进行需求实现
    Wwise Picker:
    在这里插入图片描述

  5. Bank文件:存储音频数据和控制信息,通过LoadBank加载,不需要使用的时候通过UnloadBank卸载

  6. SoundObjectID:唯一标识一个发声对象,以整数标识,通过RegisterSoundObject注册,不需要使用的时候通过UnRegisterSoundObject释放

  7. Event:每一次音效的播放通过函数PostEvent实现,并返回一个整数表示这次的EventID。中途不需要播放音效可以通过StopEvent完成

Wwise游戏同步器

  1. State:对通过SetState来切换状态。游戏的音频施加全局偏置或调整,代表游戏中的物理和环境条件发生了变化。
    在这里插入图片描述

  2. Switch:通过SetSwitch来控制播放状态。不同Switch的组合触发不同的音效。声音对象被指派给各switch,当游戏中一个条件变为另一个条件时,都能够播放相应的音效。
    在这里插入图片描述

  3. RTPC:实时参数控制。通过SetRTPCValue来控制播放状态。用于根据游戏中发生的实时参数值变化,来实时编辑特定的对象属性。可以将游戏参数映射到属性值,并“自动执行”属性更改,增强游戏的真实感。
    在这里插入图片描述

Wwise热更说明

  1. 明确2个API
    AkSoundEngine.SetBasePath()接口,用于指定基础得bank所在路径,也就是游戏第一次上线所包含得所有初始bank得路径。
    AkSoundEngine.AddBasePath()接口,用于指定后续热更的bank所在得路径。
  2. 明确3个路径
    streamingAssetsPath路径特性:
    该路径下得所有资源全部打包进apk或者ipa内,且不经过压缩,也就是说所有得初始bank都是打进apk或ipa内的,是一个只读(read-only)得路径,游戏运行时只能读取,不能修改。
    persistentDataPath路径特性:
    可读,可写,是游戏的沙盒目录,所以打包之前是没有这个目录的,直到游戏在手机上安装完成,才会有这个目录
    DecodedBankFullPath:
    位于persistentDataPath下面一层DecodedBanks目录下,是解码之后的bank所存放的路径
  3. 热更原理
    使用 Wwise 支持 DLC 的默认方法是使用文件包,若最终包体过大导致受限,可以改换成热更文件的方式,整体逻辑一致,下面介绍DLC的方式。
    简单来说,这些包可以包含替换的 BNK 和 WEM 或者附加文件,它们可以随意加载和卸载(API调用)来启用或禁用 DLC。
    在这里插入图片描述
    DLC 内容须使用主版本的 Wwise 工程进行创建,且须使用同一 Wwise 版本,来确保 SoundBank 和文件包格式兼容。
    在 File Packager 中创建 DLC 的方法如下:
    针对各 DLC,手动创建 File Packager 文件包,将新增内容拖至手动创建的文件包(即 DLC)
    在这里插入图片描述
    要在 Unity 中使用包,只需将它们放置在 BasePath 中,即 bank 的所在路径,该路径是在 AkInitializer 的属性中定义的。然后调用 AkSoundEngine.LoadFilePackage()。Wwise 将始终尝试先通过文件包加载文件,加载的顺序是以相反的顺序(最后添加的是第一个搜索到的)。
    该方法将适用于在游戏发布之后,所有支持向磁盘写入 BasePath 的平台。但iOS 和 Android 不满足这个条件。
    我们需要使用的资源加载方式:
    在 Android 和 iOS 上,由于所有数据都被打包到一个只读文件系统,所以需要将文件包放在另一个不同的目录中,即将新增或更新过的同名文件解压在persistentDataPath路径内即可。这是通过在 AkSoundEngine.LoadFilePackage() 之前调用 AkSoundEngine.AddBasePath() 向SetBasePath()的方向查找bnk来完成的。
    例:用于选择可存储文件的路径
    在这里插入图片描述

Wwise优化策略

对于性能来说,主要就是CPU占用,和内存消耗。针对这两方面,影响CPU占用的主要是插件使用、同时发生数、样本的压缩率——也就是需要实时运算、解码的内容的量;影响内存的,则是支持当前游戏场景,需要被加载进内存的Bank的大小。

  1. 性能策略
    Gain、SideChain等对于音量起作用的不会是CPU暴增的原因,而Reverb类的使用则是主要原因,Reverb类效果器慎用,要用注意使用数量、选择种类和调节相应参数。
    针对插件和最大发音数,可以根据不同平台设置不同的档次,合理设立优先级,合理安排最大发音数须得到重视。
    解码音频会占用很多CPU,常用的小样本,可用ADPCM来减少压力,而常用的OGG格式参数的设置,质量越低,解码消耗越低。
    unity可以设置相应的内存大小给WWISE,当profiler里出现Sound Starvation报错时,可以相关程序员商量提高分配的内存额度。
  2. Profiler工具
    监控整个游戏运行周期内音频资源的使用,监控内存和CPU的使用以及声音数量和流媒体的效果性能
    在这里插入图片描述

Wwise问题记录

  1. wise工程里的so文件 svn上传的问题:
    Android工程中,很多会包含so库,使用TortoiseSVN上传时上传不了,需要单独手动上传,处理方式:
    去掉so相关的配置即可,右键→TortoiseSVN→设置→常规设置→全局忽略样式:
    .o .lo .la .al .libs .a .so .pyc .pyo pycache .rej ~ ## .# …swp .DS_Store
  2. 初始化加载AkTerminator、AkInitializer两个脚本的方式
    ①动态加载这两个脚本,之后通过修改AkInitializer里的属性来改变设置。优点:简单方便。缺点:因为在加载AkInitializer时就会完成Wwise初始化。这里只有少部分参数设置(例如Log开关)会生效,另外的大多数参数设置(比如SoundEngine内存分配,默认语言)不会生效。
    ②将这两个脚本制作成Prefab,音频初始化时实例化这个prefab。优点:所有初始化参数都可以配置并热更。缺点:需要在初始化Wwise时进行prefab的实例化操作。
    大多数情况下,初始化参数不需要通过热更的方式修改。但是在Wwise2017.1.3版本Wwise曾出现过一个重大bug,初始化参数里内存如果设置过小,游戏就会大概率出现闪退。所以推荐使用第二种方式加载这两个脚本。
  3. Unity中播放Wwise的事件尽量不要用EventName,用EventID性能会更好,因为这样会省去计算哈希算法的过程,可以通过xml解析对应关系来达到效果:
    在这里插入图片描述

演示Demo

包体:https://download.csdn.net/download/qq_30869757/13122006,由于适配问题,Unity版本为2018.3.13f
在这里插入图片描述

更多学习资料(外网)

• https://blog.csdn.net/sinat_34870723/article/details/89387926
• https://github.com/akchina/learnwwisecn
• https://www.zhihu.com/question/61882604
• https://www.bilibili.com/video/av30296853/?spm_id_from=333.788.videocard.0 (b站的讲解)
• https://v.youku.com/v_show/id_XMTU1NDQ1NjQ4NA==.html?spm=a2h0j.11185381.listitem_page1.5~A&&f=27182850 (官方翻译教程)
• https://www.audiokinetic.com/zh/learn/videos/?course=wwise301 (官网教程)
• https://blog.audiokinetic.com/zh/game-of-thrones-interactive-environment-sound-design/ (权游团队分享)

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.当策划需求一个声音需要随机播放多个随机音源的其中一个时,例如脚步声、普通攻击声,当这类声音一直播放的都是同一个音源的时候,人会产生听觉疲劳。如果使用wwise,客户端只需要触发事件就可以了,至于一个事件怎样去随机一个音效,就是策划管的事了。 2.根据材质播放不同的声音,例如挖掘土地和挖掘金属、挖掘石块要产生不同的音效,这个功能可以让策划配置不同材料的switch名,客户端根据导表信息,自动设置switch,就会播放对应的音效。 3.声音曲线RTPC(real time parameter control),x轴可以是距离、时间等,y轴可以是音量、音调等,曲线是可以拖动调整的,这就产生了一个可以可视化调节的对应关系,而这种对应关系就不需要程序去管了。 4.对全部声音的状态处理,例如在陆地上和水下,听到的声音效果应该是不同的,这个在wwise里可以进行比较简单的设置。 5.对音源文件的内存优化,例如一段较长的背景音乐,可以设置只加载正在播放的那一小片段。 6.交互式音乐,类似dota那种,当战斗的时候播放战斗音乐,战斗结束切换为一般BGM,这是通过触发器trigger实现的,客户端只需要判断切换战斗音乐的时机并触发,wwise会自动根据策划配置平滑过渡。 7.音效播放的各种效果,例如淡入淡出,播放之后停顿几秒继续播放,声音播放几秒之后慢慢变小等,都可以交由策划配置,客户端不用多写代码支持这些功能。 8.多平台支持,多语言支持。wwise支持多个平台,会根据平台不同输出不同的bank文件(一类音源的打包小集合),并做相关优化。当游戏的语音有多个国家语言版本的时候,wwise也能轻松设置。 9.性能监视。 10.动态混响,例如吃鸡这样的游戏,在房间里打狙击枪和在平地上打狙击枪,由于房间内声音会来回反射,所以混响效果应该是不同的。通过游戏过程中,对RTPC实时变量的控制,可以达到此效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值