Guest User

Untitled

a guest
Jun 22nd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. #version 150
  2. #extension GL_ARB_shading_language_420pack : enable
  3.  
  4. uniform samplerCube tex0;
  5. uniform mat4 rotate;
  6. uniform float max_angle;
  7. uniform float src_mip;
  8. #ifdef HEMISPHERE
  9. uniform vec3 hemisphere_dir;
  10. #endif
  11.  
  12. in vec3 vec;
  13. in vec3 face_vec;
  14.  
  15. #pragma bind_out_color
  16. out vec4 out_color;
  17.  
  18. #define M_PI 3.1415926535897932384626433832795
  19.  
  20. float rand(vec2 co){
  21. return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
  22. }
  23.  
  24. void main() {
  25. vec3 accum = vec3(0.0);
  26. vec3 front = normalize((rotate * vec4(vec,0.0)).xyz);
  27. vec3 right = normalize(cross(front, vec3(0.0, 1.0, 0.0)));
  28. vec3 up = cross(front, right);
  29. float rand_val = rand(face_vec.xy);
  30. float total = 0.0;
  31. int num_samples = 3;
  32. for(int i=-num_samples; i<num_samples; ++i){
  33. float spin_angle = (float(i)+rand_val) * 2.0 * M_PI / (float(num_samples*2) + 1.0);
  34. vec3 spin_vec = up * cos(spin_angle) + right * sin(spin_angle);
  35. for(int j=-num_samples; j<num_samples; ++j){
  36. float j_val = float(j)+rand_val;
  37. float angle = sign(j_val) * pow(abs(j_val/(float(num_samples)+0.5)), 0.5) * max_angle;
  38. vec3 sample_dir = front * cos(angle) + spin_vec * sin(angle);
  39. float opac = cos(angle);
  40. #ifdef HEMISPHERE
  41. opac *= step(0.0, dot(hemisphere_dir, sample_dir));
  42. #endif
  43. total += opac;
  44. accum += textureLod(tex0, sample_dir, src_mip).xyz * opac;
  45. }
  46. }
  47. out_color.xyz = accum / total;
  48. out_color.a = 1.0;
  49. }
Add Comment
Please, Sign In to add comment