Add procedural skybox scene coverage
This commit is contained in:
35
engine/assets/builtin/shaders/skybox/skybox.frag.glsl
Normal file
35
engine/assets/builtin/shaders/skybox/skybox.frag.glsl
Normal file
@@ -0,0 +1,35 @@
|
||||
// XC_BUILTIN_SKYBOX_OPENGL_PS
|
||||
#version 430
|
||||
|
||||
layout(std140, binding = 0) uniform EnvironmentConstants {
|
||||
vec4 gSkyboxTopColor;
|
||||
vec4 gSkyboxHorizonColor;
|
||||
vec4 gSkyboxBottomColor;
|
||||
vec4 gCameraRightAndTanHalfFov;
|
||||
vec4 gCameraUpAndAspect;
|
||||
vec4 gCameraForwardAndUnused;
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user