Dr. F. K. “Doc Mojo” Musgrave
Article originally written for 3D Artist magazine
MojoWorld was designed from the start to have the ability to do fantastic animations. You can make camera path animations very easily, but what’s not obvious is that you can also animate anything and everything else, if you know how. The ability to do so is hidden rather deeply in version one. I’m going to show you how to get at it.
First a little background. MojoWorld is pretty much 100% procedural. What does that mean? It means that everything is created by your computer on the fly, rather than by loading models in from the disk. The way things are created on the fly is by using procedures: small bits of program code that can evoke the desired effect. Almost everything in MojoWorld is created from procedural solid textures. Here “procedural” means that there’s no stored texture bitmap, only the procedure that can create texture. “Solid” means that the textures are three-dimensional: they can fill up space. It’s a powerful concept—rather than wallpapering bitmap textures onto surfaces, you simply evaluate the procedure at points on the surface. The result is like carving an object—like, for instance, a planet—out of a solid block of the texture.
Most things we deal with in 3D graphics are just that: three-dimensional. Hence procedural solid textures are generally implemented to operate over a 3D domain. But you can just as easily implement them to have one or two-dimensional domains. Or, if you’re clever, over a four dimensional domain! “Four dimensions?” you think, “What’s he on about?” Well, the fourth dimension can simply be time. To animate a solid texture without having it look like it’s just sweeping through space, you can sweep it through a higher dimension—the fourth dimension.
Pretty abstract, I know. Let me try to clarify. To see what 3D textures look like when swept through space to animate them, check out this little mpeg animation:
http://www.kenmusgrave.com/comet_leary.mpg
Looks pretty good; good enough that we used a little more advanced version to do some pretty great billowing volcanic clouds at Digital Domain for the movie “Dante’s Peak.” But if you look closely, you can see that as time passes each feature in the cloud is simply moving from the head of the comet to the tail. If we want to animate a billowing cloud that doesn’t do that, we can use a 4D solid texture and sweep through the fourth dimension.
In future versions of MojoWorld, we want to animate some subtle planetary effects like continental drift. So we built all of our solid textures to have a fourth dimension. In a future version, we’ll give you what we think is a “good” interface for animating these beasts. In version 1.0, you can start to do such animations in MojoWorld’s Pro UI, or Graph Editor interface. For a simple example, let me describe how to animate the waves on a MojoWorld ocean.

Figure 1. Waves on a MojoWorld ocean.
First, you want to fire up MojoWorld Generator and load the Jump File “3D_Artist_Summer_2001.mjw.” (You can get it off the MojoWorld CD or from the galleries on the Pandromeda web site). This will bring up the MojoWorld you see in figure 1. (You can do what we’re doing here with any MojoWorld that has an ocean.) Make sure you’re down close to the water. I like to look toward the sun when it’s down low, so that I get that nice sun-trail reflection going out to the horizon.

The MojoWorld Generator Interface.
If you’re not already there, go to the Generator
Interface. Select Global Parameters
, then the
water material icon.
Once in the
Material Editor, click the Circle-M next to Water Material. Its Control Stack
appears on the right. The first thing you should always do when you create a
new material or texture is give it a unique name. Do it first so you don’t
forget! Let’s name this new material “Ocean Water.”

A MojoWorld Material Editor.
On the Control Stack, click the semicircle next to Displacement and select Function Graph. This will launch you into the Forbidden City that is the Pro UI. Only the brave and the foolhardy venture here, as a rule! We’re going to build a very simple Function Graph that does something you just can’t do in the Generator Interface.*

A MojoWorld Graph Editor, as it first opens.
You’ll see that there’s a single node named Displacement in your nascent Function Graph. When we hook up some functions to that node, they will drive the water displacement, creating the water waves. Now go to the Menu Icon and select New Node.

