-Fixed screen edge SSAO filter, fixes #9678
-Raised the SSAO limits, making the effect a lot more useful -Still pending to enable tresholding to avoid some hollow places
This commit is contained in:
parent
089cf8176e
commit
e8b05ca996
|
@ -3259,6 +3259,8 @@ void RasterizerSceneGLES3::_render_mrts(Environment *env, const CameraMatrix &p_
|
||||||
state.ssao_blur_shader.set_uniform(SsaoBlurShaderGLES3::CAMERA_Z_NEAR, p_cam_projection.get_z_near());
|
state.ssao_blur_shader.set_uniform(SsaoBlurShaderGLES3::CAMERA_Z_NEAR, p_cam_projection.get_z_near());
|
||||||
GLint axis[2] = { i, 1 - i };
|
GLint axis[2] = { i, 1 - i };
|
||||||
glUniform2iv(state.ssao_blur_shader.get_uniform(SsaoBlurShaderGLES3::AXIS), 1, axis);
|
glUniform2iv(state.ssao_blur_shader.get_uniform(SsaoBlurShaderGLES3::AXIS), 1, axis);
|
||||||
|
glUniform2iv(state.ssao_blur_shader.get_uniform(SsaoBlurShaderGLES3::SCREEN_SIZE), 1, ss);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->effects.ssao.blur_red[i]);
|
glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->effects.ssao.blur_red[i]);
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
|
|
|
@ -56,6 +56,8 @@ uniform ivec2 axis;
|
||||||
uniform float camera_z_far;
|
uniform float camera_z_far;
|
||||||
uniform float camera_z_near;
|
uniform float camera_z_near;
|
||||||
|
|
||||||
|
uniform ivec2 screen_size;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
ivec2 ssC = ivec2(gl_FragCoord.xy);
|
ivec2 ssC = ivec2(gl_FragCoord.xy);
|
||||||
|
@ -83,6 +85,7 @@ void main() {
|
||||||
float totalWeight = BASE;
|
float totalWeight = BASE;
|
||||||
sum *= totalWeight;
|
sum *= totalWeight;
|
||||||
|
|
||||||
|
ivec2 clamp_limit = screen_size - ivec2(1);
|
||||||
|
|
||||||
for (int r = -R; r <= R; ++r) {
|
for (int r = -R; r <= R; ++r) {
|
||||||
// We already handled the zero case above. This loop should be unrolled and the static branch optimized out,
|
// We already handled the zero case above. This loop should be unrolled and the static branch optimized out,
|
||||||
|
@ -90,8 +93,8 @@ void main() {
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
|
|
||||||
ivec2 ppos = ssC + axis * (r * SCALE);
|
ivec2 ppos = ssC + axis * (r * SCALE);
|
||||||
float value = texelFetch(source_ssao, ppos, 0).r;
|
float value = texelFetch(source_ssao, clamp(ppos,ivec2(0),clamp_limit), 0).r;
|
||||||
float temp_depth = texelFetch(source_depth, ssC, 0).r;
|
float temp_depth = texelFetch(source_depth, clamp(ssC,ivec2(0),clamp_limit), 0).r;
|
||||||
|
|
||||||
temp_depth = temp_depth * 2.0 - 1.0;
|
temp_depth = temp_depth * 2.0 - 1.0;
|
||||||
temp_depth = 2.0 * camera_z_near * camera_z_far / (camera_z_far + camera_z_near - temp_depth * (camera_z_far - camera_z_near));
|
temp_depth = 2.0 * camera_z_near * camera_z_far / (camera_z_far + camera_z_near - temp_depth * (camera_z_far - camera_z_near));
|
||||||
|
|
|
@ -994,10 +994,10 @@ void Environment::_bind_methods() {
|
||||||
|
|
||||||
ADD_GROUP("SSAO", "ssao_");
|
ADD_GROUP("SSAO", "ssao_");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssao_enabled"), "set_ssao_enabled", "is_ssao_enabled");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssao_enabled"), "set_ssao_enabled", "is_ssao_enabled");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius", PROPERTY_HINT_RANGE, "0.1,16,0.1"), "set_ssao_radius", "get_ssao_radius");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius", PROPERTY_HINT_RANGE, "0.1,128,0.1"), "set_ssao_radius", "get_ssao_radius");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity", PROPERTY_HINT_RANGE, "0.0,9,0.1"), "set_ssao_intensity", "get_ssao_intensity");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_intensity", "get_ssao_intensity");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius2", PROPERTY_HINT_RANGE, "0.0,16,0.1"), "set_ssao_radius2", "get_ssao_radius2");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius2", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_radius2", "get_ssao_radius2");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity2", PROPERTY_HINT_RANGE, "0.0,9,0.1"), "set_ssao_intensity2", "get_ssao_intensity2");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity2", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_intensity2", "get_ssao_intensity2");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_bias", PROPERTY_HINT_RANGE, "0.001,8,0.001"), "set_ssao_bias", "get_ssao_bias");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_bias", PROPERTY_HINT_RANGE, "0.001,8,0.001"), "set_ssao_bias", "get_ssao_bias");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_light_affect", PROPERTY_HINT_RANGE, "0.00,1,0.01"), "set_ssao_direct_light_affect", "get_ssao_direct_light_affect");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_light_affect", PROPERTY_HINT_RANGE, "0.00,1,0.01"), "set_ssao_direct_light_affect", "get_ssao_direct_light_affect");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "ssao_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_ssao_color", "get_ssao_color");
|
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "ssao_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_ssao_color", "get_ssao_color");
|
||||||
|
|
Loading…
Reference in New Issue