hi everyone,
I mentioned about a new MMC that my students had been previously working on - I am excited to let you know that a preprint describing this work is now available on arxiv:
https://arxiv.org/abs/2511.22779
check out my below post for some details
https://www.linkedin.com/feed/update/urn:li:activity:7401408388875628544/
The algorithm is called RT-MMC. Differing from our tetrahedral-mesh based MMC, RT-MMC is a triangular-mesh based MC and can take advantage the modern GPU graphics ray-tracing pipelines and ray-tracing hardware (RT-cores).
RT-MMC is currently implemented using NVIDIA OptiX raytracing framework (which is built on top of CUDA), however, we mapped all photon transport computation to event-based raytracing pipelines (an abstraction that applies to all modern raytracing libraries), making this work easy to be extended to many other emerging computer graphics raytracing frameworks, including DirectX, Vulcan and Metal.
On GPUs with RT hardware, RT-MMC showed 1.5x to 4.5x speed
acceleration across a range of benchmarks compared to our OpenCL
based MMC, which is quite significant.
I have merged the RT-MMC code to mmc's github repository, currently under the "optix_single_as_arbitrary_sources" branch
https://github.com/fangq/mmc/tree/optix_single_as_arbitrary_sources
to compile, you need to have CUDA and OptiX (a header-only library) installed, and run "make optix" for building a binary, or "make optixmex" for matlab mex files. We don't have makefiles for building optix-enabled pmmc yet.
once compiled, you can run the RT-MMC based simulations (need NVIDIA GPUs, without RT-core is OK) using --compute optix or cfg.compute='optix'. The binary supports 4 compute backends simultaneously: sse, opencl, cuda and optix.
A word of warning:
the code is a technical preview and is still unstable.
While the core is solid and validated, the optix backend does not
have all the advanced features as sse/opencl/cuda backends. It
does not output detected photon/trajectory/diffuse
reflectance/photon replay/photon sharing etc. For sources, it
supports
pencil/disk/gaussian/zgaussian/isotropic/cone/arcsine/line/slit,
but no pattern, fourier, pattern3d support yet. For compatibility,
users still need to input a tetrahedral mesh, even though only the
surfaces are extracted and passed to RT-MMC. Clearly, more work
will be needed to port the full set of functionalities from
standard mmc to the optix backend.
Qianqian