Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: grammar

...

Section
Column
width100%

Parameters

 


n - the n values for the red/green/blue wavelengths (fe.eg. 0.65, 0.55 and 0.45 micrometers).

k - the k values for the red/green/blue wavelengths

Section
Column
width100%

Shader code


The shader code is below.

Code Block
languagecpp
titlecomplex_ior.osl
linenumberstrue
float fresnel(float n, float k, float c) {
	float k2=k*k;
	float rs_num = n*n + k2 - 2*n*c + c*c;
	float rs_den = n*n + k2 + 2*n*c + c*c;
	float rs = rs_num/ rs_den ;
	
	float rp_num = (n*n + k2)*c*c - 2*n*c + 1;
	float rp_den = (n*n + k2)*c*c + 2*n*c + 1;
	float rp = rp_num/ rp_den ;
	
	return clamp(0.5*( rs+rp ), 0.0, 1.0);
}
	
shader complex_ior (
	vector n=vector(0.27105, 0.67693, 1.3164) [[ string description = "Refractive index for red, green, blue wavelengths (fe.eg. for 0.65, 0.55, 0.45 micrometers)" ]],
	vector k=vector(3.6092, 2.6247, 2.2921) [[ string description = "Extinction coefficient for red, green, blue wavelengths (fe.eg. for 0.65, 0.55, 0.45 micrometers)" ]],
	output color Col_Out = color(0.5)
)
{
	float thetaCos = abs(dot(-I,N));
	float red=fresnel(n[0], k[0], thetaCos);
	float green=fresnel(n[1], k[1], thetaCos);
	float blue=fresnel(n[2], k[2], thetaCos);
	Col_Out=color(red, green, blue);
}