Exemple #1
0
        public Vector3?Sample(Vector3 outDir, bool isOnLightSubpath, Vector2 primarySample)
        {
            if (outDir.Z == 0)
            {
                return(null);
            }

            var halfVector = distribution.Sample(outDir, primarySample);

            if (Vector3.Dot(halfVector, outDir) < 0)
            {
                return(null);
            }

            var inDir = ShadingSpace.Reflect(outDir, halfVector);

            if (!ShadingSpace.SameHemisphere(outDir, inDir))
            {
                return(null);
            }

            return(inDir);
        }