This is a neat way to render lots of particles fast and also fake volume or light particles. It’s got a number of other uses too, but let’s start with the very basics.
What is a sprite?
A sprite is simply a 2 dimensional image. The trick with sprites is that they always face the camera, they’re always flat to the viewer like cardboard cutouts, so you can fake 3d effects with them, trees, people in scenes, volumetrics… but because they’re only 2d they render faster than the full 3d image. You will in all likely hood have seen sprites in video games, the classic one is usually trees in racing games. Of course the effect doesn’t have to be so obvious as that, it’s really up to your texturing prowess, but i’ll get you started with simply emulating visible/volumetric lights.
Why use sprites?
Simple, less geometry=faster render times. Usually a sprite is on a single poly, this is about as little geometry as you can get! Much less at least than the artists dummy in the above images.
So how do I do this with Thinking Particles?
|To start off, simply add a library TP Emitter object Object->Object Library->TP Emitter to your scene, this will create our particles for us and saves us having to make the Xpresso network to emit our sprites.Next add a Polygon Object to the scene Object->Primitive->Polygon Object (please note this is different to the Object->Polygon Object which is an empty polygon object which contains no polygon geometry at all to start off with, it appears at first glance to look like a Null Object), this is going to be our sprite surface, sprites in 3d are produced by texturing a polygon and using an alpha to mask out the shape of the object.To make sure the sprite faces the camera we should change the way it faces so with the Polygon Object selected go to the Attributes Manager and change the Orientation to -Z.|
|Make the Polygon Object a child of the Particle Geometry object in the TP Emitter and delete the Cube Object that’s generated by default in the TP Emitter.|
|Next to make the emitter emit our Polygon Object select the TP Emitter object in the Object Manager, then drag and drop the Polygon Object into the Particle Shape box in the Attributes Manager.|
If we play our animation now the emitter should be emitting our Polygon Object nicely, however it’s not much use unless you’re looking directly at the emitter, we need to orientate the particles to face us at al times.
|Add a new Camera Object to the scene Object->Scene->Camera. In the View port go to Cameras->Scene Cameras->Camera (or whatever you’ve called your Camera Object) to look through our new Camera in that View port.In the Object manager Select the Camera Object and add an Xpresso Tag to it (from the Object Manager menu File->New Expression->Xpresso Expression). The Xpresso workspace should open and here is where we will make the particles face the camera.|
|In the Xpresso workspace drag and drop our Camera Object from the Object Manager, a node should appear called Camera. Next add two more nodes that we will need to do this, firstly a PPass node Right Click on the Xpresso Workspace New Node->Thinking Particles->TP Initiator->PPass and a TP Alignment node Right Click New Node->Thinking Particles->TP Standard->TP Alignment. Now we have al the nodes we need to make our particles always be flat face on to the Camera.From the Camera Node outputs (the menu from red square in the top right hand corner of the node) add a Global Position output Coordinates->Global Position->Global Position. On the TP Alignment node add an input Axis.Select the TP Alignment node and in the Attributes Manager change the Type to User Position. This option makes particles align with and point towards a point in space defined by the Axis setting. This is how we will make the particles look at our Camera, we will do this simply by connecting the Position of our Camera Object in the world (the Global Position) to the Axis value, this way the particles will always face our Camera Object, and wherever our camera looks the particles will appear flat on (unless we get really close up where the illusion can loose it’s effectiveness as the particles try to rotate around the camera).
To do this drag a connecting line between the dot on the Global Position output of the Camera node and dot on the Axis input on the TP Alignment Node. Now the particles have the camera’s position to point towards, however we’re not there yet, we still need to tell the TP Alignment node which particles are going to face the Camera, so to do that drag a line from the output of the PPass node to the Particle input of the TP Alignment node. Now we’re all connected. The particles wont align till we press play, So close the Xpresso Workspace and hit the Play Button and try moving the camera around a bit, rotate it around the TP Emitter object to see the particles face the Camera Object at all times.
How do we make this useful? Well here’s a simple example say we want to make it look like we’re emitting lots of visible lights into the scene. Visible lights are slow to render, Sprites are much faster. So here’s what we would do.
|Make a new Material, and change the settings, first off switch off the Color Channel, and switch on the Luminosity Channel Make a nice color that we want our lights to be (HINT : if you want to give the effect of really bright lights make the basic color as you would with the light then bring the brightness up to over 100% till the color is the brightest color that you want your “lights” to have at any point). Next switch off the Specular channel and switch on the Alpha channel. In here add either a BhodiNUT Gradient or a standard Gradient, edit this and change the settings to 2D Circular type and make it so that it’s white in the middle and black at the edges, this will give the look of a circular falloff from the “light”|
Now apply this material to the Polygon Object (our sprite), now it will render out looking for all the world like a visible light.
Preparing to render
Then before we render this go to the Render Settings dialog box and under the Options page change the Ray Depth to 50 (the maximum) this will make sure we shouldn’t get any artifacts when rendering (though it will slow the render down a little bit). Now seeing as the type of thing we’re rendering is already rounded and soft there’s no need to have any anitaliasing on so go to the Antialiasing page of the Render Settings dialog box and switch Antialiasing type to None. Next allow the animation to play a little so you have a few sprites and render. It should look like you’re emitting visible lights.
Another thing you can try is using a BhodiNUT Fusion in the Alpha channel. Then put the gradient in the top channel and a BhodiNUT 3D Noise in the bottom channel, set the blending mode to Multiply and edit the BhodiNUT 3D Noise however you want, try using World as the texture Space to get the particles to move through a texture, different texture space options create different effects so play around. This is a good way to emulate some simple volumetric effects as the particles will move through a 3d texture showing their “slice” of that texture for each and every frame, you can create some wonderful effects this way. Check my upcoming tutorial on faking volumetrics for more hints and tips with this sort of effect.
Download the source file for this image here (zip) .
Here’s another playing around this time with animating the parameters on the noise and the Polygon Object to create a smokey emitter.
Hopefully by now you should realise the power and usefulness of sprites in 3d.