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