View difference between Paste ID: G5bF1fHu and R0CJK0P8
SHOW: | | - or go back to the newest paste.
1
#include <renderer/RenderSetup.hlsl>
2
3
struct VS_INPUT
4
{
5
   float3 ssPosition   : POSITION;
6
   float2 texCoord     : TEXCOORD0;
7
   float4 color        : COLOR0;
8
};
9
10
struct VS_OUTPUT
11
{
12
   float2 texCoord     : TEXCOORD0;
13
   float4 color        : COLOR0;
14
   float4 ssPosition   : SV_POSITION;
15
};
16
17
struct PS_INPUT
18
{
19
   float2 texCoord     : TEXCOORD0;
20
   float4 color        : COLOR0;
21
};
22
23
sampler2D       baseTexture;
24
sampler2D       depthTexture;
25
sampler2D       normalTexture;
26
27
cbuffer LayerConstants
28
{
29
    float        startTime;
30
    float        amount;
31
};
32
33
/**
34
* Vertex shader.
35
*/  
36
VS_OUTPUT SFXBasicVS(VS_INPUT input)
37
{
38
39
   VS_OUTPUT output;
40
41
   output.ssPosition = float4(input.ssPosition, 1);
42
   output.texCoord   = input.texCoord + texelCenter;
43
   output.color      = input.color;
44
45
   return output;
46
47
}
48
49
float2 clamp_tex2D( sampler2D tex, float2 coord )
50
{
51
    // TODO: remove this and fix sampler using wrapped instead of clamped addressing for depthTexture
52
    return tex2D( tex, clamp( coord, float2( 0.001, 0.001 ), float2( 0.999, 0.999 ) ) );
53
}
54
	//old colors
55
//const float4 edgeColorBlue = float4(-0.02, 0.5, 1, 0) * 3.0;
56
//const float4 edgeColorDarkBlue = float4(0.07, 0.05, 1, 0) * 1.5;
57
//const float4 edgeColorOrange = float4(1.0, 0.25, 0.0, 0);
58
//const float4 edgeColorDarkOrange = float4(1.0, 0.1, 0, 0);
59
//const float4 edgeColorDarkRed = float4(1.0, 0.01, 0, 0);
60
//const float4 edgeColorGreen = float4(0.2, 0.7, 0.00, 0);
61
//const float4 edgeColorDarkGreen = float4(0.07, 0.7, 0.00, 0);
62
const float4 edgeColorDark = float4 (0.01, 0.01, 0.01, 0);
63
	// my colors
64
const float4 edgeColorMarines = float4 (0.0, 1, 0, 0) * 10;
65
const float4 edgeColorMarineStructures = float4 (1, 0, 0, 0) * 10;
66
const float4 edgeColorAliens = float4 (0, 1, 3, 0) * 10;
67
const float4 edgeColorGorges = float4 (0, 0.7, 0, 0) * 10;
68
const float4 edgeColorAlienStructures = float4 (0, 1, 0.5, 0) * 3;
69
const float4 edgeColorBorder = float4 (0.3, 0, 0, 0) * 0.1;
70
71
float4 SFXDarkVisionPS(PS_INPUT input) : COLOR0
72
{
73
    float2 texCoord = input.texCoord;
74
    float4 inputPixel = tex2D(baseTexture, texCoord);
75
    
76
    if (amount == 0) 
77
    {
78
        return inputPixel;
79
    }
80
    
81
    float2 depth1 = tex2D(depthTexture, input.texCoord).rg;
82
	
83
    float fadeout = min(1, pow(2.0, 0.5 - depth1.r*.4));
84
	
85
    // Flashlight on
86
    float offset = 0.0002 * (0.5 + depth1.g) * max(fadeout, 0.33); // thicker edge around entities, especially nearby
87
    float depth2 = clamp_tex2D(depthTexture, texCoord + float2(-offset, -offset)).r;
88
    float depth3 = clamp_tex2D(depthTexture, texCoord + float2(-offset,  offset)).r;
89
    float depth4 = clamp_tex2D(depthTexture, texCoord + float2( offset, -offset)).r;
90
    float depth5 = clamp_tex2D(depthTexture, texCoord + float2( offset,  offset)).r;
91
    
92
    float4 baseColor=float4(.9,0.9,.9,0);
93
94
    float edge = 
95
            abs(depth2 - depth1.r) +
96
            abs(depth3 - depth1.r) +
97
            abs(depth4 - depth1.r) +
98
            abs(depth5 - depth1.r);
99
    edge = min(1.2, edge);
100
	
101
    if (depth1.g > 0.5) // entities
102
    {
103
104
		float min_intensity = 0.5; // entity colouring base intensity
105
		
106
		edge = (edge + min_intensity);
107
		
108
		if ( depth1.g > 0.99 ) // marines 1
109
		{
110
		   return lerp(inputPixel, edgeColorMarines * edge, amount * (0.1 + edge) * 0.3);
111
		}
112
		else if ( depth1.g > 0.97 ) // marine structures 0.98
113
		{
114
			return lerp(inputPixel, edgeColorMarineStructures * edge, amount * (0.1 + edge) * 0.3);
115
		}
116
		else if ( depth1.g > 0.95 ) // alien players 0.96
117
		{
118
			return lerp( inputPixel, edgeColorAliens * edge, amount * (0.1 + edge) * 0.1);
119
		} 
120
		else if ( depth1.g > 0.93 ) // gorges 0.94
121
		{
122
			return lerp( inputPixel, edgeColorAliens * edge, amount * (0.1 + edge) * 0.1);
123
		} 
124
		else { // targets and world ents 0.9
125
			return lerp( inputPixel, edgeColorAlienStructures * edge, amount * (0.1 + edge) * 0.15);
126
		}
127
128
    } else // world geometry
129
    {
130
		
131-
		fadeout = 0.05 * pow(3, depth1.r * 0.1);
131+
		float fog = 0.04 * pow(3, depth1.r * 0.1);
132-
        edge = pow(edge * 1, 0.5) * step( depth1.r, 100 ); // no edges for skyboxes
132+
        edge = pow(edge, 0.5) * step( depth1.r, 100 ); // no edges for skyboxes
133
		float maxStrength = 0.95;
134-
		float4 edgeColor2 = float4(1.0, 1.0, 1.0 + depth1.r * 0.015, 0);
134+
		float brightness = inputPixel.r + inputPixel.g * 1.5 + inputPixel.b;
135
		float4 edgeColor2 = float4(0.3 - depth1.r * 0.005 + brightness * 0.1, fog * 0.02, brightness * 0.3 + fog, 0);
136-
        return lerp(inputPixel * (5 - 4 * amount), edgeColorBorder * edge * max(10, fadeout), min(maxStrength, amount));
136+
137
        return lerp(inputPixel * (5 - 4 * amount), edgeColor2 * (edge + brightness * 0.15) * max(1, fog), min(maxStrength, amount));
138
		
139
		//return saturate (inputPixel + edgeColorDark * 0.1 * amount * edge );
140
		//return lerp(inputPixel, (edgeColor2 * edge), 0.01 * amount);
141
    }
142
}