1)声音引擎 Wwise 与 Criware 的区别
2)Unity 加载场景闪退问题
3)Animation Transition 计划
4)高通 GPU Adreno650 手机的纹理显示异样问题
5)Live2D 平滑突变计划
这是第 253 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。
UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)
Audio
Q:当初有两个声音引擎可供选择,Wwise 与 Criware,请问在平时的开发、热更、效率、解耦上比照,有更举荐的应用的吗?还是说声音组善于哪个就用哪个?
A1:其实音频中间件工具的选项十分多,并不只有这两个,比方《Apex Legends》应用了 Rad Miles,《风之旅人和光遇》应用了 FMOD,《半条命 Alyx》则基本没有应用中间件,用的是自家引擎的音频模块。
Criware 的历史绝对比拟长,跟驰名游戏开发商世嘉有比拟深的渊源,甚至能够说是已经蕴含谢世嘉的官网音视频开发工具集当中,鉴于世嘉的影响力,Criware 至今在日本外乡仍然有着比拟大的用户基数。
Wwise 绝对历史短一些,乏味的是其开发公司 Audiokinetic 于 2019 年成为了 SIE(索尼互动娱乐)的子公司。采纳 Wwise 的我的项目实际上十分多,而且每年在 TGA 获奖我的项目中都能找到约为半数的我的项目采纳 Wwise 开发,只不过,他们不太强制客户给本人打 Logo,造成存在感不是十分高。
轻易列举几个应用了 Wwise 的例子(排名不分先后):《死亡搁浅》、《生化危机 123 重制》、《生化危机 8》、《怪物猎人 Rise》、《对马岛之魂》、《战神》、《崩坏 3》、《原神》、《王者光荣》、《CODM》、《疑案追声》、《彩虹坠入》、《纪念碑谷 2》、《Gris》、《Quantum Break》、《Control》、《巫师 3》和《赛博朋克 2077》等。
应该说,无论从开发的角度还是从音频组的角度,其实应用 Wwise 都是更好的抉择。
开发
行业当先的空间音频工具集,最先反对狭义 Object Based 音频管线的音频工具:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=spatial_audio.html
https://www.audiokinetic.com/zh/products/plug-ins/reflect/行业当先的汽车引擎声音设计插件:
https://www.audiokinetic.com/zh/products/plug-ins/crankcase-rev/弱小的创作工具,简直可实现音频设计师所有的疯狂构想,数量泛滥的胜利用户案例及技术分享(如 Wwise Tour,GDC):
https://www.bilibili.com/video/BV1RE411K7nT官网 Q &A 及 Launcher 的 Bug reporter,为官网反对的收费问题反馈提交渠道。技术支持与创意技术服务,满足我的项目的定制化需要。官网保护的 Unity/Unreal 集成,通过 Launcher 就可将 Wwise SDK 集成至您的我的项目当中,开箱即用。
全平台反对,丰盛的音频编解码选项,内容丰盛的 SDK 文档及清晰易学的 Help 文档及认证教程文档,用户可依据须要调节初始化设置取得更低的音频提早。
热更
领有 File Packager 工具集用于创立 PCK 治理通过热更公布的内容。Wwise 2021.1 版本已反对 Unity Addressables。效率
对设计师而言,具备 WAQL(Wwise 创作工具查询语言),可在我的项目规模达到肯定水平时不便设计师疾速查问须要配置的资源或定位造成问题的资源:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waql_introduction.html弱小灵便的声部限度性能与 Profiling 工具集,不便性能优化与问题排查,从而升高工程师累赘,具备丰盛的批量解决性能。
对于工程师而言,Wwise 具备 WAAPI(Wwise 创作工具 API),可用于创立开发工具,不便设计师疾速解决巨量的数据配置,还能够帮忙他们对资源进行批量打包以配合我的项目开发须要:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=waapi.htmlWwise 领有动态内存治理,无需事后申请固定大小的内存池,做到用多少占多少。内存分类零碎能够不便用户疾速定位与内存耗费相干的问题。
解耦
Wwise API 简略易用,事件后行为可由设计师在创作工具端进行设计,工程师无需为此操心,通常状况下,须要帮设计师调用的接口无非是:
- PostEvent
- SetState
- SetSwitch
- SetRTPCValue
- Load/Unload bank
更具体文档参见:
https://www.audiokinetic.com/zh/library/edge/?source=SDK&id=workingwithsdks_integratingelements.htmlWwise 提供给了声音设计师极大的创作空间,许多对于空间音频设计的设置都放在了创作工具端,而无需程序染指进行调试,只须要像解决个别的发声体一样解决就好。
设计师也可能通过 Profiling 工具对性能损耗有清晰的意识,提前定位可能造成性能问题的设计从而采取重构解决。
感激 Icarus@UWA 问答社区提供了答复
A2:楼上解答从技术层面的确十分好,我简略说下我的认识。
不管界面是否难看,不难看前期还能改。用任何技术,你都要思考他的市场,当初 Wwise 的占有率必然是高的,就比方当初的音频工程师,会 Wwise 和会 Criware 哪个更容易被录取。
程序也一样,只接过 Wwise 和只接过 Criware 哪个更吃香。通过这个剖析,你就晓得你应该用什么软件了。
感激夏霖锐 @UWA 问答社区提供了答复
Crash
Q:最近我的项目遇到一个很诡异的问题,从一个场景切换到另外一个场景的时候,在安卓 64 位真机会闪退,通过符号表查出来最终闪退在 Unity 的 il2cpp/vm/liveness.cpp 文件中。
在 Unity,PC 版本均无闪退景象。
引擎版本:Unity 2018.4.10
打包机:MacOS
为了查出闪退起因,做了以下测试:
1. 应用 Mono 打包,无闪退;
2. 删除 V8 类库,齐全应用 V7 类库,无闪退;
3. 应用 V8 库,切换到一个空的场景,闪退。
第 3 点中无论应用 Application.LoadLevel,Applicaiton.LoadLevelAync,SceneManager.LoadScene 还是 SceneManager.LoadSceneAync 都会闪退,这个问题当初曾经没什么脉络了,不晓得有没有大佬遇到过这个问题呢?
闪退日志:il2cpp::vm::LivenessState::AddProcessObject(Il2CppObject, il2cpp::vm::LivenessState)
很可怜,降级完 Unity 当前,解体仍旧没有解决:
参考网址:
https://forum.unity.com/threads/il2cpp-crashes-at-garbagecollectsharedassets-and-loadlevel.316775/page-2
A:发现要降级到 Unity 2018.4.35 版本,在这个版本中修复了这个 Bug:
感激题主 Lim@UWA 问答社区提供了答复
Animation
Q:求教一个 Animation Transition 的问题。目前对于一个 State A,所有从 A 进来的过渡线是能够进行优先级排序的。那有没有方法对进入 A 的所有过渡线也进行优先级排序呢?
比方对 A 来说,有 AnyState -> A 和 B -> A 两条线,而且它们的条件一样。那么当条件成立时,有什么方法指定应用上述某一条线呢?
目前官网文档没有找到对应的办法,论坛里有人说能够在进入 B 的时候设置一个状态来 Disable AnyState,而后来到 B 的时候再设置回来。不晓得有没有更好的办法。谢谢!
A1:“对进入 A 的所有过渡线也进行优先级排序”这个形容有点问题。依据状态机的定义,不存在以后处于两个 State,都要进入 State A 的状况。
具体形容问题的时候也提到了,要害是存在 AnyState 这个节点。在 Unity 的动画状态机计划里,Entry、AnyState 和 Exit 节点是相似于语法糖的货色,生成 Runtime 资产的时候有一系列节点开展的过程。
回到这个问题上,当处于 State B -> State A 的时候,并不是“对进入 A 的过渡线进行优先级排序”,还是“从 B 进来的过渡线进行优先级排序”。当你在 B ->A 上设定了两条 Transition 线的时候,是能够做优先级排序的,而 AnyState 在开展后也会生成 B ->A 的 Transition 线。但编辑器层面没有公开这层可视化,所以不可调整,并且开展过程不可见,不反对扩大(至多我没找到)。
在必须用 AnimatorController 和想方法实现性能的前提下:
如果只是想让 B ->A 不走 AnyState 的 Transition,写个 Distable AnyState 的状态机脚本,申明参数配到 AnyState 的条件里是最简略的。麻烦一点的就是不应用 Anystate->A,活用 Sub-Sm 缩小连线数量。如果是想让 AnyState 里的 Transition 的优先级进步,在 B - A 上多加一条雷同配置的等价 Transition 调整即可。
感激陈 xx@UWA 问答社区提供了答复
A2:语义上 AnyState->A 蕴含 B ->A(如果条件雷同),即 B ->A 原本在状态机里是多余的 Transition。而以后状态只有一个,满足条件时转入下一个状态,也不存在优先问题。故,应把 B ->A 设定为其它条件,使得 B ->A 不是 AnyState->A 的子集。
感激陈浩涛 @UWA 问答社区提供了答复
Rendering
Q:目前发现在高通 GPU Adreno650 设施上,纹理显示含糊,请问有遇到过的大佬有解决的方法吗?(疑似像是 Mipmaps 的 level 谬误。)
Unity 版本:2019.4.10LTS,
URP 版本:7.5.3
图片设置 压缩格局:RGB(A) astc compressed
高通 Adreno650:
其余设施:
A:很可能是 GPU 的问题,调下 Shader 浮点精度试试,咱们过后是这么解决的。一些华为手机也会有这种精度问题。
感激 HuangLingSheng@UWA 问答社区提供了答复
Rendering
Q:Live 2D 官网提供的组件 CubismRenderController 通过设置 Opacity 能够设置 Cubism 的透明度,然而过渡很僵硬,如下图:
目前的计划是把 Cubism 通过 RT 渲染到面板上,通过控制面板透明度来达到平滑过渡成果,请问大家还有什么好的解决方案?
测试过,不能用缓动曲线函数来设置这个值,两头过程还是会穿帮。
A1:所谓透明度“不平滑适度”,实质起因在于原先的逻辑是身材的每一个小局部独自利用 cubism_ModelOpacity 之后,再将各个局部进行混合。外围代码如下:
身材是一部分一部分画的:
而题次要的成果是:在渲染出整体后果之后,再对整体利用通明成果。所以,“全身绘制之后,再应用透明度解决一次”这一做法是必然的。实质是身材各局部绘制实现后,要取到 FrameBuffer,而后应用透明度解决一次。因而“通过 RT 渲染到面板上,再控制面板的透明度的做法是正当”的。所以题主的问题是,有没有更间接的办法,对这一过程进行优化。我这边还没有想到更好的优化办法,可能 Builtin-RenderPipeline 没有那么灵便,也或者能够思考有没有优化的必要。
感激 Prin@UWA 问答社区提供了答复
封面图来源于网络
明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)