NAME
    refract - computes a refraction vector.

SYNPOSIS
      fixed3 refract(fixed3 i, fixed3 n, fixed eta);
      half3  refract(half3  i, half3  n, half  eta);
      float3 refract(float3 i, float3 n, float eta);

PARAMETERS
    i       Incidence vector.

    n       Normal vector.

    eta     Ratio of indices of refraction at the surface interface.

DESCRIPTION
    Returns a refraction vector given an incidence vector, a normal vector
    for a surface, and a ratio of indices of refraction at the surface's
    interface.

    The incidence vector *i* and normal vector *n* should be normalized.

REFERENCE IMPLEMENTATION
    reflect for float3 vectors could be implemented this way:

      float3 refract( float3 i, float3 n, float eta )
      {
        float cosi = dot(-i, n);
        float cost2 = 1.0f - eta * eta * (1.0f - cosi*cosi);
        float3 t = eta*i + ((eta*cosi - sqrt(abs(cost2))) * n);
        return t * (float3)(cost2 > 0);
      }

PROFILE SUPPORT
    refract is supported in all profiles.

    Support in the fp20 is limited.

SEE ALSO
    the abs manpage, the cos manpage, the dot manpage, the reflect manpage,
    the sqrt manpage

