1
\$\begingroup\$

I have a PBR setup, say, in Unity (or Unreal, doesn't really matter, I'm asking about the general principle, not specific implementation), and I would like to add a UV light source, and have control over how my materials respond to it, but still ideally have it conform to the rules of physically-based rendering.

Question is: what do I need to extend with what kinds of properties, and what are the equations to wire them together, and where do I plug those?

Do I need to actually do modifications like this, or does the fact that it already is PBR mean that I only need to plop in a light source with correct combination of settings, and correct responses to that UV source just naturally happen?

Edit: I am asking about fluorescence, where I want certain materials to glow in particular visible light colours in places where the invisible UV light hits them.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Is it safe to assume you're asking about fluorescence, where you want certain materials to glow in particular visible light colours in places where the invisible UV light hits them? \$\endgroup\$
    – DMGregory
    Mar 6, 2021 at 16:30
  • \$\begingroup\$ @DMGregory yes, precisely. \$\endgroup\$
    – sh code
    Mar 6, 2021 at 22:17

1 Answer 1

1
\$\begingroup\$

Disclaimer: I don't have experience with PBR; this answer is just filtering my physics knowledge through computer graphics concepts.

Fluorescence can be understood in general as: a material absorbs light of some wavelength (/frequency/energy), and then emits light of another (longer, lower energy) wavelength. This is not exclusive to UV (e.g. a material may be excited by blue light and emit green light).

Phosphorescence (a.k.a. “glow in the dark”) is functionally the same phenomenon except that the re-emission is slow, on a time scale we can perceive. If you want to model phosphorescence then it would have to be as an independent light source rather than a kind of reflection, since it's stateful.

what do I need to extend with what kinds of properties

You need to simulate UV light propagation — light sources and ordinary reflections. An additional color channel may be suitable. Note that common window glass passes some but not all UV; if you care about this and similar effects you might need multiple UV channels.

Each fluorescent material needs a color of visible light it emits, and the efficiency of the conversion (which, in the model, can just be the brightness of that color). It may also need the spectrum it absorbs (if you care about modeling the different absorption of different UV wavelengths or even green light) and a decay rate (if you are modeling phosphorescence).

and what are the equations to wire them together

UV light propagation follows the same rules, with different material-specific parameters, as visible light propagation.

Fluorescence could be calculated in the same way as a diffuse reflection (and transmission for thin objects such as a sheet of plastic), except that instead of multiplying the incoming light componentwise by the reflectance or transmittance, you take the dot product of the incoming light and the absorption spectrum (or select only the UV component of the light if you're not modeling the absorption explicitly), obtaining a scalar, and then multiply the emission color by that scalar.

If you want to include phosphorescence (which is only relevant in response to time-varying UV lighting conditions), then the abovementioned scalar needs to be a persistent state of the object (or individual texels of its surface) — think of it as the energy storage powering a light source. The UV absorption adds energy and the visible emission consumes it (with some inefficiency along the way). The emission rate may or may not be proportional to the energy (i.e. typical exponential decay); I found references to more complex behavior but probably exponential decay is a good enough model for visual effects.

\$\endgroup\$
1
  • \$\begingroup\$ thank you, this is great and will probably end up being marked as an answer, unless someone comes up with something with a bit more information from the technical side, but you covered the physics part beautifully and fully :) \$\endgroup\$
    – sh code
    Mar 6, 2021 at 22:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .