use normal distance in distanceSurface
For zero distance, ignore user input and always make signed (requirement for zero-crossings to work at all).
Special treatment of surfaces with open edges (eg, an STL surface, a searchable disk etc): nothing reasonable for non-zero distances. For zero-distance, using the normal distance from the surface hitPoint instead of real distance to the surface hitPoint alleviates problems caused by rounding.