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
8cd445813a
Removed some dead code.
2016-07-16 13:36:34 -07:00
9d47dfdeb2
Forgot one place where bounds need to be merged for motion blur.
2016-07-16 12:28:08 -07:00
2e3851837d
Implemented SAH splitting for the BVH. Also fixed crash bug.
...
The bug was in the previous commit, where I thought I was
preventing out-of-bounds access during traversal by limiting
the tree depth. While the idea was correct, I forgot that the
traversal stack needs _2_ extra slots on top of the tree depth,
not just 1. Fixed.
2016-07-16 03:21:57 -07:00
35ef58b09c
Special case BVH building when we get too close to max depth.
...
This avoids exceeding max BVH depth even in pathological cases.
Still need improve non-worst case building, but this at least
prevents crashes in worst case.
2016-07-16 00:05:23 -07:00
e2ef44f666
Finished implementing motion blur.
2016-07-10 19:20:37 -07:00
c2eb421fd8
Actually use seed in renders.
...
This is important for animations, where you don't want the same
noise pattern every frame.
2016-07-10 17:56:42 -07:00
e4f9a54e48
Leave console output on a newline.
2016-07-10 17:47:28 -07:00
c466e46138
Make BVH traversal stack bigger.
...
This is a stop-gap for a less-than ideal BVH construction. It
should be reduced again once the BVH building is made less stupid.
2016-07-10 17:45:10 -07:00
5b461220a5
PsychoBlend now exports meshes as meshes, and Psychopath renders to PNGs.
2016-07-10 17:42:28 -07:00
e8ee371423
Silence some warnings.
2016-07-10 16:46:14 -07:00
da46878243
Print render progress and auto-determine bucket size.
...
The bucket size is automatically determined based on a target
number of samples per bucket.
2016-07-10 16:40:30 -07:00
5df583c2d0
Multiple light sources are now handled.
2016-07-10 00:10:49 -07:00
9c8797ffd8
Forgot to do top-level ray splitting.
2016-07-07 23:47:44 -07:00
aff8d24f55
Fixed some bugs where instances without transforms would crash.
2016-07-07 23:32:19 -07:00
3ef84f9f5f
Split rays by direction so they can follow their ideal traversal order.
2016-07-07 21:50:03 -07:00
0880a0f19d
Make renderer actually use the material system properly.
...
The intersection code still isn't using any kind of shading,
and materials aren't parsed by the parser, but the renderer
class itself is using them.
2016-07-07 19:51:19 -07:00
543f2719e4
Fixed bugs in global illumination.
...
It was a stupid thing in the Lambert closure. It was returning
the wrong direction vector.
2016-07-04 11:54:46 -07:00
a8324669cc
Fixed possible out-of-bounds panic in XYZ -> Spectrum code.
2016-07-04 01:26:28 -07:00
e56ac418da
Beginnings of global illumination.
...
There are still some obvious bugs in it that I haven't tracked down,
so the renders aren't correct yet.
2016-07-03 01:18:50 -07:00
6e8f0894fd
Image struct can now dole out buckets in a thread-safe way.
...
This avoids the whole-image locking that was being done before,
which was causing a lot of thread contention.
2016-07-02 16:27:19 -07:00
02a0740cac
More proper use of light sources.
2016-07-01 00:00:38 -07:00
24cbdb5ab9
Fixed bug in ray/triangle intersection code.
...
It was counting intersections behind the ray.
2016-06-30 19:33:44 -07:00
f927dd0d46
Silencing a bunch of compiler warnings.
2016-06-29 15:23:07 -07:00
f1df7a3b1a
Slight tweak to how ray offsets are done.
2016-06-29 15:00:44 -07:00
52acee33af
Implemented rectangular area lights.
...
Also added Cornell Box test scene.
2016-06-29 14:30:42 -07:00
fd195576d1
First renders with lighting. Yay!
...
The lighting is super crappy, and pretty much hacked in. Will
need to redo this properly soon. However, this verifies that
certain other parts of the code are (mostly) working properly.
2016-06-27 23:16:39 -07:00
3b85b60a62
Implemented occlusion rays.
...
This is prep for lighting support: occlusion rays are useful for
speedier shadow tests.
2016-06-27 21:01:18 -07:00
6f6807009b
Prepping for adding lighting.
...
The part of the renderer responsible for light transport has been
split out into a LightPath struct. Also moving over to spectral
rendering, although it's a bit silly at the moment.
2016-06-26 23:08:24 -07:00
f7e57f2aee
Scenes with lights now get parsed correctly.
2016-06-25 22:49:40 -07:00
c2d36e0d14
Beginnings of parsing sphere lights.
2016-06-23 20:46:57 -07:00
1cbf20e67f
Beginnings of light sources. Yay!
2016-06-19 14:32:13 -07:00
d14e2c93b7
Converted Image over to store renders in XYZ colorspace.
2016-06-18 18:08:35 -07:00
18245b725c
All final intersections are now done in world space.
...
BVH traversal still happens in local space, but final actual
surface intersection calculations are done in world space by
transforming the triangle into world space. This is to improve
numerical consistency between intersections.
2016-06-09 01:04:12 -07:00
e2954ba5b0
Added more code for handling XYZ color and spectral samples.
2016-06-08 23:00:09 -07:00
61e3d47f56
Changed BBox/Ray intersection code to use more simd ops.
...
This, of course, depends on the simd ops being there, which
currently they are not. But in the future, hopefully this will
make things speedy. Will need to test, of course.
2016-06-08 22:57:22 -07:00
890c04c44a
Added XYZ color spectrum sampling code.
...
This will be critical for spectral rendering, whenever I get
around to it.
2016-06-07 08:14:19 -07:00
0b5a3de2dd
Added command line flag to set number of render threads.
2016-06-05 10:08:27 -07:00
5ec1f534cf
Implemented bucketed rendering.
2016-06-05 01:27:55 -07:00
a681ba461e
Implemented basic multi-threaded rendering.
...
It's a bit inefficient because a thread is spawned for each pixel.
Need to implement bucketing.
2016-06-03 21:03:04 -07:00
43c5a94ebb
Cleaned up command line options. Removed old procedural scene code.
2016-06-02 23:00:31 -07:00
039943e0cb
Auto-formatting code with new version of rustfmt.
2016-06-02 22:43:35 -07:00
c3d3145817
Fixed bug in ray intersection code.
...
The max_t was getting overwritten during transforms.
2016-06-02 22:36:02 -07:00
848d0afd40
Some minor code formatting cleanup and debug printing.
2016-05-28 14:35:37 -07:00
ef31093dcb
Split xform stack out into its own type.
...
This is mainly just to make the tracer code read more cleanly.
All of the pushing and popping logic obscured the big picture
and made things a bit confusing.
2016-05-28 14:15:05 -07:00
56b5267b7a
Fixed incorrect rendering angle.
...
The problem was in how the camera rays were generated.
2016-05-28 13:05:16 -07:00
1e93e53822
Mixed matrix parsing, and strip quotes from file path in parsing.
2016-05-28 01:24:58 -07:00
e3db7cd6ca
Basic mesh parsing.
...
The test scene isn't rendering properly, presumably because
something isn't correct in the parsing (although it's not clear
it's in the mesh parsing). Need to investigate.
2016-05-28 01:03:56 -07:00
99dc371a75
Beginnings of a mesh parser. Also cleaned up some unused imports.
2016-05-25 08:16:05 -07:00
d8cdf4d189
Cleaned up DataTree API and finished Instance parsing.
2016-05-23 00:08:12 -07:00
f5dd8f7a14
Got the bare beginnings of scene file parsing and rendering working.
...
It still doesn't parse or render any actual objects in the scene,
so all renders are just black. But the basic structures are in
place. Yay!
2016-05-21 15:14:10 -07:00
4988a6d1e6
Added AssemblyBuilder and got instancing working (sans testing...).
...
The AssemblyBuilder is responsible for collecting the data needed
to actually create an Assembly. AssemblyBuilders are now the
only way to create an Assembly, which guarantees that Assemblies
aren't half-baked.
Also got instancing working with transforms and such. It may not
be _really_ working because I don't have a complex test case for
it yet. But that will come later.
2016-04-23 20:14:10 -07:00
901fc88f63
Assemblies now use BVH accel and actually utilize instances.
2016-04-23 13:37:38 -07:00
b58ba10f9b
So the mutable aliasing in Tracer properly.
...
Apparently this is what UnsafeCell is for, and the code I wrote
before wasn't technically correct, even thought it worked in
practice. Hooray for doing things properly!
2016-03-21 01:08:19 -07:00
f6891173eb
Moved ray tracing responsibilities to the Tracer.
...
This is still pretty WIP, but it at least gets the functionality
back to where it was before.
2016-03-13 13:01:10 -07:00
e96798ab6b
Lazily committing a bunch of stuff.
...
Includes:
- More scene parsing code. Making good progress!
- Making the rendering code actually use the Scene and Assembly
types.
- Bare beginnings of a Tracer type.
2016-03-12 00:33:11 -08:00
38d33ed144
More work on scene parsing.
...
Using Nom to help with parsing the contents of leaf nodes.
2016-03-10 23:58:19 -08:00
25f8e0782a
Added Assembly and Scene types.
...
This is in preparation for real scene data, as parsed from real
psy files. Exciting!
2016-03-08 21:57:51 -08:00
147b22b861
Added ability to print the debug data of a data tree file.
...
This is purely for debug purposes, to make sure everything is
working correctly. Should be removed in the future.
2016-03-06 23:25:37 -08:00
6268a61770
Realized I already did most of the DataTree work in another file.
...
Weird, to be frank. It was a lot of work. Can't believe I don't
even remember doing it before. Oh well.
In any case, I've improved the 'old' one quite a bit. It should
be more robust now, and will provide errors that may actually be
useful to people when a file fails to parse.
2016-03-06 22:47:41 -08:00
62389d42ae
Escaping now works in the DataTree tokenizer.
...
Also byte offsets of the tokens in the text are now stored in
the tokens, for eventual use in parse error messages.
2016-03-06 14:10:17 -08:00
d769ccecee
Beginning work on DataTree and associated parsing.
2016-03-06 12:27:33 -08:00
a569586455
Adjusted the API of the BVH builder.
...
The bounder closure now returns slices of BBoxes instead of
filling in a given Vec.
2016-01-06 23:47:32 -08:00
655c16542d
Implemented basic deformation motion blur for triangles.
...
Not 100% happy with the interface of the BVH building yet, and
there are still some missing features as well. But it's a start!
2016-01-05 07:44:37 -08:00
c1b063411f
First steps towards motion blur support.
2016-01-03 21:21:46 -08:00
907d15f643
Started creating an interface for surfaces.
...
Testing it out by making a bogus TriangleMesh surface type.
2016-01-03 00:09:23 -08:00
d7f6142749
Image output now does proper sRGB correction.
2016-01-02 23:21:42 -08:00
a14a93f5a1
BVH now no longer directly references the objects it indexes.
...
Everything is done with indices anyway, so there was no reason
for it to store an internal reference to the object data. This
gets rid of the type parameter and lifetime parameter on the BVH
struct itself, which will also make it easier to bundle it with
the data it indexes, which will be important later on.
2016-01-02 22:55:20 -08:00
470618fa6a
Created a Renderer type to be in charge of rendering.
2016-01-02 22:34:36 -08:00