// 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); }