36 lines
1.0 KiB
GLSL
36 lines
1.0 KiB
GLSL
// XC_BUILTIN_SKYBOX_VULKAN_PS
|
|
#version 450
|
|
|
|
layout(set = 0, binding = 0, std140) uniform EnvironmentConstants {
|
|
vec4 gSkyboxTopColor;
|
|
vec4 gSkyboxHorizonColor;
|
|
vec4 gSkyboxBottomColor;
|
|
vec4 gCameraRightAndTanHalfFov;
|
|
vec4 gCameraUpAndAspect;
|
|
vec4 gCameraForwardAndUnused;
|
|
};
|
|
|
|
layout(location = 0) in vec2 vNdc;
|
|
|
|
layout(location = 0) out vec4 fragColor;
|
|
|
|
void main() {
|
|
float tanHalfFov = gCameraRightAndTanHalfFov.w;
|
|
float aspect = gCameraUpAndAspect.w;
|
|
|
|
vec3 viewRay = normalize(
|
|
gCameraForwardAndUnused.xyz +
|
|
vNdc.x * aspect * tanHalfFov * gCameraRightAndTanHalfFov.xyz +
|
|
vNdc.y * tanHalfFov * gCameraUpAndAspect.xyz);
|
|
|
|
float vertical = clamp(viewRay.y, -1.0, 1.0);
|
|
vec3 color = gSkyboxHorizonColor.rgb;
|
|
if (vertical >= 0.0) {
|
|
color = mix(gSkyboxHorizonColor.rgb, gSkyboxTopColor.rgb, pow(clamp(vertical, 0.0, 1.0), 0.65));
|
|
} else {
|
|
color = mix(gSkyboxHorizonColor.rgb, gSkyboxBottomColor.rgb, pow(clamp(-vertical, 0.0, 1.0), 0.55));
|
|
}
|
|
|
|
fragColor = vec4(color, 1.0);
|
|
}
|