reflectionFunction.fx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. vec3 computeReflectionCoords(vec4 worldPos, vec3 worldNormal)
  2. {
  3. #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
  4. vec3 direction = vDirectionW;
  5. float t = clamp(direction.y * -0.5 + 0.5, 0., 1.0);
  6. float s = atan(direction.z, direction.x) * RECIPROCAL_PI2 + 0.5;
  7. #ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
  8. return vec3(1.0 - s, t, 0);
  9. #else
  10. return vec3(s, t, 0);
  11. #endif
  12. #endif
  13. #ifdef REFLECTIONMAP_EQUIRECTANGULAR
  14. vec3 cameraToVertex = normalize(worldPos.xyz - vEyePosition.xyz);
  15. vec3 r = reflect(cameraToVertex, worldNormal);
  16. float t = clamp(r.y * -0.5 + 0.5, 0., 1.0);
  17. float s = atan(r.z, r.x) * RECIPROCAL_PI2 + 0.5;
  18. return vec3(s, t, 0);
  19. #endif
  20. #ifdef REFLECTIONMAP_SPHERICAL
  21. vec3 viewDir = normalize(vec3(view * worldPos));
  22. vec3 viewNormal = normalize(vec3(view * vec4(worldNormal, 0.0)));
  23. vec3 r = reflect(viewDir, viewNormal);
  24. r.z = r.z - 1.0;
  25. float m = 2.0 * length(r);
  26. return vec3(r.x / m + 0.5, 1.0 - r.y / m - 0.5, 0);
  27. #endif
  28. #ifdef REFLECTIONMAP_PLANAR
  29. vec3 viewDir = worldPos.xyz - vEyePosition.xyz;
  30. vec3 coords = normalize(reflect(viewDir, worldNormal));
  31. return vec3(reflectionMatrix * vec4(coords, 1));
  32. #endif
  33. #ifdef REFLECTIONMAP_CUBIC
  34. vec3 viewDir = worldPos.xyz - vEyePosition.xyz;
  35. vec3 coords = reflect(viewDir, worldNormal);
  36. #ifdef INVERTCUBICMAP
  37. coords.y = 1.0 - coords.y;
  38. #endif
  39. return vec3(reflectionMatrix * vec4(coords, 0));
  40. #endif
  41. #ifdef REFLECTIONMAP_PROJECTION
  42. return vec3(reflectionMatrix * (view * worldPos));
  43. #endif
  44. #ifdef REFLECTIONMAP_SKYBOX
  45. return vPositionUVW;
  46. #endif
  47. #ifdef REFLECTIONMAP_EXPLICIT
  48. return vec3(0, 0, 0);
  49. #endif
  50. }