什么是PivotPainter?

思考,如果想实现树木的枝干由于风力影响而交错挥动的效果,并且风力的一些数据是可调整的,那么该怎么做呢?
在这里插入图片描述

如果不知道 “PivotPainter” 的概念,较为自然的想法是使用骨骼。
使用骨骼是可行的。但是对于类似植被的物体,会有大量的枝干,而每个枝干都会需要一根骨骼,这导致了大量的骨骼。其性能会相对较差。

而PivotPainter的想法是将类似的信息存到顶点UV或者贴图上,这样每个顶点都知道自己所属几何部分的轴心即pivot位置在哪。随后,在shader中,每个顶点做各自的计算。由于这个计算是在GPU中并行执行的,所以速度会相对较快。

不过我想,这并不意味着PivotPainter可以取代骨骼。骨骼的计算可以和游戏逻辑相关联,可以通过动画机等的方式进行精确的控制,因此用于角色来说很合适。而PivotPainter计算在shader中,可以并行处理很多顶点,这样速度更快,但是无法对特定部分进行复杂逻辑的控制,它经常用一些算法来对整体进行有规律的控制,并通过随机噪声等方式来让各个部分的运动有差异,因此用于植被来说很合适。

UE的PivotPainter现在有两版,区别在于2.0版使用贴图来存储信息,而1.0版使用顶点信息包括额外的UV通道。
对于1.0和2.0分别有各自的材质函数:
在这里插入图片描述
可以通过这些材质函数来获得从3DSMax或Houdini等导入的PivotPainter信息。
Pivot Painter Tool 1.0 Material Functions | Unreal Engine Documentation
Pivot Painter Tool 2.0 Material Functions | Unreal Engine Documentation

下面将结合官方教程 Pivot Painter | Version 1 and 2 | SideFX对Houdini的PivotPainter工具进行学习。本篇将只学习导出Pivot Painter的1.0版数据。

在Houdini中导出数据

Houdini的PivotPainter工具节点来源于 SideFX Labs
它需要两个输入,其一为几何体本身,另外一个是pivot点

我的测试节点如下,外形就是将圆锥复制到了网格上:
在这里插入图片描述

需要注意的是,正如 Pivot Painter 节点文档 中所说,几何体pivot点上都需要有对应的属性:

Important pivot attributes are: N and name for PP1. N and hierarchy for PP2.
Important geometry attributes are: uv and name for PP1. uv and hierarchy for PP2.
pivot点所需要的属性,对于1.0版是Nname,对于2.0版是Nhierarchy
几何体所需的属性,对于1.0版是uvname,对于2.0版是uvhierarchy

因此,在上面的测试节点中:

  1. 我在圆锥几何体节点后跟了UVFlatten节点以此来创建一个简单的uv。
  2. 在作为pivot点的网格节点后,连上了PointWrange做些操作:
    @N = set(0,1,0);
    @name = itoa(@ptnum);
    
    以此创建法线的属性和name属性,name属性让它是点序号。
  3. CopyToPoints节点将圆锥复制到网格点的同时,也会将name属性拷贝过去。

最后,设置一下PivotPainter节点的参数,将版本设置为1.0版。然后设置输出的文件和路径,最后点Export就可以输出fbx文件了。

导入给UE4

在UE4中导入fbx,有一些设置需要注意,比如需要将顶点色的导入设置改为Replace
在这里插入图片描述
接下来,该使用UE提供的材质函数来做些效果了。
但也可以使用 ContentExamples 中的测试材质。打开其中了PivotPainter地图可以看到很多测试材质:
在这里插入图片描述
最简单的,让顶点基于自己的pivot缩放:
在这里插入图片描述
稍微复杂点的,基于自己的pivot旋转,并根据自己离pivot的距离进行变化:
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