public static void TestRender(int spp, int height) { var aspectRatio = 1f; var width = (int)(height * aspectRatio); var from = new Point(278, 278, -800f); var to = new Point(278, 278, 0); var fov = MathF.Deg(278f / 400f); //var transform = Transform.LookAt2(from, to, Vectors.Up); var transform = Transform.Translate(278, 278, -800); var dist = Point.Distance(from, to); var filter = new MitchellFilter(new Vector2(2f, 2f), 0.5f, 0.25f); var film = new Film(new PixelVector(width, height), new Bounds2D(0, 0, 1, 1), filter, 20f, 1f); var camera = PerspectiveCamera.Create(transform, aspectRatio, 0.8f, dist, fov, film); //var integrator = new AmbientOcclusionIntegrator(true, 64, camera, // new HaltonSampler(spp, film.GetSampleBounds()), // film.CroppedBounds); //var integrator = new DepthIntegrator(700f, 1000f, camera, new HaltonSampler(spp, film.GetSampleBounds()), // film.CroppedBounds); //var integrator = new NormalIntegrator(camera, new HaltonSampler(spp, film.GetSampleBounds()), // film.CroppedBounds); var integrator = new WhittedIntegrator(5, camera, new HaltonSampler(spp, film.GetSampleBounds()), film.CroppedBounds); film.SetSink(new Sink(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "int")); var scene = Build(); Console.WriteLine("Rendering at {0}x{1}...", width, height); var stopwatch = new Stopwatch(); stopwatch.Start(); integrator.Render(scene); stopwatch.Stop(); Console.WriteLine("Done ({0})", stopwatch.Elapsed); }
public Integrator MakeIntegrator(PbrtOptions options) { Camera camera = MakeCamera(options); if (camera == null) { //Error("Unable to create camera"); return(null); } Sampler sampler = PbrtApi.MakeSampler(SamplerName, SamplerParams, camera.Film); if (sampler == null) { //Error("Unable to create sampler."); return(null); } Integrator integrator = null; switch (IntegratorName) { case "whitted": integrator = WhittedIntegrator.Create(IntegratorParams, sampler, camera); break; //case "directlighting": // integrator = // CreateDirectLightingIntegrator(IntegratorParams, sampler, camera); // break; //case "path": // integrator = CreatePathIntegrator(IntegratorParams, sampler, camera); // break; //case "volpath": // integrator = CreateVolPathIntegrator(IntegratorParams, sampler, camera); // break; //case "bdpt": // integrator = CreateBDPTIntegrator(IntegratorParams, sampler, camera); // break; //case "mlt": // integrator = CreateMLTIntegrator(IntegratorParams, camera); // break; //case "ambientocclusion": // integrator = CreateAOIntegrator(IntegratorParams, sampler, camera); // break; //case "sppm": // integrator = CreateSPPMIntegrator(IntegratorParams, camera); // break; default: //Error("Integrator \"%s\" unknown.", IntegratorName.c_str()); return(null); } if (HasScatteringMedia && IntegratorName != "volpath" && IntegratorName != "bdpt" && IntegratorName != "mlt") { //Warning( // "Scene has scattering media but \"%s\" integrator doesn't support " // "volume scattering. Consider using \"volpath\", \"bdpt\", or " // "\"mlt\".", IntegratorName.c_str()); } IntegratorParams.ReportUnused(); // Warn if no light sources are defined if (!Lights.Any()) { //Warning( // "No light sources defined in scene; " //"rendering a black image."); } return(integrator); }