It’s been a while so I don’t quite remember what I did. But I found my old script. I think I put it on a camera post-processor. It didn’t work that great and never found a good solution for this issue.
Shader "Hidden/Custom/BatLightClip"
{
HLSLINCLUDE
#include "Packages/com.unity.postprocessing/PostProcessing/Shaders/StdLib.hlsl"
TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
float _Brightness; //bat
float _Exponent; //bat
float _Blend;
float _SoftClip;
float4 BatFrag(VaryingsDefault i) : SV_Target
{
float4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.texcoord);
if (_Exponent != 1)
{
float colorMag = sqrt(color.r*color.r + color.g*color.g + color.b*color.b);
float newColorMag = pow(colorMag, _Exponent);
float colorMult = newColorMag / colorMag;
color = float4(colorMult*color.r, colorMult*color.g, colorMult*color.b, 1); //color = GammaToLinearSpace(color); linear space to gammma space or something inbetween (0.4545 is linear --> gamma?)
}
if (_Blend > 0) //can be set to 0 to ignore
{
//float luminance = dot(color.rgb, float3(0.2126729, 0.7151522, 0.0721750));
float colorMag = sqrt(color.r*color.r + color.g*color.g + color.b*color.b);
if (colorMag > _Blend)
{
float dividerRatio = colorMag / _Blend;
color = float4(color.r / dividerRatio, color.g / dividerRatio, color.b / dividerRatio, 1);// color / dividerRatio;
}
}
if (_Brightness != 1)
{
color = float4(_Brightness*color.r, _Brightness*color.g, _Brightness*color.b, 1); //bat
}
if (_SoftClip > 0 )
{
float rgbMax = max(color.r, max(color.g, color.b));
float rgbMaxNew = rgbMax / (rgbMax + 1);
float colorMult = rgbMaxNew / rgbMax;
color = float4(color.r * colorMult, color.g * colorMult, color.b * colorMult, 1);
}
return color;
}
ENDHLSL
SubShader
{
Cull Off
ZWrite Off
ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment BatFrag
ENDHLSL
}
}
}
and
[Serializable]
[PostProcess(typeof(BatLightClipRenderer), PostProcessEvent.AfterStack, "BatCustom/BatLightClipDropdownDescription")]
public sealed class BatLightClipSettings : PostProcessEffectSettings
{
[Range(0f, 5f), Tooltip("Brightness")] //bat
public FloatParameter brightness = new FloatParameter { value = 1f }; //bat
[Range(0f, 3f), Tooltip("Exponent")] //bat
public FloatParameter exponent = new FloatParameter { value = 1f }; //bat
[Range(0f, 5f), Tooltip("Light Clip Intensity")]
public FloatParameter blend = new FloatParameter { value = 0f };
[Range(0f, 2f), Tooltip("Soft Clip")]
public FloatParameter softClip = new FloatParameter { value = 0f }; //New 2021_03_01
}
public sealed class BatLightClipRenderer : PostProcessEffectRenderer<BatLightClipSettings>
{
public override void Render(PostProcessRenderContext postProcessRenderContext)
{
PropertySheet propertySheet = postProcessRenderContext.propertySheets.Get(Shader.Find("Hidden/Custom/BatLightClip"));
propertySheet.properties.SetFloat("_Brightness", settings.brightness);
propertySheet.properties.SetFloat("_Exponent", settings.exponent);
propertySheet.properties.SetFloat("_Blend", settings.blend);
propertySheet.properties.SetFloat("_SoftClip", settings.softClip);
postProcessRenderContext.command.BlitFullscreenTriangle(postProcessRenderContext.source, postProcessRenderContext.destination, propertySheet, 0);
}
}