Thankyou :) I am amazed at the difference! It makes it look so much more professional. And to think I once didn't like the idea of shaders...
I did find a crude way of only drawing the texture to pixels of certain depth. I add this to my VS output structure:
float Depth : TEXCOORD4;
..Then in the VS itself:
Output.Depth = Output.Position.z;
...and finally in the PS:
float4 baseColour = tex2D(TextureSampler, PSIn.TexCoords);
if (PSIn.Depth < 40.0f){
float4 detailColour = tex2D(DetailLinearSampler, PSIn.TexCoords*20.5);
baseColour *= detailColour * 2;}
It draws the detail texture for pixels within a certain distance of my camera, and since this 'sand' texture is quite subtle, it's not possible to see the boundary between the detail texture and the main texture. It works for now!