573c5da5ab
Got BVH4 working. Woo hoo!
2017-04-13 22:44:34 -07:00
53a14996c9
Completed first attempt at implementing BVH4.
...
Completely untested, so almost certainly non-functional. But it
compiles!
2017-04-12 23:33:34 -07:00
e0c6dfbd76
Beginnings of BVH4 implementation.
...
- Created a traversal-order table.
- Created a function to help index into that table.
2017-04-11 23:10:54 -07:00
a2d7f9e149
Added BBox4 and BVH4 types.
...
BVH4 is just a skeleton (duplicated BVH) right now. But BBox4
is complete (pending testing).
2017-04-11 14:22:11 -07:00
c05bae2636
Created a BitStack128 type and added it to Ray.
...
This will be used for BVH4 traversal.
2017-04-11 11:13:23 -07:00
f5ba119562
Switched to clap for command line argument parsing.
2017-04-11 10:15:32 -07:00
d9564bc005
Refactor and rework of BVH.
...
The BVH building code is now largely split out into a separate
type, BVHBase. The intent is that this will also be used by
the BVH4 when I get around to it.
The BVH itself now uses references instead of indexes, allocating
and pointing directly into the MemArena. This allows the nodes
to all be right next to their bounding boxes in memory.
2017-04-10 23:41:38 -07:00
db3e4ad129
MemArena now slowly increases the size of each subsequent block.
...
This seems to work more nicely than a fixed block size, because
it adapts to how much memory is being requested over-all. For
example, a small scene won't allocate large amounts of RAM,
but a large scene with large data won't be penalized with a
lot of tiny allocations.
2017-04-10 20:49:55 -07:00
70f715ec2d
MemArena now collects statistics about its usage.
...
You can print out statistics about the main arena used in
Psychopath by passing the new --stats flag.
2017-04-10 18:34:08 -07:00
6623443e2e
Improved .psy file parsing error messages.
...
Biggest improvement: it gives you line numbers. But also progress
on better descriptions.
2017-04-10 14:03:01 -07:00
d3b3a50a4d
LightTree and Assemblies use MemArena now.
2017-04-10 00:03:49 -07:00
c82c821b31
BVH and objects now use MemArena.
2017-04-09 23:33:36 -07:00
e9e202933f
Assembly type now partially uses MemArena.
2017-04-09 18:27:01 -07:00
fc15fa9192
World type uses memory arena now.
2017-04-09 17:56:06 -07:00
57aa9be496
First steps towards using the memory arena allocator.
...
Changed Camera to us the memory arena allocator, and worked out a
bunch of stuff through doing that.
2017-04-09 17:31:17 -07:00
f6ffd8d30b
Fixed a typo in a comment.
2017-03-29 13:20:58 -07:00
7223f69151
Implemented a more efficient orthonormal basis function.
...
Algorithm taken from the paper "Building an Orthonormal
Basis, Revisited" by Duff et al.
2017-03-29 13:19:51 -07:00
4a86c4122a
Laying some groundwork for a simple shading system.
2017-03-14 00:27:25 -07:00
114f11c583
Fixed bug in GTRClosure that was resulting in all NaN outputs.
2017-03-12 00:33:36 -08:00
0b05d364e4
Added GTR surface closure.
...
Not tested yet, just a straightforward conversion from the C++
Psychopath codebase. So there are probably bugs in it from the
conversion. But it compiles!
2017-03-07 08:31:57 -08:00
f4445417dc
Reorganizing the module tree.
...
Enough things had accumulated that it seemed to make sense to
group some stuff together. So here it is.
2017-02-14 00:14:08 -08:00
d504ca5e6a
Got DistantDiscLights working! Yay!
...
This involved fixing a bug in PsychoBlend. It was including
translation in how it was transforming the sun lights' direction
vector.
2017-02-13 00:03:34 -08:00
3cbb816d4b
Added DistantDiskLight (a.k.a. sun light) parsing and data structures.
...
Also created a proper World struct in the process, to store all
infinite-extent type stuff.
Note that I goofed and did a new rustfmt pass but forgot to
commit before making these changes, so there's a lot of
formatting changes in this too. *sigh*
2017-02-12 20:29:08 -08:00
746b3b0c1f
Replaced try!() macros with new ? operator.
2017-02-06 16:20:58 -08:00
0e8d708ff0
Made samples per bucket configurable.
2016-10-16 14:55:00 -07:00
bb4e57795f
Added support for OpenEXR output.
2016-10-09 20:34:58 -07:00
0d189f763d
Changed LightTree traversal to be a bit better in its choices.
...
After some experimentation, it's pretty clear that the LightTree
performs a lot better with a model of spherical _volume_ light
sources. This makes sense considering that generally they
represent a distribution of other lights in space.
This is a quick hack to make it behave a bit more like that. But
the long-term solution will be to adjust how
estimate_eval_over_solid_angle() of surface closures is implemented.
2016-08-21 15:27:15 -07:00
7f1ab59c5e
Implemented alternative SAH split that uses off-axis split planes.
...
It doesn't seem to actually perform better, generally, but I'm
leaving it in for future reference for other things.
2016-08-21 15:26:47 -07:00
c71b00ca31
LightTree now works with lights in hierarchical instancing.
2016-08-21 00:19:43 -07:00
97b5ef77f8
Code cosmetics: organize and alphabetize crate/mod/use statements.
2016-08-20 18:10:55 -07:00
f75c0c78fe
Moved TransformStack into its own module.
...
It's clear at this point that it will be useful outside of Tracer.
2016-08-20 17:43:26 -07:00
c997c55739
Separate timing of rendering and image writing in print out.
2016-08-20 16:25:12 -07:00
cf49cdbb02
Moved int hash functions into own file, and use in quick_select().
2016-08-14 16:03:17 -07:00
fbeadfce29
Use quick select for balanced BVH building.
...
This gets rid of a crate dependency, and also is faster.
2016-08-14 00:51:21 -07:00
024ca560af
Minor optimization in the transform stack.
...
Got rid of the scratch space by writing directly into the main
stack vector when merging transforms. Involves a small bit of
unsafe code.
2016-08-06 01:51:20 -07:00
08576b9934
Cleaned up console output.
2016-07-31 12:27:06 -07:00
c6f6266a38
Added timer output so you can see how long things take.
2016-07-31 12:05:28 -07:00
d12b76a933
Minor tweak to horizontal add and multiply for Float4.
...
In theory this should make it more pipeline-able.
2016-07-31 11:49:01 -07:00
b4939f88c8
Silence some warnings.
2016-07-31 11:19:30 -07:00
3e7b142cd8
Implemented light tree sampling, for better sampling of many lights.
2016-07-31 11:14:33 -07:00
1f94791b6b
Moved SAH splitting code into its own function.
...
This is in prep for the light tree, where we'll want to use that
code.
2016-07-30 21:20:01 -07:00
7ef5846c89
Got rid of indexing into Float4 and 3d vector elements.
...
This assures correct semantics for SIMD usage.
2016-07-30 19:36:54 -07:00
e4c94d0c58
Optional use of SIMD intrinsics, via feature in cargo.
...
This is disabled by default right now, because it only builds on
nightly.
2016-07-16 19:58:39 -07:00
4db96bc758
Use simple if-statement-based min/max functions in hot code.
...
Again, for whatever reason this is notably faster than the stdlib
min/max functions.
2016-07-16 17:55:18 -07:00
7401c6fb99
Use fast approximate exp functions for XYZ color curves.
...
This brings a significant performance improvement, and doesn't
appear to have any visual impact.
2016-07-16 17:53:50 -07:00
177bb95eff
Got rid of UnsafeCell in Tracer.
...
To do this, I moved the accel rays into an outer struct, which
then calls the main tracing code as an inner struct.
2016-07-16 16:26:34 -07:00
1571c1634e
Sped up min and max functions in Float4.
...
Turns out that the standard min/max functions were slow for
some reason, and simple if statements are much faster. This
simple change improves render times by over 30%. Crazy.
2016-07-16 15:56:14 -07:00
76f074f866
Added a TODO comment.
2016-07-16 15:10:07 -07:00
ec75f11206
Render buckets in hilbert curve order.
...
Provides a slight speed-up.
2016-07-16 14:53:03 -07:00
5bc97f69b8
Actually use the background color from the scene file.
2016-07-16 13:54:41 -07:00