Disclaimer: This seemed to work on mine
Ha ha.
Decided I wanted to add some noise to the "sterile" looking terrain textures. However, I did not want to lose (1) of the (3) textures for the terrain.
So, made a BW detailmap, put it in the alpha channel of one of the textures.
It takes some experimenting... but what doesn't?
Here is a pic before and after. I made it dark contrast for example.
Code:
//-----------------------------------------------------
// Ventilator's Terrain Multitexturing Shader
// Pixelshader 1.1-1.3 & Vertexshader 1.0
// Adding a "detailmap" into the alpha channel of a tex
// Modified to add a little detail noise to the rendered textures
// Experiment with the contrast of the "detailmap".
// Adding another MOV to the ps is probably not great, but.....
bmap alphamap = <four.tga>; // Blending map in alpha and blue channels
bmap detailtex = <shaledetail2.tga>; // Tileable tex in RGB and a BW detailmap in Alpha
material mat_terrain_multitexture
{
Skin1 = alphamap;
Skin2 = detailtex;
effect=
"
texture entSkin1;
texture entSkin2;
texture mtlSkin1;
texture mtlSkin2;
matrix matWorldViewProj;
matrix matWorld;
matrix matWorldView;
vector vecSunDir;
vector vecDiffuse;
vector vecAmbient;
vector vecLight;
vector vecFog;
vector vecSkill41;
technique multitextureps11
{
pass p0
{
texture[0]=<entSkin1>;
texture[1]=<mtlSkin2>;
texture[2]=<entSkin2>;
texture[3]=<mtlSkin1>;
alphablendenable=false;
magFilter[0]=linear;
minFilter[0]=linear;
mipFilter[0]=linear;
magFilter[1]=linear;
minFilter[1]=linear;
mipFilter[1]=linear;
magFilter[2]=linear;
minFilter[2]=linear;
mipFilter[2]=linear;
magFilter[3]=linear;
minFilter[3]=linear;
mipFilter[3]=linear;
zWriteEnable=true;
vertexShaderConstant[0]=<matWorldViewProj>;
vertexShaderConstant[4]=<matWorld>;
vertexShaderConstant[8]=<matWorldView>;
vertexShaderConstant[16]=<vecSunDir>;
vertexShaderConstant[17]=<vecDiffuse>;
vertexShaderConstant[18]=<vecAmbient>;
vertexShaderConstant[19]=<vecLight>;
vertexShaderConstant[20]=<vecFog>;
vertexShaderConstant[64]=<vecSkill41>; //(u_scale1, v_scale1, u_scale2, v_scale2)
vertexShaderConstant[65]=(20.0f,20.0f,0.0f,0.0f); // !NEW! -> (u_scale3, v_scale3, 0, 0)
vertexShaderConstant[95]=(0.0f,0.0f,0.0f,0.0f);
vertexShader=
decl
{
stream 0;
float v0[3]; //position
float v3[3]; //normal
float v7[2]; //uv
}
asm
{
vs.1.0
m4x4 oPos,v0,c0 // transform position to clip space
mul oT0.xy,v7.xy,c64.xy // output scaled uvs - stage 0
mul oT1.xy,v7.xy,c64.zw
mul oT2.xy,v7.xy,c65.xy // output scaled uvs - stage 1
mov oT3.xy,v7.xy // output uvs - stage 2
m3x3 r0,v3,c4 // transform normal to world space
dp3 r0.w,r0,r0 // renormalize it
rsq r0.w,r0.w
mul r0,r0,r0.w
dp3 r0,r0,-c16 // normal.light -> lighting constant
mul r0.xyz,r0,c17 // modulate against material diffuse color
add oD0.xyz,r0,c19 // add environment light
mov r1.w,c20.w // r1.w=1
dp4 r0,v0,c10 // distance to camera position
add r0,r0,-c20.x // distance-fog_start
mad r0.x,-r0.x,c20.z,r1.w // 1-(distance-fog_start)*(1/(fog_end-fog_start))
max oFog.x,r0.x,c95.w // clamp with custom max value
};
pixelShader=
asm
{
ps.1.1
def c0,1,1,1,1
tex t0 // Grass
tex t1 // Shale tex plus detailmap in alpha
tex t2 // Dirt
tex t3 // blending map
mov r1,t0
lrp r0.rgb,t3.a,r1,t1
+mov r0.a,c0
mov r1.a,t3.b
lrp r0.rgb,r1.a,r0,t2
+mov r0.a,c0
mov t1, t1.a //<<<< Move detail in alpha to rgb
add r0.rgb,r0,t1_bx2 //<<<< Apply "detailmap"
mul r0.rgb,r0,v0
};
}
}
";
}
starter mat_terrain_multitexture_init
{
bmap_to_mipmap(mat_terrain_multitexture.skin1);
bmap_to_mipmap(mat_terrain_multitexture.skin2);
}
action Shader_Terrain
{
my.skill41=float(20); //set the U tiling size of Tex 0
my.skill42=float(20); //set the V tiling size of Tex 0
my.skill43=float(30); //Set the U tiling size of Tex 1
my.skill44=float(30); //Set the V tiling size of Tex 1
///////////////////////////////////////
// Assign a suncolor in Map Properties
// for ex. 255, 255, 128
//
//////////////////////////////////
// Adjust these (4) values to your liking
// whether including Pass P1 or not
//
sun_angle.pan=86;
sun_angle.tilt=20;
my.ambient=40;
my.albedo=40;
my.unlit=on;
my.bright=off;
my.transparent = off;
my.material = mat_terrain_multitexture;
}