Browse Source

Fix opaque pre pass not casting shadows

Juan Linietsky 7 years ago
parent
commit
ad88979841

+ 2 - 0
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -4086,6 +4086,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
 	state.ubo_data.z_slope_scale = 0;
 	state.ubo_data.shadow_dual_paraboloid_render_side = 0;
 	state.ubo_data.shadow_dual_paraboloid_render_zfar = 0;
+	state.ubo_data.opaque_prepass_treshold = 0.99;
 
 	p_cam_projection.get_viewport_size(state.ubo_data.viewport_size[0], state.ubo_data.viewport_size[1]);
 
@@ -4698,6 +4699,7 @@ void RasterizerSceneGLES3::render_shadow(RID p_light, RID p_shadow_atlas, int p_
 	state.ubo_data.z_slope_scale = normal_bias;
 	state.ubo_data.shadow_dual_paraboloid_render_side = dp_direction;
 	state.ubo_data.shadow_dual_paraboloid_render_zfar = zfar;
+	state.ubo_data.opaque_prepass_treshold = 0.1;
 
 	_setup_environment(NULL, light_projection, light_transform);
 

+ 2 - 1
drivers/gles3/rasterizer_scene_gles3.h

@@ -141,6 +141,7 @@ public:
 			float subsurface_scatter_width;
 			float ambient_occlusion_affect_light;
 			float ambient_occlusion_affect_ssao;
+			float opaque_prepass_treshold;
 
 			uint32_t fog_depth_enabled;
 			float fog_depth_begin;
@@ -152,7 +153,7 @@ public:
 			float fog_height_max;
 			float fog_height_curve;
 			// make sure this struct is padded to be a multiple of 16 bytes for webgl
-			float pad[3];
+			float pad[2];
 
 		} ubo_data;
 

+ 4 - 1
drivers/gles3/shaders/scene.glsl

@@ -91,6 +91,7 @@ layout(std140) uniform SceneData { //ubo:0
 	mediump float subsurface_scatter_width;
 	mediump float ambient_occlusion_affect_light;
 	mediump float ambient_occlusion_affect_ao_channel;
+	mediump float opaque_prepass_treshold;
 
 	bool fog_depth_enabled;
 	highp float fog_depth_begin;
@@ -679,6 +680,7 @@ layout(std140) uniform SceneData {
 	mediump float subsurface_scatter_width;
 	mediump float ambient_occlusion_affect_light;
 	mediump float ambient_occlusion_affect_ao_channel;
+	mediump float opaque_prepass_treshold;
 
 	bool fog_depth_enabled;
 	highp float fog_depth_begin;
@@ -1690,9 +1692,10 @@ FRAGMENT_SHADER_CODE
 
 #ifdef USE_OPAQUE_PREPASS
 
-	if (alpha<0.99) {
+	if (alpha<opaque_prepass_treshold) {
 		discard;
 	}
+
 #endif
 
 #if defined(ENABLE_NORMALMAP)