Select something simple: a Monofractal node. Pop! It shows up in your Function Graph window. (To the left you see this node’s Control Stack, just like in the Generator Interface.) Left-click on the little spike on the bottom of the Monofractal node in the Graph Editor window and drag down to the spike on top of the Displacement node. A thin pipeline follows the cursor and presto! You’ve connected the output of Monofractal to the input of Displacement. It’s just that easy. But we have to configure the Monofractal node before it will do anything.
Go back to the Menu Icon and select New Node again. This time find and select a Spacetime node. This exotic little sucker returns the 3D world space position where the texture is being evaluated, just like the ubiquitous World Pos node, plus the animation time, to make a 4D input vector for Monofractal. I know, I know this dimension stuff is confusing at first, but stick with it and it will become second nature to you, I promise!
Connect the Spacetime node to the leftmost spike on top of the Monofractal node. Now Monofractal has the information is needs to do its job. But it still needs some internal configuring. Like, for instance, we have to select a Basis Function (sometimes called a “Noise” in other 3D software) before it can do anything.
This one place where MojoWorld really shines. We have more Basis Functions than any 3D software, bar none. Sure, the differences between a lot of them are very subtle, but having that kind of subtlety available is extremely important to having the control necessary to make you images look “just so.” If you get into investigating all of the available MojoWorld Basis Functions, expect that exploration to take months or even years. Hey, so far even Doc Mojo hasn’t had a chance to do more than verify that each works as intended! I expect to be plumbing the depths of their subtlety for years to come.
Now we must choose one. I like nice sharp ridges on my water waves, even though that’s not really very realistic. This means we should choose a Ridged Perlin or Voronoi basis. Hot tip: The former are must faster than the latter. Given that our favorite computer manufacturers are still struggling to give us machines that are really up to creating MojoWorlds, let’s go with a Ridged Perlin basis.
For reasons I won’t go into here (Darwyn Peachey explains this in detail our book “Texturing and Modeling: A Procedural Approach”), the best choice of a Perlin basis is “Value/Gradient.” So choose “Ridged Value/Gradient” from the list. Now Monofractal is creating a displacement. But you can’t really see it, because it’s too small! (Note: you’ll never see displacements to the water material in the RTR Window, at least not in MojoWorld 1.0, so you have to do renderings to see it all.)
We need to scale our wave size now. We do this by setting the Largest Feature Size field to 33.0. That gives us a maximum wavelength of about 100 feet. (Remember: the default unit of scale in MojoWorld is the meter, or about 3 feet.) We can make our smallest waves about the length of a cigarette by setting the Smallest Feature Size to 0.1. Let’s make the waves about 4 feet, or 1.2 meters, high. We do this by setting the Result Scale field to 1.2. Next, smooth the waves out a little by changing Roughness to 0.3.
Next we need to make what is by default a 3D procedural texture, a 4D texture. Do that by changing the ‘3’ in Input Domain to ‘4.’ It’s just that easy! Finally, we need to scale time differently than space. Select the Spacetime node and change the Time Scale field to 10.0.

The Function Graph Editor with the completed function graph.
Now we’re ready to go. The easiest way to see the fruits of your labor is to go to the Transporter Interface, fire up the Movie Editor, record a few seconds with the camera sitting still—the water will be moving—then render it. One final note: because we chose a “ridged” basis function to create our water waves, you’ll need to render your animations at the High or Maximum render quality settings, or you’ll probably see some nasty artifacts around the wave peaks. That’s because the micro-polygons that MojoWorld creates have to be tiny to resolve such sharp ridges adequately. If you choose a smooth basis such as Value/Gradient Perlin, you won’t have this problem.
You can hook any parameter in MojoWorld to time using the Time or Spacetime nodes in the Pro UI. The possibilities are endless! And in a future version, MojoWorld will have a user-friendly animation interface. “I promise.”
—Doc Mojo
* “Why not?” you ask. Well, part of the art of UI design is simplifying complex things. To build an elegant and usable UI, you simply have to trade power and flexibility for simplicity. That’s just the way it is, unfortunately.