Commit Graph

477 Commits

Author SHA1 Message Date
4b986c234f Merge branch 'master' into micropoly 2020-12-21 18:42:49 +09:00
73cf201bf6 Update readme. 2020-12-21 18:42:23 +09:00
e7ddc6f0c5 Merge branch 'master' into micropoly 2020-12-20 16:32:52 +09:00
6d6904a615 FLuv32: increase dynamic range, and decrease precision.
This still exceeds the precision of LogLuv, but lets us match its
dynamic range.
2020-09-22 11:06:40 +09:00
9cf5ebdf91 Cleaning up the code in fluv32 a bit. 2020-09-21 11:54:14 +09:00
066105b20a Fluv32: slightly tweak the u/v scaling constants.
This allows perfect representation of E (equal energy spectrum).
It's not important from a perceptual standpoint, but it provides
a simple way for Psychopath to represent E when needed for other
purposes.
2020-09-21 09:45:47 +09:00
05f9621ac5 Added a FloatLuv decode function to decode to Yuv instead of XYZ.
This is useful because it's super fast, and chromaticity lookups
are typical for spectral upsampling anyway, so this will likely
enable cutting out a bunch of unecessary intermediate calculations.
2020-09-20 15:16:20 +09:00
0ba1acc42d Add oct32 encode_precise() function.
This is significantly slower than `encode()`, but a little more precise.
2020-09-20 14:36:50 +09:00
8c738b2f39 Use FloatLuv32 in Psychopath for encoding XYZ colors. 2020-09-20 11:04:37 +09:00
161e47fc44 Clean up oct32norm code a bit. 2020-09-20 10:37:26 +09:00
3eff608493 More FloatLuv32 optimizations, and general code cleanup.
This gives another little speed boost to decoding, but gives a
massive (over 3x) speed boost to encoding.
2020-09-20 10:07:02 +09:00
f4ef11f9f3 Fix some names in fluv32 error messages. 2020-09-20 03:02:56 +09:00
8dee53d1fc Additional optimization to fluv32 decoding.
Tiny change but with a nice speed bump.
2020-09-20 02:35:37 +09:00
f20567247d Go all in with the fluv32 naming. 2020-09-20 02:02:35 +09:00
cda9156af8 Optimize FloatLuv decoding.
Speed ups of over 20%.
2020-09-20 01:43:36 +09:00
03bedcb594 Cleanup, tweaks, and better documentation for the 32-bit Luv format. 2020-09-19 23:57:59 +09:00
485da9f918 Add a new 32-bit Luv color format.
It's based on the SGI LogLuv format, but using a floating point
instead of log encoding for the luminance.
2020-09-19 19:51:40 +09:00
66e9abe66e Make signed48 trifloat encoding also a byte array.
Same reason as for the unsigned40 encoding in an earlier commit.
2020-09-19 12:22:51 +09:00
49c97bf0fe Cleaned up the signed48 trifloat code. 2020-09-19 08:55:35 +09:00
fd98b33333 Make unsigned40 trifloat encoding a byte array.
The whole point of these formats is to compress down to less
space, so let's not leave actually putting it in the space-saving
form on the client code.
2020-09-19 08:28:59 +09:00
9fb3c95171 Added an unsigned 40-bit trifloat format.
It is identical to the 32-bit format, except with more precision
and range due to using more bits.  This format should comfortably
store any color information with precision easily exceeding the
limits of human vision.
2020-09-18 22:12:12 +09:00
96b8dd84b9 Cleaned up the u32 trifloat implementation.
This also makes encoding faster.  However, it no longer does
rounding to the nearest precision when encoding, and insead does
flooring.  This seems like a reasonable tradeoff: if you want more
precision... you should use a format with more precision.
2020-09-18 21:04:16 +09:00
f13ffac7bd Removed the experimental luma-chroma color format.
It was a worthwhile experiment, but for it to really work it needs
a really proper luma-chroma separation, which is both slower than
I really want, and requires knowing the colorspace being used.

