Add renderer selection and progress bar for tev backend
This commit is contained in:
parent
ee39d9d631
commit
9fa518572e
3 changed files with 216 additions and 54 deletions
|
|
@ -11,3 +11,4 @@ ray-tracing-renderer = { path = "../ray-tracing-renderer" }
|
|||
rayon = "1.10.0"
|
||||
rand = { version = "0.8.5", features = ["small_rng"] }
|
||||
clap = { version = "4.5.19", features = ["derive"] }
|
||||
indicatif = "0.18.0"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
use clap::Parser;
|
||||
use indicatif::{ProgressBar, ProgressStyle};
|
||||
use rand::{rngs::SmallRng, SeedableRng};
|
||||
use ray_tracing_core::{
|
||||
camera::{BasicCamera, Camera},
|
||||
|
|
@ -19,6 +20,9 @@ use tev_client::{PacketCreateImage, PacketUpdateImage, TevClient, TevError};
|
|||
struct Args {
|
||||
#[arg(long, default_value = "127.0.0.1:14158")]
|
||||
tev: String,
|
||||
#[arg(long)]
|
||||
renderers: Vec<String>,
|
||||
#[arg(long)]
|
||||
scenes: Vec<String>,
|
||||
#[arg(long, default_value_t = 400)]
|
||||
width: u32,
|
||||
|
|
@ -42,6 +46,15 @@ fn render_image<
|
|||
) -> Result<(), TevError> {
|
||||
let mut data = vec![0.0; (renderer.width() * renderer.height() * 3) as usize];
|
||||
|
||||
let bar = ProgressBar::new(renderer.width() as u64 * renderer.height() as u64);
|
||||
bar.set_style(
|
||||
ProgressStyle::with_template(
|
||||
"[{elapsed_precise}] [{wide_bar:.cyan/blue}] {percent_precise}% ({eta_precise})",
|
||||
)
|
||||
.unwrap()
|
||||
.progress_chars("#>-"),
|
||||
);
|
||||
|
||||
let start = std::time::Instant::now();
|
||||
data.par_chunks_mut(3).enumerate().for_each(|(i, c)| {
|
||||
let x = (i % renderer.width() as usize) as u32;
|
||||
|
|
@ -59,7 +72,11 @@ fn render_image<
|
|||
c[2] += r.b();
|
||||
}
|
||||
}
|
||||
bar.inc(1);
|
||||
});
|
||||
|
||||
bar.finish_and_clear();
|
||||
|
||||
println!("Rendered \"{}\" in {:?}", name.as_ref(), start.elapsed());
|
||||
|
||||
let channel_names = &["r", "g", "b"];
|
||||
|
|
@ -115,59 +132,69 @@ fn main() {
|
|||
f.get_horizontal_fov(),
|
||||
);
|
||||
|
||||
let r = DepthRenderer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - depth renderer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
if args.renderers.is_empty() || args.renderers.contains(&String::from("depth")) {
|
||||
let r = DepthRenderer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - depth renderer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let r = PathTracer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
if args.renderers.is_empty() || args.renderers.contains(&String::from("path")) {
|
||||
let r = PathTracer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let r = PathTracerImportance::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer importance"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
if args.renderers.is_empty() || args.renderers.contains(&String::from("importance")) {
|
||||
let r = PathTracerImportance::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer importance"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let r = NextEventEstimation::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - next event estimation"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
if args.renderers.is_empty() || args.renderers.contains(&String::from("nee")) {
|
||||
let r = NextEventEstimation::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - next event estimation"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let r = MIS::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - mis"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
if args.renderers.is_empty() || args.renderers.contains(&String::from("mis")) {
|
||||
let r = MIS::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - mis"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
args.samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue