第 7 课

目录

处理器优化

在玩游戏当中,每次播放一个声音时会需要消耗游戏系统 CPU 运算能力的一小部分。虽然音频方面的处理器负荷较小,但其还要用于游戏的其他方面(如 3D 图形渲染),最终可能会给系统带来巨大的负担。出于这个原因,你需要注意如何让音频引擎最大化利用处理器,不浪费运算周期。

每个游戏中播放的声音都需要一个叫作 voice (声部)的资源才能完成播放。不要把它错当成对白中的 Voice(语音)对象,我们在课程的早些时候提到过语音对象。在这种情况下,你可以把 voice 看作用来在游戏中制造声音的逻辑机制。每个处于激活状态的 voice 都会占用处理器的运算周期。

在有些游戏中,特别是《Cube》这样的 3D 游戏,voice 的数目会迅速走高。倘若让 Wwizard 向 30 个怪兽投掷魔法宝石,而对方同时投掷宝石予以还击,那么这些声音加上脚步声以及所有其他背景环境声可能会导致声部数迅速增加。但其实那些声音中有很多都没有那么重要,并不需要全都听到。虽然 100 米以外的怪兽在行走时也许会有微弱的脚步声远远地传来,但如果在 2 米以外的地方还有十个怪兽在投掷魔法宝石,那么远处的脚步声多半是听不到的。远处的脚步声需要使用与近处魔法音效一样的处理资源,所以去渲染不太可能听到的脚步声其实是一种浪费。为了将这种浪费降到最低程度,你的工程里有一些设定可以定义一个最小音量,只有在这个音量以上的声音才会需要去通过 voice 切实渲染出来。

  1. 在 Wwise 菜单栏中,选择 Project > Project Settings(工程设置),然后选中 General(常规)选项卡。

    你可以看出这些设定可以针对你的目标游戏系统来分别采用不同的配置。比如,Nintendo Switch 拥有的处理资源要少于 PlayStation 5。为此,可针对各个游戏系统单独调节这些数值。Volume Threshold(音量阈值)的默认设定是 -80,这个值的单位是分贝(dB)。也就是说游戏中有 80dB 的动态范围。如果想减轻游戏系统的处理器负荷,可以通过调高 Volume Threshold 来减小动态范围。但是,这样的话可能会导致某些原本想要听到的声音(如微妙的环境声)被砍掉。

    还有一个参数可以定义系统允许同时播放的最大 voice 数目。这样可以彻底避免系统过载。降低这个参数可以保证音频引擎消耗更少的 CPU,但这同样也意味着有些你想听到的声音可能会被砍掉,特别是在交战正酣、场面非常复杂的时候。最糟糕的莫过于正在激战却听不到声音了,这样玩家可能瞬间就会丧失玩下去的兴趣。别担心,在稍后的练习中你马上就会学到如何调度众多 voice 的优先级。

  2. 将与所用系统对应的 Volume Threshold(音量阈值)和 Max Voice Instances(最大声部实例数)分别改为 -5040,然后单击 OK(确定)。

    有些声音天生就是消耗 voice 的大户。在《Cube》中,Poison Gem(剧毒宝石)的投掷速度很快,投掷时发出的声音往往会交叠播放。这样可能会导致声部数迅速增加。为了应对这种情况,在 Wwise 中可以管理单一对象在游戏中允许同时使用多少 voice。

  3. 切换回 Designer(设计师)布局,接着在 Project Explorer(工程资源管理器)中选中 Magic Actor-Mixer,然后在 Property Editor(属性编辑器)中单击 Advanced Settings(高级设置)选项卡。

    Playback Limit(播放限值)分组允许设置总共可使用的声部数量。您可以通过设置该属性来限制应用于各个游戏对象的声部数。在此,既可设为 Per game object。这时每个角色的魔法技能最多可播放 50 个声部;也可设为 Globally。这时加起来同一时间最多允许播放 50 个声部。后面一种方案可能会很有用,因为玩家不太可能分得清楚同时播放的一大把同类声音中哪个是哪个。

  4. 选中 Limit sound instances to:(将声音实例数限制为:)复选框,并将对应的值设为 25,然后从下拉菜单中选择 Globally(全局)。

    不管游戏中发生什么情况,总有些声音是你想确保不砍掉的。为了满足这个需要,Wwise 有一个 voice 优先级系统,利用这个系统你可以根据各种声音类型的重要性(即更有必要听到哪类声音)来对它们分级。用这个办法,当游戏系统必须砍掉 voice 的时候,系统不会去碰那些确实需要听到的声音。

    有些特定的声音类型是你不想意外关掉的,经典的例子包括玩家的对白和音乐。在本例中,你要保护音乐对象,方法是给它指定一个高优先级。

  5. 选中 Cube Main Theme 对象,然后将其 Priority(优先级)值改为 80

    现在音乐就不太可能在游戏进程中被莫名其妙地关掉了。

    [技巧]

    Offset priority(偏置优先级)这个复选框和设置指定了一个值,当对象移动到了 Attenuation Editor 中指定的 Max Distance(最大距离)值时,可以用这个 Offset 值来升高或降低对象的优先级。这样方便设定对象(如脚步声)的优先级。这类对象在距离听者很近时比较重要,而在距离其较远时会变得没那么重要。

    [技巧]

    另外,Advanced Settings 中还有一个 Virtual Voice 分组。在正常情况下,会照常播放声音。在音量低于针对平台设定的 Volume Threshold 时,会将其添加到 Virtual Voice 列表。Virtual Voice 列表是一个虚拟环境。在此,声音引擎会监控相应声音的特定参数。系统会根据音量大小来决定是将声音设为 Virtual Voice 还是恢复为 Physical Voice。如果音量回到 Volume Threshold 之上,或者同时播放的声音数跌至对应的数目限制之下,对象会被自动挪回到 physical voice 中去。


此页面对您是否有帮助?