105 lines
2.1 KiB
Text
105 lines
2.1 KiB
Text
//======= Copyright (c) Stereolabs Corporation, All rights reserved. ===============
|
|
//Set noises and min black
|
|
Shader "ZED/ZED Post-Processing" {
|
|
Properties
|
|
{
|
|
_MainTex("Texture", 2D) = "white" {}
|
|
_MinBlack("Min black threshold", Range(0,1)) = 0.01
|
|
}
|
|
SubShader
|
|
{
|
|
Tags{ "RenderType" = "Opaque" }
|
|
|
|
ZWrite Off
|
|
ZTest Always
|
|
Cull Off
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
#include "UnityCG.cginc"
|
|
#pragma multi_compile ___ UNITY_HDR_ON
|
|
|
|
struct appdata
|
|
{
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 vertex : SV_POSITION;
|
|
};
|
|
|
|
|
|
uniform sampler2D _MainTex;
|
|
float4 _MainTex_ST;
|
|
float4 _MainTex_TexelSize;
|
|
sampler2D ZEDMaskPostProcess;
|
|
|
|
uniform float _gamma;
|
|
uniform float _MinBlack;
|
|
uniform int _NoiseSize;
|
|
|
|
|
|
float rand(float2 co) {
|
|
return frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453);
|
|
}
|
|
|
|
//Vertex Shader
|
|
v2f vert(appdata v)
|
|
{
|
|
v2f o;
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
|
|
|
return o;
|
|
}
|
|
|
|
//Fragment Shader
|
|
float4 frag(v2f i) : SV_Target{
|
|
float2 invertUV = i.uv;
|
|
invertUV.y = 1 - i.uv.y;
|
|
float mask = tex2D(ZEDMaskPostProcess, i.uv);
|
|
|
|
float4 zed = tex2D(_MainTex, i.uv);
|
|
|
|
if (mask > 0.9f)
|
|
{
|
|
|
|
//zed = (zed * 0.187) / (1.035 - zed);
|
|
float SqrtPixel = sqrt(zed.r * zed.r + zed.g * zed.g + zed.b * zed.b);
|
|
|
|
float3 NoiseFactors = 2;
|
|
float2 random = _Time.x*_NoiseSize*floor(i.uv / _MainTex_TexelSize.xy / _NoiseSize) / 3.;
|
|
float3 NoiseValue = float3(rand(random),
|
|
rand(random),
|
|
rand(random));
|
|
|
|
float4 res = pow(zed, _gamma);
|
|
|
|
|
|
res.r += (NoiseFactors.r * NoiseValue.r - NoiseFactors.r * 0.5) / 255;
|
|
res.g += (NoiseFactors.g * NoiseValue.g - NoiseFactors.g * 0.5) / 255;
|
|
res.b += (NoiseFactors.b * NoiseValue.b - NoiseFactors.b * 0.5) / 255;
|
|
|
|
//res = res / (res + 0.187) * 1.035;
|
|
res.a = 1.0f;
|
|
//res *= mask;
|
|
#if UNITY_COLORSPACE_GAMMA
|
|
return clamp(res, _MinBlack, 1.0f);
|
|
#else
|
|
return clamp(res, GammaToLinearSpaceExact(_MinBlack), 1.0f);
|
|
#endif
|
|
|
|
}
|
|
return zed;
|
|
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|