Beispiel #1
0
        public Camera MakeCamera(PbrtOptions options)
        {
            Filter filter = PbrtApi.MakeFilter(FilterName, FilterParams);
            Film   film   = PbrtApi.MakeFilm(options, FilmName, FilmParams, filter);

            if (film == null)
            {
                //Error("Unable to create film.");
                return(null);
            }
            Camera camera = PbrtApi.MakeCamera(CameraName, CameraParams, CameraToWorld,
                                               TransformStartTime,
                                               TransformEndTime, film);

            return(camera);
        }
Beispiel #2
0
        public static Film MakeFilm(PbrtOptions options, string name, ParamSet paramSet, Filter filter)
        {
            Film film = null;

            switch (name)
            {
            case "image":
                film = Film.Create(options, paramSet, filter);
                break;

            default:
                //Warning("Film \"%s\" unknown.", name.c_str());
                break;
            }

            paramSet.ReportUnused();
            return(film);
        }
Beispiel #3
0
        public static Film Create(PbrtOptions options, ParamSet paramSet, Filter filter)
        {
            string filename;

            if (options.ImageFile != "")
            {
                filename = options.ImageFile;
                string paramsFilename = paramSet.FindOneString("filename", "");
                if (paramsFilename != "")
                {
                    //Warning(
                    //  "Output filename supplied on command line, \"%s\" is overriding filename provided in scene description file, \"%s\".",
                    //PbrtOptions.imageFile.c_str(), paramsFilename.c_str());
                }
            }
            else
            {
                filename = paramSet.FindOneString("filename", "pbrt.exr");
            }

            int xres = paramSet.FindOneInt("xresolution", 1280);
            int yres = paramSet.FindOneInt("yresolution", 720);

            if (options.QuickRender)
            {
                xres = Math.Max(1, xres / 4);
            }

            if (options.QuickRender)
            {
                yres = Math.Max(1, yres / 4);
            }

            Bounds2D crop;
            int      cwi;

            double[] cr = paramSet.FindFloat("cropwindow");
            if (cr != null && cr.Length == 4)
            {
                double minx = PbrtMath.Clamp(Math.Min(cr[0], cr[1]), 0.0, 1.0);
                double maxx = PbrtMath.Clamp(Math.Max(cr[0], cr[1]), 0.0, 1.0);
                double miny = PbrtMath.Clamp(Math.Min(cr[2], cr[3]), 0.0, 1.0);
                double maxy = PbrtMath.Clamp(Math.Max(cr[2], cr[3]), 0.0, 1.0);
                crop = new Bounds2D(new Point2D(minx, miny), new Point2D(maxx, maxy));
            }
            else if (cr != null)
            {
                throw new InvalidOperationException();
                //Error("%d values supplied for \"cropwindow\". Expected 4.", cwi);
            }
            else
            {
                crop = new Bounds2D(new Point2D(PbrtMath.Clamp(options.CropWindow[0, 0], 0.0, 1.0),
                                                PbrtMath.Clamp(options.CropWindow[1, 0], 0.0, 1.0)),
                                    new Point2D(PbrtMath.Clamp(options.CropWindow[0, 1], 0.0, 1.0),
                                                PbrtMath.Clamp(options.CropWindow[1, 1], 0.0, 1.0)));
            }

            double scale              = paramSet.FindOneFloat("scale", 1.0);
            double diagonal           = paramSet.FindOneFloat("diagonal", 35.0);
            double maxSampleLuminance = paramSet.FindOneFloat("maxsampleluminance",
                                                              double.PositiveInfinity);

            return(new Film(new Point2I(xres, yres), crop, filter, diagonal,
                            filename, scale, maxSampleLuminance));
        }
Beispiel #4
0
        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);
        }