Geometry Script碎碎念

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)

😅😅😅

ref

更多问题可以看这篇↓,一些暂时没涉及到的问题暂时就没在意了。

Unofficial Geometry Script & DynamicMeshComponent FAQ