0 like 0 dislike


I'm here to ask for some help to figure how can I go about recreating the image below. I have a character that will evolve and grow wings(less bird like and more abstract aesthetic). This wings will some type of animation.

Initially, I was thinking Mesh Sampler but now I'm wondering if AnimTrack might be a better options.


by gbernal (340 points)

1 Answer

0 like 0 dislike

Hi gbernal,

There could be multiple solutions to this, depending on the level of dynamicness(?)/control you'd like.

Rough basic structure of that effect would be at least a layer for the root particles (the "heads" of the trail), and a trail evolver to spawn child smoke particles.

The child trails aren't much of a problem, so let's see some options to drive the root particles:

1- Physically based
Mimic what would happen in reality: when you want to emit the smoky wing shape, spawn the root particles on the character's forearms / hands, and give them an outward velocity (if it's on an animated mesh, you could use Mesh.sampleVelocity() in the root particles spawn script (you'll have to make sure it's in the proper coordinate space, I think it's an option in the attribute sampler in UE4)).
This, in addition to some drag and gravity, and maybe some weighting that depends on the distance to the fingertips, should produce a falling pattern similar to what's seen in the picture.
For better control you can vertex-paint your mesh and use the "sampleColor" function, you can paint the finertips white and slowly go towards black as you move towards the shoulders, and use that color as a scale for the initial velocity of the root particles if you need more control.

This can go pretty far, with stuff like control over a minimal detachment speed for the dust, so that it scales properly with the movements.

2- Using animtracks
you'll have to make a lot of different tracks, or find a clever way to interpolate between different tracks.
The idea would be, like method #1, to spawn the particles on the mesh, then, based on the UV or vertex color, find where between the start and end of the wings the particles lie. once you have that information in a float value in the [0-1] range, you can either remap that to [0, numberOfTracksInTheAnimtrack], or sample two tracks, one representing the path close to the shoulder, one representing the path close to the fingertip, and use that [0,1] value to interpolate between the two positions. (This will have to be done inside a localspace evolver)

Something I've seen working pretty neatly for things like that is also just using curve samplers in the effect instead of the more complex animtracks.

3- use a flowmap?
Weird idea, but might work depending on the look and feel you want.
imagine the bind-pose your character seen from the front, arms stretched out, let's say it's on the X-Z plane.
now, paint a flowmap around the character on that side-up plane (XZ in UE4), where the colors represent the velocity vectors.
Run a script inside a localspace evolver, that takes "Position.su" (equivalent to "Position.xz" except it'll make the effect work with other coordinate systems such as Y-up), and remaps it to an UV that you then use to sample your flowmap. This gives you the RGBA color, take the RGB part, remap it to -1,1, scale it by an arbitrary factor and ram that into the particle Velocity, then exit localspace.

I'd personally try option 1 as it'll be the most dynamic, but it depends on your exact needs, If you're making this effect for a danse choreography like the ref photograph you posted, #1 will make the effect work with other moves, making dust shoot out of the character's limbs in a more realistic fashion, whithout having to manually create paths for every movement combination.
If it's more for a spell like effect that lasts only a couple seconds and that you want to always look like those wings, and that follows the character around (like your original post suggests), the two other options might do the trick as well.

I think we've got a "spell-like" effect like that in one of the online packages you can grab from the project launcher window of the editor, I'll see if I can find it.

by Julien (35.3k points)
Thank you so much, this type of input is what I was looking for.
I will keep updating on progress.