在上一篇文章中,小编为您详细介绍了关于《阴阳师5月20日鬼王之宴爬塔攻略:鬼王之宴爬塔boss阶段阵容推荐[多图]》相关知识。本篇中小编将再为您讲解标题荣获“休闲/社交游戏类最佳声音设计奖” 《使命召唤手游》是如何做空间音频设计的?。
|
文丨陈小荣、徐凯 游戏音频策划、音频程序员 在刚刚结束的第18届G.A.N.G(Game Audio Network Guild,游戏音频网络协会,全球最大的游戏音频行业组织)年度游戏音频颁奖大会上,天美工作室群研发的使命召唤手游荣获休闲/社交游戏类最佳声音设计奖,这也是中国研发的游戏首次在这个奖项上获奖。同时,使命召唤手游还荣获了2019年第十一届中国优秀游戏制作人大赛的最佳游戏音频设计奖,可谓包揽了年度国内和国外的重磅游戏音频奖项。下面,项目的主音频设计师陈小荣以及音频程序员徐凯,将向业内分享使命召唤手游关于空间音频方面的声音设计和思考。
当我们提起“空间音频”的时候,我们在聊什么? 在真实世界中,声音除了在传播过程中因能量损耗而产生的衰减外,遇到阻碍时,会产生反射、阻挡、衍射、透射等一系列客观物理现象,经过人的双耳听觉主观感知,在复杂空间中进一步延伸出:回声、混响等效果,通过这些,我们就能判断出与音源的发声和听者的听音相关的位置、环境和空间等信息。在游戏中,模拟这样需要判断空间信息的听音体验,这个课题通常称为:空间音频。 在目前游戏音频行业中,空间音频包含有3个方向的内容: 1. 声音的传播模拟
2. 声学空间中的声音效果模拟(本文主要探讨这部分内容)
3. VR应用中,模拟3D空间的声音效果 做好空间音频,对于游戏体验的增益在于: 1. 对于音源更准确的定位。 2. 更好的身临其境感(沉浸感)。 3. 更丰富的变化,降低听觉疲劳。 换句话说,就是: 我在哪里?同伴在哪里?敌人在哪里? 哇,听起来跟真的一样。 回到本文的主角:使命召唤手游(以下简称CODM) CODM是天美研发的世界顶级FPS游戏IP使命召唤的手游版。对于天美音频团队来说,顶着常年横扫各大游戏音频奖项的原作IP的光环,又是我们研发的首款真正意义上3A级别品质要求的FPS手游,压力非常之大。体验过原作的同学们应该能感受到游戏声音的空间反馈是非常细腻的,在房子、教堂、街巷等各种区域,根据游戏角色即时在这些地方的任意位置、朝向方向,都能非常逼真地还原。在过往的射击品类手游中,基本都会因为硬件平台的限制或者产品的定位而选择降低这个模块的设计标准。所以拿到CODM后,我们下定决心有所突破,让空间音频效果更加精细化。 问题来了:都说空间音频难,难度在哪里? 我们先来分析下一个声音传播到人耳的不同阶段: 直达声: 发声后,球面推进出去的声波,直接传到我们耳朵里的,我们称之为直达声,在野外开阔的情况下,如沙漠草原等等,若忽略从地面的反射声之后,我们听到的声音基本都是直达声。 早期反射声: 经过障碍物反射后回到我们耳朵里的,我们称之为反射声。声波的速度是恒定的,根据发声位置,障碍物离声源的距离,反射面角度,决定反射声到达人耳速度的快慢有别。发声后,声波会在密闭空间中的来回四处弹射,总会有反射波较早到达人耳(通常在5-100毫秒之内)。这类反射声主要以初次或者二次反射声为主,我们称之为:早期反射声。 混响声: 之后的反射声依然不会消停,继续再次碰到障碍物,再一次次地被反射,一直到能量逐渐消失。因为无数声波四面八方的弹来弹去,这些经过多次反射的声音会密集缠在一起进入人耳,随时间能量越来越弱逐步消停。这种乱棍一样的多次反射声我们称之为:混响声。 就像蝙蝠回声定位一样,通过解析早期反射声和混响声,人就能自然地分辨出房间有多大,墙面地面大概材质,房间里大致有什么东西,在房间什么位置发声,发声的朝向等信息。其中早期反射声的作用会更大些。
回到游戏中,我们需要模拟空间听音效果,最真实,也是最直接的办法当然是完全还原声波传播的物理轨迹,这类似于光线追踪,对声音的传播路径进行物理建模。但是显而易见,模拟四面八方几乎无穷多的声波,这海量的计算非常耗费运算资源,在很多情况下不太具备实用性。所以,在算法或者算力没有突破前,基本都是通过简化后抽象出的少量关键要素,通过数学建模,开放出相关参数来模拟的。 关于如何模拟,举个简单情况下的例子。 比如说当人在房间里,听房间内一个发音体的声音。发声体离他的耳朵绝大部分情况下都是最近的,所以他首先听到的是发声体直接传到耳朵的直达声。然后听到的,是离他最近的,与他耳朵连线呈直角的墙壁或者地面反射回来的反射声。正常的四方形房间,他会听到前后左右上下,一共6次这样的一次反射声,以及同样的2……n次反射声,请注意:某些方向的一次反射声未必比其他二次或者n次反射声先听到。
下面我们来详细盘点一下影响因素:
位置、发声特性显而易见,这里简单说一下朝向特性,如果我们简单的按照6个朝向的一次反射声来说。理想化的音源,是一个朝四面八方散播出同等声波能量的球形音源,但是这种音源在现实中几乎不存在。比如我们以人发音的简化的例子,肯定是嘴朝向的那个方向,声波最没有受到影响,能量最大。方向偏离一些的声音,会受到嘴或者身体的影响,损失部分能量,跟嘴朝向相反的声音,因为声音要穿过头,显然能量损失最大。所以说,音源都是有朝向的,不同方向声波能量、频谱都是有差异的。但是,声波的传播速度是一样的,这就会导致,因为朝向不同,反射回来的6个1次反射波形,不仅先后速度(也就是反射回来到达耳朵的时间)有差异,能量特征也有差异,换成专业术语就是音量和频率均衡方面有差异。所以,如果我们发声的方向按朝这6个方向各转6次,得到的1次反射声波的特性都是有区别的。同理,如果挪动发音位置,显然也一定会影响这样6个1次反射声波的组合特征。这种区别,就是最简化版的人耳用来判断在房间的大小、位置、朝向以及房间声学特性的依据。这样最简模型下的,6个方向的1次反射声比较容易模拟(这句划重点,就是因为容易模拟才实用,也是游戏空间音频实际运用的基础),每一个方向的声音波形,计算经过反射后频率衰减和音量衰减(振幅衰减),再按照到达人耳的时间,跟直达声混合起来就行了。但真实世界的情况一旦复杂化,n(n接近无穷)个方向,n次、n阶反射声,对于算力的影响就很大了。
常见的混响数字模拟效果器和参数 上文一通操作猛如虎,其实就是为了得出一个结论:对于游戏中模拟空间音频效果应用,我们需要能够掌握房间的大小、材质、物件信息,以此调出相应的混响类型,并微调诸如混响时间、高频衰减率、混响扩散等参数,大致就能得到类似空间音色效果。其中,早期反射声会复杂很多,需要随时掌握游戏角色在空间中的位置信息以及对应的墙壁、物件等声音障碍物的情况进行计算模拟,如果是粗略的情况可以使用类似混响声的处理办法,通过几个参数来调整模拟。精细的话,因为早期反射声的计算量相对不算大,可以如上文类似物理建模的方法进行精确的人工计算生成模拟。 聊完了理论,得出了结论,步入正题。如果我们想在游戏里做空间音频,就要解决两端的问题: 1. 问题一:如何实时判定游戏角色是否身处空间中,该空间的大小、形状、材质参数,以及为了模拟早期反射声所需的位置、朝向、声音障碍物等信息? 2. 问题二:得到了一系列游戏信息,转化为声音专业参数后,怎么实现空间音频相关的早期反射和混响效果? 对于问题一,简化的做法是只在游戏场景中划出空间区域,比如:山洞、房间等等,只需判断游戏角色是否在这个区域中,或是进入这个区域的入口边缘地带即可,这样的方式只能大致反映出发声点所处的空间环境信息,但基本上进入了这个空间后所有声音都是一样的,没有办法判断角色在这个空间中的具体位置,通常对于空间定位要求不高的游戏会采用这种方式。对于空间定位要求高的,基本主流都会使用射线+空间信息编辑的方式,即在地图编辑中,详细指定出空间的大小形状、表面材质、障碍物件等等信息。然后通过从角色位置不停发出大量的射线,来标记空间信息,并返回某一时刻角色在空间中模拟空间音频效果所需的关键数据。这里我们可以看出,当然是射线越多效果越好,可是射线判定的系统消耗较大,硬件有限制的情况下就必须优化算法,有选择地发射线。比如,音源点到墙面的最短距离路径是最重要的,一定要有射线,音源后方的射线必要性较小,可以简化,等等。这个话题我们之后再进一步讨论,总的来说,就是主机游戏性能限制小,射线可以多,但手游性能限制就很大了,通常只能给出几条射线,是远远不够精确反馈空间信息的。
图:Remedy Entertainment-《Quantum Break》的射线投射系统,来源:Wwise Tour 2018 问题二,通常混响可以通过使用混响类效果插件来模拟,不过有些有特殊需求,或是希望更精细的情况下,也有团队自己做效果算法。还有一种针对枪声的混响模拟的方式,是通过预录制室内、室外的枪声,只取用tail即尾音部分,这样的话效果会更自然,但是针对不同空间的变化响应灵活度较低,需要根据适合的游戏类型来运用。对于早期反射,需要精确计算的情况下,当射线返回反射点信息时,可以通过虚拟声源的方式模拟,相当于在反射点建一个声源,把源声音进行了模拟反射效果处理(如:音量衰减、频率均衡处理等等)后,在反射点作为新的音源发声,带上反射点相对听音点的音源朝向、传播衰减等参数,按照反射声的整个路径距离算出返回听音点的延迟时间,多个反射声跟直达声按时间顺序叠加起来,这样基本能很好的模拟。可以看到反射点越多,模拟效果越真实,当然系统消耗就越大。
《NieR:Automata》K-verb DSP效果器原理图,资料来源:Audiokinetic博客 以上提到的,只是一种近乎于科学模拟的大致的思路,实际上游戏更多的是艺术、是感受,重要的并不是是否完全精准,完全科学,而是符合游戏体验的需要。所以,不同的游戏在空间音频方面是会根据情况采用灵活的方法处理的。比如,在守望先锋中,就采用了一种叫:Quad Delay(四向延迟)的方式,简单来说,就是按照主角的朝向,固定的以一个十字型的方位发出四条射线,返回四个射线碰撞点的信息,角色的到碰撞点间的距离,对应delay时间参数,碰撞点材质以及角度等,通过EQ模拟,碰撞点的相位通过Delay 声音的Panner来处理,这样就能以不大的系统消耗,满足游戏需求地模拟出早期反射声空间效果。
《守望先锋》Quad Delay说明,资料来源:《守望先锋》2016 GDC演讲 CODM中我们的做法 通过上文描述,我们对于空间音频在游戏中的实现方式已经有所了解,主流3A游戏通过大量射线判断的方法,非常精细。但是对CODM这样一个手游来说,性能上是一个巨大的问题。通常对于手游,音频模块能有2-3条射线进行计算已经是比较奢侈了,射线不够的情况下,要做好精细的判断是非常困难的。而且,即便射线够,要想从零开始实现空间音频的整套算法并优化性能达到可用性,也是一件非常不容易的事,技术筹备那段时间可真是愁白了少年头。 正在发愁的时候,一番勾搭,我们了解到游戏音频中间件Wwise准备推出新的Spatial Audio功能,这与我们的需求无缝衔接。经过来回半年的磨合洽淡,在Wwise还没有正式对外发布这个功能组件的时候,我们已经把它加入到了CODM的研发中,成为了首个使用Wwise Spatial Audio功能的手游。当然,光是使用Wwise的插件还是不够的,我们也针对CODM的产品特性做了很多优化,最终打磨出了如下这套CODM的空间音频方案: 一、空间的区分与判定 区域划分 想要在游戏中实现声音的反射效果,首先要在引擎中把这些要反射声音的区域圈出来,并且告诉服务器这些区域分别是什么,例如房子,隧道,山谷等,CODM里面这些区域主要都是不同的房子。所以,第一步需要解决的是如何判断是在室内还是室外? 在其他项目中,我们为了更方便和更低消耗地判断玩家是否在房子里,会使用在角色的头顶打射线的方式,射线被阻挡则判断角色在室内。这样的设计物美价廉,丝毫不费工作量,确实能够覆盖大多数的室内场景,但是这样一刀切的功能没法根据房子的不同去区分不同的混响,同时也会把一些头顶有遮挡的室外地方判断成室内。例如当玩家蹲在室外屋檐下的时候,他不仅带了室内的混响,而且这个混响和蹲在厕所里的混响如出一辙。而且,如前文所描述,如果没有更多射线和空间定位、反射等算法支持,我们是没有办法实现早期反射效果来进行空间中更精准的定位的。 在项目进行早期进行到这个节点时,在研究了Wwise Spatial Audio套件后,我们决定手动把场景中所有的室内空间用Unity的Cube圈出来,通过判定是否在Cube里,除了能更好地区分室内外,还是合入Wwise Reflect插件的必要步骤。设定了Unity中的Cube信息后,通过Wwise跟Unity的整合,可以用AK(Wwise的开发公司)提供的现成算法(射线+空间与朝向信息+镜像虚拟反射声模拟)判定角色在室内空间的实时位置与空间反射情况,非常方便地实现早期反射效果。但是这样确实带来了很大的工作量,几百个房屋,严丝合缝地画出Cube,真可以说能耗死十个声音设计师。当然也可以选择和项目组美术沟通,让负责场景的美术同学在制作场景的时候就帮你把这些Cube做好,如果能做到了这一步,恭喜你,你省去了大部分的工作量,但是以下内容依然对你有用。
由于游戏为了极致的优化,会对3P角色进行裁剪,当3P不在视野内时,甚至不会更新其物理信息,甚至根本不会存在(只有位置信息),所以我们只能通过各种简单的几何形状来组合,所以对于不规则形状的房间,如何画Cube来标出室内区域,这是我们首先需要解决的问题。 室内空间不规则,就需要利用多个Cube叠加来覆盖到所有室内的区域,如果不叠加就会留有一些缝隙区域,玩家在这些区域还是会被认为在室外,而室内外的枪声差异是巨大的,所以这些缝隙必须得干掉,苍蝇都不能飞进来。
我们设定了一个优先级系统,把这些会重叠的Cub都设置为相同的优先级,程序把重叠区域设定为无响应区域,玩家经过这些重叠区域时不会判断任何的进出Cube行为,这样就保持了整个不规则的区域为一个室内。但是需要注意的一点是这两个Cube的重叠区域,他们的进出行为不需要被切换,但是混响配置依然需要能够被切换,毕竟上完厕所回到房间,我们的混响总得换一换吧。
Unity默认角色碰撞体为整个人,当它在判断进出行为的时候机制有所不同,判断人物进的时候是只要接触Cube就算进入,但是出Cube需要整个人全部出去才算。 例如奥尼尔和库里在室内同一个地方以相同的速度走到室外,那么奥尼尔想要听到室外混响的时间比库里来的久,因为Unity判断奥尼尔经过门口的时间更长(如果不知道原因请查看这两个人的体型)。如果这还不够过分就想想姚明站在阁楼里,身子从屋顶的窗子探出去开枪,枪声依然是室内的,因为下半身还在室内呢,此时要么让他赶紧滚出去,要么把他下半身切掉才能让枪声变成室外的,这样就不太好了。
玩家从室内探出身子在室外开枪 所以程序大佬代码一撒,今后不管是奥尼尔,库里,还是姚明,通通把他们的灵魂浓缩成一个点,然后把这个点安放在肉体的胸部或者头部位置,Unity只根据这个点来判断进出Cube的行为,这样他们下次从屋顶探出身子朝外开枪的时候,再也不用担心下半身被切掉了。
游戏中有很多房子有破烂的不规则屋顶,对于这种房子的室内外我们想要用Cube组合的方式区分开,非常的费力耗时。此时我们头顶的射线可以排上用场了,我们在Cube上增加了一个设置,针对这种房子上的Cube可以勾选射线启动,如果在Cube内,但是射线没被阻挡,依然判断是在室外。
例如上图的房子,它可以分成3个混响区域,四面有墙的全封闭室内,被炸掉部分墙面的半开放的室内,和一部分纯室外,我们需要用Cube把他们区分出来,此时声音设计师的手已经开始瑟瑟发抖了:程序大佬要是不给我头顶射线的话,我宁可去死。所以得到了来自程序大佬的强力支持之后,我们只需要先把里面四面都有墙体的区域画上Cube1,配置上混响,然后再在破烂的区域画上Cube2,配置上混响,记得要把这个Cube2的混响发送量减半,然后在这个Cube2上勾上头顶射线。这样从被炸毁的墙角,到半开放的室内,再到四面都有墙体的室内,我们的混响都能体现出不同了。 自动化管线 到这里,我们本以为前期的准备工作已经就绪了,我们可以开始快乐地为艺术献身,设计各种反射效果了,可是策划同学把表格打开,游戏中的的房子多达400-500个。而要把这些房子一个个画上区域正确的Cube,挂上各种需要设置的组件,对于整合配置的工作量实在是太大了。所以我们需要充分利用程序自动化来解决一些初步的重复性配置工作,在这个基础上再去消耗声音设计师,尽可能地让设计师更多精力花在效果调试、设计,而不是生产线上。 1. 批量生成 在CODM中,我们拿到一个房子的prefab之后,程序会根据房子的造型为我们一键生成一个能够覆盖所有区域的立方体Cube,同时在这个Cube上自动挂上所有我们需要的混响、早反射、进出房间触发声音事件的组件,并设置相关的参数。 2. 微调 对于一些生成了但是不符合预期的房子,我们再通过复制,调整大小来让这些Cube与整个房子严丝合缝。需要注意的是,调整Cube的大小,我们一定要借助Cube上Colider组件的Edit Colider功能。利用它,我们可以分别移动Cube的每一个面的位置,然后在游戏Cook的时候,将这些编辑好的信息写入对应的房间数据中。。 3. 快速验证 在程序的帮助下,我们三个声音设计师用了三天的时间就完成了为所有的房子配置Cube和声音组件的工作。但是完成这一步的工作之后我们在想,这么多房子会不会在配置过程中有遗漏,或者项目组的同学做了新的房子没有告诉我们,又或者他们修改一些老房子的时候删掉了我们的声音配置,这些我们又不知道。 这样的未知信息会带来非常多的隐患,所以我们制作了一个导出表格的工具,这个表格包括了所有房子的名称,和Cube、Cube上的组件信息。这样我们通过查看表格可以初步检测到所有房子是否有配置Cube、混响、早反射等组件,很好地解决了如何找到漏网之鱼的问题。 防坑宝典 旋转嵌套问题 我们最初在做的时候,一切都运行的非常好,直到有一天,我们发现一个人站在一个房子的边缘,依然带着房子的混响和反射声。当时我们就惊了,反复测试,发现这个问题是必现的。后来通过和声音引擎的底层数据对比,发现传给声音引擎的数据在有嵌套的旋转的时候,是有一定误差的。后来我们统一了旋转,在数据的序列化时候,对父对象的旋转做了消除。 性能控制 这回应该可以在场景中批量生产Cube了,但是依然受到项目主程序的挑战:由于我们不依赖于Unity的物理引擎,那么场景中有这么多的Cube同时在工作,每一个Cube都会对进出的角色进行混响计算和进出行为的统计,消耗了大量的CPU。 于是我们决定采用以1P为中心点画半径,半径内的Cube才会工作,这样场景里面同时生效的Cube就少了很多,然后根据画质的高低配选项,这个半径的配置不同,高配的半径距离自然可以放大一些,低配的半径就小一些。所以,当你选择越低配的时候,同时工作的Cube就越少,再加上分帧计算以及基于距离的更新策略,终于使项目主程序得以点头通过。 剪裁Bug 过了两天我们又发现,怎么还有角色带着室内混响在室外撒欢?不是改掉了吗?原来,正是裁剪的功能给我们带来的问题,当3P一直在室内,1P逐渐走远,到达一定距离后Cube被裁剪,对于服务器上帝来说,这个3P已经没有了当前Cube的束缚,在他进入其他Cube重置状态之前,他被永远的判定在室内了,所以此时他在室外撒欢的时候,依然带有纯正的室内混响。 程序大佬手臂一挥,立马再增加一个判断,所有内部有角色的Cube,一一刀下留情,不做裁剪,这样终于完美了。 二、空间声音效果的实现 做好了空间区分与判定工作,接下来就是接入Wwise,实现具体效果。 如上文阐述,对于混响声,只要知道进入了什么混响空间,通过指定空间的混响类型和相关参数,使用辅助总线发送,调节干湿比,就能很方便的实现。 对于早期反射声,我们将需要参与反射计算的多边形,以及其对应的声学材质信息,传递给声音引擎,声音引擎拿到当前的多边形信息,以及发音体、听者的朝向,位置之后,便会像计算光线传播一样,计算声音的传播路径,声音经过反射一次传递到听者的,我们称之为一阶反射声,声音引擎中可以配置声音传播所计算的阶数。我们有了这些信息之后,在声音引擎中,会被映射到引擎内置的参数,我们再通过使用多拍带滤波器等效果器,对延迟,频响等进行模拟。。
[ 图片来源:Wwise Help ]
[ 图片来源:游戏内截图 ] 如图,E表示发声体,L表示听音者,通过两者与空间表面形成的等角度反射射线,再让反射点与发声点间连线形成等边三角形,三角形终点与听音者之间的距离和方位就能决定延迟参数以及相位信息等等,配合空间反射面的材质参数进行滤波处理,就能模拟出反射声的效果。 在CODM中,我们重点针对以下两种情况做了反射处理。 1. 室内反射: 通过设置早期反射+混响实现,具体的操作比较繁杂,可以参考Wwise公开的说明文档,有详细指导。我们的策略是,不同的Cube,我们配置了不同的混响bus和发送量,以及不同的早反射材质三个参数。所以每一个房子我们都要去针对这三个参数进行调试。在游戏中,声音会通过Wwise的混响bus上的效果器而产生混响。早反射则是在游戏过程中实时计算生成,然后和混响组合在一起,便形成了在房间内的整个反射效果。在CODM中,我们区分了大小房间,隧道,大厅,走廊,山洞等不同的混响效果,如图所示:
2. 室外反射: 利用Cube内外面都可以响应早反射效果的设计,我们在一些带有悬崖、山谷的场景中设计了带方向的回音,如果玩家在悬崖边上开枪或者触发语音,能听到声音是从悬崖方向反射回来的回声。 如图:我们想让玩家在铁质走廊区域的时候,开枪或者喊话会有悬崖的反射效果
如上图所示,我们在悬崖边上的金属走廊处画了一个Cube:A,然后在旁边的悬崖里面也画了一个Cube:B,这两个Cube的功能完全不同。
当玩家走进A时会触发一个RTPC,这个RTPC会开启早反射Aux Bus上的Delay和EQ效果器,所以在这个地方,玩家的早反射声音就带上了延迟和低通效果。悬崖里的B是为了让A里的玩家触发的声音传达到之后再反射回来,这样便形成了从悬崖处传来的回声。 实际游戏效果演示 总结 我们可以看到,Wwise虽然已经为我们提供了一套相对成熟的Spatial Audio配置方式,但是如果真正要在游戏中批量的实现,我们还需要大量的准备和测试工作。在CODM的这部分模块的工作中,我们还有很多可以进行探索和优化的地方,比如自动化工具的是否还能更多的提升生产力,效果调试和测试的流程能否更简洁方便。 另,总的来说,空间音频这块我们的出发点是立足科学,但会结合我们的产品定位、硬件环境、用户需求,基于对于声学理论的理解,采用适合我们游戏的方式来呈现。 随着手机硬件日新月异,空间音频模块肯定会更多的在手游中具备更多实用性,逐渐向3A端游接近,为玩家提供好的沉浸感和更精准的定位判定。此文目的在于抛砖引玉,呈现CODM实际项目中此模块的实现方式,也希望能帮助想要在手游中使用Spatial Audio的同学,除了技术方案的参考外,提前避开一些坑,如果还能在最终的效果设计上激发大家一些灵感那就更好不过了。 来源:腾讯游戏学院 原地址:https://mp.weixin.qq.com/s/HCj3w0rdGpzWTlt7eWGehg |
编后语:关于《荣获“休闲/社交游戏类最佳声音设计奖” 《使命召唤手游》是如何做空间音频设计的?》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《跑跑卡丁车手游520活动大全:8折优惠、充值返利汇总[多图]》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器