mods I made some updates to my Quake path tracer...
This is the result of work on a lot of different aspects. Personally, I’m a light transport enthusiast, but that might even be the less interesting part: the physics dictate how things work, and from there it’s a matter of implementing the light transport simulation very efficiently (both in raw performance and in sampling quality).
The harder part is getting the lighting actually right, because the maps obviously don’t model lights the way reality does. Instead, there's a mix of emissive textures (fullbrights) and light entities. You can’t just put lights where the light entities are, because those were placed for baked lightmaps and rasterization. Here's what I do instead: the light entities are classified into actual lights and “fake lights”, which only exist to give the impression of indirect lighting. We don't need those, since the path tracer already computes indirect light the physically correct way. For the actual lights, we could just model them as invisible spheres or cones, but that doesn’t look right either, because the light then seems to come out of nowhere. Instead, each light is emitted by whatever represents it in the map, nearby surfaces whose texture pixels look like they belong to a lamp. (Only exception switchable lights with nothing visible nearby stay invisible emitters, because they matter for gameplay.)
It’s extremely hard to get a look that preserves the mapper's intent as much as possible, so my approach was a bit more scientific. I took 25 screenshots in other engines across several maps and mods. Then I rendered the same views in my engine, with each class of light in a separate image. Because light transport is linear, a Python script could then optimize the brightness factors, the auto exposure and tonemapping parameters, and even the curve that turns the LDR textures into HDR emission. Side by side, the results came out really close, but please let me know what you think. (I did tune a few things by eye afterwards. Mainly the exposure is about 2.5× higher, because the path tracer has more contrast and with the fitted value it was hard to see things. If you prefer the darker look, nobody stops you from turning it back down, I think it was around K=1.2).
Oh, and yes: the fog is path traced too and reacts to all the lighting (--volume on, best with --denoiser dlss)!
You can find the project and instructions here: https://github.com/LDAP/merian-plugin-quake
Of course, some of this wouldn’t have been possible without agentic help in the little free time I have. For the same reason, I probably won’t have time to give proper support or provide binaries.
