网易首页 > 网易号 > 正文 申请入驻

【厚积薄发】非2的幂次的ASTC纹理格式尺寸对带宽的影响

0
分享至

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

UWA社区主页: community.uwa4d.com

本期目录:

  • 非2的幂次的ASTC纹理格式尺寸对带宽的影响
  • C#端如何处理xLua在执行DoString时候死循环
  • 如何制定美术规范或者各个模块的指标
  • 如何处理Lua的io.open出现中文路径

Texture

Q:有一张UI纹理尺寸1200x554,纹理格式ASTC 4x4,显示占用内存0.6MB,将MaxSize改为1024,占用内存476KB。

除了内存的降低外,想请问下对带宽或其他性能的影响大么?

纹理类型是Default,Advanced -> Non-Power of 2 -> ToNearest/... 选项,但是UI没有,UI是否也有必要自己实现ToNearest?

A:题主可以参考一下知乎的这个回答:

https://www.zhihu.com/question/376921536

也可以参考:

https://gamedev.stackexchange.com/questions/26187/why-are-textures-always-square-powers-of-two-what-if-they-arent

简单来说有如下几个信息:

1. GPU的寻址是按块进行的,ASTC纹理的压缩也是按照块进行压缩的,因此贴图尺寸最好符合这个设定;

2. 不满足的贴图通过补充额外空间来满足对应的需求,这里会有部分的空间浪费。

具体到题主的问题:

1. 将MaxSize设置为1024,其实是减少了贴图尺寸,内存/显存占用变少是肯定的;

2. 贴图尺寸降低,肯定是会减少带宽消耗,也有可能提升显存的采样命中率,包括加载方面因为文件大小变小都会有提升,但这些“好处”未必那么好量化,比较明显的应该是带宽降低。

3. UI的贴图通常会做合图的操作,因此很多UI自身是不需要做尺寸上的要求的,但是如果不合图的话,整体上还是建议按照power of 2的尺寸在做设计,这种规范比较简洁清晰,容易执行。

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/64c9bb260b33622d467d7c85

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:在外部结束Lua虚拟机肯定是有很大崩溃风险的,我觉得有两个思路供参考:

1. 建立一个完整的沙盒环境,类似Dock,这个环境内运行逻辑,外部可以把这个环境销毁掉,不会对外部造成任何影响,这个在Unity下可能难度比较大,要做逻辑和表现的分离,然后构建一个纯逻辑层的运行环境。

2. 在Lua虚拟机内部监测死循环的情况,然后自主中断,抛出Error。这个是我们现在在用的方式,改造Lua虚拟机,监测一定时间内一直在执行某些字节码超过一定阈值就认为自己是在死循环把自己结束掉。当然还有一些别的条件,比如栈深度检测等等。这种自主中断并且抛错的方式其实更加完美。具体实现可以参考这个文章的思路:

https://ld246.com/article/1522147783147

个人是比较推荐第二种方案的,也是很多项目验证过的,对于UGC类型的游戏,检测并能提醒用户编辑出来了死循环非常重要。

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/64ce265830070f63751b64f2

Performance

Q:在UWA问答上看到了《项目初期如何确定美术规范》这个问题的回答,感觉还是不太理解,好像这个问题是不是只能凭经验,或者通过工具不断地去趋近那个指标,并没有一个指定规范,像是从面数什么之类的来计算?比如,我同屏10人,角色面数5000,渲染模块耗时不超过12ms之类的,有没有一定的公式去量化到美术的一个指标?感觉大部分好像不是根据经验来去做这个样的一个规范,或者是参考竞品之类,UWA给的项目测量好像也没有具体的计算方式,我感觉应该是定一个基准机型,然后再去做项目的各个模块的参考,然后才得出美术或者其他的指标。问下有没有更好的办法,最近看到有根据能耗来计算然后得到各个模块的指标,有大佬有了解过这方面的知识吗?

问答链接:

https://answer.uwa4d.com/question/5941544c18d35e654e3e2373


A:具体的信息在题主引用的问答里面已经有很多的讨论了,从我个人的经验来看,还没有什么更好的办法,主要原因在于性能结果受到的各个方面的影响因素特别多。

比如,同样机型上跑40w面的画面,Shader的复杂度差异就可能让一个GPU满负载而另外一个还有很大的空余量;再举一个例子,同样的一个画面,如果你的CPU很闲,也许你就可以用一些OC算法大大降低最终画面渲染的消耗,当然,GPU有富裕也可以用GPU-Driven这样的思路来做更加高效的剔除。

