67 lines
2.0 KiB
Plaintext
67 lines
2.0 KiB
Plaintext
Shader "MixedReality/SelectivePassthroughSoft" {
|
|
Properties{
|
|
_MainTex("Texture", 2D) = "white" {}
|
|
_SoftFade("Soft Fade Distance", Float) = 0.05
|
|
_Inflation("Inflation", float) = 0
|
|
}
|
|
SubShader {
|
|
Tags{"RenderType" = "Transparent"} LOD 100
|
|
|
|
Pass {
|
|
ZWrite Off
|
|
BlendOp RevSub, Min
|
|
Blend Zero One, One OneMinusSrcAlpha
|
|
|
|
CGPROGRAM
|
|
// Upgrade NOTE: excluded shader from DX11; has structs without semantics (struct v2f members
|
|
// center)
|
|
//#pragma exclude_renderers d3d11
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata {
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
float3 normal : NORMAL;
|
|
};
|
|
|
|
struct v2f {
|
|
float2 uv : TEXCOORD0;
|
|
float4 vertex : SV_POSITION;
|
|
float2 projPos : TEXCOORD1;
|
|
float depth : DEPTH;
|
|
};
|
|
|
|
sampler2D _MainTex;
|
|
sampler2D _CameraDepthTexture;
|
|
float4 _MainTex_ST;
|
|
float _SoftFade;
|
|
float _Inflation;
|
|
|
|
v2f vert(appdata v) {
|
|
v2f o;
|
|
o.vertex = UnityObjectToClipPos(v.vertex + v.normal * _Inflation);
|
|
float4 origin = mul(unity_ObjectToWorld, float4(0.0, 0.0, 0.0, 1.0));
|
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
|
o.depth = -UnityObjectToViewPos(v.vertex).z * _ProjectionParams.w;
|
|
o.projPos = (o.vertex.xy / o.vertex.w) * 0.5 + 0.5;
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : SV_Target {
|
|
// get a linear & normalized (0-1) depth value of the scene
|
|
float frameDepth = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.projPos.xy));
|
|
// convert the normalized value to world units, with depth of 0 at this mesh
|
|
frameDepth = (frameDepth - i.depth) * _ProjectionParams.z;
|
|
// remap it to a fade distance
|
|
frameDepth = saturate(frameDepth / _SoftFade);
|
|
fixed4 col = tex2D(_MainTex, i.uv);
|
|
return float4(0, 0, 0, 1-(col.r * frameDepth));
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|