{"id":39510454,"url":"https://github.com/cg-tuwien/stater","last_synced_at":"2026-01-18T06:01:43.997Z","repository":{"id":318898023,"uuid":"1076713644","full_name":"cg-tuwien/StatER","owner":"cg-tuwien","description":"Implementation of the SIGGRAPH Asia 2025 conference paper \"Statistical Error Reduction for Monte Carlo Rendering\" [Sakai et al. 2025] based on pbrt-v3","archived":false,"fork":false,"pushed_at":"2025-10-15T13:28:16.000Z","size":7480,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-16T09:46:32.448Z","etag":null,"topics":["adaptive-sampling","denoising","image-filtering","monte-carlo-rendering","path-tracing","statistics"],"latest_commit_sha":null,"homepage":"https://www.cg.tuwien.ac.at/StatER","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cg-tuwien.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-15T08:41:59.000Z","updated_at":"2025-10-15T14:20:38.000Z","dependencies_parsed_at":"2025-10-17T04:41:32.297Z","dependency_job_id":"72457b21-27a7-4527-ad96-68e3aac2e704","html_url":"https://github.com/cg-tuwien/StatER","commit_stats":null,"previous_names":["cg-tuwien/stater"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cg-tuwien/StatER","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cg-tuwien%2FStatER","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cg-tuwien%2FStatER/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cg-tuwien%2FStatER/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cg-tuwien%2FStatER/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cg-tuwien","download_url":"https://codeload.github.com/cg-tuwien/StatER/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cg-tuwien%2FStatER/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28531991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adaptive-sampling","denoising","image-filtering","monte-carlo-rendering","path-tracing","statistics"],"created_at":"2026-01-18T06:01:43.493Z","updated_at":"2026-01-18T06:01:43.990Z","avatar_url":"https://github.com/cg-tuwien.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Statistical Error Reduction for Monte Carlo Rendering\n\n![Comparison of different denoising methods on the \"Veach Egg\" scene.](https://users.cg.tuwien.ac.at/~hiroyuki/StatER/static/images/veach-bidir-zoomplot.png)\n\nThis repository contains our implementation of our research paper [\"Statistical Error Reduction for Monte Carlo Rendering\" [Sakai et al. 2025]](https://www.cg.tuwien.ac.at/StatER).\nOur implementation is based on [StatMC](https://github.com/cg-tuwien/StatMC.git), itself built on [pbrt-v3](https://github.com/mmp/pbrt-v3), and offers the following:\n\n- a new unidirectional path-tracing integrator `StatPathIntegrator`, which tracks the required statistics for multi-transform denoising, variance denoising, adaptive sampling, and linear explained-variance correction, described in our paper,\n- [OpenCV](https://opencv.org/) integration for buffer management and CUDA abstraction,\n- support for our CUDA denoiser implemented on top of OpenCV (hosted on a [separate repository](https://github.com/cg-tuwien/StatER-opencv_contrib.git)),\n- albedo lookup tables for faster and more accurate albedo queries (compared to pbrt-v3's own `rho()` function), and\n- support for the [tev image viewer](https://github.com/Tom94/tev).\n\nThe extensions are mostly implemented in [`src/statistics/`](src/statistics) and [`src/display/`](src/display).\n\nWith the focus on research, this code is not intended for production.\nWe appreciate your feedback, questions, and reports of any issues you encounter; feel free to [contact us](https://www.cg.tuwien.ac.at/staff/HiroyukiSakai)!\n\n\n## Build Instructions\n\n### Prerequisites\n\nWe developed our denoiser using [CUDA 12.3](https://developer.nvidia.com/cuda-12-3-0-download-archive) and [OpenCV 4.8.1](https://github.com/opencv/opencv/releases/tag/4.8.1).\nNote that [later CUDA versions (\u003e= 12.4) are incompatible with OpenCV 4.8.1](https://github.com/opencv/opencv_contrib/issues/3690).\n\nFor reproducing the results presented in our paper, we recommend using Clang 16.0.6 on Ubuntu 22.04 LTS or Linux Mint 20 (as used for the paper).\nWhile we have successfully tested GCC 11.4.0, it produces slightly different results (mostly due to differences in random number generation).\n\nIn the following, we describe two alternative ways to build our code: an automatic approach tested for Ubuntu 22.04 LTS and a manual approach, which we recommend if you want to retrace the steps of the build process or use another operating system.\n\n### Automatic Building (for a fresh Ubuntu 22.04 LTS install)\n\n1.  Clone this repository (OpenCV will be cloned automatically as a submodule):\n    ```bash\n    git clone --recursive https://github.com/cg-tuwien/StatER.git\n    cd StatER/\n    ```\n\n2.  Install dependencies:\n    ```bash\n    sudo ./scripts/_install-dependencies.sh\n    ```\n\n3.  Build our code:\n    ```bash\n    ./scripts/_build.sh\n    ```\n    Our version of the pbrt binary should now be located in `build-asm+mcl/pbrt-v3/`.\n\n### Docker Build Instructions\n\nWe have prepared files required to run our project within a Docker container [here](docker).\n\n### Manual Building\n\nSkip this if you have used the automatic approach [above](#automatic-building-for-a-fresh-ubuntu-2204-lts-install).\n\n1.  Clone this repository (OpenCV will be cloned automatically as a submodule):\n    ```bash\n    git clone --recursive https://github.com/cg-tuwien/StatER.git\n    cd StatER/\n    ```\n\n2.  Make sure that CUDA 12.3, as well as the packages `cmake`, `clang`, `libstdc++-12-dev`, and `zlib1g-dev`, are installed.\n    The packages may vary depending on the operating system.\n\n#### Building OpenCV\n\n1.  In the root directory of the repository, create the directories for building OpenCV:\n    ```bash\n    mkdir build-asm+mcl\n    cd build-asm+mcl/\n    mkdir opencv\n    cd opencv/\n    ```\n\n2.  Build OpenCV according to [these instructions](https://github.com/cg-tuwien/StatER-opencv_contrib#building-opencv) using the directories `../../src/ext/opencv` and `../../src/ext/opencv_contrib` for `\u003copencv_source_directory\u003e` and `\u003copencv_contrib\u003e`.\n    We build OpenCV and pbrt separately to have better control over the individual builds.\n\n3.  Change to the `build-asm+mcl/` directory for building pbrt in the next step:\n    ```bash\n    cd ../\n    ```\n\n#### Building pbrt-v3\n\n1.  In the [previously created](#building-opencv) `build-asm+mcl/` directory, create the build directory for pbrt-v3:\n    ```bash\n    mkdir pbrt-v3\n    cd pbrt-v3/\n    ```\n\n2.  Create the CMake buildsystem:\n    ```bash\n    cmake \\\n    -DOpenCV_BUILD_DIR_PREFIX=\"build-asm+mcl\" \\\n    -DCMAKE_C_COMPILER=clang \\\n    -DCMAKE_CXX_COMPILER=clang++ \\\n    -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \\\n    -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/clang++ \\\n    -DCMAKE_C_FLAGS=\"${CMAKE_C_FLAGS} -march=native\" \\\n    -DCMAKE_CXX_FLAGS=\"${CMAKE_CXX_FLAGS} -march=native\" \\\n    ../../\n    ```\n\n3.  Build pbrt-v3\n    ```bash\n    make -j 16\n    ```\n\n\n## Usage\n\nThe directory [`scenes/`](scenes) contains configurations and scene description files for reproducing the results in our paper.\nWe do not include the complete scenes; they can be downloaded by running the [`scripts/_download-scenes.sh`](scripts/_download-scenes.sh) shell script from the root directory of the repository:\n```bash\n./scripts/_download-scenes.sh\n```\nNote that the scenes are hosted on creator's or licensee's websites and are subject to being changed or taken down without prior notice: we are not responsible for (the availability of) the content hosted on other websites (except for [pbrt-v3's measure-one scene](https://www.pbrt.org/scenes-v3), which we rehost for your convenience).\n\nOnce the scenes are downloaded, you can reproduce the results from our paper by simply running the shell scripts for the corresponding figures in the [`scripts/`](scripts) directory. E.g.,\n```bash\n./scripts/1-veach-bidir.sh\n```\nResult images will be saved to the `out/` directory.\nThe prefixes (here, `1`) refer to the figure number in the [paper](https://www.cg.tuwien.ac.at/research/publications/2025/sakai-2025-stater/sakai-2025-stater-paper.pdf) and [supplementary document](https://www.cg.tuwien.ac.at/research/publications/2025/sakai-2025-stater/sakai-2025-stater-Supplementary%20Document.pdf).\nThe images generated by these scripts should generally match our paper results, which we have published in lossless format [here](https://doi.org/10.48436/kny07-dvd93) (including references).\nImage filenames indicate the number of samples per pixel (SPP) used for rendering.\nTo reproduce a figure, pbrt must be run up to the corresponding SPP value.\n\nBy default, the generated images correspond to the \"MCL\" variant from the paper.\nTo enable adaptive sampling (\"ASM+MCL\"), pass the `as` option to the script:\n```bash\n./scripts/1-veach-bidir.sh as\n```\n\nYou can also build alternative variants of our code:\n```bash\n./scripts/alternate-builds/build-asm+m.sh   # \"[ASM+]M\"    built into build-asm+m/\n./scripts/alternate-builds/build-asm+mc.sh  # \"[ASM+]MC\"   built into build-asm+mc/\n./scripts/alternate-builds/build-asn+mcl.sh # \"[ASN+]MCL\"  built into build-asn+mcl/\n./scripts/alternate-builds/build-mt.sh      # \"MT{1-5}\"    built into build-mt/\n./scripts/alternate-builds/build-mt-jb.sh   # \"MT{1–5}-JB\" built into build-mt-jb/\n```\nRefer to our paper and supplementary document for detailed explanations of these variants.\n\nOnce an alternate build has been created, you can specify it as an additional parameter.\nHere are a few examples:\n```bash\n./scripts/12-furball.sh as     build-asm-mc # ASM-MC\n./scripts/13-car.sh     \"\"     build-asm-m  # M\n./scripts/S6-lamp.sh    mt1    build-mt     # MT1 (MCL)\n./scripts/S8-house.sh   mt5-as build-mt-jb  # MT5-JB (ASM-MCL)\n```\n\nFeel free to experiment with different scenes and configurations.\nFor a starting point, refer to the [quick reference](#quick-reference) further below.\n\n\n## Notes on Reproducing Our Results\n\nWe reproduced the results in our paper by following the instructions on this page using two machines:\n\n1. a desktop PC equipped with an AMD Ryzen 9 5950X CPU, an NVIDIA RTX 3080 Ti GPU, and running Linux Mint 20, as well as\n2. a virtual machine hosted on a computing cluster equipped with an AMD EPYC 7413 CPU, an NVIDIA A40 GPU, and running Ubuntu 22.04 LTS.\n\n**Despite following our instructions for reproducibility, differences in hardware, operating systems, compilers, and other factors may still lead to minor variations in the generated images.**\n\n### Comparisons\n\nIn this repository, we do not include implementations of the neural denoisers we compared against in our paper.\nFor those comparisons, we have used the commits linked here:\n\n- [NVIDIA's OptiX](https://github.com/DeclanRussell/NvidiaAIDenoiser/tree/86e59a46aa12470b8e420c84a1dd5446109e5e3c)\n- [Intel's OIDN](https://github.com/RenderKit/oidn/tree/49a0a43bdab45fbb6bec7b084d743387634da9c3)\n- [ProDen [Firmino et al. 2022]](https://github.com/ArthurFirmino/progressive-denoising/tree/3500970acb321c07278057ff6413b57823f365a8)\n\nFor [Moon et al.'s confidence-interval approach [2013]](https://doi.org/10.1111/cgf.12004) and [StatMC [Sakai et al. 2024]](https://www.cg.tuwien.ac.at/StatMC), we used the implementation and instructions provided in the [StatMC repository](https://github.com/cg-tuwien/StatMC).\n\n### Additional Steps for Reproducing Specific Figures\n\nWith the scripts provided [above](#usage), it is possible to generate all main results of our publication.\nIf you wish to reproduce the results of our ablation studies, we have documented the required compilation settings [here](https://github.com/cg-tuwien/StatER-opencv_contrib/blob/master/modules/cudaimgproc/src/cuda/stat_denoiser.cu#L83).\nPlease also note the comments for the individual compilation flags [here](https://github.com/cg-tuwien/StatER-opencv_contrib/blob/master/modules/cudaimgproc/src/cuda/stat_denoiser.cu#L22).\nIf you need assistance with these steps, we are happy to help—please [contact us](https://www.cg.tuwien.ac.at/staff/HiroyukiSakai)!\n\n\n## Quick Reference\n\n### Additional Command-Line Options\n\nOur version of the pbrt executable extends the original with the following options:\n\n| Option | Description |\n| - | - |\n| `--writeimages` | Write images to disk. |\n| `--displayserver \u003csocket\u003e` | Write images to the specified network socket (format `\u003cIP address\u003e:\u003cport number\u003e`). |\n| `--baseseed \u003cnum\u003e` | Use the specified base seed for `RandomSampler`. |\n| `--denoise` | Skip rendering and use prerendered images on disk instead (useful for performing multiple denoising passes without rerendering). |\n| `--warmup` | Perform a warm-up iteration (useful for consistent performance measurements). |\n\n### Extended Scene Description Format\n\nMost of the configuration is done in the scene description files.\nIn the following, we provide an overview over our extensions to the original scene description format.\n\n#### StatPathIntegrator Options\n\nWe have extended the original format with options for our `StatPathIntegrator`.\nTo illustrate, here is an example configuration, which utilizes all relevant options:\n\n```\nIntegrator \"statpath\"\n  \"integer  maxdepth\"            [65]\n  \"bool     expiterations\"       [\"true\"]\n  \"bool     outputexpiterations\" [\"true\"]\n  \"integer  iterations\"          [13]\n\n  \"bool     adaptivesampling\" [\"false\"]\n  \"bool     denoisefilm\"      [\"true\"]\n  \"bool     calcstats\"        [\"false\"]\n  \"bool     calcstatmcstats\"  [\"false\"]\n  \"bool     calcprodenstats\"  [\"false\"]\n  \"bool     calcmoonstats\"    [\"false\"]\n  \"bool     calcgbuffers\"     [\"false\"]\n\n  \"float    varcizvalue\"  [2.80703]\n  \"float    filtersd\"     [10]\n  \"integer  filterradius\" [20]\n\n  \"string   varfilterbuffers\"    [\"albedo\" \"normal\"]\n  \"float    varfilterbuffersds\"  [0.02 0.1]\n  \"string   meanfilterbuffers\"   [\"albedo\" \"normal\"]\n  \"float    meanfilterbuffersds\" [0.02 0.1]\n\n  \"string   outputregex\" [\"film|filmD\"]\n```\n\nThe following table summarizes all available options for our `StatPathIntegrator`:\n\n| Type | Name | Default Value | Description |\n| - | - | - | - |\n| integer | `maxdepth` | `5` | Same as in the [original](https://pbrt.org/fileformat-v3#integrators): \"Maximum length of a light-carrying path sampled by the integrator.\" |\n| integer[4] | `pixelbounds` | (Entire image) | Same as in the [original](https://pbrt.org/fileformat-v3#integrators): \"Subset of image to sample during rendering; in order, values given specify the starting and ending x coordinates and then starting and ending y coordinates. (This functionality is primarily useful for narrowing down to a few pixels for debugging.)\" |\n| float | `rrthreshold` | `1` | Same as in the [original](https://pbrt.org/fileformat-v3#integrators): \"Determines when Russian roulette is applied to paths: when the maximum spectral component of the path contribution falls beneath this value, Russian roulette starts to be used.\" |\n| string | `lightsamplestrategy` | `\"spatial\"` | Same as in the [original](https://pbrt.org/fileformat-v3#integrators): \"Technique used for sampling light sources. Options include 'uniform', which samples all light sources uniformly, 'power', which samples light sources according to their emitted power, and 'spatial', which computes light contributions in regions of the scene and samples from a related distribution.\" |\n| bool | `expiterations` | `true` | Our integrator operates iteratively, with each iteration comprising a rendering and denoising pass. `true` enables exponential growth of the total number of samples per pixel for rendering (e.g., 4, 16, 64, etc.), while `false` enables linear growth (e.g., 4, 8, 12, etc.). The (initial) number of samples per pixel (4 in the examples) is specified via the `pixelsamples` option of the `Sampler`. |\n| bool | `outputexpiterations` | `expiterations` | `true` only outputs images for exponential iterations (e.g., 4, 16, 64, etc.), even if `expiterations` is `false`. |\n| integer | `iterations` | `16` | Total number of iterations |\n| bool | `adaptivesampling` | `false` | `true` enables adaptive sampling. |\n| bool | `denoisefilm` | `false` | `true` enables denoising of the rendered image. |\n| bool | `calcstats` | `false` | `true` enables the calculation of G-buffers and statistics required by our denoiser. Use this option to precompute everything required for denoising without performing the denoising itself. |\n| bool | `calcstatmcstats` | `false` | `true` enables the calculation of G-buffers and statistics required by [StatMC [Sakai et al. 2024]](https://www.cg.tuwien.ac.at/StatMC). |\n| bool | `calcprodenstats` | `false` | `true` enables the calculation of G-buffers and statistics required by [ProDen [Firmino et al. 2022]](https://doi.org/10.1111/cgf.14454). |\n| bool | `calcmoonstats` | `false` | `true` enables the calculation of G-buffers and statistics required by [Moon et al.'s confidence-interval approach [2013]](https://doi.org/10.1111/cgf.12004). |\n| bool | `calcgbuffers` | `false` | `true` enables the calculation of G-buffers required by [NVIDIA's OptiX denoiser](https://developer.nvidia.com/optix-denoiser) and [Intel's OIDN](https://www.openimagedenoise.org/). |\n| float | `filtersd` | `10.0` | Standard deviation of the denoising filter kernel |\n| integer | `filterradius` | `20` | Radius of the denoising filter kernel (limiting the kernel to a finite number of pixels) |\n| string[] | `varfilterbuffers` | `[\"albedo\" \"normal\"]` | G-buffers for variance denoising; possible options are `materialid`, `depth`, `normal`, `albedo`. `materialid` refers to unique numbers that are assigned to different materials by the renderer. For fair comparisons, we used albedos and normals only. |\n| float[] | `varfilterbuffersds` | `[0.02 0.1]` | Standard deviations associated with the G-buffers for variance denoising ($\\sigma_r$ as described in [one of the original joint-bilateral-filter papers](https://hhoppe.com/flash.pdf)); lower values make the filter more discriminative. |\n| string[] | `meanfilterbuffers` | `[\"albedo\" \"normal\"]` | G-buffers for mean denoising; possible options are `materialid`, `depth`, `normal`, `albedo`. `materialid` refers to unique numbers that are assigned to different materials by the renderer. For fair comparisons, we used albedos and normals only. |\n| float[] | `meanfilterbuffersds` | `[0.02 0.1]` | Standard deviations associated with the G-buffers for mean denoising ($\\sigma_r$ as described in [one of the original joint-bilateral-filter papers](https://hhoppe.com/flash.pdf)); lower values make the filter more discriminative. |\n| string | `outputregex` | `film.*` | Regular expression specifying the buffers to output (to disk or network socket as determined by the `--writeimages` and `--displayserver` [command-line options](#additional-command-line-options)); buffers whose unique names match the specified regular expression are output. This way of specification provides a high degree of flexibility, e.g., `film.*\\|t0-.*` matches all buffers whose name begins with `film` or `t0-`. We provide a complete list of buffers [below](#buffer-system). |\n\n#### Including Files\n\nSimilarly to [pbrt-v4](https://pbrt.org/fileformat-v4#include-import), our scene description format supports file includes:\n```\nInclude \"../_active.pbrt\"\n```\nWe have implemented this feature to quickly switch between rendering and denoising configurations without changing the scene description file itself.\nWe provide the following configurations in the [`scenes/`](scenes) directory:\n\n| Configuration File | Description |\n| - | - |\n| [`render-denoise*.pbrt`](scenes/render-denoise.pbrt) | Render and denoise using our denoiser |\n\nAs can be seen in the scripts for reproducing the figures, a configuration file is activated by overwriting `scenes/_active.pbrt` with it.\nOnce a configuration is activated, pbrt can be run normally, supplying the desired scene description file as parameter, e.g.,:\n```bash\n./pbrt ../../scenes/bathroom/scene-stat.pbrt\n```\n\n### Buffer System\n\nThis section provides an overview of the buffer system in `StatPathIntegrator`, which enables working with various inputs for and outputs from our denoiser.\nNote that a more detailed description goes beyond the scope of this overview; for more details, refer to the code itself or [contact us](https://www.cg.tuwien.ac.at/staff/HiroyukiSakai)!\n\nThere are five **buffer types**:\n\n| Index | Name | Box-Cox Transformation | Description |\n| - | - | - | - |\n| 0 | `Radiance` | applied | Monte Carlo radiance estimate |\n| 1 | `StatMaterialID` | not applied | Material ID G-buffer |\n| 2 | `StatDepth` | not applied | Depth G-buffer |\n| 3 | `StatNormal` | not applied | Normal G-buffer |\n| 4 | `StatAlbedo` | not applied | Albedo G-buffer |\n\nThe Box-Cox transformation of radiance samples in our multi-transform setting makes our approach more robust to non-normality; details can be found in [our paper](https://www.cg.tuwien.ac.at/StatER).\nThese types are enabled as required by the [`StatPathIntegrator` configuration](#extended-scene-description-format).\nIn particular, `filterbuffers` determines the enabled G-buffer types.\n\nEach **enabled** type is assigned a consecutively numbered ID (for performance reasons).\nFor instance, if denoising, normals and albedos are enabled, IDs would be assigned as follows:\n\n| ID | Name |\n| - | - |\n| 0 | `Radiance` |\n| 1 | `StatNormal` |\n| 2 | `StatAlbedo` |\n\nFor each enabled type, a set of buffers is created.\nBased on the configuration and these rules, the following buffers are potentially created:\n\n| Type | Name | Description |\n| - | - | - |\n| RGB | `film` | Noisy rendered image |\n| RGB | `filmD` | Denoised rendered image |\n| RGB | `tX-b0-mean` | Sample mean of transformed samples for type `X` |\n| RGB | `tX-b0-m2` | Sum of squared deviations of transformed samples for type `X` (division by the number of samples gives the second sample central moment) |\n| RGB | `tX-b0-m3` | Sum of cubed deviations of transformed samples for type `X` (division by the number of samples gives the third sample central moment) |\n| RGB | `tX-b0-m4` | Sum of fourth powers of deviations of transformed samples for type `X` (division by the number of samples gives the fourth sample central moment) |\n| RGB | `tX-b0-c2X` | Cumulative covariance of transformed samples and pixel positions along x direction for type `X` (division by the number of samples minus one gives the Bessel-corrected covariance) |\n| RGB | `tX-b0-c2Y` | Cumulative covariance of transformed samples and pixel positions along y direction for type `X` (division by the number of samples minus one gives the Bessel-corrected covariance) |\n| RGB | `tX-b0-m1` | Total absolute deviation of transformed samples for type `X` (division by the number of samples gives the mean absolute deviation) |\n| RGB | `tX-b0-jb` | Jarque–Bera score of transformed samples for type `X` |\n| RGB | `tX-b0-lnS2` | Bonett's `ln(s2)` of transformed samples for type `X` |\n| RGB | `tX-b0-se2` | Bonett's squared standard error `se^2` of transformed samples for type `X` |\n| RGB | `tX-b0-m2C` | LEV-corrected sum of squared deviations of transformed samples for type `X` (division by the number of samples gives the second sample central moment) |\n| RGB | `tX-b0-varD` | Denoised variance of transformed samples for type `X` |\n| RGB | `tX-b0-varCD` | Denoised LEV-corrected variance of transformed samples for type `X` |\n| RGB | `tX-b0-discr` | Welch discriminator of transformed samples for type `X` (used to cache per-pixel discriminators for mean denoising) |\n\nAll `tX-b0-*` buffers above are also available for untransformed samples with the prefix `tX-b0-film-*`.\nIn addition, the following buffers are additionally used for untransformed samples:\n\n| Type | Name | Description |\n| - | - | - |\n| integer | `tX-b0-film-n` | Number of samples taken for type `X` | \n| RGB | `tX-b0-film-meanVar` | Sample variance of untransformed samples for type `X` |\n| RGB | `tX-b0-film-meanD` | Denoised mean of untransformed samples for type `X` |\n\nDepending on the configuration, some buffers may be disabled, and GPU-computed buffers must be [downloaded to the CPU](src/statistics/estimator.cpp#L355) before they can be output.\nFor `mt[-jb]` builds, only non-`film` buffers are used for storing the transformed statistics, with `b1` to `b8` specifying the index of the transformation.\nCovering the effects of every possible configuration is beyond the scope of this README.\nFor more information, please check the code directly or [reach out to us](https://www.cg.tuwien.ac.at/staff/HiroyukiSakai).\nThe [`outputregex` option](#extended-scene-description-format) provides a convenient way to select output buffers.\n\n### Limitations\n\n`StatPathIntegrator` supports the `BoxFilter` only.\n\n\n## Acknowledgments\n\nWe thank [Thomas Auzinger](https://auzinger.name/) for providing LaTeX plugins, [José Dias Curto](https://ciencia.iscte-iul.pt/authors/jose-joaquim-dias-curto/cv) for support with confidence intervals, and [Markus Schütz](https://www.cg.tuwien.ac.at/staff/MarkusSch%C3%BCtz) for assistance with the CUDA implementation. We also thank the creators of the scenes we used: [Benedikt Bitterli](https://benedikt-bitterli.me/) for [\"Veach, Bidir Room\"](https://benedikt-bitterli.me/resources/) (Figs. 1, S12), [\"Cornell Box\"](https://benedikt-bitterli.me/resources/) (Fig. 2), and [\"Fur Ball\"](https://benedikt-bitterli.me/resources/) (Fig. 12); [Jay-Artist](https://blendswap.com/profile/1574) for [\"Country Kitchen\"](https://blendswap.com/blend/5156) (Figs. 4, 5, 10, S2, S10, S16); [Mareck](https://www.blendswap.com/profile/53736) for [\"Contemporary Bathroom\"](https://blendswap.com/blend/13303) (Figs. 7, 14, S13); [thecali](https://blendswap.com/profile/215428) for [\"4060.b Spaceship\"](https://blendswap.com/blend/13489) (Fig. 9); [piopis](https://blendswap.com/profile/10550) for [\"Old Vintage Car\"](https://blendswap.com/blend/14205) (Fig. 13); [Cem Yuksel](http://www.cemyuksel.com/) for [\"Straight Hair\"](http://www.cemyuksel.com/research/hairmodels/) (Fig. S4) and [\"Curly Hair\"](http://www.cemyuksel.com/research/hairmodels/) (Fig. S5); [UP3D](https://blendswap.com/profile/4758) for [\"Little Lamp\"](https://blendswap.com/blend/6885) (Fig. S6); [axel](https://blendswap.com/profile/945886) for [\"Glass of Water\"](https://blendswap.com/blend/3915) (Fig. S7); [MrChimp2313](https://blendswap.com/profile/10069) for [\"Victorian Style House\"](https://blendswap.com/blend/12687) (Fig. S8); [NovaAshbell](https://blendswap.com/profile/135376) for [\"Japanese Classroom\"](https://blendswap.com/blend/13632) (Fig. S9); and [Beeple](https://www.beeple-crap.com/) for [\"Zero-Day\"](https://www.beeple-crap.com/resources) (Fig. S11). Statistical simulation studies were conducted using the [Austrian Scientific Computing (ASC)](https://asc.ac.at/) infrastructure. This work has been funded by the Vienna Science and Technology Fund (WWTF) [Grant ID: 1047379/ICT22028]. This research was funded in whole or in part by the Austrian Science Fund (FWF) [[10.55776/F77]](https://doi.org/10.55776/F77). For open-access purposes, the author has applied a CC BY public copyright license to any author-accepted manuscript version arising from this submission. The authors acknowledge TU Wien Bibliothek for financial support through its Open Access Funding Programme.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcg-tuwien%2Fstater","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcg-tuwien%2Fstater","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcg-tuwien%2Fstater/lists"}