A software renderer written from scratch in Rust. It is being built for learning purposes so performance and features are likely not great
- Custom shaders (inspired by euc)
- WASM support (see https://tommypop2.github.io/Rendy3D/)
no_stdsupport (can be used in embedded environments)- Flexible mesh formats (can render anything that implements an
Iteratorthat returns triangles) - Triangle clipping
- Move application of the projection matrices into the shader
- Optimize triangle clipping (maybe do XY clipping in 2D on integer coordinates)
- Multithreading
- Shadows
- Accessing rate of change of interpolated values in the shader (allows for texture mipmapping)
Experiment with shader composition (implementing a shader on top of an existing shader). This would allow for "pre-built" shaders that could do things like handle perspective rendering
Maybe a new crate for a more fully-featured engine?
- https://trenki2.github.io/blog/2017/06/06/developing-a-software-renderer-part1/
- https://elijahpotter.dev/articles/building_a_software_render_engine_from_scratch
- https://github.com/ssloy/tinyrenderer/wiki/Lesson-0:-getting-started
- https://lisyarus.github.io/blog/posts/implementing-a-tiny-cpu-rasterizer-part-1.html
- https://www.gabrielgambetta.com/computer-graphics-from-scratch
- https://terathon.com/blog/transforming-normals.html
- https://andrewkchan.dev/posts/perspective-interpolation.html
- https://songho.ca/opengl/gl_projectionmatrix.html