Add renderer selection and progress bar for tev backend

This commit is contained in:
hal8174 2025-07-15 20:34:03 +02:00
parent ee39d9d631
commit 9fa518572e
Signed by: hal8174
SSH key fingerprint: SHA256:JwuqS+eVfISfKr+DkDQ6NWAbGd1jFAHkPpCM1yCnlTs
3 changed files with 216 additions and 54 deletions

142
Cargo.lock generated
View file

@ -510,6 +510,19 @@ dependencies = [
"memchr",
]
[[package]]
name = "console"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d"
dependencies = [
"encode_unicode",
"libc",
"once_cell",
"unicode-width 0.2.1",
"windows-sys 0.60.2",
]
[[package]]
name = "core-foundation"
version = "0.9.4"
@ -721,7 +734,7 @@ dependencies = [
"log",
"raw-window-handle",
"smithay-clipboard",
"web-time",
"web-time 0.2.4",
"webbrowser",
"winit",
]
@ -756,6 +769,12 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "encode_unicode"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "epaint"
version = "0.24.1"
@ -1235,6 +1254,19 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "indicatif"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd"
dependencies = [
"console",
"portable-atomic",
"unicode-width 0.2.1",
"unit-prefix",
"web-time 1.1.0",
]
[[package]]
name = "instant"
version = "0.1.13"
@ -1496,7 +1528,7 @@ dependencies = [
"terminal_size",
"textwrap",
"thiserror",
"unicode-width",
"unicode-width 0.1.14",
]
[[package]]
@ -2011,6 +2043,12 @@ dependencies = [
"miniz_oxide",
]
[[package]]
name = "portable-atomic"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
[[package]]
name = "ppv-lite86"
version = "0.2.20"
@ -2256,6 +2294,7 @@ name = "ray-tracing-tev"
version = "0.1.0"
dependencies = [
"clap",
"indicatif",
"rand",
"ray-tracing-core",
"ray-tracing-renderer",
@ -2679,7 +2718,7 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
dependencies = [
"smawk",
"unicode-linebreak",
"unicode-width",
"unicode-width 0.1.14",
]
[[package]]
@ -2833,6 +2872,18 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "unicode-width"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
[[package]]
name = "unit-prefix"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817"
[[package]]
name = "url"
version = "2.5.4"
@ -3121,6 +3172,16 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "web-time"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "webbrowser"
version = "0.8.15"
@ -3220,6 +3281,15 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-sys"
version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
"windows-targets 0.53.2",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
@ -3259,13 +3329,29 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
"windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
name = "windows-targets"
version = "0.53.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
dependencies = [
"windows_aarch64_gnullvm 0.53.0",
"windows_aarch64_msvc 0.53.0",
"windows_i686_gnu 0.53.0",
"windows_i686_gnullvm 0.53.0",
"windows_i686_msvc 0.53.0",
"windows_x86_64_gnu 0.53.0",
"windows_x86_64_gnullvm 0.53.0",
"windows_x86_64_msvc 0.53.0",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@ -3284,6 +3370,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@ -3302,6 +3394,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_aarch64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@ -3320,12 +3418,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@ -3344,6 +3454,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_i686_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@ -3362,6 +3478,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnu"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@ -3380,6 +3502,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@ -3398,6 +3526,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "windows_x86_64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]]
name = "winit"
version = "0.28.7"

View file

@ -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"

View file

@ -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();
}
}
}