- Spectral Ray Tracing
- pbrt-v3/src/accelerators/kdtreeaccel.cpp
- Cosine weighted hemisphere sampling is a little bit darker and arguably noisier than reference
- https://www.irisa.fr/prive/kadi/Sujets_CTR/kadi/Kadi_sujet2_article_Kdtree.pdf
- Camera
- Camera depth of field
- Lighting
- Directional (sun like) light
- Point source
- Specular direct lighting for delta materials
- Sphere light (only sample visible surface)
- Geometry
- Spheres separately
- Spheres in kdtree
- Input
- Open standard obj/mtl files (from internet or blender export)
- More scenes
- Other input formats (research)
- Materials
- Textured materials
- Spherical test renderer
- Fancier specular highlights
- Reimplement materials from scratch (start with simplest diffuse)
- Define new
SurfaceSamplecontract (full-mixture PDF) and document it - Implement pure Lambertian diffuse only (constant albedo, no textures)
- Validate diffuse sampling energy with a simple reference scene
- Add diffuse texture support (image lookup + UV clamping)
- Add specular reflection (delta) with correct weighting
- Add Fresnel-based specular reflection only (metal / no transmission)
- Add refraction (delta) for dielectrics with Fresnel split and eta^2 handling
- Rebuild material mixing logic to keep PDFs consistent
- Tests for refraction
- Add tests for PDF/lobe selection correctness
- Define new
- Multiple Importance Sampling (MIS)
- Support for Ka (ambient) mtl command
- Support for Ns (specular exponent) mtl command
- Support for Ke (emissive) mtl command (mesh lighting)
- Support illum mtl command
- Optimization
- Specialized kd-Tree traversal for shadow rays
- Check ray against kd-Tree extent for early exit?
- Rust memory profiling
- Rust benchmark project
- Cancellation token in GUI
- GUI custom shader for gamma correction and iteration conversions
- KdTree
- Triangle AABB clipping
- Perfect splits
- Split flat cells (for cornell box sides)
- O(n log^2 n) construction
- Test insertion sort in aabb triangle clip code for performance
- How to avoid look-up of indices?
- How to avoid re-constructing indices vecs?
- O(n log n) construction
- Rust Learning
- ETA, total and mean iteration time in CLI
- Material properties plot
- Transparent cornell cube looking weird
- Surface area heuristic
- Profiling cpu
- Non-square aspect ratios crashing
- Restructure root library (tracing)
- Interactive GUI
- Threaded rendering
- Camera controls translation
- Further subdivision and user selectable thread count
- Render levels with threads for fast restarts
- Request repaint when receiving new rendered frame
- Camera controls rotation
- Subdivided threading instead of full frame
- KdTree Cornell Bug
- Aabb min/max instead of center/half size.
- Intersection test for flat cells
- Recursively recurring splits
- Visualization
- KdTree tester CLI that bounces rays and checks them against intersection with all triangles
- Flat cells missed in traversal depending on tree layout
- Enum Geometries
- Use 2D triangle-point intersection when triangle is axially aligned
- Floating point issue in comparing ray-triangle and ray-plane intersection in traversal
- KdTree SR2 Bug
- Tree reducer program
- Create test from reduced sr2 scene
- Output arguments in tester and reducer programs
- Run reducer multiple times to find smallest example
- Write json scene format from reducer
- Read scene from json format
- Write reduced geometries as wavefront obj
- Debug reduced, why is it finding the wrong triangle?
- Something seems wrong with the ray visualization, the ray intersection parameters does not match with the ray length
- Fix clipping issue
- Fix capacity issue