Thoughts on making Cycles into a spectral renderer

I found a paper all about optical properties of skin and, while there seems to be quite a bit of leeway in this, it also collects several sources about scattering coefficients in skin (given in 1/mm) - does anybody happen to have any insight into how those might be related to the radii of the SSS shader? Based on the units my immediate first guess would be to invert them in BU or something. But I think that’d give me the wrong sort of falloff, so I’m not sure that that’s correct…

Based on Beer Lamberts law you can calculate the penetration depth into a material.

1 Like

If I read that right, this is about absorption, not scattering? I’ll look at it more carefully tomorrow though. It’s kinda late here. Thanks for the pointer

yes, its absorption coefficient used.I guess the scatter coefficient could be work too,since its value is added with the absorption coefficent to get the exctintion coefficient.

@kram1032 There are still a few issues with CUDA, but at least for CPU rendering I just managed to build and run standalone spectral Cycles inside of Google Colab :slight_smile:

2 Likes

That’s pretty cool, nice work.

The absorption I have already covered, at least approximately. I now have scattering coefficients given in 1/mm which, I think, may well be the right units for Volume scattering. But I’m not sure how that translates to the SSS radii. Presumably those are given in BU or something

Afaik these radii are in BU.

Right, and now the question is how to convert one way to specify scattering to another

Divide or multiply to scale/converting the units should work i assume.
1 BU = 1 Meter
here a doc from 2.79.not sure how valid these is to the actual shaders.
https://docs.blender.org/manual/en/2.79/render/blender_render/materials/properties/subsurface_scattering.html
here doc from 2.83
https://docs.blender.org/manual/en/latest/render/shader_nodes/shader/sss.html

here a custom scale for the principled shader

Thanks @isolin for another PR! Slowly ironing out all the bugs. :muscle:

Ok, together with the information, that the radii are actually not strictly radii but rather mean free paths (which makes more sense), I found this and it looks like it is literally just the inverse. I wasn’t sure whether there would be an additional factor somehwere. Thanks

2 Likes

I think that’s the correct wording for the idea I’ve thought the distance values represented - basically some equivalent to the FWHM for the distribution of distances before scattering events. Indeed vector as input to this is pretty odd - it’s just another RGB value, not sure what the explanation for using vector type here is.

I suspect it’s simply because it’s common that you’d want to go beyond 1 which is not something you’d usually expect RGB colors to do.

That could be it. Personally an unbounded RGB triplet still represents that data better than arbitrary ‘XYZ’ components, especially when those X, Y and Z values correspond directly to RGB. Anyway, good to know :slight_smile:

FWIW,if you need more reference Data about tissue and skin.I found this
https://www.spiedigitallibrary.org/journals/journal-of-biomedical-optics/volume-25/issue-04/045002/Measurement-of-absorption-and-reduced-scattering-coefficients-in-Asian-human/10.1117/1.JBO.25.4.045002.full

2 Likes

Any chance you have the EXRs of the blue render around?

Nope, however it’s gonna be easy enough to redo (though with the latest version) if you’d like.

@troy_s for some reason the look is actually quite different when I re-render it now. However, if your primary concern is the fact that the blue sphere goes purple, that is still the case. (EDIT: Fixed)

I rendered and saved this with all layers so it’s quite big but here you go

(Edit: I re-rendered it wrong at first. Accidentally had the light source set blue in both the Nodes’ color and the color it gets outside of nodes. The result of that nonequivalent version is here:
https://www.dropbox.com/sh/kjazoz6fp3ecs14/AADyvIYmos0-hWlaPFz99JAKa?dl=0 )