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
Matthew Gordon
f13b585bfe
Shapes can now be colours other than gray
2019-11-19 07:43:00 -05:00
Matthew Gordon
f193fbf84b
Added some named colours, mostly to make testing easier.
2019-11-17 20:26:57 -05:00
Matthew Gordon
ad7d0b5f17
Started materials module.
2019-11-17 20:26:39 -05:00
Matthew Gordon
86e0b04a46
Add some code for dealing with colours.
2019-11-15 09:02:00 -05:00
Matthew Gordon
f4bbe75cf8
Sort modules in lib.rs. No change in functionality.
2019-11-14 07:16:11 -05:00
Matthew Gordon
98373a1935
Add missing file that should have been in earlier commit
2019-11-13 17:48:34 -05:00