Nabla icon indicating copy to clipboard operation
Nabla copied to clipboard

Raytracing Roadmap

Open devshgraphicsprogramming opened this issue 4 years ago • 2 comments

Bugs and Hacky Workaround removal

  • [x] Sporadic UIAutomationCore crash (OpenCL timeout)
  • [x] Cache the sample sequence properly (record the params) and change its locality
  • [x] Solve the weird coloured fireflies issue
  • [x] Instancing transform bugs (stuff gets thrown all over the scene)

Minimum Usability

  • [x] Read Max Samples from the XML file
  • [x] Implement Russian Roulette and read it from the XML as well
  • [ ] Robust Intersections
  • [ ] Implement Rejection Sampled NEE & Multiple Importance Sampling
  • [x] Scramble key advancement
  • [x] Denoiser Integration (optionally enabled)
  • [x] Autoexposure Integration
  • [x] Tonemapping Integration
  • [x] Saving intermediate outputs when screenshotting
  • [x] Envmap light source and importance sampling
  • [ ] Fast and FFT bloom choice

Tests

  • [ ] test divergence between Mitsuba, ex 42 and ex 22 in daily_pt.xml
  • [x] yank up the max bounces and see if it causes a problem

Ease of Use

  • [x] Unify raygen.comp and closestHit.comp
  • [ ] Extend nbl::system to be able to download textures and meshes over HTTP/URL
  • [ ] Integrate NVENC/libvpx for producing video captures while rendering (CPU solution preferred)
  • [ ] Cloud XR

Quality and Convergence with no bias

  • [ ] OBB computation for light source meshes
  • [ ] Blue Noise Sampling via Heitz's techniques of scramble key ordering
  • [x] Schussler et al. BxDF fixes for bumpmaps and smooth shading normals
  • [ ] CLEAR/LEADR/Toksvig (produce roughness map while mipmap filtering bumpmap)

Easy Quality Wins

  • [ ] Covariance Rendering (possible memory bandwidth win of >15% by using mipmaps)
  • [x] Light Path Expressions || Reweighting Firefly Samples
  • [ ] GSAA (increase roughness of curvy surfaces)
  • [ ] A-SVGF

Uber Quality

  • [ ] ReSTIR
  • [ ] Adaptive Sampling
  • [ ] Spatial and Temporal Denoising (Nvidia SDK, ProRender, Intel, Renderman-like 7 frame AI?)
  • [ ] Local TMO

Load Time Optimizations

  • [ ] Converted Asset Cache
  • [x] Polyphase Mip Mapping
  • [ ] commit on GPU Virtual Texture and Virtual Geometry

Memory Optimizations

  • [ ] Basis-U compressed prefiltered textures in the cache
  • [ ] Compress geometry position attribute into 64bits

Rendering Optimizations

  • [x] Pretransform (de-instance) if memory allows
  • [x] Single BLAS for static scene elements
  • [ ] Selectively disable normals and reonstruct from position derivatives
  • [x] dont fetch UVs or compute some derivatives if no texture precomp stream
  • [ ] Dont jitter and re-rasterize every frame if camera is still and we're accumulating
  • [x] Occlusion and Triangle Culling when rasterizing
  • [ ] Vulkan Raytracing port
  • [ ] Path Guiding
  • [ ] Descriptor Indexing
  • [ ] Bidirectional or Global integrators such as VCM or UBP
  • [ ] Manifold NEE for caustics or lightsources embedded in bulbs

Risky Optimizations

  • [x] Optimize rejection sampling to do spherical convex hulls of light source or clipping to the hemisphere
  • [ ] Material Compiler made out of RTX callables
  • [ ] Last Krivanek paper MIS weights out of the [0,1] range
  • [ ] Replace all scene BxDFs with LTC (texturing is problematic)
  • [ ] Combined product sampling of LTC and light (requires the above) probably via composed warps
  • [ ] LTC product path guiding

Endgame

  • [ ] Baking (DDGI or Spherical Gaussian lightmaps)
  • [ ] Animations & Temporal Tracing
  • [ ] Subsurface Scattering (level up the BxDFs)
  • [ ] Subdivision NEE for rendering of skin lit up by office lights
  • [ ] PN-Triangle intersection
  • [ ] Hair Rendering (geometry and BxDF)
  • [ ] Geometry LoDs
  • [ ] Out of Core Rendering (streaming Moana, here we come!)
  • [ ] Spectral Rendering with Herowavelengths and resolving to multiple colourspaces simultaneously

albedo needs 8-10 bits of ray payload normal needs between 16 and 32

would a good idea to subsample (lower the spp) on the AoV calculations (they're noiseless anyway)

New stuff

  • [ ] Register compression in Material Compiler (lots of benchmarks needed)
  • [ ] Use tweaked GGX as a tweaked spherica sampler for diffuse ;)
  • [ ] Adapative Sampling (cast more rays in pixels where variance is higher)