by Joshua Tsui

Everyone knows that when you image-map a surface, the image should be seamless. That means all sides should match with each other so when the image is tiled, there should be no visible seams. This is an easy task and there are many programs that help this task (especially using OFFSET and RUBBER STAMPING in Adobe Photoshop).

But, what if you need to have an image-sequence tiled across a surface? How can you make a series of images look seamless? In this tutorial we will look at the various steps that need to be taken to achieve a seamless image sequence.

WISPY IMAGE

The example we will use here is a "wispy-like" image sequence. You might be wondering, why not just use a procedural? Well, there are a couple of reasons why image-sequences are sometimes preferable. First, procedurals can slow down rendering. The second reason is that image-sequences are really the only way to go for real-time 3D applications.

Besides using image-sequences for 3D purposes, they can also be used for real-time animations for various multi-media applications and web pages (wow your audience with a moving background from an animgif that has no seams!).

Okay, let’s get to work here. First thing we need is to make the wispy image. Just for the sake of speed and simplicity we’ll make a very basic cloud render in Adobe Photoshop.

Open up Photoshop. We will need to make a new image so go to the FILE menu and select NEW.

Here we will determine the size of the image we want to make. The reason why I want to make a cloud image is because Photoshop has a very easy way of making clouds. One of the bonuses of Photoshop’s clouds is the fact that if you make them at a horizontal and vertical size that is multiples of 128, they will automatically be seamless!

So if we make a new image at the size of 512 by 512 and render a cloud, it will be completely seamless, thus saving us the work of making one seamless image.

Set the width and height to 512 (figure 01). This will give us a nice square image,


Figure 01

Now we will add the cloud to the image. Let’s make this some dark foggy water, go to the tools palette and make the foreground color a dark blue. Make the background color black (if it isn’t already).

Go to the FILTER menu and select RENDER then CLOUDS (figure 02). You’ll see that you now have some blue and black clouds (figure 03). Keep hitting this filter a few times (Ctrl-F) to see the different cloud effects you can achieve. Stop when either you find a good looking one or when your fingers bleed.


Figure 02

Believe it or not, that’s it for the image! To make the image come alive, we need to take it into Lightwave and work some magic on it (or just some good thinking).


Figure 03

Save your cloud image as a Targa file named "wispy.tga".

MAKING THE OBJECTS

We need to first make an object to put the object onto. This is pretty easy to do, all we need is a square polygon.

Go into Modeler and select the OBJECTS tab and hit the BOX button. Hit "n" on the keyboard to bring up the numeric options for BOX.

We want to make a flat box with many segments facing the viewer. Input the settings in figure 04 and hit OK.


Figure 04

You will now see a blue outline of the box we want to make. Hit the "enter" key on the keyboard to make the object (figure 05).


Figure 05

Hit the "q" key and give it a surface name of "wispy". Save this object as "wispy01.lwo".

Great, there is our first object. The image map that we made in Photoshop will be mapped onto this polygon. Now we just need to mess with the points on this object to distort the image. Don’t worry, this will all make sense in a few more steps.

WARPING THE BOX

Copy this object into another layer. We need to deform this object. The fastest way is to select points and jitter.

Select all of the points inside the box, make sure not to select the points that are around the edges of the box (figure 06).


Figure 06

Go to the TOOLS tab and select JITTER. Input the settings in figure 07.


Figure 07

You will now see that the points inside the box are now moved around (figure 08).


Figure 08

You can stop at this point or move the points around some more by hand. I usually use the DRAG tool to enhance the jitter some more. Try exaggerating some areas and stretch other parts around (figure 09). Really look at the lines connecting the points and think of them as motion paths.


Figure 09

Hit the "q" key and give this object a surface name of "target". This object will eventually be used as a morph target and it is always a good idea to give morph targets their own surface names.

Save this object as "wispytg01.lwo.

SETTING UP THE OBJECTS

Now comes the fun part, making the wispy image come alive. Go to Layout and load both objects up. Also, load up "wispy.tga" into Layout.

Open the SCENE EDITOR and hit SHOW ALL OBJECTS AS TEXTURED SOLIDS. Close the SCENE EDITOR.

First thing we need to do is make "wispytg01.lwo" not visible to the camera. We only want its point information.

Go to the OBJECTS PANEL. Make sure "wispytg01.lwo" is the CURRENT OBJECT. Select the APPEARANCE OPTIONS tab and turn on UNSEEN BY CAMERA (figure 10). This will make this object completely invisible to the camera.


Figure 10

Close the OBJECTS PANEL and go to your CAMERA VIEW. Make "wispy01.lwo" the SELECTED ITEM. You’ll see your first object. The morph target object is now invisible. We do want to use the morph target though.

