Commit graph

149 commits

Author SHA1 Message Date
Bruno BELANYI 552c0cb966 library: implement refraction
This necessitated to rework how light properties for a material were
given. A material can have either reflectivity or transparency. This
changes the parsing of materials, using a `LightProperty` structure at
its core.

This is does not implement the true Fresnel equations to take into
account the amount of reflection that an incident goes through when
encountering a transparent object.
2020-03-19 18:23:20 +01:00
Bruno BELANYI e00950c7e5 library: render: scene: fix spatial lighting
The spatial lighting did not take into account the object's color when
calculating the amount of diffuse and specular light that was emitted.
2020-03-19 18:22:31 +01:00
Bruno BELANYI 4278f5462b library: serialize: add coefficient module 2020-03-19 13:37:20 +01:00
Bruno BELANYI 00de0bf118 examples: colorful: use & annotate optional fields 2020-03-19 13:11:06 +01:00
Bruno BELANYI 4235d3d62f library: material: uniform: optional deserialization 2020-03-19 13:08:49 +01:00
Bruno BELANYI c4a40fab25 library: shape: sphere: optional deserialization 2020-03-19 13:08:36 +01:00
Bruno BELANYI 9857879a75 library: render: scene: optional deserialization 2020-03-19 13:03:39 +01:00
Bruno BELANYI 8778ce81b7 library: render: lights: optional deserialization 2020-03-19 13:03:39 +01:00
Bruno BELANYI e3ebd1c977 library: render: scene: add progress bar 2020-03-19 00:16:24 +01:00
Bruno BELANYI 7a78326fcf project: add indicatif dependency 2020-03-19 00:15:56 +01:00
Bruno BELANYI e11598fc9c library: render: scene: clamp colors before sum
This was a recurring bug in a previous implementation, clamping the
colors before taking the sum of a series of calculations avoid adding a
negative value to a positive one and getting a result which does not
make sense.
2020-03-18 23:20:09 +01:00
Bruno BELANYI 08d6d7c262 library: core: color: add clamp method 2020-03-18 23:18:58 +01:00
Bruno BELANYI 563a793273 library: refactorize light properties handling
Instead of having a method per property, compute them all at once and
use them throughout the rendering pipeline.
2020-03-18 22:46:33 +01:00
Bruno BELANYI 3257598913 library: render: scene: use rayon scope parallelism
The implementation was very easy to write, but is not yet optimal. It
would be better to use `join` to divide into tasks directly on the
stack. And it would be better to iterate over entire blocks of rows
instead of giving a row per-thread: this would lead to better cache-line
behaviour with the fully linear memory accesses.
2020-03-18 19:17:26 +01:00
Bruno BELANYI 923a8fe20c project: add rayon dependency 2020-03-18 18:59:55 +01:00
Bruno BELANYI ca21cf06c2 library: render: scene: use BVH 2020-03-18 18:20:46 +01:00
Bruno BELANYI eca5ec5c26 library: render: scene: deserialize w/ indirection 2020-03-18 18:20:20 +01:00
Bruno BELANYI be4da14313 library: render: object: allow use in BVH 2020-03-18 18:18:03 +01:00
Bruno BELANYI 09af312b86 examples: add colorful scene
This scene shows-off how to declare every type of lights, and results in
a pretty and colorful scene.
2020-03-18 18:06:13 +01:00
Bruno BELANYI f9c86639ce library: core: film: fix x/y ratio mix-up
The X axis is the left-right axis. The Y axis is the up-down axis.
2020-03-18 18:06:13 +01:00
Bruno BELANYI f066ea7125 executable: add scene parsing and rendering 2020-03-18 16:32:55 +01:00
Bruno BELANYI e383b77f68 project: add structopt dependency 2020-03-18 16:32:22 +01:00
Bruno BELANYI a8d23782a4 library: render: scene: add deserialization 2020-03-18 15:53:33 +01:00
Bruno BELANYI c8ca438091 library: core: scene: derive Debug and PartialEq 2020-03-18 15:53:25 +01:00
Bruno BELANYI bfa9aa22dc examples: add example YAML scene 2020-03-18 15:52:41 +01:00
Bruno BELANYI 67628ec083 library: render: object: add deserialization
By using `enum_dispatch` and deserializing the enums, you can very
easily represent the `Object` in serialized form.
2020-03-18 15:52:41 +01:00
Bruno BELANYI 02874c9c22 library: texture: enum: add deserialization 2020-03-18 15:42:37 +01:00
Bruno BELANYI 3f1a166edf library: shape: enum: add deserialization 2020-03-18 15:42:25 +01:00
Bruno BELANYI 6aa5f2536c library: material: enum: add deserialization 2020-03-18 15:42:18 +01:00
Bruno BELANYI 05fb6601b2 library: use enum_dispatch on Object related trait
This allows for easier testing (notable allowing for comparisons),
better performance (thanks to inlining instead of vtable indirection),
and should ease the deserialization of `Material`, `Shape`, and
`Texture` traits. This should allow `Object` to be deserialized easily.
2020-03-18 15:24:09 +01:00
Bruno BELANYI 3ba17fac49 project: replace typetag by enum_dispatch 2020-03-18 15:23:58 +01:00
Bruno BELANYI 4112a933ed library: render: light_aggregate: add deserialization 2020-03-18 14:52:50 +01:00
Bruno BELANYI ccc9eaf423 library: shape: triangle: add deserialization 2020-03-18 14:46:30 +01:00
Bruno BELANYI 8060262ce0 library: shape: sphere: add deserialization 2020-03-18 14:46:22 +01:00
Bruno BELANYI eff133abf3 library: texture: uniform: add deserialization 2020-03-18 14:38:26 +01:00
Bruno BELANYI 803b34641d library: material: uniform: add deserialization 2020-03-18 14:38:17 +01:00
Bruno BELANYI 7ce201ecc2 library: light: spot: add deserialization 2020-03-18 14:38:01 +01:00
Bruno BELANYI 3ef827cabf library: light: spot: fix constructors
The vector was not normalized on input in the SpotLight constructor...
2020-03-18 14:37:16 +01:00
Bruno BELANYI ebe00365d1 library: light: point: add deserialization 2020-03-18 14:36:28 +01:00
Bruno BELANYI 42abfed3fa library: light: directional: add deserialization 2020-03-18 14:35:53 +01:00
Bruno BELANYI 85f274a0b1 library: light: ambient: add deserialization 2020-03-18 14:35:19 +01:00
Bruno BELANYI 9dcce9218f library: material: uniform: fix float comparison 2020-03-18 14:34:37 +01:00
Bruno BELANYI 76db818fa8 library: serialize: add vector_normalizer helper 2020-03-18 14:31:33 +01:00
Bruno BELANYI a90d4d9405 library: add serialize module 2020-03-18 14:31:17 +01:00
Bruno BELANYI 076118edaa library: core: camera: add deserialization 2020-03-18 13:03:12 +01:00
Bruno BELANYI 0644d453b8 library: core: color: add deserialization 2020-03-18 13:03:02 +01:00
Bruno BELANYI 22b109212c project: add deserialization feature of nalgebra 2020-03-18 11:51:59 +01:00
Bruno BELANYI c16db361ea project: add typetag dependency 2020-03-18 11:47:07 +01:00
Bruno BELANYI 0f87626b66 project: add serde_yaml dependency 2020-03-18 11:46:56 +01:00
Bruno BELANYI b59c6ee50d project: add Serde dependency 2020-03-18 11:46:03 +01:00