gbuffer.vs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #START VS
  2. #version 330 core
  3. layout (location = 0) in vec3 in_position;
  4. layout (location = 1) in vec2 in_uv;
  5. layout (location = 2) in vec3 in_normals;
  6. layout (location = 3) in vec4 in_tangents;
  7. layout (location = 4) in vec4 in_color;
  8. layout (location = 5) in vec4 in_boneindex;
  9. layout (location = 6) in vec4 in_boneweights;
  10. layout (location = 7) in mat4 in_instancematrix;
  11. out vec3 frag;
  12. out vec3 normal;
  13. out vec2 uv;
  14. out mat3 TBN;
  15. uniform mat4 u_view;
  16. uniform mat4 u_projection;
  17. uniform mat4 u_bone_matrix[200];
  18. uniform bool u_has_skeleton;
  19. void main()
  20. {
  21. mat4 transform = in_instancematrix;
  22. if (u_has_skeleton == true) {
  23. vec4 boneindex = in_boneindex*255.0;
  24. vec4 boneweights = in_boneweights*255.0;
  25. mat4 skeleton = u_bone_matrix[int(boneindex.x)] * boneweights.x +
  26. u_bone_matrix[int(boneindex.y)] * boneweights.y +
  27. u_bone_matrix[int(boneindex.z)] * boneweights.z +
  28. u_bone_matrix[int(boneindex.w)] * boneweights.w;
  29. transform = transform * skeleton;
  30. }
  31. vec4 v = u_projection * u_view * transform * vec4(in_position, 1.0);
  32. gl_Position = v;
  33. normal = mat3(transpose(inverse(u_view * transform))) * in_normals;
  34. frag = vec3(u_view * in_instancematrix * vec4(in_position, 1.0f));
  35. uv = in_uv;
  36. // calculate tbn matrix for normal mapping
  37. vec3 T = normalize(vec3(u_view * transform * vec4(in_tangents.xyz, 0.0)));
  38. vec3 B = normalize(vec3(u_view * transform * in_tangents));
  39. vec3 N = normalize(vec3(u_view * transform * vec4(in_normals, 0.0)));
  40. TBN = mat3(T, B, N);
  41. }
  42. #END VS
  43. #START FS
  44. #version 330 core
  45. layout (location = 0) out vec3 Position;
  46. layout (location = 1) out vec3 Normal;
  47. layout (location = 2) out vec4 Colorspec;
  48. in vec3 frag;
  49. in vec3 normal;
  50. in vec2 uv;
  51. in mat3 TBN;
  52. uniform sampler2D u_texture;
  53. uniform sampler2D u_spec;
  54. uniform sampler2D u_norm;
  55. void main()
  56. {
  57. Position = frag;
  58. vec3 norm = normalize(normal);
  59. norm = texture(u_norm, uv).rgb;
  60. norm = normalize(norm * 2.0 - 1.0);
  61. norm = normalize(TBN * norm);
  62. Normal = norm * 0.5 + 0.5;
  63. Colorspec.rgb = texture(u_texture, uv).rgb;
  64. Colorspec.a = texture(u_spec, uv).r;
  65. }
  66. #END FS