Rhino #6: Almost Realistic Materials

This tutorial will focus on showing how to make almost realistic materials in Rhino, without use of any dedicated rendering plug-ins.

This tutorial will focus on showing how to make almost realistic materials in Rhino, without use of any dedicated rendering plug-ins. I say “almost” realistic because Rhino’s own rendering has a lot of limitations which makes it very incapable for any professional use. But on the other hand, it’s simple enough to show you basic concepts about materials that you can later apply when you decide to learn some of the very good rendering plug-ins such as VRay, Brazil or Maxwell.

For this tutorial, we will use the following Rhino file (it’s Barcelona Pavillion again, though):
Click here to download Rhino file for this tutorial.

When you open the file, you should see something like this:

1-start

If you try to render the pool scene, for example, you will see it’s all white, and no Sun. I turned off the light representing the Sun so that we could focus better on the quality of materials.

1-testwhite

This is what we’ll have in the end:

final-render-post-production :)But, patience!

Using Materials In Rhino

For now, all objects in Rhino are rendered in a default light gray material.
Let’s try now and change the material for that walls behind the statue.

Click to select that wall and then:

  1. Open Properties panel
  2. Click on a Material button (the paint tube icon)
  3. See that what we have is: Assign materials by Layer. Try clicking to see other options, but don’t change the value.
2-source

 

Assign Material By Object, Layer or Parent

Here we found out that there are different ways to assign material to an object:

This scene is set up so that all objects are assigned material by Layer, which is a recommended practice that makes scene organization better.

So now let’s click on Layers Panel to see what materials each layer uses. We will notice that all fields in Material column are empty, which means no Layer have been assigned any material yet (hence, the default rhino material that we see now).

2-default

 

Create A New Material

So let’s create a new material that our “Marble” layer will use:

2-addmat
  1. In Layers Panel, click on the empty “Material” field belonging to Marble layer.
    A new window will open, that will show the Default Material that this layer uses.
  2. Click  + to add new material. You will now be asked to select a material file to use.
2-selectmatte

You will see that Rhino offers you some already made materials (Metal, Plastic…) but let’s start from basic white material, and make marble ourselves.

Set Material Color

First what we want to do is change material name (1), call it Marble . Then change its color (2) to some dark/desaturated green, similar to what we have in the screenshot:

2-namecolor

Now what we see in the viewport is that the wall has changed its color:

2-greenwall

But that’s hardly good enough. In fact if we take a look at the real photo, we see that this wall has a very pronounced and characteristic marble texture:

2-photo

So let’s start by adding that kind of texture to our wall!

 

Textures

Materials are almost never of pure color: instead they have patterns that resemble “images” – such as the marble pattern above.
Textures (or texture maps, or maps) are the images we put on the 3d models so that they appear realistic.

A material can have many different textures that affect various different properties, but let’s now focus on the most important one: Color Texture.

 

What Do Textures Look Like?

Textures are always frontal views, without perspective, of a surface that has that material applied. An example of the texture we will use for this marble view, is the image I took from one of the photos of the actual pavillion, and then worked on it to remove any perspective:

2-map

You will find hundreds of textures in the collection of images I distributed to you in class via USB.
Also you should always be searching for better textures online, as well as take your own photos to make textures.

 

Adding Color Texture To Marble Wall

Some program call it “Diffuse” texture, some call it “Color” but it’s the same thing: it’s this “marble pattern” that we see.

Color (Diffuse) texture is the basic texture of a material, the one that gives it a color (or a color pattern).

An example of how a diffuse texture looks on a Sphere, making it looks like a planet:

3-diffusetext

Ok, so let’s finally add the marble texture to marble material:

  1. Open Materials Panel (for example via the icon in Render Tools Tab).
  2. Select our Marble material (should be the only one actually!)
  3. Under Textures > Color click on “empty-click to assign“.
  4. You will then be asked for an image file. Find the marble_diffuse.jpg which should be in Textures folder, in the same location where you unpacked the .zip file for this class.
