探花 极品
这是第350篇UWA时间常识共享的推送,精选了UWA社区的热点话题,涵盖了UWA问答、社区帖子等时间常识点,助力大家更全面地掌捏和学习。
UWA社区主页: community.uwa4d.com
本期目次:
从Gamma空间改为Linear空间会导致性能下落吗奈何科罚莫得使用Unity Ads却收到了GooglePlay平台的训诫C#端奈何科罚xLua在实施DoString时候死轮回Texture2DArray关联
Rendering
Q:Linear性能比Gamma差吗?咱们样貌从之前使用的是Unity 2020.2.7f1版块,采取的是Gamma。面前升级到2021.3.21f1,切换为Linear空间,Shader和图片皆进行过修改,性能也优化过。
可是总体测试下来性能不如之前的Gamma,帧率莫得曩昔高,帧率掉了许多,经过优化,照旧不太令东谈主放心,总嗅觉会卡顿,不知谈是不是从Gamma升级到Linear的原因?
A1:应该和换脸色空间不紧迫。若是莫得尽头功能,Gamma和Linear的主要区别即是临了输出到炫耀器时要不要作念脸色的修正,笔据你的形色应该和修改Shader联系。
感谢李伟@UWA问答社区提供了恢复
A2:在硬件救助的建立上,不应当有显豁的性能各别。
在硬件不救助的情况下(比如OpenGL ES 2.0),若是是基于Shader中的模拟退换来终了Linear Space的效劳,会有一定的GPU铺张。可是若是感受上是卡顿,而非不绝的低帧率,那也不像是这种情况,提倡从具体的性能Profile数据脱手来进行排查。
这里有一个关联的商榷,搜索performance关键词不错看到一些东谈主作念的实验:
https://forum.unity.com/threads/gamma-vs-linear-space.613294/
部分论断援用如下:
“I have just done a stress test of Gamma vs Linear color spaces with transparencies and Gamma is indeed a liiiitle faster than Linear, but the difference is so minimal it doesn't even matter. (2 to 3 frames per second more on a stress test that was overdrawing 8 transparent planes one over the other for the full screen space.)
On any GPU that handles GLES3 there is no performance reason to use Gamma space over Linear.
Gamma space is legacy now and is only useful for legacy GLES2 GPUs (because linear requires GLES3)”
不同的游戏测试罢休可能略有各别,但旨趣上应该是莫得可不雅测的性能各别的,题主不错参考一下。
感谢贾伟昊@UWA问答社区提供了恢复,接待大家转至社区疏导:
https://answer.uwa4d.com/question/64d2fe8066b5c657c78be152
性感尤物Script
Q:我莫得使用Unity Ads,但仍然收到了GooglePlay平台的训诫:
您的“xxxxxxx”应用(版块代码:8)包含“com.unity3d.ads:unity-ads”SDK 或您的某个代码库所依赖的SDK,该SDK会网络个东谈主数据或明锐数据,这些数据包括但可能不仅限于Advertising ID,Android ID记号符。笔据用户数据计谋的关联限定,应用不得将持久性建立记号符与其他个东谈主数据、明锐的用户数据或可重置的建立记号符关联联。
自天下合作时刻(UTC)2023年1月11日午夜起,若是新应用版块包含SDK版块且不顺应用户数据计谋,则可能无法发布。您不错计议将该SDK升级至不含违法代码的合规版SDK(若有),或者从您的应用内移除该SDK。
笔据您的SDK提供方的情况,您不错计议升级到4.0.1,并/或筹商您的SDK提供方,望望是否有合适的更高版块可用。Google无法保举任何第三方软件,也无法为这类软件提供任何背书。
A1:提倡搜检下SystemInfo的援用。
感谢Knight-132872@UWA问答社区提供了恢复
A2: 提供几个想路:
1、说明Package下有莫得com.unity.ads包
2、若是使用的是Unity中国版,不错切换为以下版块或同版块国外版
感谢bo@UWA问答社区提供了恢复
A3:亲测,用对应的国外版块就行了,解包发现,中国版无论是否导入Ads,打的包内部皆会有Ads内容,国外版块不会有这个问题,今天提交谷歌商店考据过了。
解包后在smali\com\unity3d目次下,splash文献夹,最初要在工程里移除Ads,再打包测试,我用2020.3.38f1和2018.4.36f1测试皆没问题。
感谢TimWang@UWA问答社区提供了恢复,接待大家转至社区疏导:
https://answer.uwa4d.com/question/63a409583bd6691a9dcf2dd8
Script
Q:我使用xLua看成游戏的内嵌剧本言语,允许玩家自界说剧本。
面前有个玩家在剧本内部写了一个死轮回,当我用DoString去加载这个剧本时候会径直卡死,于是我在外面加入了一个Task:
var isSucceed = false;var task = Task.Run(() => {isSucceed = sandbox.DoString(xxxx)//这里简化一下.中枢即是加载这个剧本实施DoString});
bool isCompletedSuccessfully = task.Wait(TimeSpan.FromMilliseconds(1500)); //1.5s timeout
if (!isCompletedSuccessfully){CELog.LogError("加载剧本超时");isSucceed = false;
luaEnv.Dispose(); //Kill掉现时的Evn
return; //不再加载后续剧本}
面前是只须调用‘luaEnv.Dispose()’剪辑器就径直闪退,无论是这里Timeout了调用,照旧等几秒以后。
我嗅觉是因为Task的Timeout仅仅在超时后回调,可是此时Lua还在死锁中,是以我无法Dispose。
官方的FAQ提了一句:
https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md
调用LuaEnv.Dispose崩溃,很可能是这个Dispose操作是由lua那初始实施,特别于在lua实施的历程中把lua诬捏机给开释了,改为只由C#实施即可。
我嗅觉和我这个情况是相同的,应该奈何科罚?
A:Update一下面前有计划的进展:
这是找xLua求教的罢休,面前满足我我方的需求:
https://github.com/Tencent/xLua/issues/1077
若是以上要害动怒足,还搞不定底层,不错尝试以下几个标的:
MoonSharp
https://www.moonsharp.org/
`MoonSharp`是纯用C#写的Lua,不外仍是不更新了。Discord还有活跃,问的问题皆会解答。
https://gist.github.com/xanathar/2c777a79937398834ad4
用Hook的形势不错终了以上的需求。
优点即是纯C#的,相对来说好操作。不外即是性能弱,可是若是和我相同Lua仅仅用于玩家的Mod。其实还好,因为Lua端的逻辑会很弱.
nLua
https://github.com/NLua/NLua/issues/56
nLua的DebugHook是径直被集成好的,xLua的Hook大佬没给暴显现来,要我方搞。
uLua
https://assetstore.unity.com/packages/tools/utilities/lua-modding-framework-226043#releases
Assetstore上头的资源,近期还在更新。
感谢题主Eran@UWA问答社区提供了恢复,接待大家转至社区疏导:
https://answer.uwa4d.com/question/64ce265830070f63751b64f2
Texture
Q:从Texture arrays文档(https://docs.unity3d.com/Manual/SL-TextureArrays.html)上来看,GLES3 Metal 仍是不错救助了。
最容易猜测的即是地形的Splat层,若是是四层Splat,那么就不错用一个Texture2DArray来代替,平正是减少了Bind铺张。其中笔据龚大(https://www.zhihu.com/question/56015505)的真谛来看,似乎还不错减少Splat采样次数,但笔据我方的测试和交融来看并不可,因为Texture2DArray的Slice之间并不会Blending,不知是不是我交融问题。
我使用一个Texture2DArray来代替4层的Splat地形,从xCode上看支拨,并莫得任何的减小,那面前来看这样作念地形的真谛就不是很大了。AssetStore上有一个插件叫MegaSplat即是使用Texture2DArray来达到许多层混杂。
面前猜测的Texture2DArray还有一个不错欺诈的地点是场景贴图。比如场景用到了多张 1024的贴图,或者多张Lightmap,原来由于贴图不同导致StaticBatching无法合并,面前就不错使用Texture2DArray来作念了。
还有比如UI上的Icon之类的,不错合并到一个Texture2DArray来达到DrawCall的合并。
面前Texture2DArray最不好的地点是,只可通过代码来创建,莫得剪辑器的救助。若是要离线制作Texture2DArray,就需要为不同的平台准备多份资源了。
领导大家有莫得Texture2DArray的训导不错共享呢,仍是使用或者有算计使用的?
A1:有计划了一下Texture2DArray,看起来它是将多个2D的Texture组合起来形成一个对象,是以在使用的时候只需要绑定一次,就不错采样多个2D Texture。着实如题主所说,采样的时候照旧一次只可采样一个指定的Slice,Blend也需要另外的Shader代码来完成。
题主说了:
其中笔据龚大的真谛来看,似乎还不错减少splat采样次数,但笔据我方的测试和交融来看并不可。
我嗅觉他的真谛可能是:并不是每次采样必须把统统的Slice皆采了,而是不错只采其中一部分。臆测原来想抒发的是一次采样只采一个Slice。
我使用一个Texture2DArray来代替4层的Splat地形,从xcode上看支拨,并莫得任何的减小,那面前来看这样作念地形的真谛就不是很大了。
若是单从性能上看,Texture2DArray比Texture2D着实仅仅减少纹理绑定的支拨,然后在游戏引擎中可能会对合批产生影响。其他的作念法跟平日Texture2D是相同的。Texture2DArray比Texture3D在LOD科罚上不同,Texture3D会减少Slice,这并不是渲染Terrain时想要的。然后Texture2DArray在Filter的时候只会在u,v上作念,而Texture3D还会在d上作念,是以这部分Texture2DArray也比Texture3D性能更好。空洞这些身分可能即是保举渲染Terrain使用Texture2DArray的原因。题主通过实验评释Texture2DArray渲染地形莫得减少支拨,也有可能是因为一般一个场景就一个地形,从绑4张纹理形成绑1张就少了几毫秒,况兼也不是每帧皆绑,是以从举座效劳上看发达的不显豁。
--- 更新 2018.2.22
作念了个浅易实验考据了一下,下图辩别是用Texture2D和Texture2DArray渲染地形罢休和GLES API调用。实验建立为三星s6。
Texture2D:
Texture2DArray:
其中,GLES API调用图中红色框示意纹理绑定的API调用,绿色框示意渲染API调用。WT示意了该API调用的耗时,单元为纳秒。从Texture2D图中可知一共有5次纹理绑定,辩别对应于材质中的5张纹理绑定,而Texture2DArray图中惟一两次调用,辩别是Splat纹理和四层混杂纹理的绑定。从图中可知一次glBindTexture的耗时或者为1000~10000ns,即最多0.01ms。因此,三次glBindTexture加上三次glActiveTexture也最多0.06ms。是以看不出来。
感谢ZFK@UWA问答社区提供了恢复
A2:假如地形需要16张图片,制作上确保归并位置最多受4张图影响,是否可行?若可行是否不错交融为使用Texture2DArray比不使用从简了16-(4+1)=11次Sample,与相应的Bind?(这个4也可能2或者10看需求,+1是因为要辩别存索引跟权重,具体要不要+1视推行情况决定。)不使用Array时减少Sample次数也能用if判定但对GPU并行影响更大。
感谢makebalance@foxmail.com@UWA问答社区提供了恢复,接待大家转至社区疏导:
https://answer.uwa4d.com/question/5a7e9f79847802258a065084
今天的共享就到这里。生有涯而知无涯,在漫漫的开荒周期中,咱们碰到的问题仅仅冰山一角,UWA社区愿伴你同业,沿途探索共享。接待更多的开荒者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
点击下方柬帖温煦咱们,将我设为星标,实时罗致小编逐日推送哦,性能优化不迷途~
近期精彩归来