Variable getPBRDirectClearcoatConst
getPBRDirectClearcoat: "\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\nfn BRDF_GGX_Clearcoat(\n lightDirection: vec3f,\n viewDirection: vec3f,\n normal: vec3f,\n clearcoatF0: vec3f,\n clearcoatF90: f32,\n clearcoatRoughness: f32\n) -> vec3f {\n let halfDir: vec3f = normalize( lightDirection + viewDirection );\n\n let dotNL: f32 = saturate( dot( normal, lightDirection ) );\n let dotNV: f32 = saturate( dot( normal, viewDirection ) );\n let dotNH: f32 = saturate( dot( normal, halfDir ) );\n let dotVH: f32 = saturate( dot( viewDirection, halfDir ) );\n\n let F: vec3f = F_Schlick( clearcoatF0, clearcoatF90, dotVH );\n\n let V: f32 = GeometrySmith( clearcoatRoughness, dotNL, dotNV );\n let D: f32 = DistributionGGX( clearcoatRoughness, dotNH );\n\n return F * ( V * D );\n\n}\n\nfn getPBRDirectClearcoat(\n clearcoatNormal: vec3f,\n viewDirection: vec3f,\n clearcoatF0: vec3f,\n clearcoatF90: f32,\n clearcoatRoughness: f32,\n directLight: DirectLight\n) -> vec3f {\n let NdotLcc: f32 = saturate( dot( clearcoatNormal, directLight.direction ) );\n\n let ccIrradiance: vec3f = NdotLcc * directLight.color;\n\n return ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, viewDirection, clearcoatNormal, clearcoatF0, clearcoatF90, clearcoatRoughness );\n}\n" = ...
Helper WGSL functions to get the PBR direct clearcoat contribution.