DeltaVR/Assets/Oculus/SampleFramework/Usage/Passthrough/Materials/SelectivePassthroughSoft.shader
2023-05-08 15:56:10 +03:00

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
}
}
}