Surface Wave Optics
Surface Reflection
The ocean surface is considered to be a perfect specular reflector. When rendering a the ocean surface across a long distance the waves farther away from the eye point can seem have diffuse reflection. This effect is directly related to the size and distance from the eye point of the wave. Polarization effects are generally ignored.
Polarization - A peculiar affection or condition of the rays
of light or heat, in consequence of which they exhibit different properties in
different directions. definition from www.dictionary.com
After a light ray hits the water surface it is either reflected back up into the air or transmitted through the water surface. The intensity of either of these two rays is determined by coefficients.
Reflection
In the case of perfect specular reflection the reflected ray and the incident ray have the same angle with the surface normal.
Transmission (Refraction)
The direction of the refracted ray is determined by the surface normal, the direction of the incident ray, and Snell's Law which states a relationship between the incident ray and the refracted ray and the indices of refraction for the two materials.
Snell's Law
n_i * sin(theta_i) = n_t * sin(theta_t)
Fresnel Reflectivity and Transmissivity
Reflectivity + Transmissivity = 1
R + T = 1
Graph of Reflectivity as a function of the angle of incident relative to the wave surface normal
![]() |
|
| Reflectivity for light coming from the air down to the water surface. | Reflectivity for light coming from below the water surface. |
Total Internal Reflection - when light comes from below the water surface with an incident angle below roughly 41 degrees, reflectivity is one and transmissivity is equal to zero. Brewster's angle is the angle where total internal reflection ocurrs.
Renderman Shader
Renderman has a built in Fresnel function that returns Reflectivity, Transmissivity, Reflection Vector, Transmission Vector with inputs Surface Normal, Incident Direction Vector, and Index of Refraction.
Color is a combination of light coming down onto the surface with the sky color and light coming upward from the ocean with the water color.
![]() |
surface watercolorshader( color upwelling = color(0.02, 0.20, 0.5), color sky = color(0.23, .32, 0.45), float nSnell = 0.75; ) { point nhat_R, nhat_T; float transmission, reflectivity; float tran, ref; vector nI = normalize(vtransform("world",I)); vector nN = normalize(vtransform("world",N)); vector nNf = normalize(faceforward (nN,nI));
/* Get reflectivity for downward case */ fresnel(nI, nNf, nSnell, reflectivity, tran, nhat_R, nhat_T);
/* Get transmissivity for upward case */ fresnel(-nI, nNf, 1.0/nSnell, ref, transmission, nhat_R, nhat_T); Oi = 1; Ci = transmission * upwelling + reflectivity * sky ; }
|
Jeff Alcantara 2003