Git Product home page Git Product logo

mmp / pbrt-v3 Goto Github PK

View Code? Open in Web Editor NEW
4.8K 256.0 1.2K 5.59 MB

Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.

Home Page: http://pbrt.org

License: BSD 2-Clause "Simplified" License

C++ 89.05% C 9.50% CMake 0.46% Python 0.94% Shell 0.03% Dockerfile 0.01% ReScript 0.02%

pbrt-v3's Introduction

pbrt, Version 3

Build Status Build status

This repository holds the source code to the version of pbrt that is described in the third edition of Physically Based Rendering: From Theory to Implementation, by Matt Pharr, Wenzel Jakob, and Greg Humphreys. As before, the code is available under the BSD license.

The pbrt website has general information about both the Physically Based Rendering book as well as many other resources for pbrt. As of October 2018, the full text of the book is now available online, for free.

Example scenes

Over 8GB of example scenes are available for download. (Many are new and weren't available with previous versions of pbrt.) See the pbrt-v3 scenes page on the pbrt website for information about how to download them.

After downloading them, see the README.md.html file in the scene distribution for more information about the scenes and preview images.

Additional resources

  • There is a pbrt Google Groups mailing list that can be a helpful resource.
  • Please see the User's Guide for more information about how to check out and build the system as well as various additional information about working with pbrt.
  • Should you find a bug in pbrt, please report it in the bug tracker.
  • Please report any errors you find in the Physically Based Rendering book to [email protected].

Note: we tend to let bug reports and book errata emails pile up for a few months for processing them in batches. Don't think we don't appreciate them. :-)

Building pbrt

To check out pbrt together with all dependencies, be sure to use the --recursive flag when cloning the repository, i.e.

$ git clone --recursive https://github.com/mmp/pbrt-v3/

