frag.glsl 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #version 450
  2. layout(location = 0) in vec3 FragPos;
  3. layout(location = 1) in vec3 VecPos;
  4. layout(location = 2) in vec3 Normal;
  5. layout(push_constant) uniform constants{
  6. layout(offset = 0) float maxY;
  7. layout(offset = 4) float minY;
  8. layout(offset = 8) float time;
  9. layout(offset = 12) float disco;
  10. };
  11. layout(location = 0) out vec4 outFragColor;
  12. void main()
  13. {
  14. float y = (VecPos.y - minY) / (maxY - minY);
  15. float c = cos(atan(VecPos.x, VecPos.z) * 20.0 + time * 40.0 + y * 50.0);
  16. float s = sin(-atan(VecPos.z, VecPos.x) * 20.0 - time * 20.0 - y * 30.0);
  17. vec3 discoColor = vec3(
  18. 0.5 + abs(0.5 - y) * cos(time * 10.0),
  19. 0.25 + (smoothstep(0.3, 0.8, y) * (0.5 - c / 4.0)),
  20. 0.25 + abs((smoothstep(0.1, 0.4, y) * (0.5 - s / 4.0))));
  21. vec3 objectColor = vec3((1.0 - y), 0.40 + y / 4.0, y * 0.75 + 0.25);
  22. objectColor = objectColor * (1.0 - disco) + discoColor * disco;
  23. float ambientStrength = 0.3;
  24. vec3 lightColor = vec3(1.0, 1.0, 1.0);
  25. vec3 lightPos = vec3(maxY * 2.0, maxY * 2.0, maxY * 2.0);
  26. vec3 ambient = ambientStrength * lightColor;
  27. vec3 norm = normalize(Normal);
  28. vec3 lightDir = normalize(lightPos - FragPos);
  29. float diff = max(dot(norm, lightDir), 0.0);
  30. vec3 diffuse = diff * lightColor;
  31. vec3 result = (ambient + diffuse) * objectColor;
  32. outFragColor = vec4(result, 1.0);
  33. }