IrradianceAccumulateSH.bsl 978 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "$ENGINE$\ReflectionCubemapCommon.bslinc"
  2. #include "$ENGINE$\PPBase.bslinc"
  3. shader IrradianceAccumulateSH
  4. {
  5. mixin PPBase;
  6. mixin ReflectionCubemapCommon;
  7. code
  8. {
  9. #define PI 3.1415926
  10. SamplerState gInputSamp;
  11. TextureCube gInputTex;
  12. [internal]
  13. cbuffer Params
  14. {
  15. uint gCubeFace;
  16. uint gCubeMip;
  17. float2 gHalfPixel;
  18. }
  19. float4 fsmain(VStoFS input) : SV_Target0
  20. {
  21. float2 offset[4];
  22. offset[0] = float2(gHalfPixel.x, gHalfPixel.y);
  23. offset[1] = float2(-gHalfPixel.x, gHalfPixel.y);
  24. offset[2] = float2(gHalfPixel.x, -gHalfPixel.y);
  25. offset[3] = float2(-gHalfPixel.x, -gHalfPixel.y);
  26. float4 sum = 0;
  27. [unroll]
  28. for(int i = 0; i < 4; ++i)
  29. {
  30. float2 uv = saturate(input.uv0 + offset[i]) * 2.0f - 1.0f;
  31. float3 dir = getDirFromCubeFace(gCubeFace, uv);
  32. dir = normalize(dir);
  33. float4 value = gInputTex.SampleLevel(gInputSamp, dir, gCubeMip);
  34. sum += value;
  35. }
  36. return sum;
  37. }
  38. };
  39. };