在 Niagara 中获取骨架网格体顶点位置

问题描述

我在 Niagara 的模拟阶段有一个自定义 HLSL 节点。该节点的输入变量之一是 Skeletal Mesh 类型,我想通过顶点的索引获得该骨架网格上给定顶点的位置和法线。

换句话说,我想做与 GetSkinnedVertexDataWS 节点等效的操作,但在 HLSL 中。这可能吗?

我找不到关于它的任何文档。我试过这个代码

bool myBool;
float3 VertexPosition;
ParticleMesh.GetSkinnedVertexDataWS<Attribute="Position">(i,myBool,VertexPosition);
float3 Vertexnormal;
ParticleMesh.GetSkinnedVertexDataWS<Attribute="normal">(i,Vertexnormal);

其中 'i' 是我想要的顶点的索引(来自循环),但我收到错误

"'GetSkinnedVertexDataWS_SystemParticleMesh_AttributePosition':无法将输出参数从 'float3' 转换为 'bool' SPH_Emitter,粒子 GPU 计算脚本"

我也尝试了一些变体,但无济于事。

编辑:

通过“\UE_4.26\Engine\Plugins\FX\Niagara\Shaders\Private”中的USH文件,特别是查看“NiagaraDataInterfaceSkeletalMesh.ush”,似乎调用应该是 GetSkinnedVertexWS 不是 GetSkinnedVertexDataWS

但是,当我进行此更改时,我现在得到的错误

/Engine/Generated/NiagaraEmitterInstance.ush(1563,3-14): Err0r X3004:未声明的标识符“ParticleMesh”SPH_Emitter,粒子GPU计算脚本,

这对我来说毫无意义。 ParticleMesh 是绝对声明的 - 正如我所说,它是自定义 HLSL 节点的输入。

当它提到“NiagaraEmitterInstance.ush”时,我也不知道错误指的是什么。有一个“NiagaraEmitterInstanceShader.usf”,但没有 USH 文件

这整个周末都浪费了,进度为零。几乎没有文档也无济于事。我必须打开和关闭发射器上的任意参数以在 0.2 秒内显示 Niagara Log 中的错误,敲击打印屏幕键并将屏幕截图粘贴到 Photoshop 中只是为了检查错误日志,这也无济于事是时候做出改变了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)