Aetheria/Assets/Plugins/PDTAA/Shaders/IncDepth.cginc
Reinier Vens 2c4520000b Demo Hotfixes
Replaced Unity TAA with PlayDead TAA
Custom keyboard layout test scene
Adjusted Aetheric Drive VFX to be more subtle
Reworked stardust VFX to reduce flickering artifacts
Added Action Bar & weapon groups saving/loading
Implemented security levels and faction safe zone visualization
Improved station placement (now include defensive turrets)
2021-05-02 20:59:45 +01:00

139 lines
No EOL
4.1 KiB
HLSL

// Copyright (c) <2015> <Playdead>
// This file is subject to the MIT License as seen in the root of this folder structure (LICENSE.TXT)
// AUTHOR: Lasse Jon Fuglsang Pedersen <lasse@playdead.com>
#ifndef __DEPTH_CGINC__
#define __DEPTH_CGINC__
#include "UnityCG.cginc"
uniform sampler2D_float _CameraDepthTexture;
uniform float4 _CameraDepthTexture_TexelSize;
#if UNITY_REVERSED_Z
#define ZCMP_GT(a, b) (a < b)
#else
#define ZCMP_GT(a, b) (a > b)
#endif
float depth_resolve_linear(float z)
{
#if CAMERA_ORTHOGRAPHIC
#if UNITY_REVERSED_Z
return (1.0 - z) * (_ProjectionParams.z - _ProjectionParams.y) + _ProjectionParams.y;
#else
return z * (_ProjectionParams.z - _ProjectionParams.y) + _ProjectionParams.y;
#endif
#else
return LinearEyeDepth(z);
#endif
}
float depth_sample_linear(float2 uv)
{
return depth_resolve_linear(tex2D(_CameraDepthTexture, uv).x);
}
float3 find_closest_fragment_3x3(float2 uv)
{
float2 dd = abs(_CameraDepthTexture_TexelSize.xy);
float2 du = float2(dd.x, 0.0);
float2 dv = float2(0.0, dd.y);
float3 dtl = float3(-1, -1, tex2D(_CameraDepthTexture, uv - dv - du).x);
float3 dtc = float3( 0, -1, tex2D(_CameraDepthTexture, uv - dv).x);
float3 dtr = float3( 1, -1, tex2D(_CameraDepthTexture, uv - dv + du).x);
float3 dml = float3(-1, 0, tex2D(_CameraDepthTexture, uv - du).x);
float3 dmc = float3( 0, 0, tex2D(_CameraDepthTexture, uv).x);
float3 dmr = float3( 1, 0, tex2D(_CameraDepthTexture, uv + du).x);
float3 dbl = float3(-1, 1, tex2D(_CameraDepthTexture, uv + dv - du).x);
float3 dbc = float3( 0, 1, tex2D(_CameraDepthTexture, uv + dv).x);
float3 dbr = float3( 1, 1, tex2D(_CameraDepthTexture, uv + dv + du).x);
float3 dmin = dtl;
if (ZCMP_GT(dmin.z, dtc.z)) dmin = dtc;
if (ZCMP_GT(dmin.z, dtr.z)) dmin = dtr;
if (ZCMP_GT(dmin.z, dml.z)) dmin = dml;
if (ZCMP_GT(dmin.z, dmc.z)) dmin = dmc;
if (ZCMP_GT(dmin.z, dmr.z)) dmin = dmr;
if (ZCMP_GT(dmin.z, dbl.z)) dmin = dbl;
if (ZCMP_GT(dmin.z, dbc.z)) dmin = dbc;
if (ZCMP_GT(dmin.z, dbr.z)) dmin = dbr;
return float3(uv + dd.xy * dmin.xy, dmin.z);
}
/* UNUSED: tested slower than branching
float2 find_closest_fragment_3x3_packed(in float2 uv)
{
float2 dd = abs(_CameraDepthTexture_TexelSize.xy);
float2 du = float2(dd.x, 0.0);
float2 dv = float2(0.0, dd.y);
const float s = 100000.0;
float dtl = trunc(s * tex2D(_CameraDepthTexture, uv - dv - du).x) + 0.1010;// -+-+
float dtc = trunc(s * tex2D(_CameraDepthTexture, uv - dv).x) + 0.0010;
float dtr = trunc(s * tex2D(_CameraDepthTexture, uv - dv + du).x) + 0.0110;
float dml = trunc(s * tex2D(_CameraDepthTexture, uv - du).x) + 0.1000;
float dmc = trunc(s * tex2D(_CameraDepthTexture, uv).x) + 0.0000;
float dmr = trunc(s * tex2D(_CameraDepthTexture, uv + du).x) + 0.0100;
float dbl = trunc(s * tex2D(_CameraDepthTexture, uv + dv - du).x) + 0.1001;
float dbc = trunc(s * tex2D(_CameraDepthTexture, uv + dv).x) + 0.0001;
float dbr = trunc(s * tex2D(_CameraDepthTexture, uv + dv + du).x) + 0.0101;
float enc = frac(min(dtl, min(dtc, min(dtr, min(dml, min(dmc, min(dmr, min(dbl, min(dbc, dbr)))))))));
float ru = 0.0;
float rv = 0.0;
enc *= 10.0;
ru -= trunc(enc);
enc = frac(enc);
enc *= 10.0;
ru += trunc(enc);
enc = frac(enc);
enc *= 10.0;
rv -= trunc(enc);
enc = frac(enc);
enc *= 10.0;
rv += trunc(enc);
enc = frac(enc);
return uv + dd * float2(ru, rv);
}*/
float3 find_closest_fragment_5tap(float2 uv)
{
float2 dd = abs(_CameraDepthTexture_TexelSize.xy);
float2 du = float2(dd.x, 0.0);
float2 dv = float2(0.0, dd.y);
float2 tl = -dv - du;
float2 tr = -dv + du;
float2 bl = dv - du;
float2 br = dv + du;
float dtl = tex2D(_CameraDepthTexture, uv + tl).x;
float dtr = tex2D(_CameraDepthTexture, uv + tr).x;
float dmc = tex2D(_CameraDepthTexture, uv).x;
float dbl = tex2D(_CameraDepthTexture, uv + bl).x;
float dbr = tex2D(_CameraDepthTexture, uv + br).x;
float dmin = dmc;
float2 dif = 0.0;
if (ZCMP_GT(dmin, dtl)) { dmin = dtl; dif = tl; }
if (ZCMP_GT(dmin, dtr)) { dmin = dtr; dif = tr; }
if (ZCMP_GT(dmin, dbl)) { dmin = dbl; dif = bl; }
if (ZCMP_GT(dmin, dbr)) { dmin = dbr; dif = br; }
return float3(uv + dif, dmin);
}
#endif//__DEPTH_CGINC__