Commit Graph

188 Commits

Author SHA1 Message Date
Matthew Gordon cb67362ad4 Break material module up into multiple files 2020-06-11 22:28:53 -04:00
Matthew Gordon 90bb7d84af Big rijiggering of types 2020-06-11 22:13:51 -04:00
Matthew Gordon 8bc2c4b229 Upgrade to nalgebra 0.21 2020-05-22 21:05:30 -04:00
Matthew Gordon ec1ee394a9 Add documentation for BoundingVolumeHierarchy 2020-04-24 00:32:16 -04:00
Matthew Gordon 1d9baf1f05 Add some documentation for mesh module 2020-04-24 00:31:15 -04:00
Matthew Gordon 8ee1f3a004 Add a bunch of documentation to the raycasting module 2020-04-23 23:58:35 -04:00
Matthew Gordon c1d8044eb8 Add documentation for partial_render_scene() 2020-04-23 23:19:21 -04:00
Matthew Gordon 63afdfa36e Make the camera module private and just re-export partial_render_scene() 2020-04-23 23:16:50 -04:00
Matthew Gordon 2a77bac0cc Add a proper description to the README.md and include it in lib.rs 2020-04-23 21:44:01 -04:00
Matthew Gordon 1b66995bdd Replace Vec references with slices in a few places. 2020-04-03 23:34:44 -04:00
Matthew Gordon c063ff22a4 Replace anonymous tuple with tuple struct to improve readability 2020-04-03 23:33:06 -04:00
Matthew Gordon 5fbed4a17f Some minor cleanup recommended by clippy 2020-04-03 23:21:38 -04:00
Matthew Gordon 34232bb7d3 Refactor Bsdf to not store references to material struct members
This complicated the Material trait with explicit lifetimes and
had no real benefit.
2020-04-03 23:12:40 -04:00
Matthew Gordon 8570e08923 Implement Transform trait for Triangle
Still needs more unit tests.
2020-04-03 22:58:00 -04:00
Matthew Gordon 5df3f81359 Implement Transform trait for Plane
Still needs unit tests.
2020-04-03 22:57:28 -04:00
Matthew Gordon a856fcbc21 Make Transform triat use Affine3 instead of the more general Tramsform3 2020-04-03 22:56:28 -04:00
Matthew Gordon 36a4c6f951 Add "stanford bunny" model to repository (for testing) 2020-04-03 21:18:16 -04:00
Matthew Gordon cf8f5e646b Use Box instead of Arc in BoundingVolumeHierarchy 2020-03-27 21:18:47 -04:00
Matthew Gordon bbeb39ba5d Replace unnecessary Arcs with Boxes. 2020-03-27 20:34:19 -04:00
Matthew Gordon 3afbc600e6 Switch to Criterion for benchmarks 2020-03-19 22:40:17 -04:00
Matthew Gordon 4042b266ae Update benchmark 2020-03-19 22:40:17 -04:00
Matthew Gordon b13cbe316d Add Transform trait and implement for Sphere 2020-03-12 21:26:22 -04:00
Matthew Gordon fa43552c6f Remove stray debug print 2020-02-28 23:27:32 -05:00
Matthew Gordon ad2b9247b8 Use BoundingVolumeHierarchy to accelerate rendering 2020-02-28 23:26:56 -05:00
Matthew Gordon 2b8794c884 Add recursion limit to ray tracing 2020-02-28 23:25:51 -05:00
Matthew Gordon 0574dff685 Threads pass back small images instead of sharing large image 2020-02-28 21:42:19 -05:00
Matthew Gordon a04f51998c Make main rendering loop multithreaded again. 2020-02-28 20:53:24 -05:00
Matthew Gordon bdd05f3527 Refactor main rendering loop to use TileIterator
This removes the old multithreading code, but will be using rayon
soon.
2020-02-20 16:47:15 -05:00
Matthew Gordon d21d288013 Add TileIterator struct 2020-02-19 08:04:41 -05:00
Matthew Gordon e52c0772b4 Remove unused import 2020-02-19 08:03:16 -05:00
Matthew Gordon 87b2f2835a Rename morton_order_value() to morton_order_value_3d() 2020-02-19 08:02:36 -05:00
Matthew Gordon 3c813c4526 More work on BoundingVolumeHierarchy 2020-02-13 20:24:35 -05:00
Matthew Gordon 7bd45c8ad2 First pass at bounding volume hierarchy 2020-02-10 22:23:38 -05:00
Matthew Gordon e411f4abb4 Start working on morton (z-order sorting) 2020-02-10 17:45:12 -05:00
Matthew Gordon 8508ac1072 Add trait for converting real type tu u32 2020-02-10 17:15:02 -05:00
Matthew Gordon 079e02e059 Remove some dbg!s 2020-02-10 16:54:42 -05:00
Matthew Gordon d6b5c87759 Create Real trait to replace nalgebra::RealField
Real inherits RealField, but I want to add more to it.
2020-02-10 16:52:09 -05:00
Matthew Gordon a15eeccdfb Fix code formatting. No change of functionality. 2020-02-07 17:05:07 -05:00
Matthew Gordon 23e8a878c5 Move algebra_utils.rs into util module 2020-02-07 17:04:42 -05:00
Matthew Gordon 49bef6f0f4 Add Point3Normalizer 2020-02-07 17:00:46 -05:00
Matthew Gordon 259505e93f Add RealFieldNormalizer 2020-02-06 17:36:36 -05:00
Matthew Gordon c3f3fffc0e Move axis_aligned_bounding_box to util module 2020-02-06 17:06:46 -05:00
Matthew Gordon 65b5e3c45d Create util module and move Interval struct to it 2020-02-06 16:49:11 -05:00
Matthew Gordon 8c527d34fc Add Primitive trait 2020-01-30 17:22:53 -05:00
Matthew Gordon a0de9c18ba Implement HasBoundingBox trait for Plane 2020-01-30 16:43:48 -05:00
Matthew Gordon 89aed89b85 Add derive(Debug) for BoundingBox 2020-01-30 16:43:21 -05:00
Matthew Gordon 1044fc3986 Implement HasBoundingBox for Tirangle 2020-01-29 16:50:26 -05:00
Matthew Gordon e67204b96e Make BoundingBox::from_points accept any IntoIterator<Point3<T>>
...instead of only Vec<Point3<T>>
2020-01-29 16:49:30 -05:00
Matthew Gordon e5d7a1098d Add more methods for constructing BoundingBoxes 2020-01-29 08:09:58 -05:00
Matthew Gordon 30a5a9dd0f Add Interval::expand_to_value(); other minor changes 2020-01-12 12:13:31 -05:00
Matthew Gordon 25ac0bad7f Fixed bug with empty intervals 2020-01-12 10:45:39 -05:00
Matthew Gordon 75611d47d3 Add HasBoundingBox trait with implementation for Sphere 2020-01-10 17:15:35 -05:00
Matthew Gordon abf71658b6 Add axis_aligned_bounding_box::BoundingBox::union() 2020-01-10 17:00:09 -05:00
Matthew Gordon da2208f3f8 Add Interval::union() 2020-01-10 16:46:17 -05:00
Matthew Gordon 5f6733fdb0 Move some declarations around within struct, no change in functionality 2020-01-10 16:21:38 -05:00
Matthew Gordon ffcfa0009c Move import that was only used in tests into test module 2020-01-10 16:21:28 -05:00
Matthew Gordon 5e0e2bad06 Make build and test work with stable rust (nightly needed for benchmarks) 2020-01-10 16:16:27 -05:00
Matthew Gordon 4ee7338711 Add axis_aligned_bounding_box module 2019-12-31 22:17:15 -05:00
Matthew Gordon 5c8903107a Add IntersectP trait
Like Intersect, but the intersect() function only returns a bool,
not a Optional<IntersectionInfo>.
2019-12-31 22:16:06 -05:00
Matthew Gordon 6639ed813b Remove some old code that was already commented out 2019-12-31 22:15:13 -05:00
Matthew Gordon a785eb796f Only enable benchmark when benchmarking, not as regular test 2019-12-31 22:14:24 -05:00
Matthew Gordon 1653174ef6 Make triangle a submodule of raycasting. 2019-12-21 15:29:52 -05:00
Matthew Gordon c35735f117 Move Plane into it's own submodule 2019-12-21 15:19:16 -05:00
Matthew Gordon 91579745cb Move Sphere to a submodule 2019-12-21 15:06:48 -05:00
Matthew Gordon 4e7565638a Move raycsating module into subdirectory 2019-12-21 10:50:59 -05:00
Matthew Gordon 08484306fd Move load_obj() into submudule 2019-12-21 10:43:39 -05:00
Matthew Gordon 12e26887c1 Make output image smaller. 2019-12-21 10:43:39 -05:00
Matthew Gordon 1b9cf2cbca Add benchmark 2019-12-21 10:43:33 -05:00
Matthew Gordon 7cdcdb145a Remove unused function. 2019-12-21 10:08:00 -05:00
Matthew Gordon e1de889d3a Quick-and-dirty multithreading
Not the best multithreading scheme and needs error handling, but
it works.
2019-12-21 10:07:53 -05:00
Matthew Gordon 3618636c42 First quick pass at loading OBJ files. 2019-12-21 09:11:30 -05:00
Matthew Gordon 199b33f944 Remove unused function 2019-12-12 13:01:02 -05:00
Matthew Gordon 777580be17 Fix triangle intersection passing when triangle is behind ray 2019-12-12 08:57:46 -05:00
Matthew Gordon 9096ff67b6 Remove some debug prints that I committed by accident 2019-12-12 08:56:31 -05:00
Matthew Gordon 365b6063e0 Tweak test scene 2019-12-12 08:45:15 -05:00
Matthew Gordon c05eba391b Add more tests for triangle intersection and fix a couple of bugs
Still not working properly.
2019-12-12 07:51:26 -05:00
Matthew Gordon 9eca3a4cfe Replace Vector3 with Point3 where appropriate 2019-12-07 11:09:07 -05:00
Matthew Gordon a7e1f1c134 Add type alias for the return type of Material::bsdf() 2019-12-07 10:58:04 -05:00
Matthew Gordon 52da1bc952 Clean up a long if-else sequence. No change in functionality. 2019-12-07 10:58:04 -05:00
Matthew Gordon c0d0f81335 Replace ClampingToneMapper::new() with derive(Default) 2019-12-07 10:58:04 -05:00
Matthew Gordon d98144ab74 Minor cleanup and tidying; no change in functionality. 2019-12-07 10:58:04 -05:00
Matthew Gordon 2b3d350fbb Add intersection test for triangle; not quite working yet though 2019-12-07 09:28:11 -05:00
Matthew Gordon 6f1663f616 Fix issue with noise in refrections
The BSDF for Reflective material had rounding issues that would
sometimes make the reflection strength NaN.
2019-11-30 11:26:18 -05:00
Matthew Gordon d19d5200b0 Add another light to test scene, to fill shadows in a little 2019-11-29 22:30:31 -05:00
Matthew Gordon 8b0b8c59ba Add ReflectiveMaterial material type
Although there's still some issues with rendering the reflections.
2019-11-29 22:30:08 -05:00
Matthew Gordon 5cd80ae05c Add sample funtion to Material trait, with default implementation 2019-11-29 22:27:43 -05:00
Matthew Gordon dcee4fb716 Add missing normalization of tangent vectors
This was required to get reflection working but also fixes
issues with the PhongMaterial parameters.
2019-11-29 22:25:50 -05:00
Matthew Gordon dbbd855c73 Add Phong material 2019-11-27 17:05:51 -05:00
Matthew Gordon 0a7963097c Add (co)tangent to IntersectionInfo and redid sphere intersection 2019-11-27 17:02:23 -05:00
Matthew Gordon 015625ff20 Add utility function to create change-of-basis matrices 2019-11-27 17:00:44 -05:00
Matthew Gordon e7bcc9cc62 Add diffuse strength term to LambertianMaterial 2019-11-26 07:17:27 -05:00
Matthew Gordon 430053c134 Fix bug rendering images with dimensinos not multiples of tile size 2019-11-26 07:03:45 -05:00
Matthew Gordon d9912c42dd Fix bug where non-square images would not be completely rendered 2019-11-26 06:59:26 -05:00
Matthew Gordon 86ef364ed2 Render image a tile at a time, so user can see progress 2019-11-25 09:04:20 -05:00
Matthew Gordon 20d3e9ba8d Add some more objects to the test scene 2019-11-25 08:34:04 -05:00
Matthew Gordon 5a0646aaa2 Bias shadow rays to fix noise in image 2019-11-23 22:08:50 -05:00
Matthew Gordon 77cf877210 Factor out Sampler struct and add shadow casting
There are now bad rendering artifacts which I believe are caused
by precision issues.
2019-11-23 21:36:59 -05:00
Matthew Gordon cefbc2873b Refactor, adding Material trait that returns a BSDF 2019-11-23 20:53:45 -05:00
Matthew Gordon 9b8eea6f20 Implement Add, Mul, Copy, Clone and Debug for ColourRgbF 2019-11-23 20:50:31 -05:00
Matthew Gordon f58afb2ded Apply tone mapping to image, not colours
Apply tone mapping and conversion from floats to bytes only on
final image. This will allow better tone mapping operators later
and for now removes NormalizedAsFloat trait constraints that were
creeping through everything.
2019-11-19 21:32:47 -05:00