6

MeshRenderer如何使用GPU Instancing的材质球正常合批

 1 year ago
source link: https://blog.uwa4d.com/archives/TechSharing_329.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1)MeshRenderer如何使用GPU Instancing的材质球正常合批
​2)关于AssetBundle加密,如何重新实现LoadFromFile接口
3)移动端开放世界类型游戏中选择动态阴影技术以及优化方案组合
4)Unity导出Gradle工程,如何防止gradle-wrapper.properties文件的更改被覆盖


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

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

Rendering

Q:MeshRenderer使用GPU Instancing的材质球,不能正常合批。

材质球是支持实例化的,使用Graphics.DrawMeshInstanced可以正常绘制,但是使用MeshRenderer就不能正常合并,目前猜测是Shader的问题,因为URP自带的Lit材质球就可以正常合并。

经查,是因为开启了URP的SPR Batcher,Unity优先采用了SPR Batcher,那么请问,手机端现在到底是走GPU Instancing还是SPR Batcher优化效果更佳呢?

A:这两种都是同一种思路来提高渲染效率,就是减少状态切换开销,在渲染数量非常大的情况下显然GPU Instancing更有优势,但GPU Instancing的限制太大,只能应用到特定场景。

建议在实际应用时大量相同物体用GPU Instancing去实现,其它情况SPR Batcher。

感谢李伟@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/63ec9c91063854059909d341


AssetBundle

Q:请问,关于AssetBundle加密这块,如何重新实现LoadFromFile接口?

A1:建议简单做下Offered Load,真的想解资源办法多的是,越大的项目搞AssetBundle资源加密越影响游戏性能,完全得不偿失。

感谢学无止境@UWA问答社区提供了回答

A2:解密最大的问题就是会多一份内存,如果可以复用一个大的Byte数组,那是不是可以做到内存不会增加。

这个大的Byte数据要多大,可以在生成资源时计算一个最大值出来。

有一个问题就是加载对象前不能更改这个数组,所以解密完要把里边所有的资源先加载一次,然后再去解密另一个文件。

我们项目里的数据表加载就是用的这种思路,一部分表解密完就会生成对象,这些表可以复用一个Byte数组,一部分表要在获取时生成对象,这些表就要保留一个独立的Byte数组。

重新实现LoadFromFile接口我觉得行不通,对于lz4的Bundle加载完只是加载了资源的描述信息,只有在调用加载对象的方法时才会再解压资源出来,除非解密完存到本地文件系统,加载完后再删除。

感谢李伟@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/63be5c5efbd55360acbbb773


Rendering

Q:现在的移动端游戏越来越多地向开放世界靠拢。请教一下大家会使用的技术组合有哪些?
1. 近距离时的高质量软阴影技术,是使用PCSS吗?
2. 主角或主要场景的动态阴影技术,会实时更新多大范围的Shadow Map?
3. 相对较远的位置的阴影是否会进行转为静态阴影并进行缓存?Cascaded Shadow Map分级有什么依据吗?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/63f3771a06385405990fbcbb


Android

Q:在升级Gradle版本过程中,修改了gradle-wrapper.properties文件中的distributionUrl,但是每次在Unity导出Gradle工程后,gradle-wrapper.properties文件就会被自动覆盖,导致修改无用。请问如何防止被覆盖?

A1:可以试试在这里导出Gradle工程之后,手动修改一下这个文件:

1.png

感谢范世青@UWA问答社区提供了回答

A2:还有一个方法就是下载对应版本的Gradle版本,然后覆盖编辑器安装目录下的Gradle版本,因为重新生成的distributionUrl的Gradle版本就是对应着编辑器目录的Gradle版本。

感谢题主萧逐风@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/63feb40106385405991ab00a

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK