1#define_import_path bevy_solari::brdf 3#import bevy_pbr::lighting::{F_AB, D_GGX, V_SmithGGXCorrelated, fresnel, specular_multiscatter} 4#import bevy_pbr::pbr_functions::{calculate_diffuse_color, calculate_F0} 5#import bevy_render::maths::PI 6#import bevy_solari::scene_bindings::ResolvedMaterial 9 world_normal: vec3<f32>, 12 material: ResolvedMaterial, 14 let diffuse_brdf = diffuse_brdf(material.base_color, material.metallic); 15 let specular_brdf = specular_brdf( 22 material.perceptual_roughness, 25 return diffuse_brdf + specular_brdf; 28fn diffuse_brdf(base_color: vec3<f32>, metallic: f32) -> vec3<f32> { 29 let diffuse_color = calculate_diffuse_color(base_color, metallic, 0.0, 0.0); 30 return diffuse_color / PI; 37 base_color: vec3<f32>, 39 reflectance: vec3<f32>, 40 perceptual_roughness: f32, 43 let H = normalize(L + V); 44 let NdotL = saturate(dot(N, L)); 45 let NdotH = saturate(dot(N, H)); 46 let LdotH = saturate(dot(L, H)); 47 let NdotV = max(dot(N, V), 0.0001); 49 let F0 = calculate_F0(base_color, metallic, reflectance); 50 let F_ab = F_AB(perceptual_roughness, NdotV); 52 let D = D_GGX(roughness, NdotH); 53 let Vs = V_SmithGGXCorrelated(roughness, NdotV, NdotL); 54 let F = fresnel(F0, LdotH); 55 return specular_multiscatter(D, Vs, F, F0, F_ab, 1.0);