从Gamma空间改为Linear空间会导致性能下降吗

1)从Gamma空间改为Linear空间会导致性能下降吗
2)如何处理没有使用Unity Ads却收到了GooglePlay平台的警告
3)C#端如何处理xLua在执行DoString时候死循环
4)Texture2DArray相关


这是第350篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

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关键词可以看到一些人做的实验:
Gamma vs Linear Space - Unity Forum

部分结论引用如下:
“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问答社区提供了回答


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问答社区提供了回答


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提了一句:

调用LuaEnv.Dispose崩溃,很可能是这个Dispose操作是由lua那驱动执行,相当于在lua执行的过程中把lua虚拟机给释放了,改为只由C#执行即可。

我感觉和我这个情况是一样的,应该如何处理?

A:Update一下目前研究的进展:

这是找xLua求教的结果,目前满足我自己的需求:
xlua DoString时候死循环 C#端如何处理 · Issue #1077 · Tencent/xLua · GitHub

如果以上方法不满足,还搞不定底层,可以尝试以下几个方向:

MoonSharp
MoonSharp

MoonSharp是纯用C#写的Lua,不过已经不更新了。Discord还有活跃,问的问题都会解答。

https://gist.github.com/xanathar/2c777a79937398834ad4

用Hook的方式可以实现以上的需求。

优点就是纯C#的,相对来说好操作。不过就是性能弱,但是如果和我一样Lua只是用于玩家的Mod。其实还好,因为Lua端的逻辑会很弱。

nLua
Using Debug Hooks crashes Lua execution · Issue #56 · NLua/NLua · GitHub

nLua的DebugHook是直接被集成好的,xLua的Hook大佬没给暴露出来,要自己搞。

uLua
Lua Modding Framework | Utilities Tools | Unity Asset Store

Assetstore上面的资源,近期还在更新。

感谢题主Eran@UWA问答社区提供了回答


Texture

Q:从Texture arrays文档(Unity - Manual: Texture arrays)上来看,GLES3 Metal 已经可以支持了。

最容易想到的就是地形的Splat层,如果是四层Splat,那么就可以用一个Texture2DArray来代替,好处是减少了Bind消耗。其中根据龚大(为什么要强调Texture2DArray在地形上的应用? - 知乎)的意思来看,似乎还可以减少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问答社区提供了回答


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为OD七日集训第1期复盘 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、活动内容如下第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、双指针第5天、递归回溯第6天、二分查找第7天、贪心算法 && 二叉树 二、可观测性工程1、简介2、主要内容 大家好,我是哪吒。 最近一直在刷华为OD机试的算法题,坚持…

腾讯音乐如何基于大模型 + OLAP 构建智能数据服务平台

本文导读: 当前,大语言模型的应用正在全球范围内引发新一轮的技术革命与商业浪潮。腾讯音乐作为中国领先在线音乐娱乐平台,利用庞大用户群与多元场景的优势,持续探索大模型赛道的多元应用。本文将详细介绍腾讯音乐如何基于 Apach…

leetcode121. 买卖股票的最佳时机

题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…

使用PAM保障开发运营安全

硬编码凭据和 DevOps 系统中缺乏凭据安全性是组织的巨大漏洞。以明文形式访问凭据的恶意内部人员可以在 IT 中建立和扩展其立足点 基础设施,构成巨大的数据被盗风险。 什么是PAM 特权访问管理 (PAM) 是指一组 IT 安全管理原则,可…

Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2) A ~ D

比赛链接 A 正常枚举就行&#xff0c;从最后一位往前枚举&#xff0c;-1、-2、-3...这样 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long l…

ThePASS研究院|以Safe为例,解码DAO国库管理

本研究文章由ThePASS团队呈现。ThePASS是一家开创性的DAO聚合器和搜索引擎&#xff0c;在为DAO提供洞察力和分析方面发挥着关键作用。 Intro 随着去中心化自治组织&#xff08;DAOs&#xff09;的发展&#xff0c;它们被赋予了越来越多的角色和期望。在这种巨幅增长的背景下&…

vue3将通用组件注册成全局组件

