It doesnt matter what I change fac to. If fac is less than about .75, i get rock everywhere, if its greater than about 2, i get grass everywhere. If its between those values, i get varying blend strengths of grass and rock, but regaurdless of the strength, i still have grass halfway up the walls.
I need something more than Input.InNormal.y - this alone is obviously not enough information for the shader to correctly determine the normal of a given pixel. Its very close, but not quite.
The problem seems to lie with the border vertexes. Those vertex that are right where the geometry goes from mostly horizontal to mostly vertical. Its like the normal information for these is being returned incorrectly, or maybe my shader isnt reading it correctly.
Maybe i need to pass the normal from the vertex shader to the pixel shader as a COLOR instead of a TEXCOORD? I read in a couple places that people who were having problems getting a shader to work properly were able to fix the problem by changing the semantic of some one variable or other.
What other ways are there for there to be a disconnect between the reported normal in the shader and the visual normal on the screen?