↓ Zum Hauptinhalt springen

Rendering-Competition 02/03 - making of

Autor
Dominik Gummel

the beginning…
#

  • The first thing a did was to write me a handy perl-script for converting models from the widely used obj-format into my nff file format. To that time i didn’t know exactly what a scene I should model, but it seems clear that i wanted to use some of these nice Xfrog plants.

  • To use transparencies in textures, I implemented routines for reading and writing of png files (png is able to store an alpha channel).

This was my test-image for testing my converter and my textures with alpha-channel:

test-image with an xfrog plant and a texture with an alpha-channel
  • I implemented bump-mapping.

  • I read the book “texturing and modelling - a procedural approach” nearly complete to get firm with the techniques I needed to write my own procedural shaders. The basic stuff in procedural textures are noise- and fractal-functions, so I had to implement them first (the book with its sample code was a great help!).

My “hello-world” procedural-shader was a sky-shader:

my first sky

Not bad for the first one, but still heavy aliased….

  • My next shader was a water-shader (here still without reflections):
my water-shader
  • Now, I had to face the biggest problem: I hadn’t any modelling-experience before this computergraphics course, so it would be very hard for me to make some cool models on my own (in other words: inpossible, because time isn’t unlimited).

So I decided to use fractals to generate a terrain. At this point, I got for the first time a plan how my ready image should look like: an island with tropical plants and all around water.

I coded a tool which i called “terragen”, that generated a fractal terrain und saves it as (a lot of :-) rectangles in an nff-file. The tool was relatively easy write. The main difficulty lied in tweaking and playing around with the parameters for the generation function to get something out that looked like a real terrain.

This was my first pic I rendered with terrain-data generated from my tool:

my first fractal terrain… :-)

Looks funny, but not like a terrain. :-)

  • In “texturing and modelling - a procedural approach” are three functions shown which one can use to generate a fractal landscape. But there is realy nothing said how these functions must supplied with what arguments to get a cool landscape. So I had to find it out on myself…

My second try:

my second fractal try

Still not what i wanted…

You’ll find a lot of pics of this phase in my “gallery of funny pics”.

Several days later:

fractal terrain
  • On the above pic, you can see that my terrain had to be much more finer to look realistic. So I changed my tool the get the squares fine enough to look smooth. Now I can adjust how fine I want my terrain. This are two pics of the same input parameters, only the resolution of the altitude grid differs:
finer fractal terrain
still finer…
  • The first island:
my first island

The terrain looks good, but the coastline is still missing.

  • Now, I changed terragen to add a costline:
coastline

Nice, but the coast is still too flat. I added some noise to the x and z coordinates of the coastline.

  • Several days and cups of coffee later…
nice…
  • Now, I had a cool landscape. But an island without plants isn’t very cool… so I went on to code some automatic plant positioning into terragen. I give it a value for the sealevel, and it places me plants pseudo-randomly (as long as i don’t change the seed, random () will give terragen the same values every time) above the sea. Looks easy? In theory, yes.

But in practice, it took me a lot of time to get it working the right way and looking good. I also implemented a pseudo-random scaling of the height of the plants because it looked very boring to see 10 trees in a line with exactly the same heigth.

landscape with plants in the sea

Plants on the sea or in the air aren’t looking cool…

But finally, I got the right positions: :-)

plant positions ok
  • You can have an excelent procedural shader, but with the wrong parameters, your result will look bad. I moved on to tweak my water. The first thing I added was reflectivity, because in nature, the water gets his color from the reflections.

I further enhanced the original fBm (“fractional Browning motion”) function from the book with renderman style anti-aliasing. For this, I had to implement some functions I found in renderman like filterwidthp.

Now, the water looks ways better:

water with reflections
  • I made the ripples smaller to get it more realistic:
water with smaller ripples
  • I also played around with the parameters of my rock shader.

This version looks pretty cool, but unfortunatelly, it isn’t realistic.

rock: pretty cool pattern but not realistic…

Not bad, but looks somewhat noisy…

noisy rock

Finally, I chose this one. It looks like some sedimentary slick rock:

sedimentary rock
  • Some people mean that the green tree (a hawaiian coffee plant!) looks like a christmas tree… so I tweaked the parameters in terragen to make the palms higher and reduced the amount and size of the coffee plants:
the island with higher palms

and now… the final image!
#

the final image

click on the image to get the full-res version!

It took 41 minutes to render it on a 1.8 GHz Xeon (with 16 times supersampling)


Dominik Gummel

Last modified: Thu Jan 16 00:22:22 CET 2003