因此,不同的游戏类型,不同的人来做,都可能达到完全不同的性能结果。我们定义一个机型,给定一个经验值或者参考竞品的美术资产规范,往往是保证在使用相同引擎相似技术的情况下能够保证性能的底线。这个基于经验或者参考设定的规范和指标最大的意义在于告诉你可行性,如果最终游戏的性能没有达成到预期帧率,你可以参考其他游戏或者常规的优化方式来尽量接近可行结果,当然,你也可以通过修改引擎或者渲染管线,抑或其他Trick的方式来超越这个规范,这就取决于团队能力了。除此之外,规范也是要不断根据项目的实际情况进行调整的,而非完全的一成不变。

因此想根据一个公式,可以直接量化出一个规范,这个想法可能有些过于理想,这个公式里要考虑的因素太多,每个因素之间又有互相的影响,最终我们做性能优化的时候,也常常是在这些因素之前进行平衡——比如GPU Bound了就看看是否可以拿CPU换一些计算量出来,CPU Bound了是否可以用内存来换?

至于基于能耗来计算指标,我们往往是反向的,就是当一个优化做好之后,或者上了一个新Feature之后,我们会通过控制其他变量,单独开关这个Feature来查看它带来的能耗变化(我们的统计方式是基于电流表的,理论上比接口采集的数据更加符合实际情况)。而且在这个过程中能耗是波动的,不是稳定的,所以基本无法测量出增加一个面有多少能耗的增加,增加一个DrawCall有多少能耗的增加,更何况影响能耗最多的往往是带宽。

所以,整体上基于已有的经验来看,非常准确地量化消耗或者能耗,是一件很难的事情,不同设备可能会有不同,不同项目也可能会有不同,我个人是持悲观的观点。在实际工作中,主要基于经验和参考来制定一个大致的规范,然后在正式的资源与功能不断完成之后去迭代和完善这个规范。

如果题主探索出了可量化的路径,也欢迎分享~~

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/64b11f5d9e99796cd233a4db

Script

Q:关于Lua的io.open出现中文路径,有办法处理吗?

如以下的代码,不同版本Lua有不一样的结果,我的Lua 5.1会出现Invalid Argument,用5.4创建了一个乱码文件,因为有时候避免不了中文目录,像Windows平台下有人用了中文用户名,就会出现“C:/User/中文用户/AppData”之类的路径。

local path = "C:\\新建文件夹\\test.txt"

local file, error_msg = io.open(path, "w")
if file then
file:write("这是一个示例文本文件。\n")

file:close()
print("文件创建成功。")
else
print("无法创建文件。", error_msg)
end

A:网上搜到一篇文章,仅供参考:

https://juejin.cn/s/lua%20io.open%20%E4%B8%AD%E6%96%87%E8%B7%AF%E5%BE%84

另外就是如果文件内容并不是一定要在Lua中处理的,也可以让C#去做对应的文件操作。

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/646dda9d279f4105e1cb5432

封面图来源于网络

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

UWA官网:www.uwa4d.com

UWA社区:community.uwa4d.com

UWA学堂:edu.uwa4d.com

点击下方名片关注我们,将我设为星标,及时接收小编每日推送哦,性能优化不迷路~

近期精彩回顾

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
开通即饱和?为什么广东城际的广肇城际和广惠城际客流量这么大?

开通即饱和?为什么广东城际的广肇城际和广惠城际客流量这么大?

糖逗在娱乐
2024-06-18 22:40:50
梦想成真:深圳房价已经跌回2016年

梦想成真:深圳房价已经跌回2016年

楼市诸葛
2024-06-18 07:00:24
为什么刘亦菲从不接清宫戏,当她换上“甄嬛装”后,一出场就剧终

为什么刘亦菲从不接清宫戏,当她换上“甄嬛装”后,一出场就剧终

枫叶故事说
2024-06-18 00:45:03
女演员长相有多重要?看了《金庸武侠世界》里的孟子义就知道了

女演员长相有多重要?看了《金庸武侠世界》里的孟子义就知道了

咖啡店的老板娘
2024-06-18 23:43:42
村民花几十万买地却无法建房?广东省自然资源厅:或涉违规

村民花几十万买地却无法建房?广东省自然资源厅:或涉违规

