mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-21 18:17:03 +08:00
feat(renderer): add fog effect based on render distance
This commit is contained in:
@@ -25,6 +25,10 @@ uniform float minRadius;
|
|||||||
uniform float maxRadius;
|
uniform float maxRadius;
|
||||||
uniform bool enablePBR;
|
uniform bool enablePBR;
|
||||||
uniform bool flipY;
|
uniform bool flipY;
|
||||||
|
|
||||||
|
uniform int renderDistance;
|
||||||
|
uniform vec3 skyColor;
|
||||||
|
|
||||||
const vec2 poissonDisk32[32] = vec2[](
|
const vec2 poissonDisk32[32] = vec2[](
|
||||||
vec2(-0.975402, -0.071138),
|
vec2(-0.975402, -0.071138),
|
||||||
vec2(-0.920347, -0.411420),
|
vec2(-0.920347, -0.411420),
|
||||||
@@ -342,7 +346,16 @@ void main(void) {
|
|||||||
|
|
||||||
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
|
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
|
||||||
|
|
||||||
|
// fog
|
||||||
|
float dist = length(cameraPos - vert_pos);
|
||||||
|
vec4 fogColor = vec4(skyColor, 1.0);
|
||||||
|
float fogStart = renderDistance * 16 * 0.9;
|
||||||
|
float fogEnd = renderDistance * 16;
|
||||||
|
|
||||||
|
float fogFactor = smoothstep(fogEnd, fogStart, dist);
|
||||||
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb + (1.0-shadow) * specular * objectColor.rgb, objectColor.a);
|
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb + (1.0-shadow) * specular * objectColor.rgb, objectColor.a);
|
||||||
|
|
||||||
|
color = mix(fogColor, color, fogFactor);
|
||||||
//color = vec4(normal * 0.5 + 0.5, 1.0);
|
//color = vec4(normal * 0.5 + 0.5, 1.0);
|
||||||
//color = vec4(tangent * 0.5 + 0.5, 1.0);;
|
//color = vec4(tangent * 0.5 + 0.5, 1.0);;
|
||||||
//color = vec4(norm * 0.5 + 0.5, 1.0);
|
//color = vec4(norm * 0.5 + 0.5, 1.0);
|
||||||
|
|||||||
@@ -728,6 +728,8 @@ void Renderer::render_world() {
|
|||||||
normal_block_shader.set_loc("specularStrength", m_specular_strength);
|
normal_block_shader.set_loc("specularStrength", m_specular_strength);
|
||||||
normal_block_shader.set_loc("cameraPos", m_camera.get_camera_pos());
|
normal_block_shader.set_loc("cameraPos", m_camera.get_camera_pos());
|
||||||
normal_block_shader.set_loc("flipY", m_flip_y);
|
normal_block_shader.set_loc("flipY", m_flip_y);
|
||||||
|
normal_block_shader.set_loc("renderDistance", m_world.rendering_distance());
|
||||||
|
normal_block_shader.set_loc("skyColor", m_sky_uniform.sky_top);
|
||||||
m_mvp_mat = m_p_mat * m_mv_mat;
|
m_mvp_mat = m_p_mat * m_mv_mat;
|
||||||
|
|
||||||
auto& m_planes = m_world.planes();
|
auto& m_planes = m_world.planes();
|
||||||
|
|||||||
Reference in New Issue
Block a user