From f4445417dc66eb45f87a9da84ed2fd074cdc85e4 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Tue, 14 Feb 2017 00:14:08 -0800 Subject: [PATCH] Reorganizing the module tree. Enough things had accumulated that it seemed to make sense to group some stuff together. So here it is. --- src/{ => accel}/bvh.rs | 3 ++- .../mod.rs => accel/light_array.rs} | 19 +------------- src/{light_accel => accel}/light_tree.rs | 2 +- src/accel/mod.rs | 25 +++++++++++++++++++ src/{ => accel}/objects_split.rs | 2 +- src/main.rs | 8 +----- src/parse/psy.rs | 4 +-- src/parse/psy_assembly.rs | 2 +- src/renderer.rs | 2 +- src/{ => sampling}/halton.py | 0 src/{ => sampling}/halton.rs | 0 src/sampling/mod.rs | 6 +++++ src/{sampling.rs => sampling/monte_carlo.rs} | 0 src/{ => scene}/assembly.rs | 4 +-- src/scene/mod.rs | 7 ++++++ src/{ => scene}/scene.rs | 12 ++++----- src/{ => scene}/world.rs | 0 src/surface/mod.rs | 1 + src/{ => surface}/triangle.rs | 0 src/surface/triangle_mesh.rs | 4 +-- src/tracer.rs | 2 +- 21 files changed, 60 insertions(+), 43 deletions(-) rename src/{ => accel}/bvh.rs (99%) rename src/{light_accel/mod.rs => accel/light_array.rs} (80%) rename src/{light_accel => accel}/light_tree.rs (99%) create mode 100644 src/accel/mod.rs rename src/{ => accel}/objects_split.rs (99%) rename src/{ => sampling}/halton.py (100%) rename src/{ => sampling}/halton.rs (100%) create mode 100644 src/sampling/mod.rs rename src/{sampling.rs => sampling/monte_carlo.rs} (100%) rename src/{ => scene}/assembly.rs (99%) create mode 100644 src/scene/mod.rs rename src/{ => scene}/scene.rs (97%) rename src/{ => scene}/world.rs (100%) rename src/{ => surface}/triangle.rs (100%) diff --git a/src/bvh.rs b/src/accel/bvh.rs similarity index 99% rename from src/bvh.rs rename to src/accel/bvh.rs index dad822a..e8c384e 100644 --- a/src/bvh.rs +++ b/src/accel/bvh.rs @@ -6,7 +6,8 @@ use boundable::Boundable; use lerp::lerp_slice; use math::log2_64; use ray::AccelRay; -use objects_split::{sah_split, median_split}; + +use super::objects_split::{sah_split, median_split}; const BVH_MAX_DEPTH: usize = 64; diff --git a/src/light_accel/mod.rs b/src/accel/light_array.rs similarity index 80% rename from src/light_accel/mod.rs rename to src/accel/light_array.rs index 7d42f6f..1d18ae6 100644 --- a/src/light_accel/mod.rs +++ b/src/accel/light_array.rs @@ -1,25 +1,8 @@ -mod light_tree; - use bbox::BBox; use math::{Vector, Point, Normal}; use shading::surface_closure::SurfaceClosure; -pub use self::light_tree::LightTree; - - -pub trait LightAccel { - /// Returns (index_of_light, selection_pdf, whittled_n) - fn select(&self, - inc: Vector, - pos: Point, - nor: Normal, - sc: &SurfaceClosure, - time: f32, - n: f32) - -> Option<(usize, f32, f32)>; - - fn approximate_energy(&self) -> f32; -} +use super::LightAccel; #[derive(Debug, Clone)] pub struct LightArray { diff --git a/src/light_accel/light_tree.rs b/src/accel/light_tree.rs similarity index 99% rename from src/light_accel/light_tree.rs rename to src/accel/light_tree.rs index 8d864dd..3124b87 100644 --- a/src/light_accel/light_tree.rs +++ b/src/accel/light_tree.rs @@ -2,10 +2,10 @@ use algorithm::merge_slices_append; use bbox::BBox; use lerp::lerp_slice; use math::{Vector, Point, Normal}; -use objects_split::sah_split; use shading::surface_closure::SurfaceClosure; use super::LightAccel; +use super::objects_split::sah_split; #[derive(Debug)] diff --git a/src/accel/mod.rs b/src/accel/mod.rs new file mode 100644 index 0000000..9891d77 --- /dev/null +++ b/src/accel/mod.rs @@ -0,0 +1,25 @@ +mod bvh; +mod light_array; +mod light_tree; +mod objects_split; + +use math::{Vector, Point, Normal}; +use shading::surface_closure::SurfaceClosure; + +pub use self::bvh::BVH; +pub use self::light_tree::LightTree; + + +pub trait LightAccel { + /// Returns (index_of_light, selection_pdf, whittled_n) + fn select(&self, + inc: Vector, + pos: Point, + nor: Normal, + sc: &SurfaceClosure, + time: f32, + n: f32) + -> Option<(usize, f32, f32)>; + + fn approximate_energy(&self) -> f32; +} diff --git a/src/objects_split.rs b/src/accel/objects_split.rs similarity index 99% rename from src/objects_split.rs rename to src/accel/objects_split.rs index f047775..fcd0029 100644 --- a/src/objects_split.rs +++ b/src/accel/objects_split.rs @@ -5,9 +5,9 @@ use std::cmp::Ordering; use algorithm::{partition, quick_select}; use bbox::BBox; -use halton; use lerp::lerp_slice; use math::{Vector, dot}; +use sampling::halton; use sampling::uniform_sample_hemisphere; diff --git a/src/main.rs b/src/main.rs index 8595054..0fa90eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,23 +13,19 @@ extern crate nom; #[cfg(feature = "simd_perf")] extern crate simd; +mod accel; mod algorithm; -mod assembly; mod bbox; mod boundable; -mod bvh; mod camera; mod color; mod float4; -mod halton; mod hash; mod hilbert; mod image; mod lerp; -mod light_accel; mod light; mod math; -mod objects_split; mod parse; mod ray; mod renderer; @@ -40,8 +36,6 @@ mod surface; mod timer; mod tracer; mod transform_stack; -mod triangle; -mod world; use std::fs::File; use std::io; diff --git a/src/parse/psy.rs b/src/parse/psy.rs index fea66bd..c2f3f33 100644 --- a/src/parse/psy.rs +++ b/src/parse/psy.rs @@ -7,11 +7,11 @@ use nom::IResult; use camera::Camera; use color::{XYZ, rec709e_to_xyz}; +use light::WorldLightSource; use math::Matrix4x4; use renderer::Renderer; -use world::World; use scene::Scene; -use light::WorldLightSource; +use scene::World; use super::basics::{ws_u32, ws_f32}; use super::DataTree; diff --git a/src/parse/psy_assembly.rs b/src/parse/psy_assembly.rs index bfb415b..9e41630 100644 --- a/src/parse/psy_assembly.rs +++ b/src/parse/psy_assembly.rs @@ -2,7 +2,7 @@ use std::result::Result; -use assembly::{Assembly, AssemblyBuilder, Object}; +use scene::{Assembly, AssemblyBuilder, Object}; use super::DataTree; use super::psy_light::{parse_sphere_light, parse_rectangle_light}; diff --git a/src/renderer.rs b/src/renderer.rs index 380f6aa..0cdc859 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -10,12 +10,12 @@ use scoped_threadpool::Pool; use algorithm::partition_pair; use color::{Color, XYZ, SpectralSample, map_0_1_to_wavelength}; -use halton; use hash::hash_u32; use hilbert; use image::Image; use math::{fast_logit, upper_power_of_two}; use ray::Ray; +use sampling::halton; use scene::Scene; use surface; use tracer::Tracer; diff --git a/src/halton.py b/src/sampling/halton.py similarity index 100% rename from src/halton.py rename to src/sampling/halton.py diff --git a/src/halton.rs b/src/sampling/halton.rs similarity index 100% rename from src/halton.rs rename to src/sampling/halton.rs diff --git a/src/sampling/mod.rs b/src/sampling/mod.rs new file mode 100644 index 0000000..7d93d63 --- /dev/null +++ b/src/sampling/mod.rs @@ -0,0 +1,6 @@ +pub mod halton; +mod monte_carlo; + +pub use self::monte_carlo::{square_to_circle, cosine_sample_hemisphere, uniform_sample_hemisphere, + uniform_sample_sphere, uniform_sample_cone, uniform_sample_cone_pdf, + spherical_triangle_solid_angle, uniform_sample_spherical_triangle}; diff --git a/src/sampling.rs b/src/sampling/monte_carlo.rs similarity index 100% rename from src/sampling.rs rename to src/sampling/monte_carlo.rs diff --git a/src/assembly.rs b/src/scene/assembly.rs similarity index 99% rename from src/assembly.rs rename to src/scene/assembly.rs index 7d30b25..204d255 100644 --- a/src/assembly.rs +++ b/src/scene/assembly.rs @@ -1,11 +1,11 @@ use std::collections::HashMap; +use accel::{LightAccel, LightTree}; +use accel::BVH; use bbox::{BBox, transform_bbox_slice_from}; use boundable::Boundable; -use bvh::BVH; use color::SpectralSample; use lerp::lerp_slice; -use light_accel::{LightAccel, LightTree}; use light::LightSource; use math::{Matrix4x4, Vector}; use surface::{Surface, SurfaceIntersection}; diff --git a/src/scene/mod.rs b/src/scene/mod.rs new file mode 100644 index 0000000..f5d2d71 --- /dev/null +++ b/src/scene/mod.rs @@ -0,0 +1,7 @@ +mod assembly; +mod scene; +mod world; + +pub use self::assembly::{Assembly, AssemblyBuilder, Object, InstanceType}; +pub use self::scene::Scene; +pub use self::world::World; diff --git a/src/scene.rs b/src/scene/scene.rs similarity index 97% rename from src/scene.rs rename to src/scene/scene.rs index 0280ab5..cfc68e0 100644 --- a/src/scene.rs +++ b/src/scene/scene.rs @@ -1,13 +1,13 @@ -use assembly::Assembly; -use camera::Camera; -use world::World; +use accel::LightAccel; use algorithm::weighted_choice; -use transform_stack::TransformStack; +use camera::Camera; use color::SpectralSample; -use surface::SurfaceIntersection; use math::Vector; -use light_accel::LightAccel; +use surface::SurfaceIntersection; +use transform_stack::TransformStack; +use super::Assembly; +use super::World; #[derive(Debug)] diff --git a/src/world.rs b/src/scene/world.rs similarity index 100% rename from src/world.rs rename to src/scene/world.rs diff --git a/src/surface/mod.rs b/src/surface/mod.rs index 186a13b..7c241df 100644 --- a/src/surface/mod.rs +++ b/src/surface/mod.rs @@ -1,5 +1,6 @@ #![allow(dead_code)] +mod triangle; pub mod triangle_mesh; use std::fmt::Debug; diff --git a/src/triangle.rs b/src/surface/triangle.rs similarity index 100% rename from src/triangle.rs rename to src/surface/triangle.rs diff --git a/src/surface/triangle_mesh.rs b/src/surface/triangle_mesh.rs index 147e115..88b29a0 100644 --- a/src/surface/triangle_mesh.rs +++ b/src/surface/triangle_mesh.rs @@ -1,16 +1,16 @@ #![allow(dead_code)] +use accel::BVH; use bbox::BBox; use boundable::Boundable; -use bvh::BVH; use color::XYZ; use lerp::{lerp, lerp_slice, lerp_slice_with}; use math::{Point, Matrix4x4, cross}; use ray::{Ray, AccelRay}; use shading::surface_closure::{SurfaceClosureUnion, LambertClosure}; -use triangle; use super::{Surface, SurfaceIntersection}; +use super::triangle; #[derive(Debug)] diff --git a/src/tracer.rs b/src/tracer.rs index 4ea0c64..c466354 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -1,9 +1,9 @@ use std::iter; use algorithm::partition; -use assembly::{Assembly, Object, InstanceType}; use lerp::lerp_slice; use ray::{Ray, AccelRay}; +use scene::{Assembly, Object, InstanceType}; use surface::SurfaceIntersection; use transform_stack::TransformStack;