Upgraded original RothenburgAR to Unity version 2017.4.5f1 (and upgrading from standalone vuforia to the version integrated in unity)
This commit is contained in:
78
Assets/Vuforia/Shaders/DepthContour.shader
Normal file
78
Assets/Vuforia/Shaders/DepthContour.shader
Normal file
@@ -0,0 +1,78 @@
|
||||
/*========================================================================
|
||||
Copyright (c) 2017 PTC Inc. All Rights Reserved.
|
||||
|
||||
Vuforia is a trademark of PTC Inc., registered in the United States and other
|
||||
countries.
|
||||
=========================================================================*/
|
||||
Shader "Custom/DepthContour" {
|
||||
Properties{
|
||||
_ContourColor("Contour Color", Color) = (1,1,1,1)
|
||||
_SurfaceColor("Surface Color", Color) = (0.5,0.5,0.5,1)
|
||||
_DepthThreshold("Depth Threshold", Float) = 0.002
|
||||
}
|
||||
|
||||
SubShader {
|
||||
Tags { "Queue" = "Geometry" "RenderType" = "Transparent" }
|
||||
|
||||
Pass {
|
||||
Cull Back
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
uniform sampler2D _CameraDepthTexture;
|
||||
uniform float4 _ContourColor;
|
||||
uniform float4 _SurfaceColor;
|
||||
uniform float _DepthThreshold;
|
||||
|
||||
struct v2f {
|
||||
float4 pos : SV_POSITION;
|
||||
float4 screenPos : TEXCOORD0;
|
||||
float depth : TEXCOORD1;
|
||||
};
|
||||
|
||||
v2f vert(appdata_base v)
|
||||
{
|
||||
v2f o;
|
||||
o.pos = UnityObjectToClipPos(v.vertex);
|
||||
o.screenPos = ComputeScreenPos(o.pos);
|
||||
|
||||
COMPUTE_EYEDEPTH(o.depth);
|
||||
o.depth = (o.depth - _ProjectionParams.y) / (_ProjectionParams.z - _ProjectionParams.y);
|
||||
return o;
|
||||
}
|
||||
|
||||
half4 frag(v2f i) : COLOR
|
||||
{
|
||||
float2 uv = i.screenPos.xy / i.screenPos.w;
|
||||
float du = 1.0 / _ScreenParams.x;
|
||||
float dv = 1.0 / _ScreenParams.y;
|
||||
float2 uv_X1 = uv + float2(du, 0.0);
|
||||
float2 uv_Y1 = uv + float2(0.0, dv);
|
||||
float2 uv_X2 = uv + float2(-du, 0.0);
|
||||
float2 uv_Y2 = uv + float2(0.0, -dv);
|
||||
|
||||
float depth0 = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, uv)));
|
||||
float depthX1 = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, uv_X1)));
|
||||
float depthY1 = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, uv_Y1)));
|
||||
float depthX2 = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, uv_X2)));
|
||||
float depthY2 = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, uv_Y2)));
|
||||
|
||||
float farDist = _ProjectionParams.z;
|
||||
float refDepthStep = _DepthThreshold / farDist;
|
||||
float depthStepX = max(abs(depth0 - depthX1), abs(depth0 - depthX2));
|
||||
float depthStepY = max(abs(depth0 - depthY1), abs(depth0 - depthY2));
|
||||
float maxDepthStep = length(float2(depthStepX, depthStepY));
|
||||
half contour = (maxDepthStep > refDepthStep) ? 1.0 : 0.0;
|
||||
return _SurfaceColor * (1.0 - contour) + _ContourColor * contour;
|
||||
}
|
||||
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
|
||||
Fallback "Diffuse"
|
||||
}
|
||||
Reference in New Issue
Block a user