-
I'd like to have a Mitsuba3 scene with a fluorescent surface. As far as I can tell, Mitsuba 3 doesn't currently support this, but I'm wondering if there's an implementation somewhere or a good way to mimic the appearance. If an implementation would not be too difficult or if another renderer would better fit my needs, some pointers would be extremely helpful. Here are more details about my real-world scene, which is in the context of fluorescence microscopy. There's one fluorescent object, one light source (generating a narrow band of wavelengths in the range of excitation), and optical filters cause the camera to only receive light that is the product of fluorescence. There are other objects in the scene that may interact with the light, but none of them fluoresce. As a possible workaround, I've thought about having a two-pass render: 1) putting sensor(s) on the fluorescent object (with sensitivity matching the excitation spectrum), rendering the scene to get data from the sensor(s), and then 2) changing the scene so that the only light source is the fluorescent object with a spacially-varying intensity (using the results from pass 1) that emits the emission spectrum in a diffuse way. I'm interested in any thoughts you might have! |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
Hi @bapike To my knowledge there isn't any existing public examples of fluorescence using Mitsuba3. Fundamentally, I don't think it's too hard to implement. Every interaction with a material, i.e |
Beta Was this translation helpful? Give feedback.
Hi @bapike
To my knowledge there isn't any existing public examples of fluorescence using Mitsuba3.
Fundamentally, I don't think it's too hard to implement. Every interaction with a material, i.e
bsdf.eval(..., si, ...)
, takes aSurfaceInteraction3f
object (si
). That object holds the information of the current wavelengths that are used for each ray insi.wavelengths
. So you would need to write a custom interagrator that updatessi.wavelengths
on each interaction.This is just a high-level idea. There might be some implementation details that make this more difficule in practice that I can't think of right now 😅