Shading based on a definable axis compared to the surface normal(slope shading) for any surface including subD:
The idea behind this it we want to compare the surface normal of an object being shaded in world space, realtive to an axis, mostl likely the Y. (Slope for things like mnts and snow and so on) We want something to return a 0-1 based on an angle of 0-90 from the Y. This is fed to a ramp which can drive anything.
Steps:
Create a directional light to define the axis to compare to. (This is not really needed and could be replaced by numerical values in the next node, but the light allows for easy manipulation if you are unsure of what axis you want to compare againts. By axis I mean vector)
Obviously make the lights intensity 0 and unlink it to all.
Create a Vector Product Node and set it to dot product and normalize output.
Connect the DirectionalLight.lightDirection to the input1 of the vector node.
Create a sampler info node.
Conenct the normalCamera of the sampler info to the input 2 of the vector node.
Connect vectorNode.output to an RGB to Lum node(so things look nicer "code wise" )
Conenct the outValue of the RGBLum node to the X (or any) input of a set range. Min 0 Max 1 Old Min 0 Old Max 1. Not sure that is logical but it works.
Connect outValue X of set range to the V of a ramp and feed that to a shader.
Rotate your Dircetional Light to -90 and you'll have shading comparing the surf norm to the Y axis, assuming Y up.
Not sure everything is logical or most efficient as I made this a while ago and just found it at 3am. But if it helps anyone, great 
I've tested it a decent amount and it works.
~Garret Gray