{"id":1735,"date":"2022-05-14T07:41:36","date_gmt":"2022-05-13T22:41:36","guid":{"rendered":"http:\/\/lousodrome.net\/blog\/light\/?p=1735"},"modified":"2022-05-14T07:41:38","modified_gmt":"2022-05-13T22:41:38","slug":"reading-list-on-restir","status":"publish","type":"post","link":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/","title":{"rendered":"Reading list on ReSTIR"},"content":{"rendered":"\n<p>Recently a short video from dark magic programmer <a href=\"http:\/\/h3.gd\/about\/\">Tomasz Stachowiak<\/a> made the rounds in the graphics programming community, at the sound of jaws hitting the floor in its wake. It shows his recent progress on in <a href=\"https:\/\/github.com\/EmbarkStudios\/kajiya\/\">his renderer pet project<\/a>: beautiful real-time global illumination with fast convergence and barely any noise, in a static environment with dynamic lighting.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"New irradiance cache (kajiya renderer)\" width=\"584\" height=\"329\" src=\"https:\/\/www.youtube.com\/embed\/e7zTtLm2c8A?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>In a <a href=\"https:\/\/twitter.com\/h3r2tic\/status\/1523476990140960771\">Twitter thread where he discussed some details<\/a>, one keyword in particular caught my attention: <strong>ReSTIR<\/strong>.<\/p>\n\n\n\n<p>ReSTIR stands for &#8220;Reservoir-based Spatio-Temporal Importance Resampling&#8221; and is a sampling technique published at SIGGRAPH 2020 and getting refined since.<\/p>\n\n\n\n<h2>The original publication<\/h2>\n\n\n\n<p><a href=\"https:\/\/cs.dartmouth.edu\/wjarosz\/publications\/bitterli20spatiotemporal.html\">Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting<\/a><br>The publication page includes the recording of the SIGGRAPH presentation, with a well articulated explanation of the technique by main author <a href=\"http:\/\/benedikt-bitterli.me\/index.html\">Benedikt Bitterli<\/a>.<br>(<a href=\"https:\/\/research.nvidia.com\/publication\/2020-07_spatiotemporal-reservoir-resampling-real-time-ray-tracing-dynamic-direct\">same publication hosted on the NVidia website<\/a>).<\/p>\n\n\n\n<h2>Explanations of ReSTIR<\/h2>\n\n\n\n<ul><li><a href=\"http:\/\/www.zyanidelab.com\/how-to-add-thousands-of-lights-to-your-renderer\/\">How to add thousands of lights to your renderer and not die in the process<\/a><br>This is a high level explanation of the technique, giving the broad lines with a few diagrams and without touching the mathematical aspects.<\/li><li><a href=\"https:\/\/gamehacker1999.github.io\/posts\/restir\/\">Spatiotemporal Reservoir Resampling (ReSTIR) &#8211; Theory and Basic Implementation<\/a><br>This reads like a simplified version of the paper: the equations and the various algorithms are presented, the reasoning is explained, but there is no mathematical derivation. Finally, an example implementation is presented.<\/li><li><a href=\"https:\/\/www.highperformancegraphics.org\/2020\/program\/#reframing_light_transport_for_realtime\">Reframing light transport for real-time<\/a> (<a href=\"http:\/\/cwyman.org\/videos\/2020_HPG_Reframing_Light_Transport_For_Real_Time.mp4\">video<\/a>, <a href=\"http:\/\/cwyman.org\/presentations\/2020_HPG_Reframing_Light_Transport_for_Real-time.pdf\">slides<\/a>)<br>This keynote given at HPG 2020 by <a href=\"http:\/\/cwyman.org\/\">Chris Wyman<\/a>, who is a co-author of ReSTIR, gives another perspective on the technique, through the prism of using statistics to evaluate an unknown distribution.<\/li><\/ul>\n\n\n\n<h2>Improvements over the original publication<\/h2>\n\n\n\n<p>After the initial publication, NVidia published a refined version producing images with less noise at a lower cost, which they call &#8220;RTXDI&#8221; (for RTX Direct Illumination).<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/www.nvidia.com\/en-us\/on-demand\/session\/gtcspring21-s32639\/\">RTXDI: Details on Achieving Real-Time Performance<\/a><\/li><li><a href=\"https:\/\/research.nvidia.com\/publication\/2021-07_rearchitecting-spatiotemporal-resampling-production\">Rearchitecting Spatiotemporal Resampling for Production<\/a> (<a href=\"http:\/\/cwyman.org\/presentations\/2021_HPG_Productizing_ReSTIR.mp4\">video<\/a>, <a href=\"http:\/\/cwyman.org\/presentations\/2021_HPG_Productizing_ReSTIR.pdf\">slides<\/a>)<br>Both presentations explain the same thing, but with small differences that sometimes are clearer in one or the other. They explain again the foundations of the technique, then detail where the improvements lie (use fewer more relevant samples, avoid wasting work, and using a more cache friendly approach).<\/li><li><a href=\"https:\/\/research.nvidia.com\/publication\/2021-06_restir-gi-path-resampling-real-time-path-tracing\">ReSTIR GI: Path Resampling for Real-Time Path Tracing<\/a><br>While both the original technique and RTXDI are limited to direct illumination, this publication applies ReSTIR to global illumination.<\/li><\/ul>\n\n\n\n<h2>Other limitations<\/h2>\n\n\n\n<p>When discussing on Twitter some of the limitations of ReSTIR, <a href=\"https:\/\/twitter.com\/_cwyman_\/status\/1524554613931749377\">Chris Wyman made the following remarks<\/a>:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>To be clear, right now, ReSTIR is a box of razor blades without handles (or a box of unlabeled knobs). It&#8217;s extremely powerful, but you have to know what you&#8217;re doing. It is not intuitive, if your existing perspective is traditional Monte Carlo (or real-time) sampling techniques.<\/p><p>People sometimes think SIGGRAPH paper = solved. Nope. We&#8217;ve learned a lot since the first paper, and our direct lighting is a lot more stable with that knowledge. We&#8217;re still learning how to do it well on full-length paths.<\/p><p>And there&#8217;s a bunch of edge cases, even in direct lighting, that we know how to solve but haven&#8217;t had time to write them up, polish, and demo.<\/p><p>We haven&#8217;t actually tried to solve the extra noise at disocclusions in (what I think of as) a very principled way. Right now a world-space structure is probably the best way. I&#8217;m pretty sure it can be done without a (formal) world-space structure, just &#8220;more ReSTIR.&#8221;<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Recently a short video from dark magic programmer Tomasz Stachowiak made the rounds in the graphics programming community, at the sound of jaws hitting the floor in its wake. It shows his recent progress on in his renderer pet project: &hellip; <a href=\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[17],"tags":[125,926,470,184,360,185,126,227,34,928,927,929,931,64,149,46,930],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Reading list on ReSTIR &ndash; Light is beautiful<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reading list on ReSTIR &ndash; Light is beautiful\" \/>\n<meta property=\"og:description\" content=\"Recently a short video from dark magic programmer Tomasz Stachowiak made the rounds in the graphics programming community, at the sound of jaws hitting the floor in its wake. It shows his recent progress on in his renderer pet project: &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\" \/>\n<meta property=\"og:site_name\" content=\"Light is beautiful\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-13T22:41:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-13T22:41:38+00:00\" \/>\n<meta name=\"author\" content=\"Julien Guertault\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Zavie\" \/>\n<meta name=\"twitter:site\" content=\"@Zavie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Guertault\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\"},\"author\":{\"name\":\"Julien Guertault\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"headline\":\"Reading list on ReSTIR\",\"datePublished\":\"2022-05-13T22:41:36+00:00\",\"dateModified\":\"2022-05-13T22:41:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\"},\"wordCount\":568,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"keywords\":[\"global illumination\",\"HPG\",\"importance sampling\",\"Monte Carlo\",\"NVIDIA\",\"path tracing\",\"ray tracing\",\"reading list\",\"real-time rendering\",\"resampled importance sampling\",\"ReSTIR\",\"RIS\",\"RTX\",\"SIGGRAPH\",\"talk\",\"video\",\"weighted reservoir sampling\"],\"articleSection\":[\"Rendering\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\",\"url\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\",\"name\":\"Reading list on ReSTIR &ndash; Light is beautiful\",\"isPartOf\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#website\"},\"datePublished\":\"2022-05-13T22:41:36+00:00\",\"dateModified\":\"2022-05-13T22:41:38+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/lousodrome.net\/blog\/light\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reading list on ReSTIR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#website\",\"url\":\"https:\/\/lousodrome.net\/blog\/light\/\",\"name\":\"Light is beautiful\",\"description\":\"Thoughts of a graphics programmer, demoscener and spare time photographer\",\"publisher\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/lousodrome.net\/blog\/light\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f\",\"name\":\"Julien Guertault\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g\",\"caption\":\"Julien Guertault\"},\"logo\":{\"@id\":\"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/\"},\"url\":\"http:\/\/lousodrome.net\/blog\/light\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reading list on ReSTIR &ndash; Light is beautiful","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/","og_locale":"en_US","og_type":"article","og_title":"Reading list on ReSTIR &ndash; Light is beautiful","og_description":"Recently a short video from dark magic programmer Tomasz Stachowiak made the rounds in the graphics programming community, at the sound of jaws hitting the floor in its wake. It shows his recent progress on in his renderer pet project: &hellip; Continue reading &rarr;","og_url":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/","og_site_name":"Light is beautiful","article_published_time":"2022-05-13T22:41:36+00:00","article_modified_time":"2022-05-13T22:41:38+00:00","author":"Julien Guertault","twitter_card":"summary_large_image","twitter_creator":"@Zavie","twitter_site":"@Zavie","twitter_misc":{"Written by":"Julien Guertault","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#article","isPartOf":{"@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/"},"author":{"name":"Julien Guertault","@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"headline":"Reading list on ReSTIR","datePublished":"2022-05-13T22:41:36+00:00","dateModified":"2022-05-13T22:41:38+00:00","mainEntityOfPage":{"@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/"},"wordCount":568,"commentCount":0,"publisher":{"@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"keywords":["global illumination","HPG","importance sampling","Monte Carlo","NVIDIA","path tracing","ray tracing","reading list","real-time rendering","resampled importance sampling","ReSTIR","RIS","RTX","SIGGRAPH","talk","video","weighted reservoir sampling"],"articleSection":["Rendering"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/","url":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/","name":"Reading list on ReSTIR &ndash; Light is beautiful","isPartOf":{"@id":"https:\/\/lousodrome.net\/blog\/light\/#website"},"datePublished":"2022-05-13T22:41:36+00:00","dateModified":"2022-05-13T22:41:38+00:00","breadcrumb":{"@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/lousodrome.net\/blog\/light\/2022\/05\/14\/reading-list-on-restir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/lousodrome.net\/blog\/light\/"},{"@type":"ListItem","position":2,"name":"Reading list on ReSTIR"}]},{"@type":"WebSite","@id":"https:\/\/lousodrome.net\/blog\/light\/#website","url":"https:\/\/lousodrome.net\/blog\/light\/","name":"Light is beautiful","description":"Thoughts of a graphics programmer, demoscener and spare time photographer","publisher":{"@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lousodrome.net\/blog\/light\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/a16a2a69d73eca763ffdf125c49eaa2f","name":"Julien Guertault","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/","url":"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/2e5fc7a18e1701e1bb61a5da0ef35cf7?s=96&d=identicon&r=g","caption":"Julien Guertault"},"logo":{"@id":"https:\/\/lousodrome.net\/blog\/light\/#\/schema\/person\/image\/"},"url":"http:\/\/lousodrome.net\/blog\/light\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts\/1735"}],"collection":[{"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/comments?post=1735"}],"version-history":[{"count":2,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts\/1735\/revisions"}],"predecessor-version":[{"id":1739,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/posts\/1735\/revisions\/1739"}],"wp:attachment":[{"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/media?parent=1735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/categories?post=1735"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lousodrome.net\/blog\/light\/wp-json\/wp\/v2\/tags?post=1735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}