Hi, I am trying to create a sort of smoke-effect around the character, sort of like an evil aura very much like this (with perhaps a little distortion to make it appear like a flame):
I was wondering how to go about doing this. The character will be animated and moving around. We tried doing it with the unity particle system, but the effect is very static (texture outline of the figure) and hard to control, with the effect sort of following him around like a trail instead of being around him at all times.
We also tried doing particles in 3dsmax which was connected to his bones, but its not really good-looking, plus it generates a lot of geometry for the particle sprites.
My thought was, if it would be possible to do a shader that creates a sort of animated, transparent material, and the material would be applied to 4-6 animated planes around him, creating something like the screenshot above. Are there any better ways?
asked Apr 18 '11 at 12:15 PM
From what we can see of that picture, it's a combination of particle effects (pinky smoke around the thighs) and multiple redraws of the character's silhouette.
No need to explain how to make the particle effects.
As for the silhouette, it's more complicated. Therefore more interesting :)
I would first make use of Unity's RenderWithShader feature on the character. Combined with a shader that would only draw the silhouette's color, you'd end up with a render texture containing nothing but that silhouette (Make sure you don't try to use the game's camera for this, just make a new one in your script and use the nice Camera.CopyFrom function. I once tried to do that on the same camera and almost got crazy).
After that it's just a matter of drawing a series of quads around the character (I'd suggest drawing them before the character but turning ZWrite off and then draw the character over that), quads that you'd have textured with your render texture. By making the quads more and more distorted on the top (higher and larger) while keeping the base the same for all quads, you should end up with something very similar to your screenshot. Using a traditional alpha blending in this series of transparent quad should give you this accumulation effect.
If you want this effect to be like a trail, you'll have to draw your quads at previous positions of the character. Positioning and properly texturing all those quads will be probably the most annoying part of all this :p
And if you also want each silhouette of the character to be of a particular time before the present frame (say you want the 7th silhouette to be of 7 frames - or fixed fractions of a second - before), then you'll have to store as many render textures as you want different silhouettes. So you will probably want to consider to not do your RenderWithShader on the entire screen but just on the bit where the character is, so that you can use much smaller render textures.
I probably scared you to death with all that. But this is all feasible ^^ Just ask if you have more questions.
answered Apr 18 '11 at 12:56 PM