[LayaAirIDE 2.0]使用StaticBatchManager,显存无法释放

我需要实现一个动态生成的场景,为了提升渲染性能,我使用了静态合批功能,但是在我不断生成新的合批组时,旧的组destroy后显存却无法被回收,想知道是不是我的用法哪里有问题,我跟踪了释放过程的源码,似乎静态对象也有走到资源释放的部分,所以很好奇,求解答,已附上可以复现的demo包
 

Aar0n

赞同来自: EagleNight

我简短的说一下,unity里的 wave 和bucket 都是 static 类型,静态合批的时候都会放到一个 合批数组(暂且这么叫),这个数组里面有 这俩 个mesh, 然后你 又循环加了5个 bucket 这个数组就又加进去5个bucket,最后合成一个 合并后的 大mesh,你销毁的时候 销毁了5个bucket,但是那个 合批数组里永远有一个wave , 这个数组长度不为0 ,他就不会销毁这个 合批数组和大mesh, 就导致无法释放的结果
 
解决办法是把wave 在unity里面的 static 取消勾选, 变成非静态, 那么那个合批数组就可以销毁。
 
如果解释的不够清晰明了,可以继续反馈,我再更详细的解释。

EagleNight

赞同来自:

测试了几次似乎与子节点有关,我的子节点包含了一个Animator,里面做了一段uv动画

EagleNight

赞同来自:

即使是呈现这样结构时,如果我对bucket做静态合批、删除、动态生成新的这样的操作时,显存就会无法释放,如果把wave删掉就可以,或者把bucket删掉,对wave反复做静态合批、删除、动态生成,也可以观察到显存被释放,求解惑

NilZ

赞同来自:

微信图片_20190619194523.png

我简单看了一下,你这里调用add和remove的频率不一致呀。如果一致话。增加和删除的频率一致是不会 增加的 。去掉wave你说的不增加,其实是增加的,只是增加的速度很慢,大概等了30秒才开始增加。你可以看看。

EagleNight

赞同来自:

1.png


2.png


3.png

可以看到调为50的对比数据,显存那一项在增长,麻烦再看一下,非常感谢

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作