Lights and Reflections Study

For the moment I have only explained a bit of what are the tools inside a 3D package. But as I may imagine (and I receive also some requests :-) you would like to achieve some results. Well, I think it's time to use some of the tools I've explained previously. I will teach you, in this article, some textures, lights, and the most important (for this image) the ray tracing. The good news is that you may reach the results with a lot of 3D packages, and it's not that complex (you will see).

First of all I will present you with want I tried to achieve, and then how you may reach the same result. Some of you have already seen this image (I did it on Dec 1999) but I think it's still interesting to explain how you can manage a result like this. The subject is a billiard table with some balls on it. You have maybe also seen an image extremely similar made a few years ago by another artist. I must admit it gave me the idea of remaking it and then writing this tutorial. Here's what will the final work will look like:

(click to enlarge)

Let us start. First we will make the base model without textures just to place the object on the screen. I stared with a cube resized to make a large and flat rectangle used to be the table. Then I put four spheres on the table (just touching the surface of the cube). The sphere should be made with quite a lot of polygons (I used 32 latitude and 64 longitudes, total 2048 faces) so when the image will be rendered you will have a nice and smooth sphere. I placed also a camera looking at those balls. You may have a look at the actual work:

(Click to enlarge)

OK, now lets work on the texture of the balls. I work with photoshop but the Gimp or whatever should get the same result. Textures on this image are extremely simple. We will have three different textures and maybe one bump map. You may take my texture if you want. The bump map will be done at the end as it is just a little improvement which is not mandatory. As everyone should know billiard balls should have a color and a number on it. You may have a stripe or not and there is a white ball. Well I will draw balls without the stripe. I did not remember which color is with which number so I will do it randomly :-) I create a color background on my painting program then add a filled circle on it (white) and finally I put the number (in black) on the center of the circle. The size I used for the texture is 500x500 but you may choose whatever size you want. Lets see the texture:

Ball 1, Ball 6, Ball 8

These textures are in JPG so you may have some artifacts... but it should work OK. I have also done a "white" texture which have the ivory color I use (I prefer ivory than white). OK now we must apply those textures on the sphere. I used a planar UV mapping so the texture passes through it. It's very simple to apply. Only one problem it will appear at the other side as mirrored so you have 2 time the number. But as this is a still image you will not notice this "bug". I used a shiny material for the ball and a green matte material for the table.

Now we should make the balls glossy and rotate them so they will be not in the same alignment. Let's see the difference.

We start with the gloss (I used a 50% reflective surface but you may change this) but it's still very poor. Why ? Because there are not a lot of things to reflect and there is actually no shadows. So we will change this to improve our image and achieve a better result. So I changed the defaults lights with something more appropriate. A spot light, quite intensive with a linear falloff casting shadows (with a shadow map with medium sharpness) just on the top of my balls, and a vertical infinite light with no shadow and a low intensity (for the global illumination).

This already gives a better result. It looks less artificial. But now we must add more reflections. The only way to do that if we use raytracing is to put objects around. And this is what we will do. As a first step I would like to have 4 squares as if there were a flourescent light above the billiard table. To do that I will just make 4 white planes with a constant shading and put them above the balls. Then I will create shapes like a neon sign with Coke or Bud or whatever you prefer. You can do it with a texture applied on a plane or by creating an object (I will create an object based on fonts). You must use a constant shading because all those object will not receive the light but will react as they was a light source (for the reflection but they will actually not act differently). Here I add a fake window, and change my lighting a bit.

(Click to enlarge)

And this is how it look like in my software:

(Click to enlarge)

OK ! I think we come to recognize my first image (at the top of the article). And looking back at my article I'm impressed how some of the small changes we have made may vary the image. Now we can add those last small things that may make this image really cool (IMO :^) ). As I told you before we may add some bump map to make the reflection less "perfect". Doing so you will archive a more realistic look. You may add also some people (make it very simple as it will be only a reflection) around our "table" and the final touch could be the motion blur of the white ball. But let see how to add the bump map. I did the bump map with my paint tool and applied to the balls. Not too bad for the first try :-)

(Click to enlarge)

The last think I will explain now is how to archive the motion blur effect. It's quite easy for me because my renderer handles it very well. You may do it without the need for special effects of the renderer. First of all, you must make an animation, let say that we want to make the white ball move, well I have I key frame system so I need a begin position and the end position at 2 different key frames so my renderer know what to do at each frame. Then I set the motion blur effect rendering option and it's all done. But you may also render each frames (the white ball moving) and then combine them on a painting program making the first the background and then staking them up with some transparency. The effect will be exactly the same as my motion blur if you set the transparency correctly and have enough frames. This can be quite boring. I know because I tried once to see how it will render :-).

Well all done now. I did not render this last step as it gave more or less the same result as the first image of the article... More or less because I have redone all the work just to explain it as well as possible. As ever don't hesitate to contact me if you want to receive more info on any step. I hope you enjoy this tutorial as much as I enjoyed making it.


Thanks to Cyanide for the help