Add clap to tev
This commit is contained in:
parent
b11e7a7a78
commit
534a7d7097
3 changed files with 185 additions and 54 deletions
|
|
@ -1,3 +1,4 @@
|
|||
use clap::Parser;
|
||||
use rand::{rngs::SmallRng, SeedableRng};
|
||||
use ray_tracing_core::{
|
||||
camera::{BasicCamera, Camera},
|
||||
|
|
@ -9,12 +10,24 @@ use ray_tracing_renderer::{
|
|||
depth_renderer::DepthRenderer, path_tracer::PathTracer,
|
||||
path_tracer_importance::PathTracerImportance,
|
||||
};
|
||||
use ray_tracing_scene::examples::cornell2;
|
||||
use ray_tracing_scene::triangle_bvh::TriangleBVH;
|
||||
use ray_tracing_scene::examples::example_scenes;
|
||||
use rayon::prelude::*;
|
||||
use std::net::TcpStream;
|
||||
use tev_client::{PacketCreateImage, PacketUpdateImage, TevClient, TevError};
|
||||
|
||||
#[derive(Parser)]
|
||||
struct Args {
|
||||
#[arg(default_value = "127.0.0.1:14158")]
|
||||
tev: String,
|
||||
scenes: Vec<String>,
|
||||
#[arg(default_value_t = 400)]
|
||||
width: u32,
|
||||
#[arg(default_value_t = 400)]
|
||||
height: u32,
|
||||
#[arg(default_value_t = 1024)]
|
||||
samples_per_pixel: usize,
|
||||
}
|
||||
|
||||
fn render_image<
|
||||
R: ClassicalRenderer<SmallRng, S, C> + Sync,
|
||||
S: Scene<SmallRng> + Sync,
|
||||
|
|
@ -69,63 +82,66 @@ fn render_image<
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn get_scene() -> (TriangleBVH<SmallRng>, BasicCamera) {
|
||||
let s = cornell2();
|
||||
|
||||
let c = BasicCamera::new(
|
||||
400,
|
||||
400,
|
||||
s.camera_pos,
|
||||
s.camera_dir,
|
||||
s.camera_up,
|
||||
s.horizontal_fov,
|
||||
);
|
||||
|
||||
(s.scene, c)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut client = TevClient::wrap(TcpStream::connect("127.0.0.1:14158").unwrap());
|
||||
let args = Args::parse();
|
||||
|
||||
let (s, c) = get_scene();
|
||||
let width = 400;
|
||||
let height = 400;
|
||||
let mut client = TevClient::wrap(TcpStream::connect(args.tev).unwrap());
|
||||
|
||||
let r = DepthRenderer::new(width, height);
|
||||
render_image("depth renderer", &r, &s, &c, 128, &mut client).unwrap();
|
||||
let map = example_scenes();
|
||||
|
||||
let samples_per_pixel = 1024;
|
||||
let scenes: Vec<&str> = if args.scenes.is_empty() {
|
||||
map.keys().copied().collect()
|
||||
} else {
|
||||
args.scenes.iter().map(|s| s.as_str()).collect()
|
||||
};
|
||||
|
||||
let r = PathTracer::new(width, height);
|
||||
render_image(
|
||||
"example path tracer",
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
for scene in scenes {
|
||||
let f = map.get(scene).unwrap();
|
||||
let e = f();
|
||||
|
||||
let r = PathTracerImportance::new(width, height);
|
||||
render_image(
|
||||
"example path tracer importance 1024",
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
let c = BasicCamera::new(
|
||||
args.width,
|
||||
args.height,
|
||||
e.camera_pos,
|
||||
e.camera_dir,
|
||||
e.camera_up,
|
||||
e.horizontal_fov,
|
||||
);
|
||||
let s = e.scene;
|
||||
|
||||
let r = PathTracerImportance::new(width, height);
|
||||
render_image(
|
||||
"example path tracer importance 2048",
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
2048,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
let r = DepthRenderer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - depth renderer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
128,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let samples_per_pixel = 1024;
|
||||
|
||||
let r = PathTracer::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let r = PathTracerImportance::new(args.width, args.height);
|
||||
render_image(
|
||||
format!("{scene} - path tracer importance"),
|
||||
&r,
|
||||
&s,
|
||||
&c,
|
||||
samples_per_pixel,
|
||||
&mut client,
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue