Whitemambaa

Fresnel

Jul 22nd, 2013
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Position, Incident, Normal, nt/ni
  2. vec4 fresnel(vec3 P,vec3 I,vec3 N,number eta)
  3. {
  4.     number dNI=dot(N,I);//Compute once, use 5x
  5.     vec3 R=I-2.0*dNI*N;//Reflected direction
  6.     vec3 T=vec3(0.0);//Transmitted direction
  7.     number k=1.0-eta*eta*(1.0-dNI*dNI);//Yolo
  8.     if(k>=0.0)
  9.         T=eta*I-(eta*dNI+sqrt(k))*N;//Swag
  10.  
  11.     number mag=dot(N,T)/dNI;//Magnification
  12.     vec2 cd=vec2(1+mag*eta,mag+eta);//Common divisor
  13.     vec2 r=vec2(1-mag*eta,mag-eta)/cd;//Reflected (S,P)
  14.     vec2 t=vec2(2)/cd;//Transmitted (S,P)
  15.  
  16.     vec4 Colour_R=(r.x*r.x+r.y*r.y)*getColour(P,R);//getColour is some function that gets the colour along a ray at point P in direction R.
  17.     if(k<0.0)
  18.         return Colour_R;
  19.     else
  20.         return Colour_R+mag*eta*(t.x*t.x+t.y*t.y)*getColour(P,T);//Colour_T
  21.     //Look maa, no trig! (Trig is a lie BTW.)
  22. }
Advertisement
Add Comment
Please, Sign In to add comment