For those using jMonkeyEngine, I have got a detail mapping vert/shader that you can download from here:
http://endcraft.net/DetailShadersDetail map is the one used by L3DT.
For those who do not use jMonkeyEngine, the shader will probably still be of help to anybody using LWJGL or OpenGL, as it demonstrates the use of four samples of the detail map and applying it to the defuse colour, like so:
- Code: Select all
float tile = 80.0; //Amount texture is to be tiled
vec2 detTex = newTexCoord * vec2(tile);
vec4 diffuseColor = texture2D(m_DiffuseMap, newTexCoord); //Get the colour from the texture.
float detailMult = (diffuseColor.r + diffuseColor.g + diffuseColor.b) * 2.0; //This is here so that in black patches of terrain it will not be detail mapped, making it white.
if (detailMult > 1.0){
detailMult = 1.0; //Make sure that the detail mapping is not above 1.0.
}
float detailIntensity = 1.4; //Intensity of detail. Doesn't quite work as one might expect though.
vec4 detail = texture2D(m_DetailMap, detTex / vec2(0.5)); //Sample 1, for close-up detail
detail *= vec4(detailIntensity); //As most of the detail map is white, this will make a lot of it whiter than white.
vec4 detail2 = texture2D(m_DetailMap, detTex / vec2(1)); //Sample 2, for mid-range detail
detail2 *= vec4(detailIntensity);
vec4 detail3 = texture2D(m_DetailMap, detTex / vec2(2)); //Sample 3, for further detail
detail3 *= vec4(detailIntensity);
vec4 detail4 = texture2D(m_DetailMap, detTex / vec2(4)); //Sample 4, for far detail.
detail4 *= vec4(detailIntensity);
detail += detail2;
detail += detail3;
detail += detail4;
detail /= vec4(4); //Add all the intensities together and then divide by 4, giving the average.
vec4 detailColor = vec4(1.0) - detail; //Only recommended to use if you use the L3DT default detail map. Because "detail" can be greater than 1, 1 - detail can result in negative values, causing black spots - Which is desired.
detailColor *= detailMult; //Multiply the detail map by the amount you want to show. Basically, if it is black, you do not want the detail map making it looked speckled and white.
diffuseColor += detailColor; //Add detail colour to diffuse.
I am using it on a car game I am developing. The results change something like this:

To this:

Here's two other pictures:


Hope this helps someone. Feel free to email me (joehot200 at gmail.com) if anyone has any queries. Though I may take a while to get back to you.