geometry.frag 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* geometry.frag -- Fragment shader used for rendering in G-buffers
  2. *
  3. * Copyright (c) 2025-2026 Le Juez Victor
  4. *
  5. * This software is provided 'as-is', without any express or implied warranty.
  6. * For conditions of distribution and use, see accompanying LICENSE file.
  7. */
  8. #version 330 core
  9. /* === Includes === */
  10. #include "../include/blocks/view.glsl"
  11. #include "../include/math.glsl"
  12. /* === Varyings === */
  13. smooth in vec2 vTexCoord;
  14. flat in vec3 vEmission;
  15. smooth in vec4 vColor;
  16. smooth in mat3 vTBN;
  17. smooth in float vLinearDepth;
  18. /* === Uniforms === */
  19. uniform sampler2D uAlbedoMap;
  20. uniform sampler2D uNormalMap;
  21. uniform sampler2D uEmissionMap;
  22. uniform sampler2D uOrmMap;
  23. uniform float uAlphaCutoff;
  24. uniform float uNormalScale;
  25. uniform float uOcclusion;
  26. uniform float uRoughness;
  27. uniform float uMetalness;
  28. /* === Fragments === */
  29. layout(location = 0) out vec3 FragAlbedo;
  30. layout(location = 1) out vec3 FragEmission;
  31. layout(location = 2) out vec2 FragNormal;
  32. layout(location = 3) out vec3 FragORM;
  33. layout(location = 4) out vec2 FragGeomNormal;
  34. layout(location = 5) out float FragDepth;
  35. /* === User override === */
  36. #include "../include/user/scene.frag"
  37. /* === Main function === */
  38. void main()
  39. {
  40. SceneFragment(vTexCoord, vTBN, uAlphaCutoff);
  41. mat3 TBN = mat3(TANGENT, BITANGENT, NORMAL);
  42. vec3 N = normalize(TBN * M_NormalScale(NORMAL_MAP * 2.0 - 1.0, uNormalScale));
  43. vec3 gN = NORMAL;
  44. // Flip for back facing triangles with double sided meshes
  45. if (!gl_FrontFacing) N = -N, gN = -gN;
  46. FragAlbedo = ALBEDO;
  47. FragEmission = EMISSION;
  48. FragNormal = M_EncodeOctahedral(N);
  49. FragGeomNormal = M_EncodeOctahedral(gN);
  50. FragORM = vec3(OCCLUSION, ROUGHNESS, METALNESS);
  51. FragDepth = vLinearDepth;
  52. }