当前位置: 首页 > news >正文

从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
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

 

相关文章:

从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)

四种类型的物品&#xff0c;每一种类型物品数量都是n&#xff0c;先要从每种类型的物品中挑选一件&#xff0c;使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000&#xff0c;很小且固定的数字&#xff0c;肯定有玄机&#xff0c;从这里想应该是用dp&#xff0c;不…...

2023-9-3 试除法判定质数

题目链接&#xff1a;试除法判定质数 #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)

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

RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

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

Linux音频了解

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

精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野

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

Leetcode54螺旋矩阵

思路&#xff1a;用set记录走过的地方&#xff0c;记下走的方向&#xff0c;根据方向碰壁变换 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();才能获取表格的相关信息 没解决怎么获取选中的行的行号&#xff0c;采用自己记的方式实习的。 利用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

快捷键支持&#xff1a; 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&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…...

MySQL (1)

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

MR混合现实汽车维修情景实训教学演示

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

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...