preFilterSpecular_optimized.frag 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #version 150
  2. out vec4 FragColor;
  3. in vec3 v_localPos;
  4. uniform samplerCube u_environmentMap;
  5. uniform float u_roughness;
  6. uniform uint u_sampleCount;
  7. void main ()
  8. {
  9. float resolution_2;
  10. float totalWeight_3;
  11. vec3 prefilteredColor_4;
  12. vec3 V_5;
  13. vec3 N_6;
  14. vec3 tmpvar_7;
  15. tmpvar_7 = normalize(v_localPos);
  16. N_6 = tmpvar_7;
  17. V_5 = tmpvar_7;
  18. prefilteredColor_4 = vec3(0.0, 0.0, 0.0);
  19. totalWeight_3 = 0.0;
  20. resolution_2 = float(textureSize (u_environmentMap, 0).x);
  21. for (uint i_1 = uint(0); i_1 < u_sampleCount; i_1++) {
  22. float tmpvar_8;
  23. uint bits_9;
  24. bits_9 = ((i_1 << 16u) | (i_1 >> 16u));
  25. bits_9 = (((bits_9 & 1431655765u) << 1u) | ((bits_9 & 2863311530u) >> 1u));
  26. bits_9 = (((bits_9 & 858993459u) << 2u) | ((bits_9 & 3435973836u) >> 2u));
  27. bits_9 = (((bits_9 & 252645135u) << 4u) | ((bits_9 & 4042322160u) >> 4u));
  28. bits_9 = (((bits_9 & 16711935u) << 8u) | ((bits_9 & 4278255360u) >> 8u));
  29. tmpvar_8 = (float(bits_9) * 2.328306e-10);
  30. vec2 tmpvar_10;
  31. tmpvar_10.x = (float(i_1) / float(u_sampleCount));
  32. tmpvar_10.y = tmpvar_8;
  33. vec3 H_11;
  34. float tmpvar_12;
  35. tmpvar_12 = (u_roughness * u_roughness);
  36. float tmpvar_13;
  37. tmpvar_13 = (6.283185 * tmpvar_10.x);
  38. float tmpvar_14;
  39. tmpvar_14 = sqrt(((1.0 - tmpvar_8) / (1.0 +
  40. (((tmpvar_12 * tmpvar_12) - 1.0) * tmpvar_8)
  41. )));
  42. float tmpvar_15;
  43. tmpvar_15 = sqrt((1.0 - (tmpvar_14 * tmpvar_14)));
  44. H_11.x = (cos(tmpvar_13) * tmpvar_15);
  45. H_11.y = (sin(tmpvar_13) * tmpvar_15);
  46. H_11.z = tmpvar_14;
  47. float tmpvar_16;
  48. tmpvar_16 = abs(N_6.z);
  49. vec3 tmpvar_17;
  50. if ((tmpvar_16 < 0.999)) {
  51. tmpvar_17 = vec3(0.0, 0.0, 1.0);
  52. } else {
  53. tmpvar_17 = vec3(1.0, 0.0, 0.0);
  54. };
  55. vec3 tmpvar_18;
  56. tmpvar_18 = normalize(((tmpvar_17.yzx * N_6.zxy) - (tmpvar_17.zxy * N_6.yzx)));
  57. vec3 tmpvar_19;
  58. tmpvar_19 = normalize(((
  59. (tmpvar_18 * H_11.x)
  60. +
  61. (((N_6.yzx * tmpvar_18.zxy) - (N_6.zxy * tmpvar_18.yzx)) * H_11.y)
  62. ) + (N_6 * tmpvar_14)));
  63. vec3 tmpvar_20;
  64. tmpvar_20 = normalize(((
  65. (2.0 * dot (V_5, tmpvar_19))
  66. * tmpvar_19) - V_5));
  67. float tmpvar_21;
  68. tmpvar_21 = max (dot (N_6, tmpvar_20), 0.0);
  69. if ((tmpvar_21 > 0.0)) {
  70. float tmpvar_22;
  71. tmpvar_22 = (u_roughness * u_roughness);
  72. float tmpvar_23;
  73. tmpvar_23 = (tmpvar_22 * tmpvar_22);
  74. float tmpvar_24;
  75. tmpvar_24 = max (dot (N_6, tmpvar_19), 0.0);
  76. float tmpvar_25;
  77. tmpvar_25 = (((tmpvar_24 * tmpvar_24) * (tmpvar_23 - 1.0)) + 1.0);
  78. float tmpvar_26;
  79. tmpvar_26 = (12.56637 / ((6.0 * resolution_2) * resolution_2));
  80. float tmpvar_27;
  81. tmpvar_27 = (1.0/(((
  82. float(u_sampleCount)
  83. *
  84. ((((tmpvar_23 /
  85. ((3.141593 * tmpvar_25) * tmpvar_25)
  86. ) * max (
  87. dot (N_6, tmpvar_19)
  88. , 0.0)) / (4.0 * max (
  89. dot (tmpvar_19, V_5)
  90. , 0.0))) + 0.0001)
  91. ) + 0.0001)));
  92. float tmpvar_28;
  93. if ((u_roughness == 0.0)) {
  94. tmpvar_28 = 0.0;
  95. } else {
  96. tmpvar_28 = (0.5 * log2((tmpvar_27 / tmpvar_26)));
  97. };
  98. prefilteredColor_4 = (prefilteredColor_4 + (textureLod (u_environmentMap, tmpvar_20, tmpvar_28).xyz * tmpvar_21));
  99. totalWeight_3 = (totalWeight_3 + tmpvar_21);
  100. };
  101. };
  102. prefilteredColor_4 = (prefilteredColor_4 / totalWeight_3);
  103. vec4 tmpvar_29;
  104. tmpvar_29.w = 1.0;
  105. tmpvar_29.xyz = prefilteredColor_4;
  106. FragColor = tmpvar_29;
  107. }