从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 timeoutif (!isCompletedSuccessfully)
{CELog.LogError("加载脚本超时");isSucceed = false;luaEnv.Dispose(); //Kill掉当前的Evnreturn; //不再加载后续脚本
}
现在是只要调用‘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
MoonSharpMoonSharp
是纯用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
相关文章:

从Gamma空间改为Linear空间会导致性能下降吗
1)从Gamma空间改为Linear空间会导致性能下降吗 2)如何处理没有使用Unity Ads却收到了GooglePlay平台的警告 3)C#端如何处理xLua在执行DoString时候死循环 4)Texture2DArray相关 这是第350篇UWA技术知识分享的推送,精选…...

双轨制的发展,弊端和前景
双轨制是一种经济体制,指两种不同的规则或机制并行运行,以适应不同的市场或客户需求。双轨制最早出现在中国的改革开放中,是从计划经济向市场经济过渡的一种渐进式改革方式。 双轨制的发展可以分为三个阶段: 第一阶段(…...

生成对抗网络(GAN):在图像生成和修复中的应用
文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…...

扬杰科技携手企企通,召开SRM采购供应链协同系统项目启动会
近日,中国功率半导体领先企业扬州扬杰电子科技股份有限公司(以下简称“扬杰科技”)与企企通召开SRM采购供应链协同系统项目启动会,双方项目团队成员一同出席本次会议。 会上,双方就扬杰科技采购供应链管理平台项目的目…...
AtCoder Beginner Contest 318
目录 A - Full Moon B - Overlapping sheets C - Blue Spring D - General Weighted Max Matching E - Sandwiches F - Octopus A - Full Moon #include<bits/stdc.h> using namespace std; const int N1e65; typedef long long ll ; const int maxv4e65; typedef …...

《Python魔法大冒险》003 两个神奇的魔法工具
魔法师:小鱼,要开始编写魔法般的Python程序,我们首先需要两个神奇的工具:Python解释器和代码编辑器。 小鱼:这两个工具是做什么的? 魔法师:你可以把Python解释器看作是一个魔法棒,只要你向它说出正确的咒语,它就会为你施展魔法。 小鱼:那这个解释器和我之前用的电…...

每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)
四种类型的物品,每一种类型物品数量都是n,先要从每种类型的物品中挑选一件,使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000,很小且固定的数字,肯定有玄机,从这里想应该是用dp,不…...

2023-9-3 试除法判定质数
题目链接:试除法判定质数 #include <iostream>using namespace std;bool is_prime(int n) {if(n < 2) return false;for(int i 2; i < n / i; i){if(n % i 0) return false;}return true; }int main() {int n;cin >> n;while(n--){int x;cin &g…...

【Apollo学习笔记】——规划模块TASK之RULE_BASED_STOP_DECIDER
文章目录 前言RULE_BASED_STOP_DECIDER相关配置RULE_BASED_STOP_DECIDER总体流程StopOnSidePassCheckClearDoneCheckSidePassStopIsPerceptionBlockedIsClearToChangeLaneCheckSidePassStopBuildStopDecisionELSE:涉及到的一些其他函数NormalizeAngleSelfRotate CheckLaneChang…...

【SpringBoot】最基础的项目架构(SpringBoot+Mybatis-plus+lombok+knife4j+hutool)
汝之观览,吾之幸也! 从本文开始讲下项目中用到的一些框架和技术,最基本的框架使用的是SpringBoot(2.5.10)Mybatis-plus(3.5.3.2)lombok(1.18.28)knife4j(3.0.3)hutool(5.8.21),可以做到代码自动生成,满足最基本的增删查改。 一、新…...

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器
一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说,RNN方法已经过时了,研究它们是没有意义的。的…...

Linux音频了解
ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能! 本章将会讨论如下主题内容。 ⚫ Linux 下 ALSA 框架概述; ⚫ alsa-lib 库介绍; ⚫ alsa-lib 库移植; ⚫ alsa-l…...

精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野
精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野。 刚开源就变成新星的 igl,不仅获得了 2k star,也能提高你开发游戏的效率,摆…...

Leetcode54螺旋矩阵
思路:用set记录走过的地方,记下走的方向,根据方向碰壁变换 class Solution:def spiralOrder(self, matrix: list[list[int]]) -> list[int]:max_rows len(matrix)max_cols len(matrix[0])block_nums max_cols * max_rowscount 1i 0j…...