一、问题重现 我们用过vue的人都知道会有一个components文件夹用来存放我们的通用组件&#xff1a; 这里我的通用组件就有四个&#xff0c;但是有一些是使用评率比较高的&#xff0c;如果很多地方要使用我还得导入相同的组件&#xff0c;写的都是一样的代码&#xff1a; impo…

RT-Thread内核机制 线程栈

int flag;void cmp_val(int a,int b) {volatile int tmp[10];tmp[0] a;if(tmp[0] > b){flag 1;}else{flag 0;} }int main() {int a 1;int b ;cmp_val(a,b);return 0; }我们写好的程序会保存在Flash上。 其它类似汇编指令 SUB R0,R0,#4 R0 R0-4 B LR 放入LR寄存器 局…

【Interaction交互模块】LinearTransformDrive线性变换驱动

文章目录 一、预设位置二、案例&#xff1a;建一个按下后可自动抬起的按钮三、留有疑问 一、预设位置 交互——可控制物体——变换——线性变换驱动 二、案例&#xff1a;建一个按下后可自动抬起的按钮 按钮的结构和设置如下图 为了让它碰触时&#xff0c;往下走——预设体…

spring boot 测试用例

依赖包 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>ju…

CleanMyMac最新版4.14Mac清理软件下载安装使用教程

苹果电脑是很多人喜欢使用的一种电脑&#xff0c;它有着优美的外观&#xff0c;流畅的操作系统&#xff0c;丰富的应用程序和高效的性能。但是&#xff0c;随着时间的推移&#xff0c;苹果电脑也会产生一些不必要的文件和数据&#xff0c;这些文件和数据就是我们常说的垃圾。那…

ChatGPT辅助编写自动化测试

大家好&#xff0c;我是洋子&#xff0c;ChatGPT已经越来越火爆&#xff0c;国内百度、阿里等互联网大厂也纷纷投入大模型研究&#xff0c;OpenAI官网中提供了许多ChatGPT应用场景&#xff0c;例如SQL翻译、语言翻译、代码解释等 作为一名QA&#xff0c;我更关注ChatGPT生成的…

探索三丰云:免费虚拟主机与云服务器的新选择**

随着云计算技术的飞速发展&#xff0c;我们有了更多的选择来满足我们的在线业务需求。今天&#xff0c;我想向大家推荐一款我最近发现的优质服务——三丰云。 三丰云&#xff08;https://www.sanfengyun.com&#xff09;是一家提供免费虚拟主机和免费云服务器的公司&#xff0…

简易虚拟培训系统-UI控件的应用5

目录 Toggle控件简介 示例-使用Toggle组实现主轴速度选择 本篇介绍UI控件Toggle&#xff0c;尝试一个小示例-使用单选框实现速度的选择控制。 Toggle控件简介 1. Toggle的结构如下&#xff1a;最重要的Toggle组件挂在Toggle节点上&#xff0c;下面的Image组件用于显示单选框…

单元测试用例mock的使用方法

单元测试用例mock的使用方法 提升代码测试覆盖率的关键策略 为什么单元测试是如此重要&#xff1f; 在软件开发中&#xff0c;单元测试是一个关键的环节&#xff0c;可以确保代码的质量和稳定性。而在进行单元测试时&#xff0c;使用mock对象可以帮助我们更好地测试代码逻辑…

【办公自动化】使用Python批量处理Excel文件并转为csv文件

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【CSS左右上角斜标签】CSS实现左右上角飘带功能,左右上角斜标签(附源码)

文章目录 写在前面涉及知识点实现效果1、实现过程1.1左上角飘带Html代码Css代码效果 1.2右上角飘带Html代码Css代码效果 2、源码分享2.1 百度网盘2.2 123网盘2.3 邮箱留言 总结 写在前面 其实在公司页面开发过程就遇到过&#xff0c;需要在方块右上角展示一个斜的文字或者告警…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

TCP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议&#xff0c;下面将针对TCP数据报的结构进行分析 关于UDP数据报的结构分析推荐看UDP数据报结构分析&#xff08;面试重点&#xff09; TCP结构图示 TCP报头结构的分析 一.16位源端口号 源端口表示发送数据时&#xff0c;发送方的端口号&am…

【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性&#xff0c;就顺便整理一下文档。 Tempo 会分为 4 篇文章&#xff1a; Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 根据官方文档实操跑起来 tempo&#xff0c;中间根…