If you accidentally already cloned pbrt without this flag (or to update an pbrt source tree after a new submodule has been added, run the following command to also fetch the dependencies:

$ git submodule update --init --recursive

pbrt uses cmake for its build system. On Linux and OS X, cmake is available via most package management systems. To get cmake for Windows, or to build it from source, see the cmake downloads page. Once you have cmake, the next step depends on your operating system.

Makefile builds (Linux, other Unixes, and Mac)

Create a new directory for the build, change to that directory, and run cmake [path to pbrt-v3]. A Makefile will be created in the current directory. Next, run make to build pbrt, the obj2pbrt and imgtool utilities, and an executable that runs pbrt's unit tests. Depending on the number of cores in your system, you will probably want to supply make with the -j parameter to specify the number of compilation jobs to run in parallel (e.g. make -j8).

By default, the makefiles that are created that will compile an optimized release build of pbrt. These builds give the highest performance when rendering, but many runtime checks are disabled in these builds and optimized builds are generally difficult to trace in a debugger.

To build a debug version of pbrt, set the CMAKE_BUILD_TYPE flag to Debug when you run cmake to create build files to make a debug build. To do so, provide cmake with the argument -DCMAKE_BUILD_TYPE=Debug and build pbrt using the resulting makefiles. (You may want to keep two build directories, one for release builds and one for debug builds, so that you don't need to switch back and forth.)

Debug versions of the system run much more slowly than release builds. Therefore, in order to avoid surprisingly slow renders when debugging support isn't desired, debug versions of pbrt print a banner message indicating that they were built for debugging at startup time.

Xcode

To make an Xcode project on OS X, run cmake -G Xcode [path to pbrt-v3]. A PBRT-V3.xcodeproj project file that can be opened in Xcode. Note that the default build settings have an optimization level of "None"; you'll almost certainly want to choose "Faster" or "Fastest".

MSVC on Windows

On Windows, first point the cmake GUI at the directory with pbrt's source code. Create a separate directory to hold the result of the build (potentially just a directory named "build" inside the pbrt-v3 directory) and set that for "Where to build the binaries" in the GUI.

Next, click "Configure". Note that you will want to choose the "Win64" generator for your MSVC installation unless you have a clear reason to need a 32-bit build of pbrt. Once cmake has finished the configuration step, click "Generate"; when that's done, there will be a "PBRT-V3.sln" file in the build directory you specified. Open that up in MSVC and you're ready to go.

Build Configurations

There are two configuration settings that must be set when configuring the build. The first controls whether pbrt uses 32-bit or 64-bit values for floating-point computation, and the second controls whether tristimulus RGB values or sampled spectral values are used for rendering. (Both of these aren't amenable to being chosen at runtime, but must be determined at compile time for efficiency). The cmake configuration variables PBRT_FLOAT_AS_DOUBLE and PBRT_SAMPLED_SPECTRUM configure them, respectively.

If you're using a GUI version of cmake, those settings should be available in the list of configuration variables; set them as desired before choosing 'Generate'.

With command-line cmake, their values can be specified when you cmake via -DPBRT_FLOAT_AS_DOUBLE=1, for example.

pbrt-v3's People

Contributors

aaronmk avatar abusch avatar ambakshi avatar amtinits avatar dakerfp avatar henrikdahlberg avatar immocat avatar jakubhendrich avatar kennyalive avatar kiwaiii avatar koiava avatar kojinakamaru avatar matt77hias avatar mjhsnps avatar mmp avatar mudream4869 avatar mx7f avatar nextdesign1 avatar nyue avatar phg1024 avatar rcythr avatar rgirish28 avatar scylardor avatar syoyo avatar tdapper avatar tunabrain avatar twinklebear avatar wjakob avatar z-boson avatar zq317157782 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pbrt-v3's Issues

Curve Intersection Maximum Depth

The curve intersection routine currently implemented follows the paper by 'Koji Nakamaru and Yoshio Ono'. The maximum recursion depth computed as a part of the intersection routine in line 149 (https://github.com/mmp/pbrt-v3/blob/master/src/shapes/curve.cpp#L149) actually has a probable bug.

The original paper computes r0 = sqrt(2) * N(N-1) * L0 / (8 * epsilon). Since we assume only cubic Beziers, N = 3 here and hence N*(N-1) actually would be 6 . However the current code has 12 which might result in a larger recursion depth being computed than what is necessary. Increased recursion would not result in an error, however might result in wasted computation.

Texel values at upper and bottom poles of InfiniteAreaLight leak to other directions

If the InfiniteAreaLight constructor is modified to create a low-res environment map with only the top scanline emitting like this:

          resolution.x = resolution.y = 10;
          for (int y = 0; y < resolution.y; ++y) {
            for (int x = 0; x < resolution.x; ++x) {
              if (y == 0)
                texels[y * resolution.x + x] = 1000000.;
              else
                texels[y * resolution.x + x] = 0.;
            }
          }

Then if a small test like this is performed:

    for (Float y = 0; y < 1.f; y += .0249f) {
      for (Float x = 0; x < 1.f; x += .125f) {
        fprintf(stderr, "(%f, %f) = %f\n", x, y,
                Lmap->Lookup(Point2f(x, y)).y());
      }
    }

Then for lots of y values close to 1, the lookup returns a non-zero result:

(0.625000, 0.996000) = 494165.437500

For high-res environment maps, this issue is hidden by the fact that the sinTheta value that the environment map luminance is multiplied by when creating the sampling PDF is very small. But this is still bad.

The root issue is that we want the MIPMap to use REPEAT (as it does now) for out-of-bounds s coordinates, but to do a mirror and flip combination for out of bounds t. Unfortunately, MIPMap only supports one wrap mode. The right fix is probably to rewrite InfiniteAreaLight to not use MIPMap at all, since we don't need most of its functionality anyway.

Also, we should add a unit test for this when it's fixed.

Windows build fails if flex and bison are found.

The following lines in CMakeLists.txt create a version of pbrtlex.cpp that does not compile on Windows (with MSVC 2015). Two of the issues encountered are:

  • The escape character () in the inline bash statement (bash -c ...) is not needed
  • The generated pbrtlex.cpp contains references to unistd.h and is generally unusable.

Removing the IF(BISON_FOUND AND FLEX_FOUND) part of the conditional fixes the build.

# Optionally use Bison and Flex to regenerate parser files
# Use pregenerated files otherwise (may be outdated)
FIND_PACKAGE ( BISON )
FIND_PACKAGE ( FLEX )
IF(BISON_FOUND AND FLEX_FOUND)
  SET(BisonOutput ${CMAKE_BINARY_DIR}/pbrtparse.cpp)
  ADD_CUSTOM_COMMAND(
    OUTPUT ${BisonOutput} ${CMAKE_BINARY_DIR}/pbrtparse.hh
    DEPENDS ${CMAKE_SOURCE_DIR}/src/core/pbrtparse.yy
    COMMAND ${BISON_EXECUTABLE} -d -v -t
            --output=${BisonOutput}
            ${CMAKE_SOURCE_DIR}/src/core/pbrtparse.yy
    COMMAND bash -c "if [[ -e ${CMAKE_BINARY_DIR}/pbrtparse.hpp ]]; then /bin/mv ${CMAKE_BINARY_DIR}/pbrtparse.hpp ${CMAKE_BINARY_DIR}/pbrtparse.hh; fi"
    COMMENT "Generating pbrtparse.cpp and pbrtparse.hh"
  )

  SET(FlexOutput ${CMAKE_BINARY_DIR}/pbrtlex.cpp)
  ADD_CUSTOM_COMMAND(
    OUTPUT ${FlexOutput}
    DEPENDS ${CMAKE_BINARY_DIR}/pbrtparse.hh ${CMAKE_SOURCE_DIR}/src/core/pbrtlex.ll
    COMMAND ${FLEX_EXECUTABLE}
            -o${FlexOutput}
            ${CMAKE_SOURCE_DIR}/src/core/pbrtlex.ll
    COMMENT "Generating pbrtlex.cpp"
  )

  SET ( PBRT_YACC_LEX_SOURCE
    ${BisonOutput}
    ${FlexOutput}
    )
ELSE()
  SET ( PBRT_YACC_LEX_SOURCE
    src/core/pbrtlex.cpp
    src/core/pbrtparse.cpp
    )
ENDIF()

Compilation fails with GCC 6.1.1

Compilation fails with the following errors:

In file included from pbrt-v3/src/core/sampler.h:44:0,
                 from pbrt-v3/src/core/integrator.h:47,
                 from pbrt-v3/src/core/scene.h:44,
                 from pbrt-v3/src/core/api.cpp:38:
pbrt-v3/src/core/rng.h:51:38: error: exponent has no digits
 static const Float OneMinusEpsilon = 0x1.fffffep-1;
                                      ^~~~~~~~~~~
pbrt-v3/src/core/rng.h:76:66: error: exponent has no digits
         return std::min(OneMinusEpsilon, Float(UniformUInt32() * 0x1p-32f));
                                                                  ^~~~
In file included from pbrt-v3/src/samplers/halton.h:43:0,
                 from pbrt-v3/src/core/api.cpp:81:
pbrt-v3/src/core/lowdiscrepancy.h:103:51: error: exponent has no digits
     return (MultiplyGenerator(C, a) ^ scramble) * 0x1p-32f;
                                                   ^~~~
pbrt-v3/src/core/lowdiscrepancy.h:116:20: error: exponent has no digits
         p[i] = v * 0x1p-32f; /* 1/2^32 */
                    ^~~~
pbrt-v3/src/core/lowdiscrepancy.h:130:25: error: exponent has no digits
         p[i].x = v[0] * 0x1p-32f;
                         ^~~~
pbrt-v3/src/core/lowdiscrepancy.h:131:25: error: exponent has no digits
         p[i].y = v[1] * 0x1p-32f;

...

with

 % gcc --version
gcc (GCC) 6.1.1 20160602

The compilation errors can be fixed by changing line 21 of CMakeLists.txt from

  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

to

  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

Importance sampling for infinite area light is off by half a texel

As explained in Section 14.6.5 and Figure 14.13, p.726 in PBRT v2 the importance of the environment texture should be computed by interpolating adjacent texels. Therefore InfiniteAreaLight samples the texture at the discrete coordinates uv. However, this means that the pdf in Distribution2D for uv represents the average importance for the area (uv-0.5, uv+0.5). Now, SampleContinuous selects a bin according to the pdf and samples uniformly within that bin, i.e. the returned coordinates represent [uv, uv+1.0). To account for this difference in coordinates the Sample_Li and Sample_Le functions of the infinite area light should subtract "half a texel" from uv, e.g.:

--- a/src/lights/infinite.cpp
+++ b/src/lights/infinite.cpp
@@ -98,3 +98,5 @@ Spectrum InfiniteAreaLight::Sample_Li(const Interaction &ref, const Point2f &u
     // Find $(u,v)$ sample coordinates in infinite light texture
     Float mapPdf;
     Point2f uv = distribution->SampleContinuous(u, &mapPdf);
+    uv.x -= (Float)0.5 / Lmap->Width();
+    uv.y -= (Float)0.5 / Lmap->Height();

So, Figure 14.13 is actually misleading, because for textures their values are defined at the center of each texel (at continuous coordinates uv+0.5, see Section 10.4.3, p.538): the piecewise linear function should therefore be shifted by 0.5.

The error is subtle and only gets noticed for high-contrast environment maps. For example, using a black texture with only one white texel, half of the samples are wasted (they have zero contribution). A nice way to debug these issues is to visualize the sample contributions of the infinite area light, i.e. render L = infiniteLight->Sample_Li(...) / lightPdf using the (normalized) pixel coordinates as random numbers. The more constant the resulting image, the better the importance sampling.

Some example images (before and after the correction) are attached:

Single white pixel, original: single_pixel_before
Single white pixel, with fix: single_pixel_after
Grace Cathedral HDRI, original: grace-new_before
Grace Cathedral HDRI, with fix: grace-new_after

Some more remarks on minor issues:

  • The environment texture is resampled by MIPMap to a power-of-two resolution. To avoid aliasing artefacts the importance map should be created with that resolution as well (that's why the above patch uses Lmap->Width() and Lmap->Height()):

    --- a/src/lights/infinite.cpp
    +++ b/src/lights/infinite.cpp
    @@ -63,3 +63,3 @@ InfiniteAreaLight::InfiniteAreaLight(const Transform &LightToWorld
         // Compute scalar-valued image _img_ from environment map
    -    int width = resolution.x, height = resolution.y;
    +    int width = Lmap->Width(), height = Lmap->Height();
  • Because we want to compute the average importance for the area (uv-0.5, uv+0.5) the average of sinTheta is better approximated with "sin(uv)":

    --- a/src/lights/infinite.cpp
    +++ b/src/lights/infinite.cpp
    @@ -68,5 +68,5 @@ InfiniteAreaLight::InfiniteAreaLight(const Transform &LightToWorld,
         for (int v = 0; v < height; ++v) {
             Float vp = (Float)v / (Float)height;
    -        Float sinTheta = std::sin(Pi * Float(v + .5f) / Float(height));
    +        Float sinTheta = std::sin(Pi * vp);
              for (int u = 0; u < width; ++u) {

    This leads to zero probability for the first row, which is actually a good thing: uv cannot become negative after subtracting half a texel. And sampling the north pole leads to artefacts anyway (because of texture wrapping light leaks from the south pole).

  • The computation of the filter width could be skipped. The default width of zero in MIPMap::Lookup already ensures that the most detailed mipmap level is used, and the triangle filter used for bilinear interpolation computes the wanted average of the four texels.

Little issues in BVH

[1] I am not a C++ expert, but isn't this line here redundant?
inline uint32_t LeftShift3(uint32_t x);
https://github.com/mmp/pbrt-v3/blob/master/src/accelerators/bvh.cpp#L81

[2] The depth in flattenBVHTree(BVHBuildNode *node, int *offset, int depth)
https://github.com/mmp/pbrt-v3/blob/master/src/accelerators/bvh.cpp#L614
looks like there is no propose / use of that variable.

[3] At https://github.com/mmp/pbrt-v3/blob/master/src/accelerators/bvh.cpp#L273
I was confused in that switch / fall break, then I notice that in PBRT source code from book 2, you have a comment that helps understand the fall and make the things more clear.

Tests failed, a VS2015RC build.

Just compiled and ran a test using a VS2015RC build on my branch 'appVeyor'. Results look not so good, any hints that I might want to look at ?

Test log:

Running main() from gtest_main.cc
[==========] Running 114 tests from 6 test cases.
[----------] Global test environment set-up.
[----------] 1 test from Log2
[ RUN ] Log2.Basics
[ OK ] Log2.Basics (0 ms)
[----------] 1 test from Log2 (0 ms total)

[----------] 1 test from Pow2
[ RUN ] Pow2.Basics
[ OK ] Pow2.Basics (0 ms)
[----------] 1 test from Pow2 (0 ms total)

[----------] 1 test from CountTrailing
[ RUN ] CountTrailing.Basics
[ OK ] CountTrailing.Basics (0 ms)
[----------] 1 test from CountTrailing (0 ms total)

[----------] 2 tests from EXR
[ RUN ] EXR.BasicRoundTrip
[ OK ] EXR.BasicRoundTrip (10 ms)
[ RUN ] EXR.Randoms
[ OK ] EXR.Randoms (880 ms)
[----------] 2 tests from EXR (890 ms total)

[----------] 5 tests from FloatingPoint
[ RUN ] FloatingPoint.NextUpDownFloat
[ OK ] FloatingPoint.NextUpDownFloat (0 ms)
[ RUN ] FloatingPoint.NextUpDownDouble
[ OK ] FloatingPoint.NextUpDownDouble (10 ms)
[ RUN ] FloatingPoint.FloatBits
[ OK ] FloatingPoint.FloatBits (10 ms)
[ RUN ] FloatingPoint.DoubleBits
[ OK ] FloatingPoint.DoubleBits (0 ms)
[ RUN ] FloatingPoint.EFloat
[ OK ] FloatingPoint.EFloat (20 ms)
[----------] 5 tests from FloatingPoint (40 ms total)

[----------] 104 tests from AnalyticTestScenes/RenderTest
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/0
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/0, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/1
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/1, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/2
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/2, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/3
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/3, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/4
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/4, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/5
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/5, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/6
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/6, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/7
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/7, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/8
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/8, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/9
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/9, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/10
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/10, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/11
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/11, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/12
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/12, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/13
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/13, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/14
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/14, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/15
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/15, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/16
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/16, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/17
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/17, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/18
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/18, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/19
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/19, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/20
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/20, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/21
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/21, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/22
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/22, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/23
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/23, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/24
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/24, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/25
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/25, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.5 (860 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/26
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/26, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/27
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/27, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/28
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/28, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/29
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/29, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/30
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/30, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/31
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/31, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/32
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/32, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/33
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/33, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/34
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/34, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/35
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/35, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/36
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/36, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/37
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/37, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/38
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/38, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/39
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/39, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/40
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/40, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/41
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/41, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/42
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/42, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/43
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/43, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/44
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/44, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/45
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/45, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/46
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/46, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/47
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/47, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/48
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/48, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/49
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/49, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/50
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/50, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/51
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/51, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.5 (867 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/52
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/52, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/53
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/53, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/54
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/54, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/55
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/55, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/56
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/56, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/57
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/57, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/58
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/58, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/59
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/59, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/60
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/60, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/61
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/61, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/62
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/62, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/63
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/63, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/64
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/64, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/65
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/65, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/66
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/66, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/67
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/67, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/68
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/68, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/69
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/69, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/70
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/70, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/71
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/71, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/72
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/72, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5 (20 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/73
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/73, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5 (50 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/74
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/74, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/75
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/75, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/76
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/76, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5 (20 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/77
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/77, where GetParam() = MLT, depth 8, Perspective, Sphere, Kd = 0.5, Le = 0.5 (846 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/78
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/78, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/79
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/79, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/80
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/80, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/81
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/81, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/82
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/82, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/83
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/83, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/84
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/84, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/85
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/85, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/86
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/86, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/87
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/87, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (20 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/88
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/88, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/89
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/89, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/90
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/90, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/91
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/91, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/92
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/92, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/93
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/93, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/94
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/94, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/95
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/95, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/96
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/96, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/97
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/97, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/98
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/98, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/99
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/99, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (20 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/100
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/100, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (0 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/101
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/101, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/102
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/102, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (10 ms)
[ RUN ] AnalyticTestScenes/RenderTest.RadianceMatches/103
....\tests\analytic_scenes.cpp(61): error: The difference between expected and sum / nPixels is 1, which exceeds delta, where
expected evaluates to 1,
sum / nPixels evaluates to 0, and
delta evaluates to 0.019999999552965164.
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/103, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.25 Kr = 0.5 (524 ms)
[----------] 104 tests from AnalyticTestScenes/RenderTest (3767 ms total)

[----------] Global test environment tear-down
[==========] 114 tests from 6 test cases ran. (4707 ms total)
[ PASSED ] 10 tests.
[ FAILED ] 104 tests, listed below:
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/0, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/1, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/2, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/3, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/4, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/5, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/6, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/7, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/8, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/9, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/10, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/11, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/12, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/13, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/14, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/15, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/16, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/17, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/18, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/19, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/20, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/21, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/22, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/23, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/24, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/25, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/26, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/27, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/28, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/29, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/30, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/31, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/32, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/33, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/34, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/35, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/36, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/37, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/38, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/39, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/40, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/41, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/42, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/43, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/44, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/45, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/46, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/47, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/48, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/49, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/50, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/51, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/52, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/53, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/54, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/55, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/56, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/57, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/58, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/59, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/60, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/61, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/62, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/63, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/64, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/65, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/66, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/67, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/68, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/69, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/70, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/71, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/72, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/73, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/74, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/75, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/76, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/77, where GetParam() = MLT, depth 8, Perspective, Sphere, Kd = 0.5, Le = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/78, where GetParam() = Path, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/79, where GetParam() = Path, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/80, where GetParam() = Path, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/81, where GetParam() = Path, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/82, where GetParam() = Path, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/83, where GetParam() = Path, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/84, where GetParam() = Path, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/85, where GetParam() = Path, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/86, where GetParam() = Path, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/87, where GetParam() = Path, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/88, where GetParam() = VolPath, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/89, where GetParam() = VolPath, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/90, where GetParam() = VolPath, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/91, where GetParam() = VolPath, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/92, where GetParam() = VolPath, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/93, where GetParam() = VolPath, depth 8, Ortho, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/94, where GetParam() = VolPath, depth 8, Ortho, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/95, where GetParam() = VolPath, depth 8, Ortho, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/96, where GetParam() = VolPath, depth 8, Ortho, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/97, where GetParam() = VolPath, depth 8, Ortho, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/98, where GetParam() = BDPT, depth 8, Perspective, Halton 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/99, where GetParam() = BDPT, depth 8, Perspective, (0,2)-seq 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/100, where GetParam() = BDPT, depth 8, Perspective, Sobol 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/101, where GetParam() = BDPT, depth 8, Perspective, Random 256, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/102, where GetParam() = BDPT, depth 8, Perspective, Stratified 16x16, Sphere, 1 light, Kd = 0.25 Kr = 0.5
[ FAILED ] AnalyticTestScenes/RenderTest.RadianceMatches/103, where GetParam() = MLT, depth 8, Perspective, Sphere, 1 light, Kd = 0.25 Kr = 0.5

104 FAILED TESTS

improve parallel scalability

I've done some benchmarks of a parallel scalability on a 16 core machine, using 1, 2, 4, 8, and 16 threads (for all of the integrators besides Whitted and direct lighting). This spreadsheet summarizes the results (for the moderately complex "breakfast" scene, to come in the pbrt-v3 scenes distribution). For the benchmarks, I modified Film:WriteImage() to return immediately, so that the time measured in the Render() methods didn't include that time.

https://docs.google.com/spreadsheets/d/10gbn0kmaZ-DGq1URB6Yw-jbiaCyaPQyuim0IjcL-zcE/edit?usp=sharing

Interestingly enough scalability for everything but SPPM is very nearly the same: a not impressive 1.9x with two cores, up to ~12.7x with 16 cores. SPPM is broken into the camera pass, photon pass, and statistics update pass; there, scalability is slightly worse. (Though for SPPM there is some construction of and updating of shared data structures, so it's reasonable that it's a bit worse...)

vc2015 can not build the project either, there are so many building errors.

Severity Code Description Project File Line
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C4576 a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\cameras\realistic.cpp 82
Error C2039 'tolower': is not a member of 'std' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\imageio.h 51
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\lowdiscrepancy.cpp 453
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C1083 Cannot open include file: 'sys/time.h': No such file or directory pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\stats.cpp 43
Error C2039 'function': is not a member of 'std' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 53
Error C2061 syntax error: identifier 'function' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 53
Error C2065 'funcs': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 54
Error C2065 'funcs': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2039 'function': is not a member of 'std' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2065 'function': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2059 syntax error: ')' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2976 'std::vector': too few template arguments pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2512 'std::vector': no appropriate default constructor available pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2059 syntax error: ';' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 55
Error C2065 'funcs': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 56
Error C2227 left of '->push_back' must point to class/struct/union/generic type pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 56
Error C2065 'func': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 56
Error C2039 'function': is not a member of 'std' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C2065 'function': undeclared identifier pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C2059 syntax error: ')' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C2976 'std::vector': too few template arguments pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C2059 syntax error: '>' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C2238 unexpected token(s) preceding ';' pbrt d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\stats.h 62
Error C1083 Cannot open include file: 'unistd.h': No such file or directory pbrt D:\Users\mpharr\pbrt-3ed\b2\pbrtlex.cpp 804
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') bsdftest C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided bsdftest d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') chi2test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided chi2test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exravg C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C2039 'tolower': is not a member of 'std' exravg d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\imageio.h 51
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') exrdiff C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C2039 'tolower': is not a member of 'std' exrdiff d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\imageio.h 51
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') hdrtoldr C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C2039 'tolower': is not a member of 'std' hdrtoldr d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\imageio.h 51
Error C2039 'min': is not a member of 'std' obj2pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\tools\obj2pbrt.cpp 931
Error C3861 'min': identifier not found obj2pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\tools\obj2pbrt.cpp 931
Error C2039 'max': is not a member of 'std' obj2pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\tools\obj2pbrt.cpp 932
Error C3861 'max': identifier not found obj2pbrt d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\tools\obj2pbrt.cpp 932
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 331
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 346
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 361
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 376
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 390
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 405
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 420
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 435
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_exe C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 449
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 251
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 266
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 280
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 298
Error C3551 if a trailing return type is used then the leading return type shall be the single type-specifier 'auto' (not 'const auto') pbrt_test C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xfunctional 313
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt_test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt_test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt_test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt_test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt_test d:\phd\research\cg\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'p'; literal operator or literal operator template 'operator ""p' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C3688 invalid literal suffix 'f'; literal operator or literal operator template 'operator ""f' not found pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 '_Ty std::min(std::initializer_list<_Elem>,_Pr)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &,_Pr)': expects 3 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2784 '_Ty std::min(std::initializer_list<_Elem>)': could not deduce template argument for 'std::initializer_list<_Elem>' from 'const Float' pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74
Error C2780 'const _Ty &std::min(const _Ty &,const _Ty &)': expects 2 arguments - 1 provided pbrt_test d:\PhD\Research\CG\pbrt\pbrt-v3-master\src\core\rng.h 74

undefined reference to 'pthread_create', won't build

I'm building pbrt-v3 under Arch Linux x86_64, gcc 5.2.0, and it won't build. It says in the function ParallelFor() in parallel.cpp.o in libpbrt.a there's an undefined reference to 'pthread_create'. I tried editing CXXFLAGS in CMakeFiles/pbrt.dir/flags.make and adding -pthread, then I tried -lpthread, same problem. It might be I'm just doing something wrong, but then, it should work without me messing with the makefiles anyway, shouldn't it? Thanks in advance!
(By the way, I'll copy the whole error log here if it might help:

Linking CXX executable exrdiff
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int)> const&, int, int)':
parallel.cpp:(.text+0x556): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `MaxThreadIndex()':
parallel.cpp:(.text+0xc08): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>)> const&, Point2<int> const&)':
parallel.cpp:(.text+0xe34): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>, int)> const&, Point2<int> const&)':
parallel.cpp:(.text+0x1554): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int, int)> const&, int, int)':
parallel.cpp:(.text+0x1cca): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
CMakeFiles/exravg.dir/build.make:86: recipe for target 'exravg' failed
make[2]: *** [exravg] Error 1
CMakeFiles/Makefile2:130: recipe for target 'CMakeFiles/exravg.dir/all' failed
make[1]: *** [CMakeFiles/exravg.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int)> const&, int, int)':
parallel.cpp:(.text+0x556): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `MaxThreadIndex()':
parallel.cpp:(.text+0xc08): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>)> const&, Point2<int> const&)':
parallel.cpp:(.text+0xe34): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>, int)> const&, Point2<int> const&)':
parallel.cpp:(.text+0x1554): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int, int)> const&, int, int)':
parallel.cpp:(.text+0x1cca): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
CMakeFiles/bsdftest.dir/build.make:86: recipe for target 'bsdftest' failed
make[2]: *** [bsdftest] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/bsdftest.dir/all' failed
make[1]: *** [CMakeFiles/bsdftest.dir/all] Error 2
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int)> const&, int, int)':
parallel.cpp:(.text+0x556): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `MaxThreadIndex()':
parallel.cpp:(.text+0xc08): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>)> const&, Point2<int> const&)':
parallel.cpp:(.text+0xe34): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>, int)> const&, Point2<int> const&)':
parallel.cpp:(.text+0x1554): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int, int)> const&, int, int)':
parallel.cpp:(.text+0x1cca): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
CMakeFiles/chi2test.dir/build.make:86: recipe for target 'chi2test' failed
make[2]: *** [chi2test] Error 1
CMakeFiles/Makefile2:95: recipe for target 'CMakeFiles/chi2test.dir/all' failed
make[1]: *** [CMakeFiles/chi2test.dir/all] Error 2
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int)> const&, int, int)':
parallel.cpp:(.text+0x556): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `MaxThreadIndex()':
parallel.cpp:(.text+0xc08): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>)> const&, Point2<int> const&)':
parallel.cpp:(.text+0xe34): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (Point2<int>, int)> const&, Point2<int> const&)':
parallel.cpp:(.text+0x1554): undefined reference to `pthread_create'
libpbrt.a(parallel.cpp.o): In function `ParallelFor(std::function<void (int, int)> const&, int, int)':
parallel.cpp:(.text+0x1cca): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
CMakeFiles/exrdiff.dir/build.make:86: recipe for target 'exrdiff' failed
make[2]: *** [exrdiff] Error 1
CMakeFiles/Makefile2:165: recipe for target 'CMakeFiles/exrdiff.dir/all' failed
make[1]: *** [CMakeFiles/exrdiff.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
make: *** [all] Error 2

)

Invalid case for SampledSpectrum

The SampledSpectrum class uses the function AverageSpectrumSamples to average the loaded spectra from .spd files. This function gives a wrong spectrum in case of monochromatic SPDs that are sampled with 1 nm resolution. For example a laser beam that is delta Dirac, or has only certain intensity at one wavelength. This function splits the value between two wavelengths, which is completely wrong and can significantly change the results of the rendering.

To reproduce the error, just set
static const int sampledLambdaStart = 400;
static const int sampledLambdaEnd = 700;
static const int nSpectralSamples = 300;

and load the .spd file that has a monochromatic spectrum (1000 at 650 nm, given below)
If you print the values of the resulting spectrum, you will get the following result
...
at[649] = 0
at[650] = 500
at[651] = 500
at[652] = 0
...

However, you should get the following
...
at[649] = 0
at[650] = 500
at[651] = 0
at[652] = 0
...

Proposed solution:
Add one more argument to the AverageSpectrumSamples that reflect the index of the wavelength, and then check if the spectrum has sampling of 1 nm or not. If yes, then return the power at the given index, otherwise, average the spectrum.

Float AverageSpectrumSamples(const Float *lambda, const Float *vals, int n, Float lambdaStart, Float lambdaEnd, const int index)

if ((sampledLambdaEnd - sampledLambdaStart) == nSpectralSamples) return vals[index];

[ laser.spd ]
400 0
401 0
402 0
403 0
404 0
405 0
406 0
407 0
408 0
409 0
410 0
411 0
412 0
413 0
414 0
415 0
416 0
417 0
418 0
419 0
420 0
421 0
422 0
423 0
424 0
425 0
426 0
427 0
428 0
429 0
430 0
431 0
432 0
433 0
434 0
435 0
436 0
437 0
438 0
439 0
440 0
441 0
442 0
443 0
444 0
445 0
446 0
447 0
448 0
449 0
450 0
451 0
452 0
453 0
454 0
455 0
456 0
457 0
458 0
459 0
460 0
461 0
462 0
463 0
464 0
465 0
466 0
467 0
468 0
469 0
470 0
471 0
472 0
473 0
474 0
475 0
476 0
477 0
478 0
479 0
480 0
481 0
482 0
483 0
484 0
485 0
486 0
487 0
488 0
489 0
490 0
491 0
492 0
493 0
494 0
495 0
496 0
497 0
498 0
499 0
500 0
501 0
502 0
503 0
504 0
505 0
506 0
507 0
508 0
509 0
510 0
511 0
512 0
513 0
514 0
515 0
516 0
517 0
518 0
519 0
520 0
521 0
522 0
523 0
524 0
525 0
526 0
527 0
528 0
529 0
530 0
531 0
532 0
533 0
534 0
535 0
536 0
537 0
538 0
539 0
540 0
541 0
542 0
543 0
544 0
545 0
546 0
547 0
548 0
549 0
550 0
551 0
552 0
553 0
554 0
555 0
556 0
557 0
558 0
559 0
560 0
561 0
562 0
563 0
564 0
565 0
566 0
567 0
568 0
569 0
570 0
571 0
572 0
573 0
574 0
575 0
576 0
577 0
578 0
579 0
580 0
581 0
582 0
583 0
584 0
585 0
586 0
587 0
588 0
589 0
590 0
591 0
592 0
593 0
594 0
595 0
596 0
597 0
598 0
599 0
600 0
601 0
602 0
603 0
604 0
605 0
606 0
607 0
608 0
609 0
610 0
611 0
612 0
613 0
614 0
615 0
616 0
617 0
618 0
619 0
620 0
621 0
622 0
623 0
624 0
625 0
626 0
627 0
628 0
629 0
630 0
631 0
632 0
633 0
634 0
635 0
636 0
637 0
638 0
639 0
640 0
641 0
642 0
643 0
644 0
645 0
646 0
647 0
648 0
649 0
650 1000
651 0
652 0
653 0
654 0
655 0
656 0
657 0
658 0
659 0
660 0
661 0
662 0
663 0
664 0
665 0
666 0
667 0
668 0
669 0
670 0
671 0
672 0
673 0
674 0
675 0
676 0
677 0
678 0
679 0
680 0
681 0
682 0
683 0
684 0
685 0
686 0
687 0
688 0
689 0
690 0
691 0
692 0
693 0
694 0
695 0
696 0
697 0
698 0
699 0
700 0

Can't render a simple scene with an area light

Trying to render a scene with an AreaLightSource fails and gives me sort or a reddish image

I am using the following light source

Light

AttributeBegin
AreaLightSource "area"
"color L" [1 1.0 1.0]
Translate 0.0 1.0 0.0
Rotate 90.0 1.0 0.0 0.0
Shape "disk"
"float radius" [0.1]
AttributeEnd

I have checked the samples uploaded on pbrt.org, but there are no samples with AreaLightSource.

Translucent roughness: Only for specular but not diffuse?

The simplified pseudo code for the "translucent" material is this:

bsdfs.add( new LambertianReflection( reflectance * diffuse ) );
bsdfs.add( new LambertianTransmission( transmittance * diffuse ) );

var microfacetDistribution = new TrowbridgeReitzDistribution( roughness, roughness );
var fresnel = new FresnelDielectric( 1, 1.5 );
bsdfs.add( new MicrofacetReflection( reflectance * specular, microfacetDistribution, fresnel ) );
bsdfs.add( new MicrofacetTransmission( transmittance * specular, microfacetDistribution, 1.0, 1.5 ) );

You can see that roughess is only used for the specular. But if one assumes a microfacet model of the surface for specular, shouldn't one similarly assume microsurface model for the diffuse?

Second issue, doesn't this lead to a microfacet model conflict: Oren-Nayar model is derived from the older Cook-Torrence / Beckmann microfacet distribution. But the specular model here is based on the more modern Trowbridge-Reitz microfacet distribution. Thus there may be a roughness parameterization conflict between these two models as it is -- although it also may be so slight it doesn't matter, or maybe diffuse roughness in this case has no perceptible result?

BVH SAH possible issue

I am using the pbrt-v3 bvh.cpp ported to my raytracer and i am building it on linux and windows (mingGW) on Linux all SPLIT methods work, on Windows, the SAH is giving me problems..
Apart that I could still have issues in my ported source code, I was looking and found that in this line in original source:

https://github.com/mmp/pbrt-v3/blob/master/src/accelerators/bvh.cpp#L356

I was expecting that it "return node;" at that point, since it just created a leaf. As it is now, it will fall and init an interior that I believe it is not correct.

How to use pbrt to render an animation sequences?

Hello, I am new to pbrt, just start to try it, I wanna render an animation sequences, maybe 150 frames, how do I set the related setting in the scene file? Hope someone can give me a guide?
Thanks!

error when writing image to .pfm file format

When specifying a Films image filename with the .pfm extension, PBRT will state that the image format is not supported.

This due to an implementation error, where the code which checks the extension is incorrect:

Original code

if (HasExtension(name, ".exr")) {
    WriteImageEXR(name, rgb, resolution.x, resolution.y, totalResolution.x,
                  totalResolution.y, outputBounds.pMin.x,
                  outputBounds.pMin.y);
} else if (HasExtension(name, ".exr")) {
    WriteImagePFM(name, rgb, resolution.x, resolution.y);
} 

Fixed code

if (HasExtension(name, ".exr")) {
    WriteImageEXR(name, rgb, resolution.x, resolution.y, totalResolution.x,
                  totalResolution.y, outputBounds.pMin.x,
                  outputBounds.pMin.y);
} else if (HasExtension(name, ".pfm")) {
    WriteImagePFM(name, rgb, resolution.x, resolution.y);
} 

cmake handling of flex and bison possible issues?

I think there are a few small issues with the flex and bison stuff in CMakeLists.txt.

  • I think the outputs of bison should also include pbrtparse.hh.
  • Bison is annoying, since on some platforms it uses .hh for the suffix of the generated header file, on others it uses .hpp, etc. pbrtlex.ll #includes pbrtparse.hh. Before, the makefile would check the suffix generated by bison and rename the header file if needed (
    @if [ -e core/pbrtparse.cpp.h ]; then /bin/mv core/pbrtparse.cpp.h core/pbrtparse.hh; fi
    ).
  • The output of the bison rule should probably be named pbrtparse.cpp, rather than pbrtparser.cpp, for consistency with the naming of the .yy file.
  • I think but am not sure that the flex rule needs an explicit dependency to the pbrtparse.hh output of the bison rule so that it doesn't try to compile pbrtlex.cpp before the bison rule has run. (I'm not positive about this; maybe flagging the .hh output is enough.)
  • Is it definitely the case that when running the flex/bison rules, the pbrtparse.hh generated by bison (vs the one checked into src/core) is used? It'll be a really ugly/hard to chase down bug if the user has made modifications to the .yy file but then the wrong header is used.

(CC @nyue )

BVH VS2013 compile error

The following code in bvh.cpp causes a compile error (C1506: unrecoverable block scoping error) in VS2013:

struct BucketInfo {
  int count = 0;
  Bounds3f bounds;
};

This can simply be fixed by moving the struct definition out of the function definition.

Compilation errors for 'SampledSpectrum'

Changing the Spectrum to be of type SampledSpectrum in pbrt.h gives few compilation errors due to the MIPMap class.

// typedef RGBSpectrum Spectrum;
typedef SampledSpectrum Spectrum;

pbrt-v3 exr bug with small images

Fabrice Rousselle reported the following issue:

I've run into a strange bug with PBRT that I believe is actually a tinyexr one. I was rendering a 33x33 image of the cornell box scene and the bottom line of pixels was garbage. It worked fine for 32x32 or 34x34 images though. Looking into it some more, I tried with other sizes and it seems that anything smaller than 10x10 pixels produces garbage for the whole image plane. The content of the buffer though is valid up to the point that it's passed to the SaveMultiChannelEXRToMemory method.

I suspect that the bug is due to the ZIP compression of tinyexr, but it's not clear to me how to disable the compression in the code, so I couldn't verify it. The latest version of tinyexr on github is also quite different from the one in pbrt-v3 (it's now a single header file), and I didn't try it either.

If you know a way of disabling the compression, I would be very interested, otherwise I'll try using ILM's OpenEXR library instead for now.

I'm attaching my fancy cbox.pbrt file which produces a 3x3 rendering if you want to reproduce the issue (maybe it's linux specific?), as well as the exr files I obtained at 3x3 and 33x33 resolutions.

The attachment is a Base64 encoded zip file (GitHub file upload only allows a few file formats like PNG and PDF and doesn't like ZIP):

Archive.txt

path tracer and bdpt give different results with San Miguel

Attached are images of sanmiguel_cam25.pbrt with 2k Halton samples with both the path tracer and the BDPT integrator. Note that the images are significantly different (note e.g. flowerpots and the railing on the top balcony, the checkered tablecloth on the table under the nearest ground floor arch, etc.)

(Note also some big noise spikes in the BDPT image, though that's potentially a different issue.)

If I disable MIS by changing MISWeight() in bdpt.cpp to just return "1.f / (s + t - 1)", then I get the bdptnomis.exr image (that one was rendered with 16k spp). It seems to do much better on those features, but it still doesn't match the path tracer (though maybe this is just too many massive noise spikes). (Thus, the issue may be related to #69.)

sm25.zip

obj2pbrt should use named materials

Currently, all of the materials are specified right before their meshes. It'd be better to emit all of them at the start, as NamedMaterials, which would make it easier to edit/tweak them.

MSVC 2013 Express build fails

Windows 7 64 bit, MSVC 2013 Express Edition, debug win32 build

Fails with numerous errors including:

  1. DWORD is not defined
  2. attempting to include unistd.h in the parser which can't be found
  3. constexpr is not defined
  4. problem with min & max definition in the stdlib. Need to include <stdlib.h> and first thing in pbrt.h

I gave up at this point

dragons.pbrt scene does not render

Minor issue, looks like the lines texture is missing:

dragons.pbrt:24

Texture "grid" "color" "imagemap" "string filename" ["../../regress/textures/lines.exr"]

Here is the error:

~/proj/pbrt-v3/scenes/dragons$ pbrt dragons.pbrt
pbrt version 3 (built Aug 14 2015 at 12:55:36) [Detected 16 cores]
Copyright (c)1998-2015 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
The source code to pbrt (but *not* the book contents) is covered by the BSD License.
See the file LICENSE.txt for the conditions of the license.
dragons.pbrt(25): Error: Unable to read "./../../regress/textures/lines.exr": Cannot read file.

Build for windows MinGW fails on GCC 4.8.2

I tried to build a05eb56 using MinGW toolchain comes with Qt after usual:
cmake -G "MinGW Makefiles"
mingw32-make

build fails with:

[ 28%] Building CXX object CMakeFiles/pbrt.dir/src/core/spectrum.cpp.obj
[ 29%] Building CXX object CMakeFiles/pbrt.dir/src/core/stats.cpp.obj
C:\Users\alex\Desktop\pbrt-v3-master\src\core\stats.cpp:49:38: error: 'siginfo_t
' has not been declared
 static void ReportProfileSample(int, siginfo_t *, void *);
                                      ^
C:\Users\alex\Desktop\pbrt-v3-master\src\core\stats.cpp:190:38: error: 'siginfo_
t' has not been declared
 static void ReportProfileSample(int, siginfo_t *, void *) {
                                      ^
cc1plus.exe: warning: unrecognized command line option "-Wno-deprecated-register
" [enabled by default]
CMakeFiles\pbrt.dir\build.make:894: recipe for target 'CMakeFiles/pbrt.dir/src/c
ore/stats.cpp.obj' failed
mingw32-make[2]: *** [CMakeFiles/pbrt.dir/src/core/stats.cpp.obj] Error 1
CMakeFiles\Makefile2:269: recipe for target 'CMakeFiles/pbrt.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/pbrt.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

GCC Version:

C:\Users\alex\Desktop\pbrt-v3-master>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=G:/QT/Tools/mingw482_32/bin/../libexec/gcc/i686-w64-mingw32/
4.8.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.8.2/configure --host=i686-w64-mingw32 --buil
d=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c
/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32 --with-gxx-include-dir=/mingw3
2/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multili
b --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=
yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --en
able-graphite --enable-checking=release --enable-fully-dynamic-string --enable-v
ersion-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-i
sl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable
-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --d
isable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with
-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/
mingw482/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw482/prerequis
ites/i686-w64-mingw32-static --with-mpc=/c/mingw482/prerequisites/i686-w64-mingw
32-static --with-isl=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-cl
oog=/c/mingw482/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl
 --with-pkgversion='i686-posix-dwarf-rev3, Built by MinGW-W64 project' --with-bu
gurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw482/i
686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i
686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/incl
ude' CXXFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/o
pt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/pr
erequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw
482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/lib -L/c/mingw482/prerequisites/
i686-zlib-static/lib -L/c/mingw482/prerequisites/i686-w64-mingw32-static/lib -Wl
,--large-address-aware'
Thread model: posix
gcc version 4.8.2 (i686-posix-dwarf-rev3, Built by MinGW-W64 project)

CMake: include header files in install directive

Installing pbrt currently includes build binaries and the static library only. For compiling against pbrt library from other programs, we need the header files of pbrt.

Possible solution: change CMakeLists.txt s.t. all source header files located in ./src/ are copied to include/pbrt/ which preserves directory structure. This is done by appending

INSTALL ( DIRECTORY src/
  DESTINATION include/pbrt
  FILES_MATCHING PATTERN "*.h"
  )

to CMakeLists.txt. All relevant header files should be included. I locally extended it this way and it works. Further usage details: http://www.cmake.org/cmake/help/v3.2/command/install.html

A number of tests fail when building with PBRT_FLOAT_AS_DOUBLE

Specifically:

[  FAILED  ] BSDFSampling.Beckmann_VA_0p5
[  FAILED  ] BSDFSampling.TR_VA_0p5
[  FAILED  ] BSDFSampling.Beckmann_std_0p5
[  FAILED  ] BSDFSampling.TR_std_0p5
[  FAILED  ] BSDFSampling.Beckmann_VA_0p2_0p1
[  FAILED  ] BSDFSampling.TR_VA_0p3_0p15
[  FAILED  ] BSDFSampling.Beckmann_std_0p2_0p1
[  FAILED  ] BSDFSampling.TR_std_0p2_0p1
[  FAILED  ] BSDFSampling.Beckmann_VA_0p4_0p3
[  FAILED  ] BSDFSampling.TR_VA_0p3
[  FAILED  ] BSDFSampling.Beckmann_std_0p2
[  FAILED  ] BSDFSampling.TR_std_0p05_0p1
[  FAILED  ] FloatingPoint.EFloat
[  FAILED  ] FullSphere.Reintersect

Code simplification idea: Allow BxDFs to determine if they are useless

This is not an important issue, but I was looking at the code for the BxDF creation in the materials. I noticed patterns like this (pseudo code):

// creation of translucent
if( diffuse !== BLACK )
    if( reflectance !== BLACK )
        bsdfs.add( new LambertianReflection( reflectance * diffuse ) );
    if( transmittance !== BLACK )
        bsdfs.add( new LambertianTransmission( transmittance * diffuse ) );

if( specular !== BLACK )
    var microfacetDistribution = new TrowbridgeReitzDistribution( roughness, roughness );
    if( reflectance !== BLACK )
        var fresnel = new FresnelDielectric( 1, 1.5 );
        bsdfs.add( new MicrofacetReflection( reflectance * specular, microfacetDistribution, fresnel ) );
    if( transmittance !== BLACK )
        bsdfs.add( new MicrofacetTransmission( transmittance * specular, microfacetDistribution, 1.0, 1.5 ) );

If one allowed for BxDFs to state if they are useless, by using looking at their parameters, one could simplify the above to something much more straight forward:

// creation of translucent
bsdfs.add( new LambertianReflection( reflectance * diffuse ) );
bsdfs.add( new LambertianTransmission( transmittance * diffuse ) );

var microfacetDistribution = new TrowbridgeReitzDistribution( roughness, roughness );
var fresnel = new FresnelDielectric( 1, 1.5 );
bsdfs.add( new MicrofacetReflection( reflectance * specular, microfacetDistribution, fresnel ) );
bsdfs.add( new MicrofacetTransmission( transmittance * specular, microfacetDistribution, 1.0, 1.5 ) );

bsdfs.removeUselessBxDFs();

Basically one could encapsulate into each BxDF class its ability to optimize itself out of the computation. It is sort of weird that in the creation of the materials one is trying to optimize some BxDFs away, because the material itself is basically trying to understand the internals of the BxDFs and their dependences upon parameters. One could just encapsulate that decision of whether the BxDF is useless into the material -- probably where it should be.

But then this requires a filtering of the created BxDFs after creation to remove the useless ones, or it requires helper per BxDF factory functions to do conditional creation of BxDFs. Either way, the code would be cleaner with less breaking of the BxDF encapsulation within the material creation, if that is important.

Failed to load .spd files with between (300 and 800 nm)

The default implementation of the AddSampledSpectrumFiles assumes that all the loaded .spd files match with the hard-coded parameters in the spectrum.h file that ranges, by default, between 300 and 700 nm. So, if the given .spd file contains a different range, then the obtained spectrum is no more valid.

I have tried to go for a quick solution that checks the range of the given wavelengths in the .spd file and those in the spectrum.h file and get the right mapping between them.

In paramset.cpp

void ParamSet::AddSampledSpectrumFiles(const std::string &name,
                                       const char **names, int nValues) {
    EraseSpectrum(name);
    std::unique_ptr<Spectrum[]> s(new Spectrum[nValues]);
    for (int i = 0; i < nValues; ++i) {
        std::string fn = AbsolutePath(ResolveFilename(names[i]));
        if (cachedSpectra.find(fn) != cachedSpectra.end()) {
            s[i] = cachedSpectra[fn];
            continue;
        }
        std::vector<Float> vals;
        if (!ReadFloatFile(fn.c_str(), &vals)) {
            Warning(
                "Unable to read SPD file \"%s\".  Using black distribution.",
                fn.c_str());
            s[i] = Spectrum(0.);
        } else {
            if (vals.size() % 2) {
                Warning(
                    "Extra value found in spectrum file \"%s\". "
                    "Ignoring it.",
                    fn.c_str());
            }
            std::vector<Float> wls, v;
            float wlsValues[nSpectralSamples];
            float vValues[nSpectralSamples];
            for (int j = 0; j < nSpectralSamples; ++j) {
                wlsValues[j] = sampledLambdaStart + j;
                vValues[j] = 0.f;
            }
            for (size_t j = 0; j < vals.size() / 2; ++j) {
                const float lambda = vals[2 * j];
                const float spd = vals[2 * j + 1];
                float lambdaIndex;
                if (lambda >= sampledLambdaStart && lambda <= sampledLambdaEnd) {
                    lambdaIndex = lambda - sampledLambdaStart;
                    wlsValues[int(lambdaIndex)] = lambda;
                    vValues[int(lambdaIndex)] = spd;
                }
            }
            for (int j = 0; j < nSpectralSamples; ++j) {
                wls.push_back(wlsValues[j]);
                v.push_back(vValues[j]);
            }
            s[i] = Spectrum::FromSampled(&wls[0], &v[0], wls.size());
        }
        cachedSpectra[fn] = s[i];
    }

    std::shared_ptr<ParamSetItem<Spectrum>> psi(
        new ParamSetItem<Spectrum>(name, std::move(s), nValues));
    spectra.push_back(psi);
}

HTH

incorrect self-intersections with cone and paraboloid shapes

The unit tests for incorrect re-intersections with spawned rays for Cone and Paraboloid fail (currently commented out in src/tests/shapes.cpp). This should be chased down; could be related to a bug in the EFloat class, since those lean heavily on that (vs the other shapes where the re-intersection tests all pass.)

revisit EFloat implementation

The current implementation is based on maintaining an interval, which is fine, but has diverged (already) from the book text.

Krämer's paper "A priori worst-case error bounds for floating-point computation" (http://www.acsel-lab.com/arithmetic/arith13/papers/ARITH13_Kramer.pdf) outlines how to compute bounds using a computed value and an error interval; it would be nice to use his method to fix the bugs that caused the original shift to the interval-based approach (46de256) and get things back in better sync with the book text.

member with constructor not allowed in anonymous aggregate, when compiling in DEBUG mode

Hi!

I'm trying to build a DEBUGGING version of pbrt-v3 in GNU/Linux (g++ 5.3, but tried older versions).

I obtain errors regarding the 'struct { EndpointInteraction ei; MediumInteraction mi; SurfaceInteraction si; };' in bdpt.h, since members with constructors and copy assigment operators are not allowed in anonymous structs in C++

Release mode is Ok since a union is used instead of the struct.

Build issues on Windows

Hi,

I tried pbrt-v3 on Windows, and there're 2 build issues:

  1. bash command in CMake does not work well on Windows:
    COMMAND bash -c "if [[ -e ${CMAKE_BINARY_DIR}/pbrtparse.hpp ]]\; then /bin/mv ${CMAKE_BINARY_DIR}/pbrtparse.hpp ${CMAKE_BINARY_DIR}/pbrtparse.hh\; fi"
    The command below works, and it should be portable to Linux and OSX:
    COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/pbrtparse.hpp ${CMAKE_BINARY_DIR}/pbrtparse.hh
  2. The project can't build with VisualStudio2012, which does not have header file cinttypes. VisualStudio2015 works for me.

Does not compile under GCC 4.7 CentOS 6.6

Clean checkout of master
execute 'make' in directory 'src'.
Error log:

In file included from core/api.cpp:114:0:
./media/grid.h: In constructor ‘GridDensityMedium::GridDensityMedium(const Spectrum&, const Spectrum&, Float, int, int, int, const Transform&, const Float_)’:
./media/grid.h:60:42: error: use of deleted function ‘std::unique_ptr<_Tp [], Dp>::unique_ptr(Up, typename std::enable_if<std::is_convertible<Up*, Tp*>::value>::type) [with Up = float; Tp = const float; Dp = std::default_delete<const float []>; typename std::enable_if<std::is_convertible<Up, Tp>::value>::type = void]’
In file included from /opt/centos/devtoolset-1.1/root/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/memory:86:0,
from core/pbrt.h:60,
from core/api.h:43,
from core/api.cpp:36:
/opt/centos/devtoolset-1.1/root/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/unique_ptr.h:433:2: error: declared here
In file included from ./lights/goniometric.h:47:0,
from core/api.cpp:66:
core/mipmap.h: In instantiation of ‘MIPMap::MIPMap(const Point2i&, const T
, bool, Float, ImageWrap) [with T = RGBSpectrum; Point2i = Point2; Float = float]’:
./lights/goniometric.h:65:74: required from here
core/mipmap.h:135:9: error: call of overloaded ‘ParallelFor(MIPMap::MIPMap(const Point2i&, const T
, bool, Float, ImageWrap) [with T = RGBSpectrum; Point2i = Point2; Float = float]::<lambda(int)>, int&, int)’ is ambiguous
core/mipmap.h:135:9: note: candidates are:
In file included from core/api.cpp:37:0:
core/parallel.h:49:6: note: void ParallelFor(const std::function<void(int)>&, int, int)
core/parallel.h:53:6: note: void ParallelFor(const std::function<void(int, int)>&, int, int)
In file included from ./lights/goniometric.h:47:0,
from core/api.cpp:66:
core/mipmap.h:160:9: error: call of overloaded ‘ParallelFor(MIPMap::MIPMap(const Point2i&, const T, bool, Float, ImageWrap) [with T = RGBSpectrum; Point2i = Point2; Float = float]::<lambda(int, int)>, int&, int)’ is ambiguous
core/mipmap.h:160:9: note: candidates are:
In file included from core/api.cpp:37:0:
core/parallel.h:49:6: note: void ParallelFor(const std::function<void(int)>&, int, int)
core/parallel.h:53:6: note: void ParallelFor(const std::function<void(int, int)>&, int, int)
In file included from ./lights/goniometric.h:47:0,
from core/api.cpp:66:
core/mipmap.h:196:9: error: call of overloaded ‘ParallelFor(MIPMap::MIPMap(const Point2i&, const T, bool, Float, ImageWrap) [with T = RGBSpectrum; Point2i = Point2; Float = float]::<lambda(int)>, int&, int)’ is ambiguous
core/mipmap.h:196:9: note: candidates are:
In file included from core/api.cpp:37:0:
core/parallel.h:49:6: note: void ParallelFor(const std::function<void(int)>&, int, int)
core/parallel.h:53:6: note: void ParallelFor(const std::function<void(int, int)>&, int, int)
At global scope:
cc1plus: warning: unrecognized command line option "-Wno-deprecated-register" [enabled by default]
make: ** [objs/core_api.o] Error 1

It looks like two main errors:

  1. GCC 4.7 is not able to disambiguate void(int) from void(int, int) in the template parameter of ParallelFor.
  2. From a quick glance at the GridDensityMedium class it looks like you've got a non-default constructor defined but do not explicitly declare the move assignment operator. I haven't tracked it down yet but it looks like there's an assignment somewhere that GCC 4.7 is not converting to a move and the unique pointer is preventing that.

volpath cannot reproduce single scattering light path accurately.

In current volpath loop logic, it cannot reproduce single scattering light path accurately(only one scattering event in the medium).

Please see 7.1 Analytical Single Scattering Solution in
"Evaluation of Visual Parameters in Volumetric Path Tracing"
for the scene setup: http://www.diva-portal.se/smash/get/diva2:796154/FULLTEXT01.pdf
(The scene is one cube([-1, 1]^3) lit by parallel light(0, -1, 0) and seeing it from Z direction)

result-compare
(From left to right: PBRT-v3, Mitsuba 0.5 and the analytic solution)

Mitsuba and analytic single scattering solution gives correct result, but PBRT-v3 gives a bit brighter result.
(Note that I've changed to use pow(x, 1.0f/2.2f) in PBRT-v3's gamma correction for precise image comparison in LDR image format)

The situation of PBRT's volpath looks like

  • maxdepth is set to 1
  • First the ray hits the surface of the cube(no surface BSDF attached). volpath decrements bounces. bounces become -1.
  • Next the ray samples the volume medium(bounces = 0). 0 <= maxDepth so the volpath continue to scatter the ray in the medium

Thus, theres 2 scattering events in the medium at max even maxdepth is set to 1. This would be the reason why PBRT-v3 result become brighter and cannot produce single scattering light path accurately.

One quick idea to solve the issue is to remove bounce-- line https://github.com/mmp/pbrt-v3/blob/master/src/integrators/volpath.cpp#L99
,but this may affect another light paths so I'm not sure this is OK or not.

Attached zip is the reproducing scenes in PBRT and Mitsuba, and also analytic solution code in C++.
volpath-singlescatter-issue.zip

(Most) image read/write routines flip the image on a round trip

The new image i/o unit tests in 023a483 revealed a fairly significant issue: for everything other than EXR, if you write out an image and read it back, you get an image that is flipped in y. (Why this is so is obvious upon inspection of the source code, where the various image reading routines do this flip.)

(And as such, if one has an image texture that is a PNG, say, and converts it to an EXR, the texture will be flipped!)

Just fixing this in the image i/o routines causes rendered images to change, as all textures end up flipped. I believe that the following definitions/conventions give a sensible (and not too disruptive fix):

  • Fix the image i/o routines so that they behave sensibly, and give you back the pixels you gave it, in the same order (modulo image format dynamic range and precision limitations).
  • Enshrine the definition of image coordinates to have (0,0) be the upper left--as is already clearly defined in raster space for cameras, for example
  • Clearly define texture space to have (0,0) to be in the lower right--this is in line with both pbrt's current behavior for image maps as well as with OpenGL's convention, for example. (And thus, do an explicit mirroring in the y direction for image maps and image maps only.)
  • However, define infinite area light coordinates to be in terms of (theta,phi) w.r.t. the up direction, so that (0,0) is pointing up for them.

This almost exactly matches current behavior, with the exception that any EXR images that are used as ImageMaps will be flipped. However, this seems a small price to pay for consistency.

Why Oren-Nayar has only reflection, no transmission?

I was wondering why the current implementation of Oren-Nayar microfacet model of diffuse reflection does not allow for a similar Oren Nayar transmission BxDF? I think theoretically it should be possible to have Oren-Nayer transmission?

There is a LambertianReflection and a LambertianTransmission BxDFs, but the OrenNayer BxDF appears to only be Reflection.

I mention this in part because the Oren-Nayar "sigma" parameter for adjusting diffuse roughness is only used by the Matte material and not on the Translucent material, even though both attempt to model a diffuse component.

AnimatedTransform doesn't handle sign flips in scale matrices

If the two transformations given to it have a mirroring between them (i.e. differing signs in some components), then the motion bounds it computes are incorrect; this can be seen by removing the three std::abs calls in t = t * Scale(std::abs(r()), std::abs(r()), std::abs(r())); in src/tests/animatedtransform.cpp.

This is admittedly not a common case, but would be nice to handle correctly.

Code simplication idea: auto-create Specular* BxDFs when Microfacet* with 0 roughness are requested

These two code patterns (here as pseudo code) are used a lot in the creation of the materials:

var isSpecular = ( uRoughness === 0 && vRoughness === 0 );
if( isSpecular )
    bsdfs.add( new SpecularReflection( reflectance, fresnel ) );
else
     bsdfs.add( new MicrofacetReflection( reflectance, microfacetDistribution, fresnel ) )

And

var isSpecular = ( uRoughness === 0 && vRoughness === 0 );
if( isSpecular )
    bsdfs.add( new SpecularTransmission( transmittance, 1, ior, mode ) );
else
     bsdfs.add( new MicrofacetTransmission( transmittance, microfacetDistribution, 1, ior ) )

I view these two patterns as optimization at the wrong level of abstraction. I would suggest instead that inside MicrofacetTransmission it knows how to use the logic of the optimized SpecularTransissiion BxDF when roughness is 0, or there is a factory function that will return a SpecularTranmission BxDF when the roughess parameters are 0.

Then you can implement this optimization pattern once in a central location and then it is applied everywhere, rather than just in the materials where one remembers to do this roughness dependent switching between these two BxDFs.

If one did this change and the one suggested in #29, the glass material would be simplified from:

var isSpecular = ( uRoughness === 0 && vRoughness === 0 );

var microfacetDistribution = null;
if( ! isSpecular )
    microfacetDistribution = new TrowbridgeReitzDistribution( uRoughness, vRoughness );

if( reflectance !== BLACK )
    var fresnel = new FresnelDielectric( 1, ior );
    if( isSpecular )
        bsdfs.add( new SpecularReflection( reflectance, fresnel ) );
    else
        bsdfs.add( new MicrofacetReflection( reflectance, microfacetDistribution, fresnel ) )

if( transmittance !== BLACK )
    if( isSpecular )
        bsdfs.add( new SpecularTransmission( transmittance, 1, ior, mode ) );
    else
        bsdfs.add( new MicrofacetTransmission( transmittance, microfacetDistribution, 1, ior ) )

To just the very clear and concise:

var microfacetDistribution = new TrowbridgeReitzDistribution( uRoughness, vRoughness );
var fresnel = new FresnelDielectric( 1, ior );
bsdfs.add( new MicrofacetReflection( reflectance, microfacetDistribution, fresnel ) );
bsdfs.add( new MicrofacetTransmission( transmittance, microfacetDistribution, 1, ior ) );

Which to me would be a major improvement for readability, clarify and for maintenance.

subsurface scattering

I am trying to render the head example but I get a message saying "parameter sigm_t not used" and the resulting image presents a lot of noise and is in no way similar to the head.png resulting example provided.
These are the statistics I gathered.
Statistics:
BVH
Interior nodes 16201
Leaf nodes 16202
Primitives per leaf node 17674 / 16202 (1.09x)
Integrator
Camera rays traced 129433600
Path length 0.125 avg [range 0 - 2]
Intersections
Regular ray intersection tests 259518426
Shadow ray intersection tests 5858904
Ray-triangle intersection tests 111091522 / 588406176 (18.88%)
Memory
BVH tree 1.26 MiB
Texture MIP maps 192.00 MiB
Triangle meshes 1.43 MiB
Scene
Shapes created 17674
Triangles per triangle mesh 17674 / 1 (17674.00x)
Texture
Texture map EWA lookups 76024490
Texture map trilerp lookups 88920400
Time
BVH construction 0.042 s
MIP map creation 0.255 s
Rendering 314.697 s
Profile
Integrator::Render() 99.48 %
Camera::GenerateRayDifferential 3.71 %
Film::MergeTile() 0.00 %
Sampler::StartPixelSample() 0.00 %
SamplerIntegrator::Li() 85.92 %
Accelerator::Intersect() 37.99 %
BSSRDF::f() 12.70 %
Triangle::Intersect() 9.72 %
BSSRDF::f() 3.59 %
BSDF::f() 1.92 %
BSSRDF::f() 12.81 %
Direct lighting 10.14 %
Accelerator::Intersect() 3.02 %
Triangle::Intersect() 0.54 %
Accelerator::IntersectP() 1.74 %
Triangle::IntersectP() 0.30 %
BSDF::f() 0.50 %
MIPMap::Lookup() (trilinear) 0.99 %
MIPMap::Lookup() (trilinear) 1.76 %
Material::ComputeScatteringFunctions() 12.40 %
MIPMap::Lookup() (EWA) 6.13 %
MIPMap::Lookup() (trilinear) 0.26 %
Startup and scene construction 0.27 %

rendering bug when using cropwindow

I was trying to render San Miguel scene (environment lightmap RenoSuburb01_sm.exr needed a conversion because of tinyexr limited compression support) with the new bdpt integrator, the no-crop one looks okay but once I applied a crop, the rendering looks undersampled especially in the lower half, the cropwindow applied was [ 0.25 0.75 0.25 0.75 ]. I tried to switch to the path integrator and the undersampled symptom persisted. (same on both OSX and VS2015)

smcam25_v3_crop

the no-crop below:
smcam25_v3

the scene file used:

# Gtool Exporter Ver. 1.00 for pbrt v2.0 Render, www.pbrt.org 
# Created by Guillermo M. Leal LLaguno,  [email protected],  www.evvisual.com 
# Exported on: 12/22/2009 12:33:40 AM 

Scale -1 1 1  # account for fixed lookat bug... 

# Camera Camera25
LookAt 6.37319 -5.62511 1.53861
         7.09618 -4.94254 1.64532
         -0.0775949 -0.0732566 0.99429

Camera "perspective" 
     "float fov" [83.9744] 
     "float shutteropen" [0.0] 
     "float shutterclose" [1.0] 
     "float lensradius" [0.0] 
     "float focaldistance" [1e+006] 

Film "image"
     "string filename" ["mwkm/smCam25_v3_crop.png"]
     "float cropwindow"  [ 0.25 0.75 0.25 0.75 ]
     "integer xresolution" [512] "integer yresolution" [512]

Integrator "bdpt" 
    "integer maxdepth" [5] 

Sampler "sobol"
    "integer pixelsamples" [128]

PixelFilter "box"    
Accelerator "bvh" 

WorldBegin

# Enviorment 

AttributeBegin 
Rotate 198.0 0 0 1
LightSource "infinite" 
"integer nsamples" [32]
"color scale" [13.0 13.0 13.0]
    "string mapname" ["textures/sanmiguel/RenoSuburb01_sm.exr"]
AttributeEnd 

# ***** Lights ***** 

# ***** End  Lights *****

#Main File
Include "geometry/sanmiguel/sanmiguel-mat.pbrt" 
Include "geometry/sanmiguel/sanmiguel-geom.pbrt" 

#Trees
Include "geometry/sanmiguel/arbol-mat.pbrt" 
Include "geometry/sanmiguel/troncoA-geom.pbrt" 
Include "geometry/sanmiguel/troncoB-geom.pbrt" 
#Trees Leaves

Include "geometry/sanmiguel/hojas_a1-geom.pbrt"     # tapa ventanas
Include "geometry/sanmiguel/hojas_a2-geom.pbrt" 
Include "geometry/sanmiguel/hojas_a3-geom.pbrt" 
Include "geometry/sanmiguel/hojas_a4-geom.pbrt" 
Include "geometry/sanmiguel/hojas_a5-geom.pbrt"         # es arriba no se ve en cam9
Include "geometry/sanmiguel/hojas_a6-geom.pbrt" 
Include "geometry/sanmiguel/hojas_a7-geom.pbrt" 

Include "geometry/sanmiguel/hojas_b2-geom.pbrt"         # rama abajo atravezada
Include "geometry/sanmiguel/hojas_b3-geom.pbrt" 
Include "geometry/sanmiguel/hojas_b4-geom.pbrt"         # rama abajo atravezada

#Wall Ivy
Include "geometry/sanmiguel/enredadera-mat.pbrt" 
Include "geometry/sanmiguel/enredadera-geom.pbrt" 
#Pots
Include "geometry/sanmiguel/macetas-mat.pbrt" 
Include "geometry/sanmiguel/macetas-geom.pbrt" 
#Plants
Include "geometry/sanmiguel/plantas-mat.pbrt" 
Include "geometry/sanmiguel/plantas-geom.pbrt" 

#Tables Downstairs
Include "geometry/sanmiguel/mesas_abajo-mat.pbrt" 
Include "geometry/sanmiguel/mesas_abajo-geom.pbrt" 
#Tables Upstairs
Include "geometry/sanmiguel/mesas_arriba-mat.pbrt" 
Include "geometry/sanmiguel/mesas_arriba-geom.pbrt" 
#Table Downstairs open space
Include "geometry/sanmiguel/mesas_patio-mat.pbrt" 
Include "geometry/sanmiguel/mesas_patio-geom.pbrt" 
#Silverware
Include "geometry/sanmiguel/platos-mat.pbrt" 
Include "geometry/sanmiguel/platos-geom.pbrt" 

WorldEnd

Failed to load .spd files with between (300 and 800 nm)

The default implementation of the AddSampledSpectrumFiles assumes that all the loaded .spd files match with the hard-coded parameters in the Spectrum.h file that ranges, by default, between 300 and 700 nm. So, if the given .spd file contains a different range, then the obtained spectrum is no more valid.

I have tried to go for a quick solution that checks the range of the given wavelengths in the .spd file and those in the spectrum.h file and get the right mapping between them.

In paramset.cpp

void ParamSet::AddSampledSpectrumFiles(const std::string &name,
                                       const char **names, int nValues) {
    EraseSpectrum(name);
    std::unique_ptr<Spectrum[]> s(new Spectrum[nValues]);
    for (int i = 0; i < nValues; ++i) {
        std::string fn = AbsolutePath(ResolveFilename(names[i]));
        if (cachedSpectra.find(fn) != cachedSpectra.end()) {
            s[i] = cachedSpectra[fn];
            continue;
        }
        std::vector<Float> vals;
        if (!ReadFloatFile(fn.c_str(), &vals)) {
            Warning(
                "Unable to read SPD file \"%s\".  Using black distribution.",
                fn.c_str());
            s[i] = Spectrum(0.);
        } else {
            if (vals.size() % 2) {
                Warning(
                    "Extra value found in spectrum file \"%s\". "
                    "Ignoring it.",
                    fn.c_str());
            }
            std::vector<Float> wls, v;
            float wlsValues[nSpectralSamples];
            float vValues[nSpectralSamples];
            for (int j = 0; j < nSpectralSamples; ++j) {
                wlsValues[j] = sampledLambdaStart + j;
                vValues[j] = 0.f;
            }
            for (size_t j = 0; j < vals.size() / 2; ++j) {
                const float lambda = vals[2 * j];
                const float spd = vals[2 * j + 1];
                float lambdaIndex;
                if (lambda >= sampledLambdaStart && lambda <= sampledLambdaEnd) {
                    lambdaIndex = lambda - sampledLambdaStart;
                    wlsValues[int(lambdaIndex)] = lambda;
                    vValues[int(lambdaIndex)] = spd;
                }
            }
            for (int j = 0; j < nSpectralSamples; ++j) {
                wls.push_back(wlsValues[j]);
                v.push_back(vValues[j]);
            }
            s[i] = Spectrum::FromSampled(&wls[0], &v[0], wls.size());
        }
        cachedSpectra[fn] = s[i];
    }

    std::shared_ptr<ParamSetItem<Spectrum>> psi(
        new ParamSetItem<Spectrum>(name, std::move(s), nValues));
    spectra.push_back(psi);
}

HTH

A few questions about the PBD implementation

Hey,

I've been reading through the implementation of Photon Beam Diffusion (which is a really nice upgrade over the dipole in pbrt-v2 by the way), while comparing it to the paper and the Matlab reference implementation. I still have some questions about the code and I think I've found a few mistakes.

  1. Is the normalization constant 1 / (4 * C_phi) missing in the BSSRDF? It seems that it was replaced by sigma_t which I can not find in the paper.
  2. Are the 1 / pi term and the two F_t terms in the BSSRDF computed using the BSDF? You seem to both add a LambertianReflection (for the 1 / pi term, I guess) and a SpecularTransmission (for the F_t term), but when evaluating the BSDF this results in (1 / Pi + F_t) instead of 1 / Pi * F_t.
  3. Why is the BSSRDF profile multiplied with 2 * Pi * r in ComputeBeamDiffusionBSSRDF? Is this needed for the Catmull-Rom interpolation?
  4. Where is the second F_t term in the single scattering integrand? The reference Matlab implementation also seems to lack one of the F_t terms, but it seems to be the other one.
  5. Shouldn't cosThetaS (in the single scattering integrand) always be equal to 1? The paper states that theta_i = arccos(-w dot n), so cos(theta_i) = -w dot n. w is the direction of the light beam, which is orthogonal to the surface (and in the opposite direction of the surface normal), so w = -n, so -w dot n = -(-1) = 1.
  6. You only seem to consider two intersections when sampling the BSSRDF, but there could be multiple intersections with the surface. It currently is possible that a point sampled using one axis cannot be sampled using a different axis (because it finds a different intersection first), but the PDF seems to assume that the same point is found using all axes. I think you should find all intersections and then randomly pick one, sadly this also requires you to find the intersections for the other axes in order to calculate the PDF.

Cheers,
Tom

number parsing improvements

First, the {NUMBER} rule in pbrtlex.ll converts all numbers to Floats, which in turn means that any integer > ~2^24 is rounded to the nearest float. It would be nice if they were left as integers. (This almost never matters, but is annoying.)

Second, it'd be nice to support hexadecimal floating-point values.

PBRT consumes 100% memory and crashes using fourier material on teapot

The following pbrt file will reproduce the crash:

LookAt 0 0 -2 0 0 0 0 1 0

Camera "perspective" "float fov" [55.000000 ] "float shutteropen" [0.000000 ] "float shutterclose" [0.000000 ] "float frameaspectratio" [1.000000 ]
Film "image" "integer xresolution" [512 ] "integer yresolution" [512 ]
    "string filename" "test.exr"

PixelFilter "box"
Sampler "lowdiscrepancy" "integer pixelsamples" [1024]

Integrator "path"

WorldBegin

AttributeBegin
    Translate 0 0.7 0
    AreaLightSource "diffuse" "rgb L" [100 100 100]
    Shape "sphere" "float radius" [0.05]
AttributeEnd

AttributeBegin
    Translate 0 -0.7 0
    Scale 0.3 0.3 0.3
    Material "fourier" "string bsdffile" "ceramic.bsdf"

    Include "room-teapot.pbrt"
AttributeEnd

WorldEnd

You'll also need the ceramic.bsdf and room-teapot.pbrt which can both be found in pbrt-v3-samples.

room-teapot.pbrt looks like this:

Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [1.332760 -0.370922 2.454690 1.350740 -0.375926 2.400000 1.400000 0.000000 2.400000 ] "normal N" [0.953562 -0.257047 0.156989 0.871509 -0.234929 0.430442 0.902861 0.000000 0.429934 ] 
Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [1.400000 0.000000 2.400000 1.381370 0.000000 2.454690 1.332760 -0.370922 2.454690 ] "normal N" [0.902861 0.000000 0.429934 0.987636 0.000000 0.156768 0.953562 -0.257047 0.156989 ] 
Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [1.195140 -0.701938 2.454690 1.211260 -0.711407 2.400000 1.350740 -0.375926 2.400000 ] "normal N" [0.854265 -0.495474 0.157281 0.780517 -0.452700 0.431110 0.871509 -0.234929 0.430442 ] 
Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [1.350740 -0.375926 2.400000 1.332760 -0.370922 2.454690 1.195140 -0.701938 2.454690 ] "normal N" [0.871509 -0.234929 0.430442 0.953562 -0.257047 0.156989 0.854265 -0.495474 0.157281 ] 
Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [0.980770 -0.980770 2.454690 0.994000 -0.994000 2.400000 1.211260 -0.711407 2.400000 ] "normal N" [0.698293 -0.698293 0.157393 0.637936 -0.637936 0.431366 0.780517 -0.452700 0.431110 ] 
Shape "trianglemesh"  "integer indices" [0 2 1 ] "point P" [1.211260 -0.711407 2.400000 1.195140 -0.701938 2.454690 0.980770 -0.980770 2.454690 ] "normal N" [0.780517 -0.452700 0.431110 0.854265 -0.495474 0.157281 0.698293 -0.698293 0.157393 ] 
...

for 2000 lines so I'm guessing it tries to allocate a fourier BSDF for each triangle which causes it to eat up memory.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.