78 lines
2.0 KiB
GLSL
78 lines
2.0 KiB
GLSL
#version 420 core
|
|
|
|
out vec4 out_color;
|
|
in vec3 fPosition;
|
|
uniform samplerCube skyTexture;
|
|
|
|
#define M_PI 3.1415926535897932384626433832795
|
|
#define STAR_DENSITY 0.02
|
|
#define STAR_RADIUS 0.01
|
|
|
|
const vec3 nightHorizonColor = vec3(0.015, 0.592, 0.976);
|
|
const vec3 nightSkyColor = vec3(0.098, 0.129, 0.219);
|
|
|
|
#include "noise.glsl"
|
|
|
|
float starLight(vec3 starCenter, vec2 planPos, vec2 starPlanPos)
|
|
{
|
|
float danger = perlin(49031, 4, 0.5, normalize(starCenter) * 6);
|
|
|
|
float dx = singlePerlin(49031, starCenter * 9631);
|
|
float dy = singlePerlin(49031, starCenter * 13765);
|
|
|
|
float prob = singlePerlin(49031, starCenter * 62527);
|
|
|
|
if (prob > 0 && danger < prob) {
|
|
dy *= (STAR_DENSITY - STAR_RADIUS) * 2;
|
|
dx *= (STAR_DENSITY - STAR_RADIUS) * 2;
|
|
|
|
vec2 dPos = vec2(dx, dy);
|
|
|
|
float scaleFactor = (danger * 0.5 + 0.5);
|
|
scaleFactor *= scaleFactor;
|
|
float invertScale = 1 - scaleFactor;
|
|
|
|
float size = (scaleFactor * STAR_RADIUS);
|
|
|
|
float power = 1 - min(1.0, distance(planPos, starPlanPos + dPos * invertScale) / size);
|
|
return power * power;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
vec3 normalizedPos = normalize(fPosition);
|
|
vec3 starCenter = floor(fPosition / STAR_DENSITY) * STAR_DENSITY + STAR_DENSITY / 2;
|
|
|
|
vec3 absPos = abs(fPosition);
|
|
vec2 planPos;
|
|
vec2 starPlanPos;
|
|
|
|
if (absPos.x == 1) {
|
|
planPos = fPosition.yz;
|
|
starPlanPos = starCenter.yz;
|
|
} else if (absPos.y == 1) {
|
|
planPos = fPosition.xz;
|
|
starPlanPos = starCenter.xz;
|
|
} else {
|
|
planPos = fPosition.xy;
|
|
starPlanPos = starCenter.xy;
|
|
}
|
|
|
|
vec3 color = vec3(starLight(starCenter, planPos, starPlanPos));
|
|
|
|
float blue = perlin(49031, 4, 0.5, normalizedPos);
|
|
float purple = perlin(147848, 6, 0.5, normalizedPos * 3);
|
|
|
|
blue = abs((- blue * 0.5) + 0.5);
|
|
purple = abs((- purple * 0.5) + 0.5);
|
|
|
|
blue = fade(blue * blue);
|
|
purple = fade(purple * purple);
|
|
|
|
color += vec3(0.48, 0.87, 0.98) * blue + vec3(0.82, 0.43, 0.98) * purple;
|
|
|
|
out_color = vec4(color, 1.0);
|
|
}
|