I might make another go at this based on the TIFF LogLUV color
format, requiring XYZ as input.
2020-09-18 17:57:13 +09:00
c1f516c2b6 Use a better chroma formula for the RGB32 format.
This makes much better use of the bit space.
2020-09-13 11:22:48 +09:00
bd6cf359b4 Some code clean-up in the RGB32 encoding/decoding code. 2020-09-13 06:44:42 +09:00
d6ab9d06be More work on the packed HDR RGB 32-bit format.
Switched to a different chroma encoding, which is notably faster
and never produces negative values when decoded.
2020-09-11 21:57:43 +09:00
339568ec0c Remove stale comments. 2020-09-10 22:42:20 +09:00
7066c38189 Implement an experimental packed HDR RGB 32-bit storage format. 2020-09-10 22:36:20 +09:00
80f9c3cc2d Implement interpolation of surface closures between micropoly vertices. 2020-05-01 16:08:37 +09:00
946a1860e0 Remove hierarchical instancing.
After thinking about this and after some discussion with other
people, I now believe that hierarchical instancing isn't actually
that useful in practice for rendering.

Single-level instancing is still supported, of course.
2020-05-01 16:08:37 +09:00
66dcbc2e7f Re-implemented nicer error reporting.
We lost this in the initial move to streaming parsing.  All
errors now (again) print out a line number and an error message.
2020-05-01 16:08:37 +09:00
46d0ef3b28 More parsing code cleanup and better error messages. 2020-05-01 16:08:37 +09:00
331b0229b0 More parsing code cleanup and some better error messages.
Still more to do, but this is some decent progress.
2020-05-01 16:08:37 +09:00
c1f8d21814 Refactored data tree code to present a slightly nicer API. 2020-05-01 16:08:37 +09:00
6b188c4451 Parse errors now use Strings for error messages.
This allows the error messages to be more informative by including
dynamically determined information.

Also made a utility function for ensuring that nodes get closed.
2020-05-01 16:08:37 +09:00
4f564d1474 All parsing is now streaming! But lots left to do.
In particular, parsing error messages are now either terrible or
non-existent.  But it compiles and works for correct inputs!
2020-05-01 16:08:37 +09:00
5196e8e2c2 Remove more trailing zeros from example scenes that I missed last time. 2020-05-01 16:08:37 +09:00
e3e5c1412f WIP refactor to make psy parsing all streaming.
Does not build right now.
2020-05-01 16:08:37 +09:00
9d5bc63fa5 Created a separate reader type for streaming data tree reading. 2020-05-01 16:08:37 +09:00
3eca7eae25 Take data reading out of the data tree parser.
It's now the responsibility of the caller to feed the parser
data as needed.
2020-05-01 16:08:37 +09:00
9c8dd4d882 Initial just-get-it-working port of scene paring code to streaming data tree.
It doesn't actually stream yet, just loads the whole parse into
memory, but done via the new streaming code.
2020-05-01 16:08:37 +09:00
7f1b1d2382 Fixed silly bug in data tree parser. 2020-05-01 16:08:37 +09:00
1f4947e895 Data tree parser: only read more data when needed.
Before this, it would eagerly load more data on every call, which
defeats the whole point.
2020-05-01 16:08:37 +09:00
ccd7e141fb First implementation of a streaming parser for the data tree format. 2020-05-01 16:08:37 +09:00
ce10522914 Remove unnecessary trailing zeros from the example files. 2020-05-01 16:08:37 +09:00
2998bbe7ce WIP refactor for new scene data layout.
All rendering code is commented out for now.  It will need to be
largely rewritten after this refactor is done, most likely.

This commit gets the basic new scene parsing working, with the basic
new data structures.
2020-05-01 16:08:37 +09:00
7f9f576093 Added back bicubic patch export to Psychoblend.
It's a useful primitive for testing microgeometry code.
2020-05-01 16:08:37 +09:00
4207c77e27 Some code tidying in Psychoblend.
Specifically:
1. Factored out color exporting.
2. Switched floating point writing to use .format() with 6 digits
   of precision.  The main gain here is that numbers like 1.0
   don't print with a bunch of useless trailing zeros.
2020-05-01 16:08:37 +09:00
26b5ee3b55 Further updates to the .psy format.
The importance change here is bundling object data and its
instances together.  This makes it possible to process the
scene data (e.g. for splitting, dicing, and de-instancing)
without having to cache arbitrary amounts of scene data.

In other words, this should allow for much more efficient
scene processing down the line.
2020-05-01 16:08:37 +09:00
99b6ddfa54 Run clippy on Sobol sampler, and fix/silence warnings. 2020-05-01 16:07:19 +09:00