You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.7 KiB

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/BGSeg" {
Properties
{
[NoScaleOffset][PerRendererData]_MainTex("MainTex", 2D) = "black" {}
[NoScaleOffset]_ColorTex("Base (RGB)", 2D) = "white" {}
_MinRange("Min Range(m)", Float) = 0.5
_MaxRange("Max Range(m)", Float) = 2.0
_Feather("Feather Range(m)", Float) = 0.25
_DepthScale("Depth Multiplyer Factor to Meters", float) = 0.001
_Gamma ("Gamma", float) = 1
[Toggle] _HasColor ("Has Color?", Float) = 1
}
SubShader
{
Tags { "QUEUE" = "Transparent" "IGNOREPROJECTOR" = "true" "RenderType" = "Transparent" "PreviewType" = "Plane" }
Pass
{
ZWrite Off
Cull Off
Blend SrcAlpha OneMinusSrcAlpha
Fog { Mode Off }
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma target 3.0
#pragma glsl
#pragma multi_compile _HASCOLOR_OFF _HASCOLOR_ON
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _ColorTex;
float _MinRange;
float _MaxRange;
float _DepthScale;
float _Feather;
float _Gamma;
half4 frag(v2f_img pix) : SV_Target
{
float r = tex2D(_MainTex, pix.uv).r; //r is unscaled depth, normalized to [0-1]
float distMeters = r * 65536 * _DepthScale; //resotring to uint16 and multiplying by depth scale to get depth in meters
#if _HASCOLOR_ON
float3 Y = pow(tex2D(_ColorTex, pix.uv).rgb, _Gamma);
#else
float3 Y = pow(tex2D(_ColorTex, pix.uv).aaa, _Gamma);
#endif
float mask = smoothstep(_MinRange - _Feather * 0.5, _MinRange + _Feather * 0.5, distMeters) *
smoothstep(distMeters - _Feather, distMeters + _Feather, _MaxRange);
return float4(Y, mask);
}
ENDCG
}
}
}