/wurstrenderer

personal CPU-based offline renderer focusing on experimentability and readability

Primary LanguageC++

wurstrenderer (as of 2019)

t2

t1

WurstRenderer is a CPU-based rendering system I made in early 2019. It focuses on experimentability and readability. For instance, the length of the bidirectional path tracer code is only 430 lines long (included comments, debug code, a lot of blank lines). All integrators (3d) are compared against reference generated from Mitsuba. The result of convergence plots indicates that the implementation of all integrators is correct.

To avoid accidentally releasing code written by collaborators or sensitive code, all changes after mid 2019 were removed.

Implemented:

In this framework, it supports:

Note: It seems that homogeneous volumetric rendering is broken again...

Flatland?:

Flatland is the world where two-dimensional creatures live in. It is quite useful for understanding complicated algorithms. The renderer supports two integrators:

  • Flatland Path Tracing
  • Flatland PSSMLT

It simply takes the 3d scene and automatically take a slice along Z-Axis to create a 2d scene.

For flatland integrator, it can preview path density as well. I found it is very helpful for understanding MCMC & path guiding experiments.

pt bdpt pt2d visualize
Path Tracing NEE + MIS Bidirectional Path Tracing Path Tracing in Flatland Path Density Visualization

Scene format example:

{
    "viewer" : true,
    "camera" : 
    {
        "pos" : [4, 1, -2],
        "lookat": [-1, 1, 0],
        "up" : [0, 1, 0],
        "resolution" : [1024, 512],
        "fovy": 50
    },
    "meshes" : 
    [
        {
            "path" : "fireplace_room/fireplace_room.obj"
        }
    ],
    
    "render" : [
        {
            "integrator" : "nextevent_path_tracer",
            "output": "pt_result.pfm",
            "num_spp" : 100
        },
        {
            "integrator" : "bidirectional_path_tracer",
            "output": "bdpt_result.pfm"
        }
    ]
}

Misc

It uses its own math library and automatically switch to SIMD if your CPU supports. It strictly use double only. The performance is not its forte.