glsl - Serbipunk/notes GitHub Wiki

float invert_value_ifless(in float value)
{
float sign_value = sign(value);
float sign_value_squared = sign_value*sign_value;
return sign_value_squared / ( value + sign_value_squared - 1.0);
}

https://stackoverflow.com/a/38077752/22550824

0 : sv=1 svs=1 return 1/(1+v+1) < 0 : sv=-1 svs=-1 return 1/(1+v-1) = 0 : sv=0 svs=0 return 0 / (0 - 1)