Lux_Advanced_Parallax.hlsl 779 B

1234567891011121314151617181920212223242526272829303132
  1. void AdvancedParallax_float(
  2. // Base inputs
  3. Texture2D textureHeight,
  4. float2 uv,
  5. float Parallax,
  6. // Fixed inputs
  7. SamplerState samplerTex,
  8. float3 viewDirTS,
  9. // Outputs
  10. out float2 ParallaxUV,
  11. out float Height
  12. ) {
  13. // Parallax
  14. float3 v = viewDirTS;
  15. v.z += 0.42;
  16. v.xy /= v.z;
  17. float halfParallax = Parallax * 0.5f;
  18. float parallax = SAMPLE_TEXTURE2D(textureHeight, samplerTex, uv).g * Parallax - halfParallax;
  19. Height = parallax;
  20. float2 offset1 = parallax * v.xy;
  21. // Calculate 2nd height
  22. parallax = SAMPLE_TEXTURE2D(textureHeight, samplerTex, uv + offset1).g * Parallax - halfParallax;
  23. Height += parallax;
  24. float2 offset2 = parallax * v.xy;
  25. // Final UVs
  26. uv += (offset1 + offset2) * 0.5f;
  27. ParallaxUV = uv;
  28. }