Ancient History

I’m throwing in some of the old posts from the original page, not that they have much relevance to what I’m up to now but its kinda fun to look back to what I was playing around with.

Quantized Ocean

Recently I’ve been playing with some ocean surface simulation code based on the work of Jerry Tessendorf of Arete fame. The results are fairly realistic and naturally Id love to get it to the point where it looks as good as Arete. This sample image was rendered in Brazil and was set up so that the surface spans a 100m grid. Unlike implicitly evaluated functions, the ocean height field map is pre-calculated just like a regular bitmap so it is of limited resolution. Moreover, if you don’t interpolate between the samples you end up with discreet changes in height per pixel of the map. If the map is stretched out over a big enough area you can end up with something like the image below. Not what you want for a nice smooth ocean but neat all the same. For an image of what the result should look like I’ve added a Sphere to the gallery using the shader.

 

A Better form of Noise

Most noise procedurals including Perlin noise are based on the interpolation of values from an underlying lattice. Unfortunately, this lattice can sometimes show up as an artifact in the final image. One form of noise that doesn’t have this problem is Sparse Convolution Noise. It has a slightly different character than Perlin noise as can be seen in the image below. It also does a much better job at appearing organic and not displaying a regular structure as demonstrated in the turbulence version of the Perlin noise. The trade off for all these benefits is that it is considerably more expensive to compute. Though the speed hit is a possible downside I am planning on incorporating it as an option in some of the future plugins that I am developing.

 

Lunar

Thats no moon! Well not yet at least. At some point Max needs to have a nice Lunar shader. I hope someone else writes it so I don’t have too.

Distort

One of the fun things you can do with procedurals is to distort them based on another procedural. All the samples below use the same base procedural; in this case it’s my Turbulent map. The difference in the results comes from the procedural that has been used to distort the shader space. Actually any map procedural or bitmap can be distorted in this fashion.

 

MultiFractal

What can I say, Multifractals are cool!

 

Chunk

Just an idea I’m playing with.

 

Fiery

This is a test image of the Turbulent map I’m currently working on. As a still, it certainly has a nice fiery/billowy appearance.

The Good & The Ugly

Some days you’re code just doesn’t behave. In this case an early version of the SuperCell map was doing some strange things when used for displacement. Thankfully, its all better now.

 

The Bunny

Sometimes it’s not the appearance of the image but the content that’s what counts. This was a test for a .ply importer script that I wrote one afternoon with a friend at work. I had wanted to get a hold of some the test meshes that Stanford has used in their graphics department. Fortunately they provide them on the web. Unfortunately, none of the formats easily allowed me to get the data into Max. The solution was to write an importer. I later went on to convert the dragon and Buddha as well. Check out the Stanford 3d Scanning Repository for more information on the data.

 

Enough Samples?

Not every image works out as you would hope. This is especially true when you are working with alpha software. The results can be interesting though.

 

Opal

One of the nice things about the max material/map api is that it is close enough to Renderman that its not too tough to convert .sl over to something you can play with in Max. The image below was one of those conversions. Mark Allan was kind enough to hand me a copy of his Opal Renderman shader. The conversion was less than stellar and who knows maybe I’ll spend some more time with it. The cool part of the shader is that it modifies the normals to give the appearance of the flakes sitting below the surface. This image doesn’t do the effect justice but it look fairly cool when animated.

 

Bugs

Not always does your code work the first time. In fact, for most of the code I’ve worked on it rarely works at all the first time. That being said, sometimes you do get little gifts along the way. Both of the images below are the results of bugs. While not being what I intended they look interesting all the same. Sometimes bugs even turn into features, which can be thought of as serendipity in some eyes.

 

Lets make spots

This was the second attempt at a proceedural in Max. A bit more on this one later.

 

How it all began

I’ve been interested in procedural modeling and shading for as long as I’ve been doing computer graphics, i.e. around 1991. Having an artistic vs. programming background it took a bit of effort to finally break out the Max sdk and try some experimentation with the maps and materials. The sample below was the first thing I tried other than just getting something other than black to render out. I took the idea of the Top/Bottom material and turned it into a map. It allowed for the colors, blend position, fuzzy region and orientation to be specified. I don’t think I’ve touched it since, but I might dig it up again at some point.

For those interested in trying there hand at some shader writing I cant really say that Max is a great place to start but once you get the hang of it, it can be quite a bit of fun with some real hair pulling mixed in for good measure.