/// <summary> /// Create a new renderer /// </summary> /// <param name="scene">the scene to render</param> /// <param name="sampler">the sampler</param> /// <param name="camera">the camera</param> /// <param name="film">the film to write to</param> /// <param name="integrator">the surface integrator</param> public Renderer(Scene scene, Sampler sampler, Camera camera, Film film, Integrator integrator) { Film = film; Scene = scene; Sampler = sampler; Camera = camera; Integrator = integrator; }
/// <summary> /// Compute radiance for a sample /// </summary> /// <param name="sample"></param> /// <param name="ray"></param> /// <returns></returns> public SampledSpectrum Li(Sample sample, Ray ray = null) { ray = ray ?? Camera.GenerateRay(sample); var intersection = new Intersection(); var spectrum = SampledSpectrum.Black(); if (Scene.TryToIntersect(ray, ref intersection)) { spectrum = Integrator.Li(Scene, ray, this, sample, ref intersection); } else { spectrum = Scene.Lights.Aggregate(spectrum, (current, light) => current + light.Le(ray)); } return(spectrum); }