forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			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
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |