forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Shader "Oculus/OVRMRCameraFrameLit" {
 | 
						|
	Properties{
 | 
						|
		_Color("Color", Color) = (1,1,1,1)
 | 
						|
		_MainTex("Albedo (RGB)", 2D) = "white" {}
 | 
						|
		_DepthTex("Depth (cm)", 2D) = "black" {}
 | 
						|
		_InconfidenceTex("Inconfidence (0-100)", 2D) = "black" {}
 | 
						|
		_Visible("Visible", Range(0.0,1.0)) = 1.0
 | 
						|
	}
 | 
						|
	SubShader{
 | 
						|
		Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
 | 
						|
		LOD 200
 | 
						|
 | 
						|
		CGPROGRAM
 | 
						|
		#pragma surface surf Lambert alpha:fade
 | 
						|
		#pragma target 3.0
 | 
						|
 | 
						|
		#include "OVRMRChromaKey.cginc"
 | 
						|
 | 
						|
		#define TEST_ENVIRONMENT			0
 | 
						|
 | 
						|
		sampler2D _MainTex;
 | 
						|
		sampler2D _DepthTex;
 | 
						|
		sampler2D _MaskTex;
 | 
						|
 | 
						|
		float4 _TextureDimension;		// (w, h, 1/w, 1/h)
 | 
						|
		float4 _TextureWorldSize;	  // (width_in_meter, height_in_meter, 0, 0)
 | 
						|
 | 
						|
		float _SmoothFactor;
 | 
						|
		float _DepthVariationClamp;
 | 
						|
 | 
						|
		float _CullingDistance;
 | 
						|
 | 
						|
		struct Input {
 | 
						|
		#if TEST_ENVIRONMENT
 | 
						|
			float2 uv_MainTex;
 | 
						|
		#endif
 | 
						|
			float4 screenPos;
 | 
						|
		};
 | 
						|
 | 
						|
		fixed4 _Color;
 | 
						|
		fixed  _Visible;
 | 
						|
		float4 _FlipParams;		// (flip_h, flip_v, 0, 0)
 | 
						|
 | 
						|
		fixed GetMask(float2 uv)
 | 
						|
		{
 | 
						|
			return tex2D(_MaskTex, uv).r;
 | 
						|
		}
 | 
						|
 | 
						|
		fixed4 GetCameraColor(float2 colorUV)
 | 
						|
		{
 | 
						|
			fixed4 c = tex2D(_MainTex, colorUV) * _Color;
 | 
						|
			return c;
 | 
						|
		}
 | 
						|
 | 
						|
		float GetDepth(float2 uv)
 | 
						|
		{
 | 
						|
			float depth = tex2D(_DepthTex, uv).x * 1.0 / 100;
 | 
						|
			return depth;
 | 
						|
		}
 | 
						|
 | 
						|
		float3 GetNormal(float2 uv)
 | 
						|
		{
 | 
						|
			float dz_x = GetDepth(uv + float2(_TextureDimension.z, 0)) - GetDepth(uv - float2(_TextureDimension.z, 0));
 | 
						|
			float dz_y = GetDepth(uv + float2(0, _TextureDimension.w)) - GetDepth(uv - float2(0, _TextureDimension.w));
 | 
						|
			dz_x = clamp(dz_x, -_DepthVariationClamp, _DepthVariationClamp);
 | 
						|
			dz_y = clamp(dz_y, -_DepthVariationClamp, _DepthVariationClamp);
 | 
						|
			//float dist = 0.01;
 | 
						|
			//float3 normal = cross(float3(dist, 0, dz_x), float3(0, dist, dz_y));
 | 
						|
			float3 normal = cross(float3(_TextureWorldSize.x * _TextureDimension.z * 2.0 * _SmoothFactor, 0, dz_x), float3(0, _TextureWorldSize.y * _TextureDimension.w * 2.0 * _SmoothFactor, dz_y));
 | 
						|
			normal = normalize(normal);
 | 
						|
			return normal;
 | 
						|
		}
 | 
						|
 | 
						|
		void surf(Input IN, inout SurfaceOutput o) {
 | 
						|
	#if TEST_ENVIRONMENT
 | 
						|
			float2 colorUV = float2(IN.uv_MainTex.x, IN.uv_MainTex.y);
 | 
						|
	#else
 | 
						|
			float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
 | 
						|
			float2 colorUV = float2(screenUV.x, 1.0 - screenUV.y);
 | 
						|
	#endif
 | 
						|
			if (_FlipParams.x > 0.0)
 | 
						|
			{
 | 
						|
				colorUV.x = 1.0 - colorUV.x;
 | 
						|
			}
 | 
						|
			if (_FlipParams.y > 0.0)
 | 
						|
			{
 | 
						|
				colorUV.y = 1.0 - colorUV.y;
 | 
						|
			}
 | 
						|
			float mask = GetMask(colorUV);
 | 
						|
			if (mask == 0.0)
 | 
						|
			{
 | 
						|
				discard;
 | 
						|
			}
 | 
						|
			float4 col = GetColorAfterChromaKey(colorUV, _TextureDimension.zw, 1.0);
 | 
						|
			if (col.a < 0.0)
 | 
						|
			{
 | 
						|
				discard;
 | 
						|
			}
 | 
						|
			float depth = GetDepth(colorUV);
 | 
						|
			if (depth > _CullingDistance)
 | 
						|
			{
 | 
						|
				discard;
 | 
						|
			}
 | 
						|
			float3 normal = GetNormal(colorUV);
 | 
						|
			o.Albedo = col.rgb;
 | 
						|
			o.Normal = normal;
 | 
						|
			o.Alpha = col.a *_Visible;
 | 
						|
		}
 | 
						|
		ENDCG
 | 
						|
	}
 | 
						|
	FallBack "Alpha-Diffuse"
 | 
						|
}
 |