前言

大部分情况下,我们的模型都是建模小哥哥或小姐姐通过建模软件,比如3DMax,C4D,Blender等,结合她们高超的技艺,制作出来的。 然后导出模型为GLTF或者FBX等文件格式,UEer在拿到模型文件,导入,调效果,然后就可以生成好看的在UE下能够展示的模型。比如下图:

image.png

但是有的时候,我们希望能够基于一些基本数据,能够动态生成一些模型。比如,最近我们开发的楼层编辑器,就是可以基于数据生成楼层(包括墙体,地板等)和区域,以及楼层的管路等,如下:

image.png

该编辑器从服务端(数据库)读取墙体的路径数据,区域的路径数据,然后基于数据动态生成楼层模型和区域模型。同时还可以基于门窗的位置,动态给墙体进行挖洞,也可以基于数据,对于地板进行挖洞。 并提供了Runtime下的区域编辑能力,可以动态调整区域的形状。

其中动态生成墙体和区域 用到的技术是Geometry_Script,这是一种程序化建模。 如果了解我们的Web端三维,就知道 Geometry_Script技术,在Web3d里面也是经常用到的,比如我们web端的墙体,地板,管路等等也是通过路径数据动态生成的。 比如:

webgl(threejs)生成房间楼层

基于webgl(threejs)的路面编辑

WebGL管网展示(及TubeGeometry优化)

Geometry_Script介绍

Geometry_Script是虚幻引擎中用于描述和生成复杂3D结构的一种机制。它允许设计师和开发人员利用蓝图系统或Python脚本来定义和创建3D模型,无需完全依赖外部3D建模软件。这种方式使得在引擎内部直接进行原型设计和快速迭代成为可能,大大提高了开发效率。

几何体脚本(Geometry Script)是一种虚幻引擎插件,包含一组函数库,可供用户通过Blueprints和Python生成和编辑网格体几何体。 

几何体脚本将对UDynamicMesh对象进行运算,而这些对象使用FDynamicMesh3 C++三角形网格体数据结构创建。

几何体脚本能够执行对多种新型对象类型的运算操作,这些对象类型包括:

  • UDynamicMesh
  • UDynamicMeshComponent
  • ADynamicMeshActor

这些类与静态网格体系(如StaticMeshStaticMeshComponentStaticMeshActor)在架构上保持相似性。

UDynmicMesh

UDynamicMesh 对象是几何体脚本的核心组件。是未绑定到特定组件的网格体数据结构的容器。这与 UProceduralMeshComponent 等之前的虚幻引擎方法不同之处在于,网格体几何体可以在没有显式场景呈现的情况下进行创建和操控。
对于几何体的相关网格的操作,都是在该对象上完成的。

UDynamicMeshComponent

UDynamicMeshComponent可以理解是UDynamicMesh的容器。

ADynamicMeshActor

ADynamicMeshActor与AStaticMeshActor类似之处在于,它主要是UDynamicMeshComponent的容器。DynamicMeshActor在蓝图上提供了一系列程序化建模的API。

GeneratedDynamicMeshActor

GeneratedDynamicMeshActor 是ADynamicMeshActor 的子类。
可为实现基于蓝图的程序化网格体Actor提供额外支持。具体来说,此类提供了函数 On Rebuild Generated Mesh ,该函数可以在BP子类中实现以生成网格体,而不必在构造脚本(Construction Script)中实现。这可提供更好的编辑器中交互性能,并为将来更细致地管理大规模流程性几何体的生成操作留下了空间。

image.png

开启Geometry_Script

要使用Geometry_Script的功能, 需要开启相应的插件,如下图所示

image.png

总结

本文 介绍了程序化建模Geometry_Script的基本概念,后续会介绍更多程序化建模的具体功能模块。

参考文档

https://dev.epicgames.com/documentation/zh-cn/unreal-engine/g...

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。


netcy
204 声望120 粉丝

欢迎对canvas、webgl、图形学感兴趣的读者订阅专栏。