home about gallery publications education links contact

..::object "construction"::..

Even though we covered something very similar in the hull construction effect, the technology used to create this effect is different, yet the method of controlling the distribution of the particles is similar, so if you (managed to) follow the steps in the last q&a, then you shouldn’t have any problem!

Getting the particles to just appear in the correct places over the geometry is simple, but getting them to move to and form around the shape of the object is slightly more taxing. The particles should appear from out of thin air close to the target surface; this is generated by using a Position Object operator in Particle Flow that utilises a modified version of the source geometry using a Push modifier to expand the surface of the object based on Normal direction. By simply scaling up the particles from 0% as they are travelling from the emitter object to the target surface, it gives the impression that they are growing from nothing, however, we need to get the particles to move to the right places on the target object. Again, we have a feature in Particle Flow that allows us to do this: the Find Target test.

By using this test, the emitted particles will travel from the birth position to the surface of the target object, however this generates quite a uniform result, with all the particles growing from at a specified distance. To get around this, we can use an additional Find Target test to check to see if the particles are within a specified distance threshold from the target object, and if so they are passed to an additional event which contains the other Find Target test and an operator which defines the particles’s shape, and the Scale operator to animate the particle’s scale as previously mentioned; as the previous event would not have a Shape operator, the particles in this event would not be rendered.

Once the now renderable particles find the target object we need to pass them to an additional event to stop them from moving, which is performed by a Speed operator. The particles now spawn additional particles to create a nice spreading effect by using a Speed By Surface operator which uses the surface geometry to determine speed direction. To prevent the particles from moving too far off-surface and to stop them dead in their tracks, the particle’s duration in the event is tested using an Age test and are quickly passed to the final event in which a Drag operator is used to slow them down to nothing.

The resulting animation is effective, with the particles forming all over the object; however a build-up from one end of the object to the other would be more desirable. In order to do this we need to get the particles to be initially born close to the target surface (as the Find Target tests are set to travel to the nearest surface) so they do not travel through the constructing object to surfaces on the opposite side which would look odd! In order to do this, we need to prevent the particles from being born and adhering to any other areas apart from the places where we want them. By using a Volume Select modifier on the emitter and target objects we can animate the position of a thin Gizmo across the object and, using an inverted selection, remove the unwanted geometry so all that is left is the areas where we want the particles to appear. The end result is an effective formation of particles, revealing the shape of the target object. Granted, we have only used particles to generate other particles, and we do need a fair amount to cover the entire object (unless the particle size or scale is set to a larger value, which will result in a more bumpy and rounded surface), but there are ways to modify the system so that geometry appears instead of more particles; see the tips section for more information on this method!

Enlarge Screenshot Open up the object_particle_creation_start.max file included in the resources zip file below. In this scene we have already set up the wipe animation of the geometry using an initial teapot primitive and two reference copies; one for the emitter and one for the target; the original is used for the “spreading” effect generated by the Speed By Surface operator mentioned previously.
Enlarge Screenshot Create a Drag Space Warp and set its Linear Damping to 5 for all axes. Create a Particle Flow system, set the Viewport Quantity Multiplier to 1%, the Render Integration Step to Frame (to speed up particle calculation times) and the Particle Amount Upper Limit to 10000000. Open Particle View and remove all operators apart from the Birth operator. Set the Emit Start to 0, Emit Stop to 90 and Amount to 5000.
Enlarge Screenshot Add a Position Object operator and add the Teapot – Emitter object to its Emitter Objects list. Enable Animated Shape, set the Location to Volume. Add a Find Target test and set the Target Point: Is Less Then to 20, Use Cruise Speed to 100, enable Mesh Objects as the target type, add the Teapot – Target to its targets list, enable Animated Shape and set the Point to Closest Surface.
Enlarge Screenshot Add a new Shape operator event, remove the Display operator, wire it to the output of the Find Target test, set the Shape to Sphere and Size to 0.5 Add a Scale operator, set the Type to Relative First, Scale Factor to 0 for all axes and Animation Offset Keying to Event Duration. Enable Auto Key, go to Frame 10 and set the Scale Factor to 30. Turn off Auto Key.
Enlarge Screenshot Copy the Find Target test to this event and set it to Control By Time with Is Less Than set to 0.1 and Time set to 15. Add a new Speed operator event, wire it to this Find Target test and set the Speed to 0. Add a Spawn test, enable Delete Parent and set the Offspring to 5 with 50% Variation. Add a Speed By Surface operator and set it to Control Speed Continuously with the Speed and Variation to 5. Add the Teapot – Surface object to its Surface Geometry list and set the Direction to Parallel to Surface.
Enlarge Screenshot Add a Scale event, set to Relative First and set the Animation Offset Keying to Event Duration. Go to frame 5, enable Auto Key and set the Scale Factor to 500. Turn off Auto Key. Add an Age test, set it to Event Age and the Test Value to 5 with 0 Variation. Wire the output of this event to a new Force operator event and add the Drag Space Warp to its Force Space Warps list. Set its Influence value to 5000. Add an instanced Display operator to events 02, 03 and 04 and set it to Geometry.
Enlarge Screenshot The linear selection wipe across the object is fragmented due to the particle attraction timing, and yields an effective result.
Download the max file! Zip file to accompany.


Instead of using a simple wipe across the object, try using a procedural map to generate the initial positioning of the particles. This can be achieved by using a Gradient Ramp map which is (slightly) clamped off to create a defined pattern, and animated so that the white areas “grow”, forming a noisy wipe over the object, like a shockwave so that particles are being distributed evenly over the surface of the target object and not being added to areas which already have a dusting of particles. This map should then be used in the Volume Select modifier of the emitter object to define where the particles are born, or (alternatively) assigned to the emitter object as part of a material (as a diffuse map), with the Position Object operator used in the particle system set to position the emitted particles based on the greyscale values of the emitter object’s material.

Currently, the object being formed is only being made up of particles, and will remain so. However, we can get the object to form geometry instead by a little manipulation. By using a cloned version of the object, we can use a Mesher Compound object to generate geometry when the particles adhere to the target object. Using this generated geometry, we can test for face intersections using a Volume Select modifier on the “constructing” object, thereby selecting faces and, with the selection inverted, delete the rest of the geometry (using a Delete modifier) until the Mesher geometry intersects with it.

... or, easier still, add a Shape Mark operator set to Box Intersection that generates a part of the target geometry upon impact!

Initially published: 3D World magazine, Issue 56, October 2004.

Copyright Pete Draper, October 2004. Reproduction without permission prohibited.