Dithering.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using UnityEngine.Assertions;
  3. namespace UnityEngine.Rendering.PostProcessing
  4. {
  5. [Serializable]
  6. internal sealed class Dithering
  7. {
  8. int m_NoiseTextureIndex = 0;
  9. internal void Render(PostProcessRenderContext context)
  10. {
  11. var blueNoise = context.resources.blueNoise64;
  12. Assert.IsTrue(blueNoise != null && blueNoise.Length > 0);
  13. #if POSTFX_DEBUG_STATIC_DITHERING // Used by QA for automated testing
  14. m_NoiseTextureIndex = 0;
  15. float rndOffsetX = 0f;
  16. float rndOffsetY = 0f;
  17. #else
  18. if (++m_NoiseTextureIndex >= blueNoise.Length)
  19. m_NoiseTextureIndex = 0;
  20. float rndOffsetX = Random.value;
  21. float rndOffsetY = Random.value;
  22. #endif
  23. var noiseTex = blueNoise[m_NoiseTextureIndex];
  24. var uberSheet = context.uberSheet;
  25. uberSheet.properties.SetTexture(ShaderIDs.DitheringTex, noiseTex);
  26. uberSheet.properties.SetVector(ShaderIDs.Dithering_Coords, new Vector4(
  27. (float)context.screenWidth / (float)noiseTex.width,
  28. (float)context.screenHeight / (float)noiseTex.height,
  29. rndOffsetX,
  30. rndOffsetY
  31. ));
  32. }
  33. }
  34. }