From 5a53d7f6f6ab65ce244e33e2969abf28e43f5507 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Sat, 29 Jun 2019 09:20:04 +0900 Subject: [PATCH] Added some additional ray tracing stats. --- src/main.rs | 5 +++++ src/renderer.rs | 4 ++++ src/tracer.rs | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/src/main.rs b/src/main.rs index 9a349dc..753e074 100644 --- a/src/main.rs +++ b/src/main.rs @@ -292,6 +292,11 @@ fn main() { "\t\tTrace: {:.3}s", ntime * rstats.trace_time ); + println!("\t\t\tRays traced: {}", rstats.ray_count); + println!( + "\t\t\tRays/sec: {}", + (rstats.ray_count as f64 / (ntime * rstats.trace_time) as f64) as u64 + ); println!( "\t\t\tTraversal: {:.3}s", ntime * rstats.accel_traversal_time diff --git a/src/renderer.rs b/src/renderer.rs index 2c3077d..4d2104e 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -42,6 +42,7 @@ pub struct RenderStats { pub trace_time: f64, pub accel_traversal_time: f64, pub accel_node_visits: u64, + pub ray_count: u64, pub initial_ray_generation_time: f64, pub ray_generation_time: f64, pub sample_writing_time: f64, @@ -54,6 +55,7 @@ impl RenderStats { trace_time: 0.0, accel_traversal_time: 0.0, accel_node_visits: 0, + ray_count: 0, initial_ray_generation_time: 0.0, ray_generation_time: 0.0, sample_writing_time: 0.0, @@ -65,6 +67,7 @@ impl RenderStats { self.trace_time += other.trace_time; self.accel_traversal_time += other.accel_traversal_time; self.accel_node_visits += other.accel_node_visits; + self.ray_count += other.ray_count; self.initial_ray_generation_time += other.initial_ray_generation_time; self.ray_generation_time += other.ray_generation_time; self.sample_writing_time += other.sample_writing_time; @@ -344,6 +347,7 @@ impl<'a> Renderer<'a> { } stats.total_time += total_timer.tick() as f64; + stats.ray_count = tracer.rays_traced(); ACCEL_TRAV_TIME.with(|att| { stats.accel_traversal_time = att.get(); att.set(0.0); diff --git a/src/tracer.rs b/src/tracer.rs index d689d44..d3b5b09 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -13,6 +13,7 @@ use crate::{ }; pub struct Tracer<'a> { + ray_trace_count: u64, ray_stack: RayStack, inner: TracerInner<'a>, } @@ -20,6 +21,7 @@ pub struct Tracer<'a> { impl<'a> Tracer<'a> { pub fn from_assembly(assembly: &'a Assembly) -> Tracer<'a> { Tracer { + ray_trace_count: 0, ray_stack: RayStack::new(), inner: TracerInner { root: assembly, @@ -30,8 +32,13 @@ impl<'a> Tracer<'a> { } pub fn trace<'b>(&'b mut self, rays: &mut RayBatch) -> &'b [SurfaceIntersection] { + self.ray_trace_count += rays.len() as u64; self.inner.trace(rays, &mut self.ray_stack) } + + pub fn rays_traced(&self) -> u64 { + self.ray_trace_count + } } struct TracerInner<'a> {