avatarAlphaF.glsl
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:2k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file avatarAlphaF.glsl
  3.  *
  4.  * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
  5.  * $License$
  6.  */
  7. #extension GL_ARB_texture_rectangle : enable
  8. uniform sampler2D diffuseMap;
  9. uniform sampler2DRectShadow shadowMap0;
  10. uniform sampler2DRectShadow shadowMap1;
  11. uniform sampler2DRectShadow shadowMap2;
  12. uniform sampler2DRectShadow shadowMap3;
  13. uniform sampler2D noiseMap;
  14. uniform mat4 shadow_matrix[6];
  15. uniform vec4 shadow_clip;
  16. uniform vec2 screen_res;
  17. uniform vec2 shadow_res;
  18. vec3 atmosLighting(vec3 light);
  19. vec3 scaleSoftClip(vec3 light);
  20. varying vec3 vary_ambient;
  21. varying vec3 vary_directional;
  22. varying vec3 vary_position;
  23. varying vec3 vary_normal;
  24. uniform float shadow_bias;
  25. float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl)
  26. {
  27. stc.xyz /= stc.w;
  28. stc.z += shadow_bias;
  29. float cs = shadow2DRect(shadowMap, stc.xyz).x;
  30. float shadow = cs;
  31. shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, scl, 0.0)).x, cs);
  32. shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, -scl, 0.0)).x, cs);
  33. shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, scl, 0.0)).x, cs);
  34. shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, -scl, 0.0)).x, cs);
  35. return shadow/5.0;
  36. }
  37. void main() 
  38. {
  39. float shadow = 1.0;
  40. vec4 pos = vec4(vary_position, 1.0);
  41. vec3 norm = normalize(vary_normal);
  42. //vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz;
  43. vec4 spos = pos;
  44. if (spos.z > -shadow_clip.w)
  45. {
  46. vec4 lpos;
  47. if (spos.z < -shadow_clip.z)
  48. {
  49. lpos = shadow_matrix[3]*spos;
  50. lpos.xy *= shadow_res;
  51. shadow = pcfShadow(shadowMap3, lpos, 1.5);
  52. shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
  53. }
  54. else if (spos.z < -shadow_clip.y)
  55. {
  56. lpos = shadow_matrix[2]*spos;
  57. lpos.xy *= shadow_res;
  58. shadow = pcfShadow(shadowMap2, lpos, 1.5);
  59. }
  60. else if (spos.z < -shadow_clip.x)
  61. {
  62. lpos = shadow_matrix[1]*spos;
  63. lpos.xy *= shadow_res;
  64. shadow = pcfShadow(shadowMap1, lpos, 1.5);
  65. }
  66. else
  67. {
  68. lpos = shadow_matrix[0]*spos;
  69. lpos.xy *= shadow_res;
  70. shadow = pcfShadow(shadowMap0, lpos, 1.5);
  71. }
  72. }
  73. vec4 col = vec4(vary_ambient + vary_directional*shadow, gl_Color.a);
  74. vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col;
  75. color.rgb = atmosLighting(color.rgb);
  76. color.rgb = scaleSoftClip(color.rgb);
  77. gl_FragColor = color;
  78. }