南方都市报
2024-06-18 19:45:07
2024年1-3月泰安各地财政收入,肥城接近20亿,泰山区增速第一

2024年1-3月泰安各地财政收入,肥城接近20亿,泰山区增速第一

宝盒观天下
2024-05-31 19:20:02
普京签署决议!同意与朝鲜签署《全面战略伙伴关系条约》

普京签署决议!同意与朝鲜签署《全面战略伙伴关系条约》

每日经济新闻
2024-06-18 17:07:55
当年吴绮莉威胁成龙:会生下孩子!杨受成说:4000万堵住她的嘴?

当年吴绮莉威胁成龙:会生下孩子!杨受成说:4000万堵住她的嘴?

忠于法纪
2024-06-17 18:11:05
预定本届最佳进球?斯坦丘世界波球速高达116km/h

预定本届最佳进球?斯坦丘世界波球速高达116km/h

懂球帝
2024-06-18 11:52:16
在洪水围困前一起撤离:梅州暴雨后居民转移与互助的几个片段

在洪水围困前一起撤离:梅州暴雨后居民转移与互助的几个片段

南方都市报
2024-06-18 10:13:23
项立刚批张维迎教授的本质:市场化与权力寻租

项立刚批张维迎教授的本质:市场化与权力寻租

王二哥老搞笑
2024-06-18 22:54:33
上海已婚少妇“脚踏四只船”,出轨全过程曝光,传疯了!

上海已婚少妇“脚踏四只船”,出轨全过程曝光,传疯了!

拾点先生
2024-06-17 20:14:40
如今无人再提“亚洲四小龙”!它们衰落了吗,背后原因究竟是啥?

如今无人再提“亚洲四小龙”!它们衰落了吗,背后原因究竟是啥?

Hi科普啦
2024-06-17 22:03:31
李双江向观众回复有关出狱儿子的信:“儿子不容易,给条活路吧”

李双江向观众回复有关出狱儿子的信:“儿子不容易,给条活路吧”

沙雕小琳琳
2024-06-18 07:30:12
中国驻古巴大使马辉已任中联部部长助理

中国驻古巴大使马辉已任中联部部长助理

澎湃新闻
2024-06-18 11:44:29
圆满了!霍福德生涯第17个赛季夺首冠 历史第四人!

圆满了!霍福德生涯第17个赛季夺首冠 历史第四人!

直播吧
2024-06-18 11:20:24
医生遇到过哪些“这居然都能死”的病人?因为拔了根鼻毛人挂了

医生遇到过哪些“这居然都能死”的病人?因为拔了根鼻毛人挂了

热闹的河马
2024-06-18 18:40:13
2024年养老金继续上涨,按3%调整,具体怎么涨?来看看这几种方式

2024年养老金继续上涨,按3%调整,具体怎么涨?来看看这几种方式

社保小达人
2024-06-17 18:35:33
中央批复重要城市名单:仅有10座城市上榜,多座城市被委以重任!

中央批复重要城市名单:仅有10座城市上榜,多座城市被委以重任!

小李子体育
2024-06-17 13:44:28
20年前19岁C罗首次参加欧洲杯!菲戈领衔五盾军团,你还记得吗?

20年前19岁C罗首次参加欧洲杯!菲戈领衔五盾军团,你还记得吗?

直播吧
2024-06-18 16:50:25
2024-06-19 00:34:44
侑虎科技UWA
侑虎科技UWA
游戏/VR性能优化平台
1254文章数 864关注度
往期回顾 全部

科技要闻

第一批小米车主,已经开始卖车了

头条要闻

媒体:回暖的中澳关系就是一面镜子 照出欧盟的愚蠢

头条要闻

媒体:回暖的中澳关系就是一面镜子 照出欧盟的愚蠢

体育要闻

对于凯尔特人来说 谁是MVP根本不重要

娱乐要闻

被曝新恋情,张碧晨王琳凯发声辟谣

财经要闻

官方:税务部门没有倒查30年的安排

汽车要闻

全球最低价 现代IONIQ 5N预售价39.88万

态度原创

艺术
本地
数码
旅游
公开课

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

本地新闻

我和我的家乡|在鞍山的每一步都有新发现

数码要闻

超薄的兆芯KX-6000G ITX迷你小板发布:四核3.3GHz、高性能GPU三屏输出

旅游要闻

直航加免签,利好中国—古巴旅游往来

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版