Browse Source

GPULightmapper: increase ray triangle hit rate

Currently the method ray_hits_triangle determines triangles not to be hit by
a ray due to an epsilon that is too big. In practice those triangles are hit by
those rays.

This is fixed by introducing a smaller epsilon.
William Deurwaarder 3 years ago
parent
commit
a3f315c81b
1 changed files with 2 additions and 1 deletions
  1. 2 1
      modules/lightmapper_rd/lm_compute.glsl

+ 2 - 1
modules/lightmapper_rd/lm_compute.glsl

@@ -94,13 +94,14 @@ params;
 
 //check it, but also return distance and barycentric coords (for uv lookup)
 bool ray_hits_triangle(vec3 from, vec3 dir, float max_dist, vec3 p0, vec3 p1, vec3 p2, out float r_distance, out vec3 r_barycentric) {
+	const float EPSILON = 0.00001;
 	const vec3 e0 = p1 - p0;
 	const vec3 e1 = p0 - p2;
 	vec3 triangle_normal = cross(e1, e0);
 
 	float n_dot_dir = dot(triangle_normal, dir);
 
-	if (abs(n_dot_dir) < 0.01) {
+	if (abs(n_dot_dir) < EPSILON) {
 		return false;
 	}