UE4:NiagaraMeshRenderer的两个bug临时修复

版本 4.27 release

问题一:

在MeshRenderer的SourceMode为Emitter的时候,在EmitterAttributes的命名空间里的VisibilityTag是不生效的,但是SpriteRenderer的SourceMode为Emitter的时候是可以生效的。

问题描述和复现方式:

新建一个NiagaraSystem,从模板添加一个NiagaraEmitter,使用的是SpriteRenderer​

将​SpriteRenderer的SourceMode改为了Emitter

在EmitterAttributes中添加一个新的int32,重命名为VisibilityTag(因为默认EmitterAttributes的Library中是没有VisibilityTag的,所以试图用这种方式……)

在EmitterSpawn中Set上一步添加的​VisibilityTag为0

在EmitterUpdate中添加Set ​VisibilityTag改为1

此时粒子不显示,因为EmitterUpdate里的VisibilityTag改为了1,这也符合期望表现​

但是将Renderer的类型换成MeshRenderer之后,上述的做法就无效了

即,添加一个MeshRenderer,将SourceMode改为Emitter,在EmitterAttrbutes中添加int32改名为Visibility​Tag然后在EmitterUpdate中Set为1之后,粒子还是可视的

经过UDN老哥确认,此为Niagara的一个bug,预计将于5.2版本修复。

临时修改方案见后文的源码部分

同时,为了方便美术使用,可以考虑在Niagara constant中直接添加一个EmitterAttributes的变量

问题二:

MeshRenderer的SourceMode切换为Emitter的时候,DynamicMaterialParameter绑定的参数无法正常输出,但是SpriteMeshRenderer切换为Emitter的时候是正常的

问题描述和复现方式:

新建一个NiagaraSystem

添加一个任意模板的Emitter

在Render里添加一个MeshRenderer,此时应该有一个SpriteRenderer和一个MeshRenderer

将两个Renderer的SourceMode都改成Emitter

将SpriteRenderer的​Material改为一个Debug材质,比如下图这样的

20220925185505

将MeshRenderer的Enable Material​ Override打开,并添加材质

20220925185741

​在Emitter Attributes中添加一个Vector4类型的变量

新建一个NiagaraDynamicInputScript

大致连线如下:

20220925185808

再将两个Renderer的Bindings里的DynamicMaterialParameter改为上面新增的Vector4

​此时会发现,SpriteRenderer渲染出来的粒子显示的值是正确的,但是MeshRenderer渲染出的粒子显示的值是错误的:

20220925185828

20220925185835

相关修改源码:

由于涉及改动的文件较多,懒癌患者决定直接放文件……:

源文件


UE4:NiagaraMeshRenderer的两个bug临时修复
http://muchenhen.com/posts/693/
作者
木尘痕
发布于
2022年9月25日
许可协议