---
title: "Complex Fresnel shader"
canonical: "https://documentation.chaos.com/space/OSLShaders/113120436/Complex%20Fresnel%20shader"
format: markdown
---
Overview With the introduction of the  metalness  parameter to the  VRayMtl  material in V-Ray Next, this texture is obsolete. The metalness implementation in the VRayMtl material is more accurate and in addition it includes proper glossy Fresnel calculations for glossy surfaces. This shader can be used to render materials with complex index of refraction. The shader is used as a reflection color map in a  VRayMtl  material with the  VRayOSLTex  texture, with the  Fresnel  option of the V-Ray material turned off (this shader does its own Fresnel calculations). The site  http://refractiveindex.info/  has the measured n and k values for many materials like copper, gold etc. The shader file can be found here:  complex_ior.zip Parameters n  - the n values for the red/green/blue wavelengths (e.g. 0.65, 0.55 and 0.45 micrometers). k  - the k values for the red/green/blue wavelengths Shader code The shader code is below. complex_ior.osl 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 (e.g. 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 (e.g. 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);
}