Geometry Script碎碎念
1 min to read
Geometry Script和ProceduralMeshComponent的区别
一开始比较困惑的地方,因为这俩的功能都是控制mesh生成,所以为什么要做两套功能。
但显然GeoScript在使用上会容易许多。PMC需要使用者把点面数据列出作为输入,这导致这一功能在生成复杂几何体上回相当难搞。GeoScript的封装层级则高了许多,可以更便捷进行几何体的组合编辑。Modeling Tool/Dynamic Mesh是基于GeoScrip开发的。
PMC的底层局限性在于,它不储存split nromal,UV等等本来可以存储在vertex上的属性,所以如果打算渲染一个cube,由于一个点连着三个相邻的面,正常来说这个vertex有三个方向的normal,但是在PMC上就无法实现,想要正确渲染这个cube则需要在初始化PMC前把cube分成6个rect,也就回到上一段,需要自己处理好数据输入PMC进行生成。
DynamicMesh具备了上述PMC无法拥有的功能,但代价是渲染buffer更大,对显存要求更高。此外,生成的mesh无法保存(需要魔改)。
QA
从gradientspace.com看到的一些常见疑问总结:
Geometry script可以在游戏中/Runtime使用吗?
一些geometry script是editor only,但大多数可以runtime运行。需要注意体积actor、创建和更新static/skeleton mesh,catmull subd都是不支持runtime的。
可以在游戏中使用Geometry script生成的DynamicMeshActors吗?
如果只是需要游戏中不会变化的staic mesh,答案是NO,因为DynamicMeshActors相较static mesh会更加expensive,正确做法是将DynamicMeshActors烘焙成Static物体。
如果游戏玩法需要动态生成的、或是在游戏中可以继续编辑的mesh,那么答案是probably YES。
DynamicMeshComponent性能?
Dynamic Draw Path和Static Draw Path是分开的。Dynamic渲染开支更大,不支持instanced rendering,因此mesh的内存占用会更高,同时GPU(参考官方preRefactoring the Mesh Drawing Pipeline for Unreal Engine 4.22 GDC 2019 Unreal Engine)
GeoScript是否能在Landscape,Hair/Groom,Cloth等等上应用?
NOT YET in UE 5.1. 当前GeoScript与UDynamicMesh算是一对一关系,不其他geo类型上使用。(ps. 支持的一些组件类型有static mesh,skeletal mesh,volume actor.)
如何保存/加载runtime中生成的Dynamic Mesh?
得改CPP,Geometry Script本身不提供此功能。
GeoScript的生成稳定吗?(是否会随着版本更新导致生成结果包含随机性)
大部分稳定,但确实有少部分结果随机,比如remesh和减面。
GeneratedDynamicMeshActors在游戏运行中消失?
GeneratedDynamicMeshActors是editor-only class。
Feature(as of 5.1)
-
DynamicMeshComponent不支持RVT
-
DynamicMeshComponent不支持Nanite,Lumen,距离场
-
DynamicMeshComponent支持Complex和Simple碰撞,但是不支持碰撞预览debug
-
DynamicMeshComponent不支持LOD
-
DynamicMeshComponent不支持Instanced Rendering
😅😅😅
ref
更多问题可以看这篇↓,一些暂时没涉及到的问题暂时就没在意了。