Hyperion is Disney's physically based path tracer renderer. They present an overview of their results and a enjoyable 'Practical Guide to Path Tracing'.
Hyperion is a streaming ray-tracer, capable of performing multi-bounce GI on production-scale scenes without resorting to shading caches or instancing. To achieve this, we introduce a novel two-stage ray sorting framework. First, we sort large, potentially out-of-core ray batches to ensure coherence. Working with large batches is essential to extract coherent ray groups from complex scenes. Second, we sort ray hits for deferred shading with out-of-core textures. For each batch we achieve perfectly coherent shading with sequential texture reads, eliminating the need for a texture cache. Our approach is simple to implement and compatible with most scene traversal strategies.
4 Comments
Wow! Amazing explanation. Does Cycles use the same method? Capable of performing multi-bounce GI with grouping the rays that hit the same object in the same region of space.
Nope, that last part about the grouping was mostly to reference Hyperion and it's out-of-core rendering (rendering on the GPU a scene too large to fit in the GPU) method.
Cycles doesn't even do out-of-core, you can tell because Blender will just tank if you try to render a scene that takes up too much GPU memory. All the other information is pretty much the basics of any path tracer. If you can fit the scene in GPU memory or render on the CPU, you can just store the scene in a traditional acceleration data-structure and skip grouping rays.
I like the old Disney style, but shouldn't that title image say Disney's Practical Guide, with an apostrophe? I don't think it really explained why grouping makes processing quicker; it's still a big bunch of separate rays so what does it matter if they're similar?
They don't really explain in the video why grouping rays makes it faster. If you take a look at their paper, https://disney-animation.s3.amazonaws.com/uploads/production/publication_asset/70/asset/Sorted_Deferred_Shading_For_Production_Path_Tracing.pdf, it explains it in more detail. Their reason for grouping rays is that they are more likely to hit the same object. If all the rays in a group hit the same object, they only have to store that object's geometry and textures in memory (instead of the entire scene). Also, it is likely that this group will be the only one to hit the object during the current phase of rendering, so the object won't normally be needed by a different group.
Stacked up against Arnold and PRMan, it looks like it performs extremely well.