0

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

换句话说,我想做GetSkinnedVertexDataWS节点的等价物,但在 HLSL 中。这可能吗?

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

bool myBool;
float3 VertexPosition;
ParticleMesh.GetSkinnedVertexDataWS<Attribute="Position">(i, myBool, VertexPosition);
float3 VertexNormal;
ParticleMesh.GetSkinnedVertexDataWS<Attribute="Normal">(i, myBool, 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: undeclared identifier 'ParticleMesh' SPH_Emitter, Particle GPU Compute Script,

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

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

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

4

0 回答 0