It's an offline 2D Light renderer. Uses a mix of Ray Marching and Path tracing techniques to render.
The renderer uses ray marching, that's why it can render multiple shapes:
- Circle
- Box
- Line
- Plane
- Pentagon
- Arc
- Heart
- Egg
Materials determine how an object interacts with light.
- Emission and intensity
- Reflectance: Schlick's approximation of Fresnel equations
- Refraction: Snell's law and total internal reflection
- Absorption: Beer Lambert
- Multithreaded
- Gaussian antialiasing
- Gamma correction 2.2
The renderer outputs an Image object, that holds the 24 bit RGB buffer. Then on_render_callback, stores .png images using STB
There is also the possibility of generating image sequences, that when joined make a video
The main goal of this project was to learn about PBR (Physically Based Rendering) in a simple environment, where no GPU and 3D graphics is required.
Circular:
Convex:
Concave:
Semicircular: