Physically Based Real-time Ray Tracing Ryan Overbeck

Embed Size (px)

Citation preview

  • Slide 1

Physically Based Real-time Ray Tracing Ryan Overbeck Slide 2 Overview Ray tracing Broadest success at solving physically based rendering tasks. But is slower than Z-Buffer (for primary visibility) Real-time Ray Tracing Recent algorithmic improvements make real-time ray tracing possible Most of these algorithmic improvements have only been demonstrated for primary visibility w. point light shadows Physically Based Ray Tracing Uses Path Tracing / Monte-Carlo ray tracing for physical effects Consistent algorithmic improvements over the years Very Slow Currently Real-time and Physically Based ray tracing algorithms dont work well together Slide 3 Real-time Ray Tracing Ray Packets: Shoot 4 or 4x4 (or more) rays at a time Neighboring rays take similar paths through the scene Use SIMD (ie. SSE) instructions to perform one instruction on 4 floating point values at once Use interval arithmetic to use a single test to represent the entire packet Geometry Proxies: Frustum Traversal, LCTS Use bounding geometry to represent a larger group of rays (usually 16x16 128x128) Miscellaneous Improvements Improved Acceleration Structures, Geometry Intersection tests, Multi-threading for multi-core architectures, Slide 4 Physically Based Ray Tracing Effects Image anti-aliasing, Motion Blur Complex Lighting (soft shadows, hard shadows, environment lighting, ambient lighting, inter-reflections) Complex Materials (perfect reflection, glossy reflection, subsurface scattering,) Film / Lens effects (depth of field, bloom, ) Tools Intelligent sampling distributions (Stratified Sampling, Importance Sampling, Low discrepancy sampling, Poisson Disc Sampling, ) Adaptive / Interpolated Sampling Image / Film processing (filters, tone mapping,) Slide 5 My Goals Long Term: Design algorithms to marry real-time ray tracing with physically based ray tracing Short Term: Build a Framework within which I can experiment Where to start? MLRT fastest real-time ray tracer Would need to make it more general Highly optimized code very difficult to modify PBRT Most general Free physically based ray tracer Would need to make it fast Very nice design: easy to modify Slide 6 Progress Started overhaul of PBRT Tightened up kd-tree traversal code Added accelerations for ray vs. triangle intersection Parallelized PBRT -- multi-core processors Tile image space (usually 64x64 tiles) statically assign tiles to threads Added 4-ray packets for primary rays Shoot 4 rays at a time Use SIMD SSE to accelerate ray traversal Slide 7 Test Setup 512x512 images 1 sample/pixel PBRT low discrepancy sampling for primary samples 2x2 PBRT box filter for image reconstruction 3.0GHz Pentium 4 (2 cores) Slide 8 Test Setup Scenes Sponza (66454 Triangles) Sibenik (80479 Triangles) Buddha (1087720 Triangles) Slide 9 Results SponzaSibenikBuddha 1 rays/ 1 thread 2.778s3.266s3.054s 1 rays/ 2 threads 2.327s2.532s3.489s 1 rays/ 4 threads 2.361s2.534s4.384s 4 rays/ 1 thread 1.055s1.041s1.684s 4 rays/ 2 threads 0.835s0.775s1.656s 4 rays/ 4 threads 0.776s0.819s1.514s Slide 10 Next Steps Tighten up samplers and image filtering These two are adding ~.3 s to 512x512 render time (almost as much as ray casting) Larger ray packets (esp. 4x4) Add Frustum Traversal Move to secondary effects This will mark the beginning of new research territory