3-assigntex

Cool, so now that we assigned the Color texture to our material, we should see this texture on our wall.
Awesome… Wait… What? Why does this look so distorted?!?!

3-nouvw

Well the thing is, we didn’t tell Rhino how exactly we want to position our texture on the wall.
We will use a technique called UVW Mapping for this.

UVW Mapping

UVW mapping is one of the most important things that you always need to do to your models whenever they use a texture.

UVW mapping tells our program how big the texture should be on the object, and h0w it aligns with the object.  

To understand what I mean by UVW mapping, take a look at this wall, in 4 different versions:

3-brick

They all use the same texture (see below), but the way that texture is applied to the wall greatly affects its realism.
This is the texture:

3-bricktex

So in order to correctly position this texture on the wall, UVW Map is used.

UVW Map defines:

Assign UVW Map To Marble Wall

Now let’s get back to our model, and assign UVW mapping to all marble walls in our scene, to define how our texture should align with them.

  1. In Layers Panel, right-click the Marble Wall layer and
  2. select “Select Objects“. This will select all objects that belong this layer. We want to change UVW map for all objects at once.
  3. Then open Properties Panel.
  4. Within, open UVW Mapping Icon (red chequered icon).
  5. Click Apply Box Mapping.
3-adduvw

Now before you go on, a slight digression, to explain you what a Box Map is.

Box Mapping

Imagine we have a white wall, and are projecting a brick image on this wall from 6 projectors – each projector from one side of a “imaginary” box:

3-uwvill

This would give illusion that our wall is made of brick, because it will have an image of bricks projected on it from all 6 sizes.
This is how Box Mapping works.

We project the image on our object (which doesn’t have to be a box!) from 6 sides, as if an “imaginary” box of projectors.
So what we need to do is define the size of that UVW Box (width, length, height) and its position, in order to make our map (image) fit neatly on our object.

Here’s how to do that (assuming you’ve just pressed Apply Box Mapping, in the previous step of the tutorial):

  1. Take a look at command line: Rhino will ask you for box origin, so click in the bottom corner where the two walls meet. Use Object Snap for that!
  2. Then Rhino will ask us for to click on another point to define width and height of the UVW box- the same as if we were drawing a new box object. We can enter following in the command line:
    r-4,-4,0
    This means that our box will have width and height of 4m.
  3. Then, Rhino asks us for box height, or we can click on a model to define height. Click on the top corner where two walls meet (using Object Snap).
  4. Finally, Rhino asks us if we want to “Cap” the box (meaning do we want a projector from Top and Bottom too, or only from the 4 sides?). Let’s say Y (yes) to that!

Here’s how our model will look now:

3-mapped

That’s pretty damn close to the photo!

All this in a video:

How Do We Know The Map Size?

Well, take a look at our texture (left), and the photo (right).

Our texture has “2 tiles horizontally, and 3 tiles vertically“.

If we look at the photo, we see that basically 2 tiles horizontally almost covers entire pool (but not quite so), while 3 tiles vertically is exactly the height of the wall. I highlighted that in yellow. Now you see a “good” size of our texture.

3-comapresize

Now in Rhino we can measure the distance between the pool edge and the corner, and we see it’s 4.4m.
Since our map is slightly “shorter” than this distance, we can estimate it’s length is 4m. That’s why we put “r-4,-4,0” as a second point of our box (4x4m to the left, relative to origin point: the wall corner).
The height of the map is completely defined by the height of the wall (that’s why we clicked on the top of it to define its height):

All this illustrated, the reference distance in white, and our UVW box map in yellow (see how it’s exactly 2×3 tiles big).

3-calc

Now let’s create a travertine stone floor material, and add UVW Map for that.

Mapping Stone To Floors And Walls

Everything is the same, first we create a Travertine material for the following layers  Walls > Travertine, and Floors.

