首页 > 其他分享 >获得将要生成的资源的GUID

获得将要生成的资源的GUID

时间:2023-04-24 10:47:17浏览次数:54  
标签:合批 res bundle 生成 将要 AssetBundle UWA GUID

1)获得将要生成的资源的GUID
​2)多个小资源包合并为大资源包的疑问
3)模型Meta中的hasExtraRoot参数的作用和历史原因
4)合批注意点


这是第333篇UWA技术知识分享的推送,也是《厚积薄发 | 技术分享》第三回,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:https://community.uwa4d.com
UWA QQ群:465082844

Asset

Q:假如需要导入一个FBX文件,并且同时修改一些导入设置的情况。如果先导入,生成GUID,再修改,就会出现两次Import流程。资源量大的情况下就会浪费大量的时间。

设置本身倒是简单,可以通过文本创建Meta。但是资源的GUID是个比较麻烦的问题。因为需要保证不重复,并且和路径有一定关系。

如果使用未来导入资源路径生成GUID,应该使用怎么的操作?

A1:我最近也有类似的需求,我的做法就是先准备一份“导入设置”的模板Meta,里面的GUID是项目中已经存在的。然后在生成对应或者修改对应资源的时候,直接拷贝那个模板Meta。然后如果要导入的资源本来已经导入过了,就将GUID替换回去。如果是新导入的资源,Unity则会自动帮我重新生成一个新的GUID,我不用管,这样导入会快很多。

感谢junbin.liu@UWA问答社区提供了回答

A2:建议在导入的时候直接做修改,可以试试Unity 3D的OnPostprocessAllAssets。

感谢贺帆@UWA问答社区提供了回答


AssetBundle

Q:看有文章说可以利用接口LoadFromFile(string path, uint crc, ulong offset);来实现资源包合并为一个打包,且能减少IO操作,不知流程是否是如下理解:

合并前:
资源包A:assets_res_a.bundle
资源包B:assets_res_b.bundle
合并前对资源包的加载方式:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_a.bundle");
AssetBundle b = AssetBundle.LoadFromFile("assets_res_b.bundle");

合并后:
资源包AB:assets_res_ab.bundle
并且记录了a、b在大包(ab)中的offset(A包的offset=0,B包offset=12)
合并后对资源包的加载方式:
AssetBundle a = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 0);
AssetBundle b = AssetBundle.LoadFromFile("assets_res_ab.bundle", 0, 12);

从接口上看,合并后并没有减少IO操作,仍是两次对assets_res_ab.bundle的读取,除非引擎内部有做优化,当第一次读assets_res_ab.bundle有IO,在没释放情况下第二次读就不是IO了,求指点迷津。

A:AssetBundle已经是一个VFS了,再在上面多管理一层,从各方面来说不合理,还有可能出现IO句柄持有冲突的问题。

上面所谓的减少IO,不是减少IO本身的读取量,只是少了一个IO句柄,直接把两个原始资源打到一个Bundle内,其实是一样的。那么问题就变成了怎么合理打包Bundle。

感谢1 9 7 3-3111356@UWA问答社区提供了回答


Asset

Q:模型Meta中的hasExtraRoot参数是做什么用的?有什么历史原因么?

模型Meta中有个奇怪的参数hasExtraRoot,看起来是humanDescription旗下的,但实际会对任何类型的模型都造成影响。

 

这个参数无论是在API还是在编辑器界面,都找不到调整的地方。当前项目中一部分是0,一部分是1。观察得出,这个在为1的情况下,会保留外层无Mesh关联的Transform;为0的情况下会移除顶层Child不超过1,并且无Mesh的Transform。

不知道这是怎么生成的,是不是为了适配某些历史版本呢?

A:可以参考下:
FBX import: humanoid rig creates extra GameObject ("hasExtraRoot") - Unity Forum

感谢野生西瓜@UWA问答社区提供了回答


Rendering

SRP的合批注意点

SPR Batcher适用于URP管线,只需要材质所用到的Shader变体相同就可以合批的。不过,UGUI和粒子的DrawCall走Unity自己的合批逻辑,因而SRP Batcher不适用;而包括SpriteRenderer在内等使用MaterialPropertyBlock修改材质的情况都会打断SRP Batcher。

