shader.lua 799 B

1234567891011121314151617181920212223242526272829
  1. return lovr.graphics.newShader([[
  2. vec4 lovrmain() {
  3. return DefaultPosition;
  4. }
  5. ]], [[
  6. vec4 lovrmain() {
  7. vec3 lightPosition = vec3(0., 10., 3.);
  8. vec3 L = normalize(lightPosition - PositionWorld);
  9. vec3 N = normalize(Normal);
  10. vec3 cAmbient = vec3(.25);
  11. vec3 cDiffuse = vec3(.75);
  12. vec3 cSpecular = vec3(.35);
  13. float diffuse = max(dot(N, L), 0.);
  14. float specular = 0.;
  15. if (diffuse > 0.) {
  16. vec3 R = reflect(L, N);
  17. vec3 V = normalize(CameraPositionWorld - PositionWorld);
  18. float specularAngle = max(dot(R, V), 0.);
  19. specular = pow(specularAngle, 5.);
  20. }
  21. vec3 cFinal = pow(clamp(vec3(diffuse) * cDiffuse + vec3(specular) * cSpecular, cAmbient, vec3(1.)), vec3(.4545));
  22. return vec4(cFinal, 1.) * Color * getPixel(ColorTexture, UV);
  23. }
  24. ]])