虚幻5.6版本:
1、新建项目,保持默认配置;
2、将引擎自带的Cube静态网格体,复制1份,开启Nanite;(这里跟开不开Nanite应该没关系)
3、用这个Cube转成SMF,属性如下;
[Image Removed]
4、开启FoliageMode,大面积的刷这个SFM,643K个实例,FPS大概100帧;
[Image Removed]
5、通过笔刷手动编辑(擦除),帧率调到13FPS左右,瓶颈在Game线程:
[Image Removed]
<br/>
我们项目需要有大面积(远远大于足球场)且很密集的草,来模拟真实草地的效果,实际情况比上面的测试还要多得多(可能某些SMF的实例有1-2M之多)。
这样子一直在非常低的帧率下进行编辑,非常影响工作效率。项目刚从UE4转到UE5,在UE4中进行上面的操作还是比较流畅的。
<br/>
请问各位大佬该如何解决?
TonyChen1
(TonyChen1)
August 20, 2025, 6:31am
2
您好,我本地测了下在擦除的时候倒还正常,如果是game线程的卡顿您可以用unreal insight抓一下就能看出是哪个函数导致的
感谢回复,但是我这边换了台电脑测试,同样的。我上传了工程,可以麻烦用我的工程看下吗?SMF少量不会卡,超过几十K的时候就会降低非常多帧率。
TonyChen1
(TonyChen1)
August 20, 2025, 9:17am
4
我看了下主要是卡在了FoliageMeshInfo_RemoveInstance中,主要是一瞬间要移除的数量太多了,如果是world partition地图你可以在调整Instanced Foliage Grid Size这个值调小,在Editor Preference下设置这个值对之前的地图不管用,你需要通过commandlet将这个值应用到之前的地图上,具体操作是执行对foliage的builder应用到这个地图上,命令行如下,最后一个参数就是GridSize的值
UnrealEditor.exe <YourProject>.uproject <YourMap>.umap -run=WorldPartitionBuilderCommandlet -Builder=WorldPartitionFoliageBuilder -NewGridSize=3200
执行完后再在编辑器中打开这个地图可以看到在world setting中Instanced Foliage Grid Size生效了,然后用笔刷移除的时候数量就降下来了,就不卡了
请问非world partition的地图该如何处理呢?
TonyChen1
(TonyChen1)
August 21, 2025, 2:48am
6
现在卡顿主要是一个AInstancedFoliageActor内部数量太多了,非WP除了调整密度参数还可以按区域创建多个子关卡,在Foliage Mode勾选Place in Current Level去刷,这样instance会放到这个子关卡的FoliageActor里,或者用pcg这种方式代替目前的方案