コード例 #1
0
        /// <summary>
        /// Computes the ratio of self-masked area to visible area. Used by <see cref="MaskingShadowing(Vector3)"/>.
        /// </summary>
        /// <param name="normal">Normal of the microfacets, in shading space.</param>
        /// <returns>Ratio of self-masked area to visible area.</returns>
        public float MaskingRatio(Vector3 normal)
        {
            float absTanTheta = MathF.Abs(ShadingSpace.TanTheta(normal));

            if (float.IsInfinity(absTanTheta))
            {
                return(0);
            }
            float alpha           = MathF.Sqrt(ShadingSpace.CosPhiSqr(normal) * AlphaX * AlphaX + ShadingSpace.SinPhiSqr(normal) * AlphaY * AlphaY);
            float alpha2Tan2Theta = alpha * absTanTheta * (alpha * absTanTheta);

            return((-1 + MathF.Sqrt(1 + alpha2Tan2Theta)) / 2);
        }