I’ve been trying to boost my skills by breaking down professional VFX, but I’m at a loss for how the flames in this move are able to tear apart so organically with just sprites. I’m 90% certain that flipbooks are not being used for the flames shown here, and yet this doesn’t look like a case of simple UV distortion, either. I know that opacity erosion with a texture is being used in some sense, but I can’t tell what the shape of the erosion is…
Is this just careful stylized VFX composition with many very handcrafted sprites or something else? If it is, how would one manage the draw calls to all of those without going overboard?
See timestamp 1:15 to 2:00 here: FF XVI Fire Attacks
Edit: Looks like flowmaps are the most likely candidate for how this is achieved in conjunction with carefully shaped sprites, looking forward to working it out for myself on my own end.
If you notice those “mushroom” flares on the right and left of the core flame burst that’s usually a giveaway that it was a Houdini pyro sim to create the sprite.
Would that then mean that these are flipbooks doing the sprite’s later motion as opposed to flowmaps?
My guess is the core of the effect is a flipbook. There is also an outer ring that seems to have some UV distortion, in the shift strike attack (on the left) the distortion is really evident in the beginning since it even distorts the character, this means it’s most likely on a sprite (plane or some shape) that is overlapping that whole part of the screen.
The artist probably spent a good amount of time getting the timing and composition of the effect down to make it look smooth as it is.
As for the draw calls, if you look at the now-old Paragon effects in Unreal Engine you can see that those weren’t as optimized as one would expect, so an effect like this on modern hardware isn’t too taxing since it’s the main characters’ attack. It’s also possible they did some further optimization by combining the effects into one flipbook or material but I kind of doubt that.
That’s all just my guess though. How would you use flowmaps in this case?