First we click to Walls > Travertine‘s layer and select + NEW to create new layer from White Matte (all same as when making a marble).

Then:

  1. Give it a name “Travertine Stone”
  2. Assign travertine_diffuse.jpg as a Color Texture (it’s in the same folder as Marble texture).
  3. Click OK to all to save new material.
  4. Then click on Floors layer’s material and set it to Travertine Stone, too.

Now we’ll have this, which means we need to set the UVW maps for this, too:

5-travertbad

Now let’s tree to decide how big our travertine map is going to be, before we add Box Mapping to this.

This is the map, 3×3 tiles:

5-1travmap

From another photo, we can assume the height of the map should be the same size as the height of the wall, which is 3.3m:

5-4dist2

Now we can get another dimension from the proportions of the texture image.
Our texture  has size of 1817 x 835px (check Image Size in Photoshop).
That means we can set up following proportion (remember high-school math?):

1816 : 835 = x : 3.3

x = 3.3 * 1816 / 835  = 7.2m (approximately).

So let’s:

Video? Yes:

You will see near the end of the video, that I’ve selected Floors objects, and then changed UVW Repeat values from 1 to 2. This is because I noted on the photo that the floor tiles are smaller than the wall ones, and simply (without any calculations) decided they need to be half a size of the wall one.

UVW Repeat means that the image will be -within the defined UVW box- repeated several times (in a case of floor objects, two times):

5-5-uvwrepeat

Note the difference in size (exactly 50%) between floor and wall tiles. That’s because for floor tiles we’ve put repeat = 2 (see arrow 1). Also note other properties in this panel, especially the size of the box we just specified (arrow 2). We can change here the size, repeat, even rotation of the map.

If we now try to render our Statue view, we will get to see our new materials making quite a positive impact on the realism of the image:

5-z-render

Now probably the biggest improvement could be made by adding water!

Water: Gloss, Reflection and Bump

Now let’s first take a look at the photo again, and see how do we see the water:

2-photo

Cheating Time: Not a Transparent Water!

We all know the water is transparent, so we can probably assign the transparent material to water and we’re done, right?

Yes, but we can save us a lot of time if we really just looked at the photo, without knowing what water is.
Just look at nature.

Now it looks like it’s a black material, very reflective, and has some sort of tile just barely visible.

So this is the material we will make, not a real water, but the fake pool water:

Let’s click on Water layer‘s empty material spot, and create the following material:

6-1-wat
  1. Click the Water layer’s material slot
  2. Create new material …
  3. … called Water Pool
  4. Color: Very dark desaturated green-ish.
  5. Move Gloss Finish to 98%
  6. Move Reflectivity to around 50%

These two new properties define glossiness and reflectivity of the material.

Glossiness in Rhino defines how smooth the surface is… in a way… so rough surfaces like rough stones should have very low Gloss finish, while polished surfaces should have high. Same as water… Very high.

Reflectivity defines how much reflection will material show.

Usually in more advanced rendering packages these values refer to something that is really nature-like and can be controlled with great accuracy. With Rhino, it’s usually the test-and-try method…

So with these values we get the following image:

test-water

Which is not so shabby, but let’s try to give it a more life-like experience.

In fact, let’s change this so that the water pool’s floor is made of pebbles.

Add as a Color Texture: pebbles.jpg that you will find in the same Textures folder.

6-2-pebbles

Now we see the Pebbles are too big because we didn’t define UVW Map.

UVW Map the Water (as UVW Plane)

Now let’s define the UVW mapping for the water, same way as we did before.
The only difference is that we don’t need a Box Mapping because our object is planar, so UVW Plane will be good enough.

Let’s see this all in a video:

Now if we do a Render Preview, we see the rocks are too visible:

test-water-rocks

So we will tune down the percentage of Color Texture of Water Pool material to 25%, and lo and behold the effect:

6-3-pebblesgood

