pbrt_r3/core/api/scene_context/
render_options.rs

1use crate::core::base::*;
2use crate::core::light::*;
3use crate::core::medium::*;
4use crate::core::param_set::*;
5use crate::core::primitive::*;
6
7use std::collections::HashMap;
8use std::sync::Arc;
9
10/*
11Float transformStartTime = 0, transformEndTime = 1;
12    std::string FilterName = "box";
13    ParamSet FilterParams;
14    std::string FilmName = "image";
15    ParamSet FilmParams;
16    std::string SamplerName = "halton";
17    ParamSet SamplerParams;
18    std::string AcceleratorName = "bvh";
19    ParamSet AcceleratorParams;
20    std::string IntegratorName = "path";
21    ParamSet IntegratorParams;
22    std::string CameraName = "perspective";
23    ParamSet CameraParams;
24    TransformSet CameraToWorld;
25    std::map<std::string, std::shared_ptr<Medium>> namedMedia;
26    std::vector<std::shared_ptr<Light>> lights;
27    std::vector<std::shared_ptr<Primitive>> primitives;
28    std::map<std::string, std::vector<std::shared_ptr<Primitive>>> instances;
29    std::vector<std::shared_ptr<Primitive>> *currentInstance = nullptr;
30    bool haveScatteringMedia = false;
31*/
32
33type PrimitivesMap = HashMap<String, Vec<Arc<dyn Primitive>>>;
34type NamedMediumMap = HashMap<String, Arc<dyn Medium>>;
35
36pub struct RenderOptions {
37    pub transform_start_time: Float,
38    pub transform_end_time: Float,
39    pub filter_name: String,
40    pub filter_params: ParamSet,
41    pub film_name: String,
42    pub film_params: ParamSet,
43    pub sampler_name: String,
44    pub sampler_params: ParamSet,
45    pub accelerator_name: String,
46    pub accelerator_params: ParamSet,
47    pub integrator_name: String,
48    pub integrator_params: ParamSet,
49    pub camera_name: String,
50    pub camera_params: ParamSet,
51    //CameraToWorld
52    pub named_media: NamedMediumMap,
53    pub lights: Vec<Arc<dyn Light>>,
54    pub primitives: Vec<Arc<dyn Primitive>>,
55    pub instances: PrimitivesMap,
56    pub current_instance_name: Option<String>,
57    pub have_scattering_media: bool,
58}
59
60impl RenderOptions {
61    pub fn new() -> Self {
62        let accelerator_name =
63            std::env::var("PBRT_ACCELERATOR").unwrap_or_else(|_| "bvh".to_string());
64        RenderOptions {
65            transform_start_time: 0.0,
66            transform_end_time: 1.0,
67            filter_name: String::from("box"),
68            filter_params: ParamSet::new(),
69            film_name: String::from("image"),
70            film_params: ParamSet::new(),
71            sampler_name: String::from("halton"),
72            sampler_params: ParamSet::new(),
73            accelerator_name: accelerator_name,
74            accelerator_params: ParamSet::new(),
75            integrator_name: String::from("path"),
76            integrator_params: ParamSet::new(),
77            camera_name: String::from("perspective"),
78            camera_params: ParamSet::new(),
79            //
80            named_media: NamedMediumMap::new(),
81            lights: Vec::new(),
82            primitives: Vec::new(),
83            instances: PrimitivesMap::new(),
84            current_instance_name: None,
85            have_scattering_media: false,
86        }
87    }
88}