Files
tbd-station-14/Resources/Textures/Shaders/gradient_circle_mask.swsl
2021-03-11 19:04:21 +01:00

26 lines
975 B
Plaintext

//This shader defines two circles - everything inside the inner circle will be darkened, while everything outside the outer circle
//will be full black. Between the inner and outer circle it LERPs from the inner darkness to full black.
light_mode unshaded;
const highp float darknessAlphaInner = 0.6;
const highp float innerCircleRadius = 40.0; //Note: this is in pixels
const highp float outerCircleRadius = 80.0;
void fragment() {
highp vec2 pixelSize = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y);
highp vec2 pixelCenter = pixelSize*0.5;
highp float distance = length(FRAGCOORD.xy - pixelCenter);
if(distance > outerCircleRadius){
COLOR = vec4(0.0, 0.0, 0.0, 1.0);
}
else if(distance < innerCircleRadius){
COLOR = vec4(0.0, 0.0, 0.0, darknessAlphaInner);
}
else{
highp float intensity = (distance-innerCircleRadius)/(outerCircleRadius-innerCircleRadius);
COLOR = vec4(0.0, 0.0, 0.0, (1.0-intensity)*darknessAlphaInner + intensity);
}
}