public override ShadingInfo GetShadingInfo(Surfel surfel) { return(new ShadingInfo() { direction = Mathf.CosineSampleHemisphere(surfel.normal, Mathf.CreateSample()), distance = float.PositiveInfinity, color = color * intensity }); }
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); }
public override float Sample(Surfel surfel, out Vector3 wi, out float pdf) { return(brdf.Sample(surfel, out wi, Mathf.CreateSample(), out pdf)); }