- Dec 25, 2007
- 566
- 441
Here's how I built a cobblestone texture for my castle map (cp_siege). What I cover in here is the process of using free source photos to produce a TF2ish texture with a bump map. I don't go into the details of using photoshop (a screencast would be better for that), or of compiling vtfs, since that's already covered in other tutorials.
First I decided on the look I wanted. I was after rectangular, fairly even granite cobbles. Here was a nice reference image on flickr:
Starting from a photo is a good way to get a realistic-looking image: I was going to take some source photos myself, but my camera packed it in, so I hopped on over to cgtextures.com to find some suitable images. In particular, I was looking for a nice high-contrast picture. This one fit the bill quite nicely:
I cropped this down, edited it to be seamless, resized it to 1024x1024, and adjusted the levels and colours a bit:
I wanted the cobbles to look like granite, not sandstone, so it was off to cgtextures to find another source image:
I cropped and resized it, and tweaked the colours to get what I wanted:
I put this in a layer underneath the cobbles, and changed the cobbles layer to "Multiply" mode to get nice granite cobbles. Notice how a little of the texture of the original cobblestones has remained:
So the texture was shaping up well. I didn't like the black cracks, so I thought I'd find a source image to put dirt in the cracks. From cgtextures:
I cropped and resized this one down to fit:
I now needed to make the dirt only appear in the cracks between stones. So I copied the light cobblestones texture, increased its brightness and contrast, and blurred it slightly. This gave me a nice outline of the cobblestones:
Taking this, I inverted it and put it in a mask for the dirt, so the dirt was now only in the cracks:
You can see that the stones don't seem to stand out from the dirt at all. I added another layer with a black "inner glow" on the stones so they'd be better defined:
This is now almost right. It just looks a little to grainy and 'realistic'. I used the 'Artistic -> Dry Brush' filter to give it more of a painted look. I then tweaked the lightness a little as well. This is the final diffuse map:
Now for the normal map. To make this, I used Nvidia's photoshop plugin. This works from a variety of sources, but I find it works well if you make a heightmap indicating the different levels of the texture. Since the cracks are low and the bricks are high, I used the same outline image again for the heightmap:
Running it through the normal map filter, using the "Max (R, G, B)" conversion produced the normal map:
Now we need to put it together. First I resize the texture down to 512x512 (it doesn't need to be bigger), and then I make a simple VMT file:
After compiling the textures, here's how it looks in-game:
EDIT:
So, I revised the texture a little, following the advice given in comments on this thread; mostly rounding off the normal map edges, and adding some brush strokes:
And if anyone's interested, the PSD is available (7zipped, 18MB).
If you've got any questions about the details of a particular step, please ask.
First I decided on the look I wanted. I was after rectangular, fairly even granite cobbles. Here was a nice reference image on flickr:

Starting from a photo is a good way to get a realistic-looking image: I was going to take some source photos myself, but my camera packed it in, so I hopped on over to cgtextures.com to find some suitable images. In particular, I was looking for a nice high-contrast picture. This one fit the bill quite nicely:

I cropped this down, edited it to be seamless, resized it to 1024x1024, and adjusted the levels and colours a bit:

I wanted the cobbles to look like granite, not sandstone, so it was off to cgtextures to find another source image:

I cropped and resized it, and tweaked the colours to get what I wanted:

I put this in a layer underneath the cobbles, and changed the cobbles layer to "Multiply" mode to get nice granite cobbles. Notice how a little of the texture of the original cobblestones has remained:

So the texture was shaping up well. I didn't like the black cracks, so I thought I'd find a source image to put dirt in the cracks. From cgtextures:

I cropped and resized this one down to fit:

I now needed to make the dirt only appear in the cracks between stones. So I copied the light cobblestones texture, increased its brightness and contrast, and blurred it slightly. This gave me a nice outline of the cobblestones:

Taking this, I inverted it and put it in a mask for the dirt, so the dirt was now only in the cracks:

You can see that the stones don't seem to stand out from the dirt at all. I added another layer with a black "inner glow" on the stones so they'd be better defined:

This is now almost right. It just looks a little to grainy and 'realistic'. I used the 'Artistic -> Dry Brush' filter to give it more of a painted look. I then tweaked the lightness a little as well. This is the final diffuse map:

Now for the normal map. To make this, I used Nvidia's photoshop plugin. This works from a variety of sources, but I find it works well if you make a heightmap indicating the different levels of the texture. Since the cracks are low and the bricks are high, I used the same outline image again for the heightmap:

Running it through the normal map filter, using the "Max (R, G, B)" conversion produced the normal map:

Now we need to put it together. First I resize the texture down to 512x512 (it doesn't need to be bigger), and then I make a simple VMT file:
Code:
"LightmappedGeneric"
{
"" "cp_siege/vfig-cobbles"
"" "cp_siege/vfig-cobbles-normal"
"" "rock"
"%keywords" "tf"
}
After compiling the textures, here's how it looks in-game:

EDIT:
So, I revised the texture a little, following the advice given in comments on this thread; mostly rounding off the normal map edges, and adding some brush strokes:

And if anyone's interested, the PSD is available (7zipped, 18MB).
If you've got any questions about the details of a particular step, please ask.
Last edited: