6import package::render::{ 7 mesh_view_bindings::fog, 12fn scattering_adjusted_fog_color( 14 scattering: vec3<f32>, 16 if (fog_params.directional_light_color.a > 0.0) { 18 fog_params.base_color.rgb 19 + scattering * fog_params.directional_light_color.rgb * fog_params.directional_light_color.a, 20 fog_params.base_color.a, 23 return fog_params.base_color; 29 input_color: vec4<f32>, 31 scattering: vec3<f32>, 33 var fog_color = scattering_adjusted_fog_color(fog_params, scattering); 34 let start = fog_params.be.x; 35 let end = fog_params.be.y; 36 fog_color.a *= 1.0 - clamp((end - distance) / (end - start), 0.0, 1.0); 37 return vec4<f32>(mix(input_color.rgb, fog_color.rgb, fog_color.a), input_color.a); 42 input_color: vec4<f32>, 44 scattering: vec3<f32>, 46 var fog_color = scattering_adjusted_fog_color(fog_params, scattering); 47 let density = fog_params.be.x; 48 fog_color.a *= 1.0 - 1.0 / exp(distance * density); 49 return vec4<f32>(mix(input_color.rgb, fog_color.rgb, fog_color.a), input_color.a); 52fn exponential_squared_fog( 54 input_color: vec4<f32>, 56 scattering: vec3<f32>, 58 var fog_color = scattering_adjusted_fog_color(fog_params, scattering); 59 let distance_times_density = distance * fog_params.be.x; 60 fog_color.a *= 1.0 - 1.0 / exp(distance_times_density * distance_times_density); 61 return vec4<f32>(mix(input_color.rgb, fog_color.rgb, fog_color.a), input_color.a); 66 input_color: vec4<f32>, 68 scattering: vec3<f32>, 70 var fog_color = scattering_adjusted_fog_color(fog_params, scattering); 71 let extinction_factor = 1.0 - 1.0 / exp(distance * fog_params.be); 72 let inscattering_factor = 1.0 - 1.0 / exp(distance * fog_params.bi); 74 input_color.rgb * (1.0 - extinction_factor * fog_color.a) 75 + fog_color.rgb * inscattering_factor * fog_color.a,