and texturing a photorealistic fish
Tutorial by Andrew
this tutorial we're going to do things a little differently
then you may be used to. Because our goal is to model and texture
a realistic fish, we're going to start with the texture map
as the basis for building our model. Please note that although
I'm partial to LightWave, this tutorial is
applicable to any 3d application that supports images in the
modeler viewport. Please feel free to download the images on
this page and follow along.
1. I started out by scanning a photo of a fish on a flatbed
scanner (figure 1), this had to be separated from the background
and retouched with paint and clone tools in Photoshop. The gamma
curves were also adjusted to provide a sharp and saturated image
which will become the color map for our fish. Name this image
color_map and save it. You may also use a real fish as a basis
for your texture, although you may have to fillet it to make
sure it lays flat on the scanner. There are a couple of advantages
to this method, 1. it will provide you with the sharpest, most
authentic texture, and 2. when your boss sees you filleting
a fish on your office desk and gingerly slapping it on a scanner
he'll think you're in bad need of a break and give you the week
2. In photoshop, turn the full-color scan into a grayscale image,
and boost the contrast to get a nice definition between the
dark and light tones. This image (figure 2) will be used as
a template to model the fish, as well as a texture map to control
diffusion. Name it gray_map and save.
3. In the modeler of your choice load gray_map and position
it in the x viewport. I used LightWave's MetaNurbs function
to draw a rough box around the image and proceeded to add control
points with the knife tool (figure 3). I then scaled and dragged
these points into position. With nurbs-based modelers like Rhino
3D or Alias, you may want to draw curves in the z port, pull
these into position and loft them into a nurbs surface.
Figures 4 and 5 show y and z views. Create the fins in a similar
fashion, you may want to create them as separate objects then
merge them into the final model. The eyes are simple spheres,
flatened and moved into place.
In figure 6 we see the final polygonal wireframe, figure 7 shows
the shaded geometry.
4. Note that the fish model need only be tagged with one surface
name, because all material attributes will be modulated with
"global" texture maps. Figure 8 is our transparency
map. This map is based on the original grayscale image, all
the areas that need to be opaque are painted out in black, while
white areas signify complete transparency. Paint a gradual falloff
of black to white at the tips if the fins to simulate the translucency
seen in a real fish's fins. I used a combination of clone, smudge
and blur tools, along with soft airbrushing and dodge/burn to
acheive this effect in Photoshop.
5. Figure 9 is a specularity map which provides modulation to
the hotspots and highlights of the finished rendering. Turn
the original grayscale map negative and cut holes out for the
eyes, which need to keep a smooth highlight.
6. Figure 10 is the bump map, which modulates a surface in a
way that provides the illusion of bumpiness and raised texture.
This will provide us with the final and most important touch:
scales. Notice that I've cut out the original gray texture in
what would be the scaley areas of a fish and replaced it with
a "scales" texture. Again, be sure to cut holes for
the eyes to maintain their smoothness.
7. Now that the model and texture maps are ready, load them
into the 3d application of your choice and apply them to the
appropriate material channels: color, specularity, bump and
transparency. I used planar mapping on the x to apply the textures.
Finally, load the original gray image and apply it to the diffuse
channel. Diffusion controls how light is absorbed or reflected,
since organic subjects rarely have uniform diffusion, it's a
good idea to modulate it with a texture of some kind. Auto sizing
your textures should place your textures perfectly because the
model is based on them. You'll have to adjust the percentage
of effect each of these channels have on your rendering, just
tweak it till it looks right. In the final rendering I used
a shader plugin for LightWave called HSVBoost form Worley Labs'
Polk collection, this adjusts the saturation-desaturation level
of the fish based on the camera's angle to the geometry, adding
a final touch of realism.
Next time we'll
discuss motion and timing, as well as IK hierarchies as we animate
our fish. Click to see Part
If you would like to see the fish in an animation, we've supplied
a short clip in Quicktime
(1099k) and MPEG
(439k) formats for your viewing pleasure.
Weiler is a CG artist and technical director working in
the Atlanta, Georgia area. When not producing animation, graphics
and effects for companies like Bellsouth, AT&T, and GE you'll
probably find him juggling his kids around, and trying to get