另外,需要注意RenderQueue穿插,GPU Instancing的优先级要高于SRP Batcher,更隐形的问题是在Editor上SRP Batcher合批成功,但是在真机上合批失败的问题,比如Unity的版本导致OpenGL ES的API导致SRPBatcher在真机上合批失败的问题,再比如CBuffer里面的变量没有在材质球的Property里面,也会有相似的问题。

期待更多讨论,欢迎大家转至UWA社区交流:
https://community.uwa4d.com/blog/detail?id=1549710791670226945&entrance=0

静态合批有什么注意点

静态合批分两种,一种是提前在Editor中处理,一种是在Runtime时动态处理,要求同种材质才能合批。

当然,也有缺点,当子模型存在重复时,可能会使Mesh内存占用变大。也就是为什么大家都说静态合批更消耗空间。

期待更多讨论,欢迎大家转至UWA社区交流:
https://community.uwa4d.com/blog/detail?id=1551869522570895362&entrance=0

封面图来源于网络


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

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844

标签:合批,res,bundle,生成,将要,AssetBundle,UWA,GUID
From: https://www.cnblogs.com/uwatech/p/17348699.html

相关文章

  • nginx 按天生成日志
    月小升记得以前nginx没有办法读取日期,今天找到个办法居然可以。server{location~\.php${fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;include/etc/nginx/fastcgi_params;fastcgi_pass......
  • Python 实时生成曲线的两种方法-Matplotlib/Pyqtgraph
    前言Matplotlib更倾向于制作出版质量的图形,对matlab程序员来说更直观。pyqtgraph不像matplotlib那样完整/成熟,但运行速度要快得多,而且pyqtgraph旨在用于数据采集和分析应用程序,对于python/qt程序员来说更直观。Matplotlib(据我所知)不包括许多pyqtgraph的功能,例如图像......
  • P4180 [BJWC2010] 严格次小生成树
    P4180[BJWC2010]严格次小生成树/*建立一个最小生成树维护最大值和严格次小值然后直接查询就可以了56121132243354343456*/#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingpii=pair<int,int>;constintN=1e......
  • 使用encoder编码器-decoder解码器加GAN网络的生成式图像修复
    论文链接https://openaccess.thecvf.com/content_cvpr_2016/papers/Pathak_Context_Encoders_Feature_CVPR_2016_paper.pdf简介作者提出了一种基于上下文像素预测的无监督视觉特征学习算法,它既完成了特征提取,也完成了图像修复。通过与自动编码器的类比,提出了上下文编码器(Conte......
  • java动态生成页面
    1.java中动态生成html具体适用哪些情况除了发布新闻那些的。答:数据量大,且增删改查频繁的。2.购物网站如果访问量不是很大。商品详细页面是否有必要也动态生成HTML?答:明显有必要,因为商品详细要经常修改,一般不改页面,改的是数据3.如果动态生成了HTML......
  • php实现网站生成桌面快捷方式
    PHP生成桌面快捷方式就是这么的简单,大家生成的时候改下你要生成的网站即可dianji.html代码:<ahref="a.php?url=www.hnzyxok.com&name=美日汇">生成左面快捷方式</a>shengcheng.php代码:<?php//网站生存左面快捷方式---功能$url=$_GET['url'];$filename=urldecode($_GET['n......
  • 原型模式:通过复制生成实例
    原型模式允许对象在不重新创建的情况下通过复制来生成新的实例。这通常比直接创建一个新对象更加高效。简单来说,原型模式就是通过复制一个已有的对象来创建新的对象。首先,我们需要定义一个实现Cloneable接口的原型类,以便使用clone()方法进行复制:publicclassPrototypeimplemen......
  • javamock生成对象
    `importjava.lang.reflect.Field;importjava.lang.reflect.ParameterizedType;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Random;publicclassMock{privatesta......
  • Python生成requirements.txt方法
    Python生成requirements.txt方法 requirements.txt可以通过pip命令自动生成和安装,这种情况更适用于此项目是单独的虚拟python环境,生成requirements.txt文件。安装requirements.txt依赖:pipinstall-rrequirements.txt1.方法1:生成requirements.txt文件pipfreeze>re......
  • ExtJS 生成 UUID
    更新记录2023年4月23日初始化。ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html生成UUIDletuuid=Ext.data.identifier.Uuid.create().generate();......