Now it looks like we have a shallow water pool with rocks on the bottom.
What we really have is a dark reflective material that has a bit of a rock texture on it (25%). But most of the material color is made from the dark color we gave it.

 

Adding Waves: Bump Map

Let’s add one final touch to this master piece: let’s assume the water has a bit of waves.
Among other things, waves will distort the reflection!

To add “distortions” to surfaces, we use Bump Texture. Bump maps are usually greyscale images that contain the information about the surface roughness: black areas will be pushed “inside surface” while white areas will be “out”.

Note how bump maps usually look like:

6-4-bumpmaps

So we’ll add to Bump Texture of our Water Pool material an image water_bump.jpg (same folder as the rest).
Also lower down the bump to some 10% to avoid water being too disturbing.

But we can see that our water texture is too big for our UVW Map, so the waves resulting too small (arrow 3)

6-5-waterb
How do we make the waves “bigger” without making the rocks bigger, too?
Instead of modifying UVW Plane, we can change how each of the textures is repeated.
Click on water_bump text to open Texture properties.

Now in Repeat, put 0.25 and 0.25.
Take a look, we’ve just made our waves 4 times bigger!

6-5-waterrepeat

So now if we render, we can see a very realistically distorted reflection of the statue:

test-water-bump

But one thing that really gets me on my nerves is that travertine line between the marble wall and the pool, where in “real-life” there is a black line. So let’s make it black!

 

Assing Material Directly To Object

We will select this problematic object, and:

Here’s how, a video:

Please note in video that in one moment I made mistake: all 4 sides became black, but I still wanted left side to be of Travertine tile. So I selected the left surface of that object and detached that surface from the rest of the object using “Extract Surface” command. That resulted in a new object (left edge of the pool), and I set its material back to “By Layer” which reverted its material to Travertine again.

So the render finally shows elegant black line as the contact between the marble and the water:

test-black-line

 

Create Chrome Metal

Yes, the one for the window frames (Win Frame layer).

Make it with settings displayed here, and you’ll get the following result:

7-1-chrome

Now that’s not bad, although the metal looks too polished when compared to the real photo, where reflections are more “blurred”.  But how do we get blurred reflections like the brushed chrome on the photos?

Well, we don’t get them with the default Rhino render.

I mean, we can try to simulate brushed chrome, by adding a very small bump map, which is what really happens with brushed materials in real life: the microscopic irregularities make a blurred reflections on my MacBook brushed aluminium sorface, for example.

Here’s a quick test I made by adding Noise.jpg as a Bump Texture with only 1%!
Also note that UWV Box is only 25cm big (0.25m):

7-2-brushed

This maybe looks more realistically like brushed chrome, but there is a noise that we can’t get rid of easily.

So I think it’s not worth it. We can blur these in Photoshop, if really necessary…

 

Glass

Glass is usually the most difficult material to simulate because of its peculiar characteristics, as well as great variety of different glasses. So far we had Glass layer hidden, and that’s often the best we can do.

But let’s try and assign the Glass material that comes with Rhino to Glass Layer.
(Glass material is in the Transparent folder)

8-1-glass

Easy, right?
The only thing is when we render preview, we can’t really see the difference:

test-glass

Well that’s what usually happens with glass, that’s why often we need to tweak it in Photoshop.
But in this image, the glass is not that visible, anyway.

So let’s just do the final round of tuning…

Final Tuning

We’ll do several things to round up our scene:

8-stones

This will add some reflectivity to both stones, and bump map to our Travertine Tiles:

Now we can hit the final render… Note the reflections on stone materials:

final-render

That was not bad for such a limited rendering engine.

Of course, you know I’ll try to pimp this image in Photoshop to make it more exciting:

final-render-post-production

How’s this done?

Look for final_render.psd in the Render folder (where you extracted the .zip for this exercise)!

OOOOOokkkkkk…. This is pretty much all about Rhino’s materials…

 

 

Any questions?

Leave a Reply

You must be logged in to post a comment.