Tonemap.hlsl 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "Uniforms.hlsl"
  2. #include "Transform.hlsl"
  3. #include "Samplers.hlsl"
  4. #include "ScreenPos.hlsl"
  5. #include "PostProcess.hlsl"
  6. #ifndef D3D11
  7. // D3D9 uniforms
  8. uniform float cTonemapExposureBias;
  9. uniform float cTonemapMaxWhite;
  10. #else
  11. #ifdef COMPILEPS
  12. // D3D11 constant buffers
  13. cbuffer CustomPS : register(b6)
  14. {
  15. float cTonemapExposureBias;
  16. float cTonemapMaxWhite;
  17. }
  18. #endif
  19. #endif
  20. void VS(float4 iPos : POSITION,
  21. out float2 oScreenPos : TEXCOORD0,
  22. out float4 oPos : OUTPOSITION)
  23. {
  24. float4x3 modelMatrix = iModelMatrix;
  25. float3 worldPos = GetWorldPos(modelMatrix);
  26. oPos = GetClipPos(worldPos);
  27. oScreenPos = GetScreenPosPreDiv(oPos);
  28. }
  29. void PS(float2 iScreenPos : TEXCOORD0,
  30. out float4 oColor : OUTCOLOR0)
  31. {
  32. #ifdef REINHARDEQ3
  33. float3 color = ReinhardEq3Tonemap(max(Sample2D(DiffMap, iScreenPos).rgb * cTonemapExposureBias, 0.0));
  34. oColor = float4(color, 1.0);
  35. #endif
  36. #ifdef REINHARDEQ4
  37. float3 color = ReinhardEq4Tonemap(max(Sample2D(DiffMap, iScreenPos).rgb * cTonemapExposureBias, 0.0), cTonemapMaxWhite);
  38. oColor = float4(color, 1.0);
  39. #endif
  40. #ifdef UNCHARTED2
  41. float3 color = Uncharted2Tonemap(max(Sample2D(DiffMap, iScreenPos).rgb * cTonemapExposureBias, 0.0)) /
  42. Uncharted2Tonemap(float3(cTonemapMaxWhite, cTonemapMaxWhite, cTonemapMaxWhite));
  43. oColor = float4(color, 1.0);
  44. #endif
  45. }