2023-9-10-datalayer和worldpartition总结

之前对这俩概念有模糊印象,是关于选择性加载场景、性能优化的,看过好几个视频了。今天来具体说说。

要使用data layer必须开启world partition,而要使用world partition最好是通过初始默认的open world创建,也可以通过convert level实现。

world partition有两个作用,一个是在面板这里框选一定范围加载,这样在编辑模式下可以只加载选中的区域。

另一个是游戏模式启动后的显示范围,其中cell size指每个显示单元单位是平方分米,如下图1就是128平方米/显示单元,loading range指加载的半径范围单位是厘米,如下图1就是128米半径范围。在调试开启状态下,可以看到下图2中player即这个红圈的圆心,红圈即loading range,只要红圈触碰到格子就会使格子里面的物体加载,在调试窗口中使格子呈现绿色。而随着白圈与格子完全不接触,格子变紫色,紫色格子里的物体将不再加载。

New World Building Features | Inside Unreal官方讲解

上面这个讲座是官方发布的包含world partition、datalayer、hlod等内容。

我自己实验了下,调试窗口始终保持11x11的格子,每个格子的大小即cell size,loading range即红圈的半径,绿色格子表示这个cell里面有东西被加载且是完全处于这个cell中,若物体部分处于loading range在默认状态下是不被加载的,今天听的示范我记得有一个讲到关于这个的设置忘记是哪个视频了。(真的见鬼了我翻遍了历史记录都找不到那个视频,不得不说知识架构越来越庞大了,没有好的记录一个坑就会折腾死)2023.9.9总算找到了出处,在 Open Worlds with World Partition | Exploring Unreal Engine 5 这个视频的11:17介绍文档时提到,不过当前的ue5.1\5.2\5.3版本改了文档,这也是为啥我忙活半天找不到的原因。

回到matrix项目,这里说用到了三个grid,一个main grid,一个HLOD0,一个HLOD1.这里所说的grid指的是worlding setting中world partition setup里的运行时(RUNTIME)的网格(grid)。不过我在项目中只看到了一个main grid并没有看到示范所说的HLOD0、HLOD1。

不过可以看到在outliner中有HLOD文件夹下面包含着两个子文件夹HLOD0、HLOD1,而在内容管理器中的Map文件夹下有个HLOD文件夹包含了5个HLOD layer,其中一个是world partition setup下默认的HLOD layer。在world partition文档的Generating Hierarchical Levels of Detail (HLODs)部分指出build HLODs将为world partition cells根据HLOD layers创建hlod actors。我试了下build HLODs,在3分钟过去后我试图stop building,18分钟过去了还是没反应我强行结束进程退出,要跑完不知道得多久,我推测这个命令就是根据5个HLOD layer创建出HLOD0和HLOD1.强退后再次打开matrix,我发现HLOD文件夹下的东西变了,它们根据HLOD layer形成了3个文件夹,估计是强退的关系不然应该是5个对应每个HLOD layer,那么问题又来了,matrix是如何build HLOD只生产HLOD0和HLOD1的呢?

要创建HLOD actors按照文档来说先得把原物体添加到HLOD layer才能在build HLODs时生效。在matrix中我没有发现任何一个物体被添加了HLOD layer,只是它们都被勾选了include actor in HLOD。

配图说明HLOD 这篇说明算是有些帮助,但依旧没有解决问题。

我打开了matrix迷你版,发现其HLOD没有变动,看来HLOD是根据每个map的。点击大头针即可查看这些默认被隐藏的HLOD actor.

查看其中HLOD0里面的一个HLOD actor可以看到其HLOD layer为CitySample_HLOD1_HighQuality !并且Runtime Grid为HLOD0_256m_767m,也就是示范中说的256-768米的范围。

不过HLOD1里面的actor没有任何线索。matrix示范中说128-768米范围内所有的cell都会加载相应data layer中的HLOD0.这话看不懂,HLOD actor在editor模式下是不显示的,难道说HLOD actor被分组到了data layer中然后通过datalayer在runtime里面加载?那么又是什么机制确保128-768加载它们,是HLOD layer里的ranging咯?神奇!这样就说得通了!

youtube系列world partition 这里有个系列视频有关于landscape如何做world partition,并使用HLOD.

datalayer和world partition一样也有两个功能,1是在编辑模式下加载或不加载,它的做法是通过添加data layer后指定对象分派给datalayer,比如公交站台、汽车、某种建筑,将他们分类成datalayer,这看起来似乎和分派文件夹显示隐藏没啥区别。下图为matrix中的datalayer。

2是在运行时也就是游戏模式下,可以看到下图中设置了在运行时初始状态不加载。通过blueprint编程,按键触发其加载状态。

总结一下World Partition/HLOD/Data Layer的运用,先用world partition分核心区域也就是main grid。所有的模型搞定以后,根据HLOD Layer build HLOD,得到的HLOD对应各自的grid,HLOD actor在editor模式下被隐藏,将他们归纳到data layer中,在runtime模式下在对应的grid下动态加载。

matrix里的HLOD layer是自定义的,我看它的选项卡和这个approximatedMesh差不多。在UE官方技术解析New World Building Features | Inside Unreal这个视频中官方说了HLOD layer通过树状继承自动设定不同范围的HLOD,关于一些设置可以参考matrix的。

ue5.0版本的HLOD layer只有三个选项。

5.1以后的版本有了approximatedMesh。

2023-9-14-ue官方hillside世博园1967建筑项目分析 2023-9-4-道路在landscape-deform后变形部分的材质问题

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×