Shader "PhotoshopLevels"
{
Properties
{
_MainTex("MainTex", 2D) = "" {}
_InBlack("InBlack", Range(0, 255)) = 0
_InGamma("InGamma", Range(0, 255)) = 1.61
_InWhite("InWhite", Range(0, 255)) = 255
_OutBalck("OutBlack", Range(0, 255)) = 0
_OutWhite("OutWhite", Range(0, 255)) = 255
}
SubShader
{
Tags
{
"RenderType" = "Opaque"
}
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
float _InBlack;
float _InGamma;
float _InWhite;
float _OutBlack;
float _OutWhite;
float outRPixel;
struct Input
{
float2 uv_MainTex;
};
void surf(Input IN, inout SurfaceOutput o)
{
float4 c = tex2D(_MainTex, IN.uv_MainTex);
outRPixel = c.r * 255.0;
outRPixel = max(0, outRPixel - _InBlack);
outRPixel = saturate(pow(outRPixel / (_InWhite - _InBlack), _InGamma));
outRPixel = (outRPixel * (_OutWhite - _OutBlack) + _OutBlack) / 255.0;
c.r = outRPixel;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
}