Show simple item record

dc.contributor.authorZellmann, Stefanen_US
dc.contributor.authorLang, Ulrichen_US
dc.contributor.editorMatthias Hullin and Reinhard Klein and Thomas Schultz and Angela Yaoen_US
dc.description.abstractReducing the amount of conditional branching instructions in innermost loops is crucial for high performance code on contemporary hardware architectures. In the context of ray tracing algorithms, typical examples for branching in inner loops are the decisions what type of primitive a ray should be tested against for intersection, or which BRDF implementation should be evaluated at a point of intersection. Runtime polymorphism, which is often used in those cases, can lead to highly expressive but poorly performing code. Optimization strategies often involve reduced feature sets (e.g. by simply supporting only a single geometric primitive type), or an upstream sorting step followed by multiple ray tracing kernel executions, which effectively places the branching instruction outside the inner loop. In this paper we propose C++ compile time polymorphism as an alternative optimization strategy that does on its own not reduce branching, but that can be used to write highly expressive code without sacrificing optimization potential such as early binding or inlining of tiny functions. We present an implementation with modern C++ that we integrate into a ray tracing template library. We evaluate our approach on CPU and GPU architectures.en_US
dc.publisherThe Eurographics Associationen_US
dc.subjectI.3.7 [Computer Graphics]
dc.subjectThree Dimensional Graphics and Realism
dc.titleC++ Compile Time Polymorphism for Ray Tracingen_US
dc.description.seriesinformationVision, Modeling & Visualization
dc.description.sectionheadersAccelerated Rendering

Files in this item


This item appears in the following Collection(s)

  • VMV17
    ISBN 978-3-03868-049-9

Show simple item record