ConvertToLog.shader 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. Shader "Hidden/PostProcessing/Editor/ConvertToLog"
  2. {
  3. Properties
  4. {
  5. _MainTex ("", 2D) = "white" {}
  6. }
  7. CGINCLUDE
  8. #include "UnityCG.cginc"
  9. struct ParamsLogC
  10. {
  11. float cut;
  12. float a, b, c, d, e, f;
  13. };
  14. static const ParamsLogC LogC =
  15. {
  16. 0.011361, // cut
  17. 5.555556, // a
  18. 0.047996, // b
  19. 0.244161, // c
  20. 0.386036, // d
  21. 5.301883, // e
  22. 0.092819 // f
  23. };
  24. float LinearToLogC_Precise(half x)
  25. {
  26. float o;
  27. if (x > LogC.cut)
  28. o = LogC.c * log10(LogC.a * x + LogC.b) + LogC.d;
  29. else
  30. o = LogC.e * x + LogC.f;
  31. return o;
  32. }
  33. sampler2D _MainTex;
  34. float4 Frag(v2f_img i) : SV_Target
  35. {
  36. float4 color = tex2D(_MainTex, i.uv);
  37. color.rgb = float3(LinearToLogC_Precise(color.r), LinearToLogC_Precise(color.g), LinearToLogC_Precise(color.b));
  38. color.a = 1.0;
  39. return color;
  40. }
  41. ENDCG
  42. SubShader
  43. {
  44. Cull Off ZWrite Off ZTest Always
  45. Pass
  46. {
  47. CGPROGRAM
  48. #pragma vertex vert_img
  49. #pragma fragment Frag
  50. ENDCG
  51. }
  52. }
  53. }