A ray tracer written in Rust.
Compile and run using cargo
the Rust package manager and build tool.
A ray tracer in Rust inspired by pbrt and the book Physically Based Rendering: From Theory to Implementation
A ray tracer written in Rust.
Compile and run using cargo
the Rust package manager and build tool.
Create an asset store/cache for loading generic assets (e.g. images, meshes) and keeping a single copy in memory.
This will have to support storing the assets under an Arc
as they will be accessed concurrently.
Add support for Area Lights, which should be represented by a mesh and emit light from its surface. Might be worth extending the Light trait to support the sample_f
function from pbrt
in order to sample a direction from the light.
Implement the necessary traits to automatically Serialize and Deserialize a Scene using serde. This also allows us to use all of the serde backends as serialization targets in the future.
Add support for Lua scripting for defining the Scene and the options of the ray tracer using https://crates.io/crates/hlua.
This will involve exposing various structures and associated methods for use across the Lua->Rust interface.
Features required:
Add support for triangle meshes in the scene description file.
Implement better sampling methods that can be used to sample the camera rays and sampling for light transport algorithms.
Implement transmittance which is a model of how much light along the length of a ray is scattered/absorbed by the medium in which it's travelling.
This can be very simple with a constant absorption defined for the world, or complex with geometric volumes defined for simulating smoke/fog etc.
Add support for triangle meshes to be intersected against, normal calculations and support uv mapping for texturing.
This could be a progress bar made using ncurses in the terminal.
Later it could be a visualisation of the image as it is being rendered.
Add support for a simple BTDF.
Parallelise the rendering process. Look into use mpsc (Multi-producer Single-consumer) channels from the Rust standard library.
This blog has more information on implementing something similar in Rust http://www.willusher.io/2015/05/15/porting-a-ray-tracer-to-rust-part-3/.
This is important as it will enable quicker feedback when testing new features.
Support loading .obj files as triangle meshes.
Have a look at https://crates.io/crates/nom for parsing arbitrary file formats. Nice walkthrough example of parsing a datetime https://fnordig.de/2015/07/16/omnomnom-parsing-iso8601-dates-using-nom/.
Alternatively just add https://crates.io/crates/tobj.
This issue is dependent on #3.
Implement a simple path tracing integrator.
Add a Material struct that allows interesting surface shaders to be described using a simple interface.
To avoid having to re-compile the project each time the scene is changed implement a simple Scene file format. This could also define the options for the ray tracer (trace depth, number of samples etc.).
Look at using either TOML (https://crates.io/crates/toml) or RON (https://github.com/kvark/ron) for the file format.
This could eventually become obsolete in light of #1 but this will be vastly simpler to implement.
Support LOD reduction for longer viewing distances where high polygon counts are wasted.
This can either be done procedurally or with a number of lower detail meshes for high polygon meshes.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.