Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vec3 EricHeitz2018GGX(in vec3 V, in vec3 L, in float roughness, in float anisotropic, in float ior)
- {
- float alpha = roughness * roughness;
- float aspect = sqrt(1.0 - 0.9 * anisotropic);
- float alpha_x = alpha * aspect;
- float alpha_y = alpha / aspect;
- vec3 H = normalize(L + V);
- float NoV = CosTheta(V);
- float NoL = CosTheta(L);
- if (NoV < 0.0 || NoL < 0.0) return vec3(0);
- float VoH = dot(V, H);
- float NoH = CosTheta(H);
- vec3 F0 = vec3(abs((1.0 - ior) / (1.0 + ior)));
- F0 = F0 * F0;
- float D = EricHeitz2018GGXD(H, alpha_x, alpha_y);
- vec3 F = SchlickFresnel(max(NoV, 0.0), F0);
- float G = EricHeitz2018GGXG2(V, L, alpha_x, alpha_y);
- return (F * D * G) / (4.0f * VoH * NoH);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement