Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -746,12 +746,12 @@ void light_process_spot(uint idx, vec3 vertex, hvec3 eye_vec, hvec3 normal, vec3
float light_length = length(light_rel_vec);
hvec3 light_rel_vec_norm = hvec3(light_rel_vec / light_length);
half spot_attenuation = get_omni_attenuation(light_length, spot_lights.data[idx].inv_radius, spot_lights.data[idx].attenuation);
hvec3 spot_dir = hvec3(spot_lights.data[idx].direction);
half cone_angle = half(spot_lights.data[idx].cone_angle);
half scos = max(dot(-light_rel_vec_norm, spot_dir), cone_angle);
vec3 spot_dir = spot_lights.data[idx].direction;
float cone_angle = spot_lights.data[idx].cone_angle;
float scos = max(dot(-vec3(light_rel_vec_norm), spot_dir), cone_angle);

// This conversion to a highp float is crucial to prevent light leaking due to precision errors.
float spot_rim = max(1e-4, float(half(1.0) - scos) / float(half(1.0) - cone_angle));
float spot_rim = max(1e-4, (1.0 - scos) / (1.0 - cone_angle));
spot_attenuation *= half(1.0 - pow(spot_rim, spot_lights.data[idx].cone_attenuation));

// Compute size.
Expand Down Expand Up @@ -779,7 +779,7 @@ void light_process_spot(uint idx, vec3 vertex, hvec3 eye_vec, hvec3 normal, vec3
//soft shadow

//find blocker
float z_norm = dot(vec3(spot_dir), -light_rel_vec) * spot_lights.data[idx].inv_radius;
float z_norm = dot(spot_dir, -light_rel_vec) * spot_lights.data[idx].inv_radius;

vec2 shadow_uv = splane.xy * spot_lights.data[idx].atlas_rect.zw + spot_lights.data[idx].atlas_rect.xy;

Expand Down Expand Up @@ -857,7 +857,7 @@ void light_process_spot(uint idx, vec3 vertex, hvec3 eye_vec, hvec3 normal, vec3
shadow_z = 2.0 * z_near * z_far / (z_far + z_near - shadow_z * (z_far - z_near));

//distance to light plane
float z = dot(vec3(spot_dir), -light_rel_vec);
float z = dot(spot_dir, -light_rel_vec);
transmittance_z = half(z - shadow_z);
}
#endif // !SHADOWS_DISABLED
Expand Down
Loading