Niagara collision not always activating decal

Hello,

I am attempting to create a similar effect to the blood splatter in Death’s Door. I am creating a Niagara effect to do so. The effect is when an enemy gets hit there is a blood pattern that gets ejected and a droplet(s) that will spawn as well. These droplets have a trial and when they hit a surface a pool of blood appears.

Here is a Youtube link to the combat and effect in Death’s Door:

I have been able to get the systems foundation working but the Blood Droplet does not always spawn the blood pool decal when a collision is detected.

What could be causing an inconsistent result? I have tried:

  • Two setting for the Radius Calculation Type (Sprite & Mesh). For Mesh I use Mesh Dimensions that are larger than the Blood Droplet mesh size and even tried small values that were barley visible. When I used the sprite calculation type I also used large values and a small values. Neither provided a change in consistency.
  • My setup uses a Kill Particles Module when a collision is detected so that the droplet disappears when it hits a surface and then the decal spawns. I have tried removing this module and it will still not spawn the decal consistently. When the Kill Particles module is off the mesh will bounce and collided multiple times and not spawn any decal on any of the hits if the first collision did not spawn a decal. If the first hit spawned a decal then the subsequent collisions will also spawn a decal.
  • I changed the values for the Decal Emitter under the Event Handler Properties module. I change the Max Events Per Frame to different values. from 1 to 512 and it would still produce inconsistent results.
  • In the Receive Collision Event module I have changed the bool values of the Interpolate Spawned Positions and the Reflect Incoming Velocity Around Collision Normal
  • I have double checked the Decal Attributes to make sure that the minimum size is not to small when it spawns.
  • I also tried different meshes for the floor, walls and surfaces to make sure it wasn’t the meshes I am using that are causing some sort of collision detection issue. I have tried using cubes, planes and different meshes and it still leads to inconsistent decal spawning.
  • I also used the default decal material to make sure it wasn’t an issue with my blood decal.
  • For the collision trace channel I used different settings such as World Static and even a custom Trace Response Channel called BloodHit. This didn’t change the spawning’s consistency
  • Lastly, to ensure that the decal was not spawning and was not just spawning with an incorrect rotation causing it to look like it didn’t spawn, I replaced the Decal Renderer with a Sprite Renderer and the same issue persisted. With some of the collisions the sprite would spawn and other times it would not.

Video Example of inconsistent blood pool decal spawning

Blood Droplet Emitter Settings & Module

Blood Trail Emitter Settings & Modules

BloodPool Emitter Settings & Modules

Any suggestions to get the decal to spawn on every hit detection of the Blood Droplet? Thank you!

usual suspects for decals only sometimes spawning from droplet collision:

gpu sim events: if the droplet emitter runs on GPU, event handlers feeding the decal renderer are unreliable, decal spawning from GPU collision is a known dead end in most versions. put the droplet emitter on CPU sim, droplet counts are low so it is cheap.

collision mode: depth field collision misses thin geometry and clips at glancing angles, so some droplets never register a hit. scene collision is accurate but pricier, fine at droplet counts.

event wiring: the collision event handler needs kill on collision enabled, the decal renderer set to spawn on event, and the handler on the same emitter as the decal renderer. also check the decal material is actually in the deferred decal shading domain with a decal blend mode, otherwise decals spawn but render invisible, which reads exactly like not always activating.

limits: dozens of decal carrying droplets per hit will hit decal sort and fade limits, new ones skip. cap how many droplets carry decals.

one addition that pays off: drive splatter size from the hit, set a user float like SplatScale from blueprint when the enemy is hit (damage magnitude or hit bone) and multiply decal size by it. stock set variable float handles the basic case, and if you want that wiring for any type or namespace the Expose Niagara Variables C++ & Blueprints plugin exposes 18 types across all 8 namespaces with getters, in blueprint and c++: Expose Niagara Variables C++ & Blueprints | Fab