REFRACT(3Cg)

NAME
refract - computes a refraction vector.

SYNOPSIS
  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
abs, cos, dot, reflect, sqrt