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
        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);
        }
Beispiel #3
0
 public override float Sample(Surfel surfel, out Vector3 wi, out float pdf)
 {
     return(brdf.Sample(surfel, out wi, Mathf.CreateSample(), out pdf));
 }