matlighting.glsl 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. vec3 eY(vec3 eZ,float fc)
  2. {
  3. return exp(-0.5*fc/(eZ*eZ))/(eZ*2.5066283);
  4. }
  5. vec3 fd(vec3 eZ)
  6. {
  7. return vec3(1.0,1.0,1.0)/(eZ*2.5066283);
  8. }
  9. vec3 fe(vec3 ff)
  10. {
  11. return vec3(-0.5,-0.5,-0.5)/(ff);
  12. }
  13. vec3 fh(vec3 fi,float fc)
  14. {
  15. return exp(fi*fc);
  16. }
  17. #define SAMPLE_COUNT 21.0
  18. #define SAMPLE_HALF 10.0
  19. #define GAUSS_SPREAD 0.05
  20. vec3 fj(float fk,float fl,vec3 fm)
  21. {
  22. vec3 fn=vec3(fl,fl,fl);
  23. fn=0.8*fn+vec3(0.2);
  24. vec3 fo=cos(fn*3.14159);
  25. vec3 fu=cos(fn*3.14159*0.5);
  26. fu*=fu;
  27. fu*=fu;
  28. fu*=fu;
  29. fn=fn+0.05*fo*fu*fm;
  30. fu*=fu;
  31. fu*=fu;
  32. fu*=fu;
  33. fn=fn+0.1*fo*fu*fm;
  34. fn=saturate(fn);
  35. fn*=fn*1.2;
  36. return fn;
  37. }
  38. vec3 fv(vec3 fm)
  39. {
  40. return vec3(1.0,1.0,1.0)/3.1415926;
  41. }
  42. float fA(float fk,float fm)
  43. {
  44. return saturate(-fk*fm+fk+fm);
  45. }
  46. vec3 fB(float fk,vec3 fm)
  47. {
  48. return saturate(-fk*fm+vec3(fk)+fm);
  49. }
  50. float fC(float fm)
  51. {
  52. return-0.31830988618379*fm+0.31830988618379;
  53. }
  54. vec3 fD(vec3 fm)
  55. {
  56. return-0.31830988618379*fm+vec3(0.31830988618379);
  57. }
  58. vec3 eT(vec3 dO,vec3 dI,vec3 dP,float fE)
  59. {
  60. float C=1.0-saturate(dot(dO,dI));
  61. float fF=C*C;
  62. C*=fF*fF;
  63. C*=fE;
  64. return(dP-C*dP)+C*uFresnel;
  65. }
  66. vec2 fG(vec2 fH,vec2 fm)
  67. {
  68. fH=1.0-fH;
  69. vec2 fI=fH*fH;
  70. fI*=fI;
  71. fH=mix(fI,fH*0.4,fm);
  72. return fH;
  73. }
  74. vec3 ej(vec3 fJ)
  75. {
  76. #define c(n) uDiffuseCoefficients[n].xyz
  77. vec3 G=(c(0)+fJ.y*((c(1)+c(4)*fJ.x)+c(5)*fJ.z))+fJ.x*(c(3)+c(7)*fJ.z)+c(2)*fJ.z;
  78. #undef c
  79. vec3 sqr=fJ*fJ;
  80. G+=uDiffuseCoefficients[6].xyz*(3.0*sqr.z-1.0);
  81. G+=uDiffuseCoefficients[8].xyz*(sqr.x-sqr.y);
  82. return G;
  83. }
  84. void fK(inout vec3 fL,inout vec3 fM,inout vec3 fN,vec3 fJ)
  85. {
  86. fL=uDiffuseCoefficients[0].xyz;
  87. fM=uDiffuseCoefficients[1].xyz*fJ.y;
  88. fM+=uDiffuseCoefficients[2].xyz*fJ.z;
  89. fM+=uDiffuseCoefficients[3].xyz*fJ.x;
  90. vec3 swz=fJ.yyz*fJ.xzx;
  91. fN=uDiffuseCoefficients[4].xyz*swz.x;
  92. fN+=uDiffuseCoefficients[5].xyz*swz.y;
  93. fN+=uDiffuseCoefficients[7].xyz*swz.z;
  94. vec3 sqr=fJ*fJ;
  95. fN+=uDiffuseCoefficients[6].xyz*(3.0*sqr.z-1.0);
  96. fN+=uDiffuseCoefficients[8].xyz*(sqr.x-sqr.y);
  97. }
  98. vec3 fO(vec3 fL,vec3 fM,vec3 fN,vec3 fP,float fm)
  99. {
  100. fP=mix(vec3(1.0),fP,fm);
  101. return(fL+fM*fP.x)+fN*fP.z;
  102. }
  103. vec3 fQ(vec3 fL,vec3 fM,vec3 fN,vec3 fP,vec3 fR)
  104. {
  105. vec3 fS=mix(vec3(1.0),fP.yyy,fR);
  106. vec3 fT=mix(vec3(1.0),fP.zzz,fR);
  107. return(fL+fM*fS)+fN*fT;
  108. }
  109. vec3 em(vec3 fJ,float dQ)
  110. {
  111. fJ/=dot(vec3(1.0),abs(fJ));
  112. vec2 fU=abs(fJ.zx)-vec2(1.0,1.0);
  113. vec2 fV=vec2(fJ.x<0.0?fU.x:-fU.x,fJ.z<0.0?fU.y:-fU.y);
  114. vec2 fW=(fJ.y<0.0)?fV:fJ.xz;
  115. fW=vec2(0.5*(254.0/256.0),0.125*0.5*(254.0/256.0))*fW+vec2(0.5,0.125*0.5);
  116. float fX=fract(7.0*dQ);
  117. fW.y+=0.125*(7.0*dQ-fX);
  118. vec2 fY=fW+vec2(0.0,0.125);
  119. vec4 fZ=mix(texture2D(tSkySpecular,fW),texture2D(tSkySpecular,fY),fX);
  120. vec3 r=fZ.xyz*(7.0*fZ.w);
  121. return r*r;
  122. }
  123. float en(vec3 fJ,vec3 hc)
  124. {
  125. float hd=dot(fJ,hc);
  126. hd=saturate(1.0+uHorizonOcclude*hd);
  127. return hd*hd;
  128. }