Physically-based ray-tracer.
- Vertex Connection and Merging algorithm
- Volumetric Bidirectional Path Tracing integrator (based on PBRT v3)
- Full-spectral rendering (by sampling single wavelength per ray)
- spectral representation of material's properties (colors, index of refractions, etc)
- switching between spectral and RGB rendering in runtime
- Medium rendering, including subsurface scattering:
- random walk subsurface scattering
- Christensen-Burley approximation
- subsurface scattering could be applied to any material containing diffuse layer (diffuse, plastic, velvet)
- Variety of BSDFs:
- basic materials - diffuse, plastic, conductor, dielectric, mirror
- additional materials - thinfilm, coating, mirror, velvet
- Variety of emitters:
- area (including collimated area lights - lasers)
- environment map
- directional emitter with finite angluar size
- atmospheric scattering (generating directional Sun emitter and environment sky emitter)
- Thin-film rendering over all materials (including conductors)
- Normal mapping
Several renderings from the ray-tracer. Samples contains showcase for materials, volumetric data rendering, spectral rendering, participating media rendering, subsurface scattering and SDS (specular-diffuse-specular paths), which are usually tricky thing to render. As well as thin film rendering, collimated emitters, depth of field, and other effects.
More renderings could be found in my Twitter:
Windows and macOS
This project is a fusion of several my previous projects
- et-engine - the old game engine, which actually was used in several shipped games;
- etx - an extension to the engine, which is used for UI;
- metal-ray-tracer - ray-tracer based on Metal Performance Shaders.
Order is a subject to change, but here are main things to do:
- boilerplate code for window, input handling, etc;
- basic boilerplate code for ray-tracing;
- simplest CPU path-tracer;
- OptiX and GPU-related code basics;
- additional code for ray-tracing;
- GPU path tracing;
- VCM integrators (CPU and GPU);
- Subsurface scattering;
- cross-platform, cross-API support; ... maintaining code, adding new features.
This part of the description would be updated during the development of the project, at the moment there is nothing to build here. All updates will be located here: BUILDING.md
This project is GitHub-sponsored by:
Links to the books/papers/publications/resources I've used during the development:










