Beispiel #1
0
 public override ShadingInfo GetShadingInfo(Surfel surfel)
 {
     return(new ShadingInfo()
     {
         direction = Mathf.CosineSampleHemisphere(surfel.normal, Mathf.CreateSample()),
         distance = float.PositiveInfinity,
         color = color * intensity
     });
 }
Beispiel #2
0
        public override float Sample(Surfel surfel, out Vector3 wi, Vector2 sample, out float pdf)
        {
            var wo = surfel.ray;
            var up = surfel.normal;

            wi = Mathf.CosineSampleHemisphere(up, sample);
            if (Vector3.Dot(wo, up) < 0)
            {
                wi.Z *= -1;
            }
            pdf = sample.X;
            return(Evaluate(wo, wi));
        }
Beispiel #3
0
        private Color TraceRecursive(Scene scene, Surfel surfel, int depth)
        {
            if (depth >= RenderConfig.rayDepth)
            {
                return(new Color(0f));
            }
            var p     = surfel.point + surfel.normal * RenderConfig.bias;
            var color = new Color(0f);

            for (var i = 0; i < RenderConfig.numberOfRayPerLight; i++)
            {
                var dir = Mathf.CosineSampleHemisphere(surfel.normal, Mathf.CreateSample());
                var ray = new Ray(p, dir);
                if (Raycaster.Raycast(ray, out var hit))
                {
                    var dot = Vector3.Dot(surfel.normal, dir);
                    color += dot * (directIntegrator.GetColor(scene, hit) + TraceRecursive(scene, hit, depth + 1));
                }
            }
            return(color / RenderConfig.numberOfRayPerLight);
        }