Niagara: [SOLVED-ish] VAT/WPO + Niagara Rotation = glitch?

Edit: So far I managed to narrow it down to Niagara as probable cause: Modifying WPO via ParticleColor or any Dynamic Parameter creates the artifacts, especially combined with rotation modules, but WPO animated without Niagara works fine. Any idea why?

Example project: Deleted

Hi everyone,

I just cannot figure this one out:

When I use WPO transforms (eg: Wind, VAT,…) on Niagara mesh particles, I get very ugly black faces flickering. My material is opaque one-sided.


It looks like Z-fighting but not sure why it would happen?

It doesn’t seem to affect masked two-sided materials.

Any hint / help would be much welcome, I’ve been stuck on this for a very long time.

Thank you

reminds me of this.

maybe test on a different computer. and make sure drivers are updated.

I had this issue and it’s a nightmare - it wasn’t consistent across meshes, materials or use cases. In the end I just remade the mesh and it didn’t affect the new one. Would love to know what it was causing it though if you do find out!

I really have a hard time figuring out.

At the moment I managed to animate VAT / Wind with ParticleColor with little to no glitch, but as soon as I add any Niagara random [Initial Mesh Orientation] or [Mesh Rotation Force] module, the meshes flick like crazy.

(PS: love your tutorials)

I was able to reproduce the glitch. Posted the project in first post for those who are curious.

The plot thickens…

Ok found a workaround. Don’t ask me how it works. Probably some competing particle ID stuff.

Alternative D3D fix instead of ParticleRandom (from @kmstu):

@Deathrey explains:

“Internally, some operations on GPU can be optimized, reshuffled and reordered. There is no guarantee that they will be the same for two different shaders or even two different draws. Since you are drawing opaque materials twice-thrice(once in early depth pass and once in base pass, or even velocity pass), vertex positions can get slightly different between two. Depending on which operations were performed, this slightly can be significant enough to cause depth to be sufficiently different for depth test to fail. Adding precise keyword disabled mentioned optimizations.”


“Basically drivers are taking your byte code and optimizing it differently between shaders. Precise says don’t do this so your loosing some perf but that is immeasurable in the cases I looked at. D3D12 didn’t allow shader PGO by drivers initially so didn’t suffer from this but did suffer from games running slower on GPU because of lack of it, I believe drivers are allowed to do it in later releases.”


amazing - always great to learn something new!

1 Like

Ran into the same issue, came upon the same solution in the past. I’ve shipped some stuff using MakePrecise and I haven’t had any issues with that!

1 Like