With "wispy01.lwo" selected, re-open OBJECTS PANEL. Select the DEFORMATIONS tab. Set MORPH AMOUNT to 100% and select "wispytg01.lwo" as the MORPH TARGET (figure 11).


Figure 11

What we have just done is force the points in "wispy01.lwo" to conform to the points of "wispytg01.lwo". If you go back to your CAMERA VIEW you will see that "wispy01.lwo" now looks like the morph target object.

PLACING THE IMAGE

Now let’s texture map the object. Go to the SURFACES PANEL and make "wispy" the CURRENT SURFACE. The color of the surface doesn’t matter because we will be using an image map.

Hit the "T" button next to SURFACE COLOR to bring up the COLOR TEXTURE panel. Here we will add the image to the object’s surface.

Set TEXTURE TYPE to PLANAR IMAGE MAP.

Set TEXTURE IMAGE to "wispy.tga".

Hit the AUTOMATIC SIZING button.

Set TEXTURE AXIS to Z.

See figure 12 for this setup.


Figure 12

Hit USE TEXTURE to close out this panel.

Close all panels and go to the CAMERA VIEW.

You will now see the image on the object and it looks slightly warped. The warping is caused by the points in the object being moved off of their original positions by the morph target. Let’s see how this affects the texture in motion.

MOVING AND WARPING

Go back to the COLOR TEXTURE panel for "wispy" (figure 12). You’ll see a button called ADD REFERENCE OBJECT. This button will make a null object that controls the placement of the image on the surface.

Hit this button and you’ll see the name "ref obj" as the TEXTURE REFERENCE OBJECT selection (figure 13) Hit USE TEXTURES and close all panels and go back to the CAMERA VIEW.


Figure 13

Now you will see a null object in the center of our object. Select it (if it isn’t already) and move it up and down on the Y axis. You will now see the image warp as it travels up and down the surface of the object. Pretty cool!

Okay, now that we did that, we need to get rid of that null object. We really do not want to use the null to control the motion for this example. Let’s go back to Go back to the COLOR TEXTURE panel for "wispy" again. Set the TEXTURE REFERENCE OBJECT to none (you can also just delete the null object). We will use the TEXTURE VELOCITY setting instead.

We want to move the image up on Y and make it cycle seamlessly through a set number of frames. The object is 1 meter tall (trust me, it is). If we want the image to move up the object in 20 frames all we need to do is figure out how far to move the image up per frame. The easiest way of doing this is to use Lightwave’s built in calculator.

Hit the TEXTURE VELOCITY button to bring up its panel. We want to move the image only on the Y-axis. We know that the object is 1 meter tall, so type in the Y field "1m". Next to it add "/20" so it looks like figure 14 . Hit "return" and you’ll see that 50mm is now the Y setting. What we have just done is divide 1 meter by 20 frames.


Figure 14

This example is pretty easy and you might be asking, "why not just use the reference null and move it up 1 meter for 20 frames?"

The reason why is that if you had a more difficult sized surface it is actually easier to just use this calculation method. Let’s say you have no idea how tall a surface is. Hit AUTOMATIC SIZING and use the resulting TEXTURE SIZE number for Y and place it into the TEXTURE VELOCITY’s Y field and do your calculations. This method is much more exact and prevents excess objects in your scene. It is also easier to adjust for different frame amounts.

Okay, close all panels and go back to your camera view. Cycle through the frames and you will see the texture moving.

Now all you have to do is render out the sequence. I would normally render out the full frame even with the empty areas and crop it later in a program like Photoshop. You can also crop in Lightwave before rendering by using LIMITED REGION in the CAMERA PANEL.

If you use LIMITED REGION, you need to scale the LIMITED REGION box down to the very edges of the box. If are not right on the edge, it will render the background or crop too much, thus defeating the whole seamless process. A safe thing to do for LIMITED REGION is to set the BACKGROUND COLOR to a bright pink or green. Set the LIMITED REGION box to as close to the edge as possible from the outside. Render a test and see if you see any background poking through. If you do, then carefully bring the LIMITED REGION edges closer to the object’s edges.

Click here to see quicktime movie
Quicktime Movie

The cycle should look something like the quicktime movie. All of the edges will match each other perfectly when tiled together. How? Because the image was seamless and we only moved the points inside the morph target object, we never affected the points on the edges of the box.

Well, I know this was a long tutorial for a fairly simple process, but I hope you picked up on a few "hidden" things in Lightwave that most people never use. You’ll find another example of this process to create seamless fire among other tutorials in my book LIGHTWAVE X-TREME. The book uncovers the hidden powers of LIGHTWAVE 3D.

Joshua Tsui is a game designer for Midway Games. Among his credits are the MORTAL KOMBAT games, WWF Wrestlemania, and NHL Open Ice. His new book LIGHTWAVE X-TREME is now available. For more information, go to http://www.lightwave-x-treme.com