 Just started tinkering with OSL. As a first exercise I wanted to make slope detection shader which allows to shade horizontal and vertical geometry with nice smooth falloff between the two (depending on the face angle). I did something wrong thou, because it’s not working.

Here is my current attempt:

``````color safe_mix(color vertical_color, color horizontal_color, float mixvalue)
{
return mix(vertical_color, horizontal_color, clamp(mixvalue, 0, 1));
}

color Vertical_Color = color(1,1,1),
color Horizontal_Color = color(0,0,0),
output color Color = 0,
)
{
float slope = ( atan( N / N )) * ( hypot( N, N ) / N );

Color = safe_mix(Vertical_Color, Horizontal_Color, slope);
}
``````

And the result:

My thougth process was to get theta angle of the normal N at the point P and use it as a factor in mixing two colors.
For math I used formula for Cartesian system conversion https://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates

I’m using official OSL manual and Zap Aandersson tutorials as guides.
Thanks for any help.