Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Physically accurate Monte Carlo photon transport simulations #588

Open
fangq opened this issue May 5, 2022 · 1 comment
Open

Physically accurate Monte Carlo photon transport simulations #588

fangq opened this issue May 5, 2022 · 1 comment
Assignees
Labels

Comments

@fangq
Copy link

fangq commented May 5, 2022

This is not a bug report, but a question and request for pointers

I recently bumped into this project as I read about Blender 3.2, and was attracted by the "physically correct" rendering capability of this library, and would love to understand more about LuxCore's features and perhaps consider further utilities of this library for research purposes.

My group has been developing GPU Monte Carlo (MC) photon transport simulators over the past decade, see

http://mcx.space/
https://github.com/fangq/mcx (CUDA based - voxelated volume)
https://github.com/fangq/mcxcl (OpenCL based - voxlelated volume)
https://github.com/fangq/mmc (OpenCL/CUDA/SSE based - tetrahedral meshes)
http://mcx.space/#publication

The user community of our tools are largely optics researchers, biomedical optics instrumentation design and data analysis. Our implementation provides quantitative solutions to the radiative transfer equation (RTE) using MC stochastic simulations, and has been serving the "gold-standard" solutions to many optics measurements. Because most of our applications require rigorous modeling of light-tissue interactions in the wavelength ranges of visible and near-infrared (NIR) light, therefore, modeling the high-scattering nature of the medium has been a main focus.

Under the hood, our MC simulator is basically a parallel ray-tracer that can simulate random photon packets across 3D spatially-varying tissues/shapes. Comparing to most computer-graphics based ray-tracers/renderers, our MC simulators can handle volumetric scattering, scattering-phase-functions/anisotropy (g) and output both surface-based light intensities (in our field, we call it diffuse reflectance or transmittance) and volumetric light intensity (we call it fluence or fluence rate). Because it handles spatially-varying media, it requires a volumetric discretization - either in the form of a voxelated grid (as in MCX) or a tetrahedral mesh (as in MMC). The optical properties (absorption coeff, scattering coefficient, anisotropy and refractive index) are associated with volumetric elements (voxels/tet) instead of surfaces as in most CG rendering engines. Because our simulators are physically accurate and are meant to guide scientific experiments, so the computational speed has been much slower compared to most rendering engines.

Because of this, I would like to know

  • to what extent that LuxCore's physical simulation capability has been developed? does it have modules to handle volumetric-absorption, scattering (i.e. subsurface scattering), or phase functions in a physically accurate fashion?
  • does it handle volumetric optical properties and discretizations (voxel grids or tetrahedral meshes) or only support piece-wise constant domains delineated by triangular surfaces where only surface optical properties can be assigned?
  • are there any major physical assumptions, approximations and simplifications that prevents this engine to be used for scientific applications?
  • what hardware acceleration does this library support? CUDA? OpenCL? can it benefit from ray-tracing hardware in newer GPUs?

We are currently working on implementing our physically accurate MC simulations using rendering APIs (optix, shaders etc). Since I notice this library, I've love to explore the possibilities of building our next-gen simulator using this library - if it is not too far from where we are standing.

thanks, appreciate any comments or pointers.

@Dade916
Copy link
Member

Dade916 commented May 15, 2022

LuxCore handles volume absorption and scattering, both for homogenous and heterogenous volumes. LuxCore also supports heterogenous volumes read from https://www.openvdb.org files (so you can represent pretty much anything you want). It supports both OpenCL and CUDA acceleration.

However, it is designed and tested for visual simulation (i.e. architectural visualization, industrial design, etc.) so, while the results should be correct from the numerical point of view, they are never been validated with a comparison with real and simulated values: I don't think LuxCore is a tool suited for your application.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants