home about gallery publications education links contact

..::pin art::..

To create this effect using rigid body dynamics would grind your computer to a standstill! With the amount of pins required to create a decent effect, the software would have to calculate collisions between the each pin and the object, and also any other geometry that may be used to hold the pins vertically so that they don’t fall over. The Houdini tutorial (on the cover cd of issue 36) actually makes use of depth maps and displacement to create the effect, something of which we can utilise here.

There are a couple of ways to distribute the pins over a surface so they are placed and react to the surface of the object that is displacing them. One way would be to use scripting to place individual pins at vertices of a displaced mesh. However, there is a tool within Max which allows us to create the effect a lot quicker and easier – the Scatter Compound object.

Using almost it’s default settings, the Scatter object takes the original geometry and duplicates it across the distribution object using the original geometry’s pivot point as the point of contact with the distribution geometry and also it’s alignment. But how can we generate a complex 3D object such as a face or hand in our pin toy using just displacement?!

The procedure is quite simple. We position a camera directly perpendicular to the object we want to displace, and then set the near and far ranges of the camera’s clipping planes; the distance between the two of them should correspond to the length of the pin as the pin cannot be displaced any further else it would be floating in space (for an easy method to set this up, see the tips section). Using the File Output render effect (or the Z Depth Render Element if so desired), the depth map can be output to a file. This effect uses the camera’s near and far ranges as settings to determine the depth - white as the nearest, black as the furthest away, and shades of grey inbetween.

Even though this method allows us to use virtually any object to be displayed with our pin table, the depth map will be shot with a camera which, although benefits from having the ability to grab clipping plane values directly into the File Output render effect, has it’s downside. Unfortunately as we’re using a camera, we have sense of perspective which we need to remove. We can do this in two ways. One is to use the Orthographic Projection option in the Camera’s Parameter’s rollout as this removes the sense of perspective and distortion and makes the resulting render appear flat, like the User view. Another way, would be to reposition the camera very very far back in the scene, and then zoom (not dolly) the camera in. This results in a very flat image, virtually removing all sense of perspective. The camera ranges will have to be re-amended if they’re already set, but this is a useful method and on par with the Orthographic technique.

Additionally, some thought regarding the model we’re taking the depth map of should be taken into consideration. The main reason being is that no geometry underneath the widest extremity of an object can be displayed using the pins as they cannot float. For example, a ledge sticking out at the side of a building will result in the area underneath the ledge being filled in by the pins that build up the ledge.

With our depth map now rendered out, we can add additional effects on top of the original render, either by using additive, subtractive or overlaid blending methods, depending on how you want the pins to react to the depth map. Again, bear in mind that white is the full extent of the displacement, and black has no effect on the pins at all.

Should you decide that this displacement method is not for you, there are other ways to create effective pin designs. For example, instead of using a displace modifier on the distribution plane, try using procedural modifiers such as Noise, Ripple and so on, or other mesh deformation based modifiers like FFD cages. Should you decide to use the best of both worlds, really effective results can be achieved with little difficulty!

Enlarge Screenshot We’re working with units today, so set up your units to work in cm. Create a Cylinder with a radius of 1cm, a height of 100cm, 4 height segments and 5 sides. Add a Edit mesh modifier and amend the vertex positions to lengthen the pin if required and to form the pin head.
Enlarge Screenshot Create a Plane with a Length and Width of 600cm, and 50 Length and Width Segments. This gives us enough to work with in the Viewport. Increase its Render Multiplier Density to 4 to render 4 times more segments than is displayed in the Viewport.
Enlarge Screenshot Add a Displace modifier to the Plane’s stack and set the Strength to 150cm ( a high value due to the size of the plane and pins. If the toy was smaller then the displacement value would be lower). Load in the pins_face_displace.JPG file into a blank slot in the Materials Editor and instance copy it to the Displace modifier’s Map slot.
Enlarge Screenshot Select the Pin and clone it. Label the new copy Pins. Hide the original. With the Pins pin selected, create a Scatter Compound Object. Select the Plane as the Distribution Object, check off Perpendicular and select All Vertices as the distribution method. In the Scatter’s Display rollout, check on Hide Distribution Object. Hide the original plane geometry.
Enlarge Screenshot To illuminate our scene, we’ll use just a simple two light setup due to the amount of objects at close proximity to one another. Create a Target Spot and position it at a diagonal to the Pins. Set it’s shadow Bias to 0.001, Size to 2048 and Sample Range to 8. This creates a large detailed shadow, but will be faster to render than using Raytraced shadows.
Enlarge Screenshot Create an Omni light on the opposite side of the Pins to the Spot light to act as a fill light. Set the Bias to 0.001 again, the Size to 256 and the Sample Range to 20. This light is to add some “reflected” illumination from the other side of the scene. Render out the image (it may take some time due to the Plane’s density multiplier increasing the amount of pins 4-fold).
Enlarge Screenshot A slight wait for the geometry to calculate and here’s our final image. Next task is to animate it; see the tips column for details…
Download the max file! Zip file to accompany - maps (etc) referred to in the above text.


This scene can be easily animated. As the displacement of the pins is driven by the distribution plane’s displacement using a depth map, all we have to do is animate the map itself. As the source scene uses camera clipping planes to create the depth map, all we have to do is to animate the object’s position from behind the furthest camera clipping setting to just behind the closest.

As within the Houdini tutorial, the camera clipping settings can be easily set up within the same scene so we know how much to displace the mesh by – if we position the object so it intersects the pins, we can therefore determine where to put our clipping planes: at the rear of the array of pins and at the front of them as this is the furthest the pins should be displaced by, else they will be displaced too far and will be floating in space.

The pin table scene from XMen can be recreated using a depth mask generated from a 3d model of a city. By animating basic objects within this scene, the depth mask animation can be quickly set up (eg of a shockwave, animating a “target” etc). The result of which can then be easily assigned to our pin setup which should display the result without any problems. Just remember that to set up the depth mask correctly, we have to animate geometry, be it deformation or translation… materials will not work, unless they are overlaid on top of the pre-rendered depth map.

Although they would look good, with the amount of objects in the scene that it would be applied to, stay away from raytraced reflections as it will take an age to render. An alternative would be to create a reflection cube map or environment map to be used as the reflection in the material assigned to the metal pins. Feel free to complete the model and assign relevant materials to the geometry.

Initially published: 3D World magazine, Issue 38, May 2003.

Copyright Pete Draper, May 2003. Reproduction without permission prohibited.