Niagara Data Interface访问Groom 数据问题

我们想做一个关于Groom的功能:在groom的某个指定位置,比如某个Guide的点上,固定一个附属物,这个附属物要跟随Groom的物理进行运动。典型比如摆动的马尾辫上面有一个蝴蝶结。​

想用一个Niagara的粒子,用mesh render来渲染蝴蝶结,然后用Niagara Data Interface取Groom的顶点位置数据。

看了一下只有Niagara Data Interface Hair Strands 这个DI。

但是用这个DI不论是​用Get Point Position这类节点还是直接HLSL,都取不到正确的数据。已经设置为GPU粒子,并且Debug开启了Enable Gpu Particle Readback [Image Removed]

重现步骤
打开项目工程中NiagaraGroomDI文件.包含了粒子和groom资产,粒子获取不到Groom数据 [Image Removed]

您好,

HairStrand DI是专门用来做毛发解算的, 并不像Static/Skeletal Mesh Reader这些DI可用于采样其他模型. 我理解解算曲线只能由groom asset上指定的Niagara System读写, 不能由其他system任意修改, 我会再和开发同学确认一下.

测试这个效果可以通过改动Groom Asset上的Niagara Systm实现:

  1. 将Groom Asset上的Niagara Solver设置为Custom Solver. 如果之前用的是GroomRods, 就把Groom插件内容中的StableRodsSystem另存一份调整; 如果用的是GroomSprings, 就在StableSpringsSystem上调整;
  2. 在System上加一个mesh render渲染蝴蝶结, 并调整他的Renderer Visiblity, 只渲染VisibilityTag一致的粒子, 比如下图我是按粒子ID指定的需要渲染哪个节点;
  3. 将Groom Asset上的Physics条目下, 勾选Force Visible, 否则Niagara Component不会渲染.

[Image Removed]我也附上了修改后的工程可以参考看看.

你好,这个工程似乎是用更高版本的UE5.7建立的,不是启动器的5.7版本,能另存一份工程给我么?

另外看这个方式,也就是在当前运动的粒子位置(可以做一个偏移)来模拟头发挂上附属物的的方式,groom粒子的位置和实际头发的位置可能会有一个偏差,实际运动起来会不好动着动着就偏移期望位置了? 我这边也测试一下

抱歉, 我是在5.7-release分支上测试的, 你可以先试试用 s.EnforcePackageCompatibleVersionCheck 0 命令行打开, 我稍后再发一个启动器版本.

这样采样的位置应该和前面你用的GetPointPosition得到的位置是一样的, 就是SimHairStrands/Guides上某个控制点(CV)的位置. 如果毛发的插值方式是用单一guide驱动, 也就是下面的命令行保持默认设置1, 应该没有明显的位置偏差, 你可以先测测看, 有问题再沟通:

r.HairStrands.Strands.Interpolation.ForceSingleGuide 1

这里更正一下, 模拟点是从Guide点上采样了N个点进行模拟的, 并不是导入的源CV点, 每条guide上模拟的点数由Groom资产上的Strands Size参数控制. 模拟点的位置还有一个平滑处理, 是由Strands Smoothing参数控制的, 这个平滑度设置的高一些, 确实会造成挂载的位置偏离groom guide的位置.

打开了,目前设置动起来这个坐标点应该会飞掉,可能还得有其他手段一起用。我也继续试试。 [Image Removed]

应该是因为我没有把local到world的transform变换加上去, 我这边测试把position的设置节点如下改动即可: [Image Removed]另外还要注意上条回复说的, 最好把groom资产上的Strands Smoothing设置为0, 这样才会严格吸附到Guide点上.

ok,这个方法可以,多谢多谢~​