Not sure if this is the right place to add this thread, but wanted to know if anyone knew of any good sites or resources for learning about Shuriken? I've seen a few tutorials online but they seem fairly basic and would like to know how to create more advanced particle simulations (e.g. RyanB's particles in this link -
http://www.polycount.com/forum/showthread.php?t=90915 ) Thanks
Replies
I'm no expert, but in my limited experience creating vfx for our games, I feel that pretty much everything in realtime vfx ends up being a combination of:
- a particle system,
- a shader,
- (and, similarly, the textures that get plugged into the shader; flipbook textures maybe)
- and/or a custom mesh (could be static build in your 3D app, or could be built by some custom code, like for blade trails or something).
There generally is no other special knowledge, and what it ends up coming down to is how you combine these in an appealing way. Kind of like digital painting; the tools may be quite basic, but the way the tools are combined and used make beautiful or crappy work.
One useful way to learn is to screen capture games that have great vfx work (the higher the frame rate that you can capture the better), and go through the video in slow motion to break down the different layers of what's going on, and see how they're combined. I remember there being some DotA2 videos going around a little while ago of gameplay videos that were captured at 1,000 fps that were pretty cool to see.
Some things you may want to look at in particular include:
- whether something is a flipbook texture (why would they have chosen a flipbook? Did they render out the frames at a particular angle?)
- whether it's a static texture that fades, or rotates, or changes size
- whether you can see the quads, and therefore identify which things are particles and which are custom meshes
- use of scrolling textures? (and how would the mesh be UV'd to create that scrolling effect?)
- layers of things combined?
--
And then, when you're creating particles and fx for yourself, try to think about what purpose it needs to serve. First and foremost, in games it's there to convey information. Is it big/small (lots of damage?), how big/small (area of effect?), the duration, what is the source (fire? bullet? electricity?).
Once you've identified that, I find it's useful to think about it the same way one would approach a painting, with primary, secondary focal points, except that this is a painting that changes over time.
Kind of a knowledge dump that totally side-stepped what you were asking (tutorials, what're those?), but hope that helps to put things in a context in which you can teach yourself!
If there's a specific effect you're trying to reproduce, post a video, and maybe we can help you walk through breaking it down into its components.
Unfortunately not. You can, however, use velocity over time or force over time, and while it's possible to use either of those (you can get displacement from both velocity and acceleration), it's not ideal.
Hopefully they'll add in a method of doing displacement over time in a future update.
If you're trying to get things rotating around a character, try setting the velocity over time on both X and Z axis to a sin curve and cosine curve respectively.
Or you could just spin the emitter, and set inherit movement to be between .5 and 1 to get some variability.
Actually, there are a couple of ways you can get the effect you describe.
The one, which is more of a workaround than anything else (and kiiind of similar to what Brendan describes, but much simpler in my opinion), is to make sure that your particles are simulating in local space. You can then animate the particle system (or a parent game object, or whatever) to have it rotate on the same axis along which the particles are moving. It's not true displacement, but sometimes that gets you close enough.
The other way is to write some code that moves the particles every frame. I don't know deep into coding you want to get, but there are examples in the Unity scripting docs, as far as I remember, where you reference ParticleSystem.particles, and can manipulate the transforms of the particles in the array each frame. Of course, to do get any cool effects going, you'd have to know the physics and maths equations that describe the various motions you're after, but it'd pretty much allow you to create any kind of motion you wanted (although afaik it'd be a bit slower as it'd be handled by your cpu instead of being purely gpu calculations).