element-plus 表格-方法、事件、属性的使用
记录element-plus 表格的使用。方法、事件、属性的使用。因为是vue3的方式用到了const install getCurrentInstance();才能获取表格的相关信息 没解决怎么获取选中的行的行号,采用自己记的方式实习的。 利用row-class-name"setRowClass"实现样式的简单…...

NVME Linux的查询命令-继续更新
NVME Linux的查询命令 查看NVMe设备 # nvme list 查看nvme controller 支持的一些特性 # nvme id-ctrl /dev/nvme0 查看设备smart log信息 # nvme smart-log /dev/nvme0 查看设备error 信息 # nvme error-log /dev/nvme0 设备的所有命名空间 # nvme list-ns /dev/nvmeX 检…...

pyqt5-自定义文本域1
快捷键支持: CTRL鼠标滚轮实现字体大小调整 支持复制当前行 剪切当前行 # 多行文本框 class TextEdit(QTextEdit):def __init__(self, parentNone):super().__init__(parent)self.setStyleSheet("background-color: #262626;color: #d0d0d0;")self.setFon…...

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】
Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】 下篇:Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】 项目架构图: 0 项目背景与方案选择 背景 当公司发展的越来越大,业务越来越复杂…...

MySQL (1)
目录 操作须知 数据类型 1 DDL 1.1 操作库 1.2 操作表 1.3 操作字段(ALTER TABLE 表名) 2 DML 3 DQL(见下章) 操作须知 ※ MySQL在windows环境不区分大小写,但在Linux环境严格区分大小写 ※ 不同的数据库可能存在同名的表,可以给表前加"数据库前缀" //例:…...

MR混合现实汽车维修情景实训教学演示
MR混合现实技术应用于汽车维修课堂中,能够赋予学生更加真实,逼真地学习环境,让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在: 1. 虚拟维修指导:利用MR技术,可…...

ChatGPT在航空航天工程和太空探索中的潜在应用如何?
ChatGPT在航空航天工程和太空探索领域具有广泛的潜在应用。这些应用可以涵盖从设计和模拟到任务控制和数据分析的多个方面。本文将探讨ChatGPT在航空航天和太空探索中的各种可能应用,包括设计优化、任务规划、智能导航、卫星通信、数据分析和太空探测器运行。 ### …...

算法基础第三章
算法基础第三章 1、dfs(深度搜索)1.1、 递归回溯1.2、递归剪枝(剪枝就是判断接下来的递归都不会满足条件,直接回溯,不再继续往下无意义的递归) 2、bfs(广度搜索)2.1、最优路径(只适合于边权都相等的题) 3、…...

ElementUI浅尝辄止20:Pagination 分页
分页组件常见于管理系统的列表查询页面,数据量巨大时需要分页的操作。 当数据量过多时,使用分页分解数据。 1.如何使用? /*设置layout,表示需要显示的内容,用逗号分隔,布局元素会依次显示。prev表示上一页…...

Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

什么是大模型?1750亿、700GB的GPT大模型大在哪?
文章目录 什么是大模型?1750亿、700GB的GPT大模型大在哪? 什么是大模型? 在人工智能领域,模型是指一种对数据进行处理和分析的数学结构。模型越复杂,能够处理的数据量和处理的准确性都会得到提高。 随着人工智能技术…...

剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题 和 剑指 Offer 10- I. 斐波那契数列 很像,改一下初始值就行了。 方法一 class Solution {int mod (int) 1e9 7;public int numWays(int n) {if(n < 1) return 1;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for(int i 3…...

oracle10和11功能说明比较
Oracle 10g/11g的特点和优势 首先,Oracle 10g/11g具有以下几个特点: 1. 可靠性和稳定性:Oracle 10g采用了多种技术来确保数据的可靠性和稳定性,如ACID事务处理和数据备份与恢复机制。它还提供了高可用性的解决方案,如…...

golang-bufio 缓冲写
1. 缓冲写 在阅读这篇博客之前,请先阅读上一篇:golang-bufio 缓冲读 // buffered output// Writer implements buffering for an io.Writer object. // If an error occurs writing to a Writer, no more data will be // accepted and all subsequent…...

Windows修改电脑DNS
访问浏览器出现无法访问此页面,找不到DNS地址,则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些: 114.114.114.114 和 114.114.115.115 阿里DNS&a…...

Linux驱动之Linux自带的LED灯驱动
目录 一、简介 二、使能Linux自带LED驱动 三、Linux内核自带LED驱动框架 四、设备树节点编写 五、运行测试 一、简介 前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 …...