INNER CODE UNIT · Python

NdotH

SedulousWorks/SedulousEngine · Scripts/generate_brdf_lut.py:105

        NdotH = np.maximum(Hz[None, :] * np.ones((SIZE, 1)), 0.0)

        # Only contributing samples (NdotL > 0) accumulate.
        mask = NdotL > 0.0

        # Smith GGX geometry term (split-sum form).
        gv = ndot_v[:, None] / (ndot_v[:, None] * (1.0 - k) + k)
        gl = NdotL / (NdotL * (1.0 - k) + k + 1e-10)
        G = gv * gl

        # G_Vis = G * VdotH / (NdotH * NdotV + epsilon).
        G_Vis = (G * VdotH) / (NdotH * ndot_v[:, None] + 0.0001)

        # Schlick Fresnel split: Fc = (1 - VdotH)^5.
        Fc = np.power(np.maximum(1.0 - VdotH, 0.0), 5.0)

        scale_contrib = np.where(mask, (1.0 - Fc) * G_Vis, 0.0)
        bias_contrib = np.where(mask, Fc * G_Vis, 0.0)

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…