Prepass ID per Object for Materials (especially SSS)
Subsurface Scattering creates a dark outline around other overlapping objects, which is often intended for realistic purposes.
However sometimes, you'd benefit from having the SSS react as if separate objects shared the same Subsurface Scattering solution, cohesively blending the lookas if it were one volume.
This is already possible by joining all objects together as one, but it is not a viable option in large scene, or at least it's the least optimized way to get the intented result. Simply because it is destructive, heavy, eleminates instanced duplicate (if they were), and much more.
Here's a visual example of how it is now (Separate Objects / Joined Objects) :
Other rendering applications offer the possibility to assign a "Prepass ID" to each objects, an ID specifically to tell materials they should be considered as "the same volume" and essentially avoids those dark outlines when using Subsurface Scattering, between the objects that shares the same ID.
I'd love to see a similar option in Cycles.
I did make a mockup for the Prepass ID UI, it could show as a new subpanel in the
Shading
panel, under the
Object Properties
, and simply have a string / text input, you can type in anything and it will be its prepass ID, so if another object share the same string in this area, they will share the same SSS solution.
Perhaps, this could also mimick the UI of the Light Groups, which makes perfect sense in this case, you can create new "Prepass IDs" by hitting the + icon, it wouldn't break Blender's UI continuity, and you could also layer the Prepass IDs so objects can share the same SSS solutions with multiple objects that don't necessarily share it with other objects (Having a hard time wording this haha)
Thanks for reading
4 Comments
I am totally for this. I just prefer the "Trace Sets" instead of "Prepas ID" because it more intuitively reflects the functional aspect of grouping while the latter is merely naming the technical internal feature supporting this. But the name is secondary.
I think this is essential feature ( same group/ID etc could be maybe used to dielectrics too )
There is a workaround with GN to combine meshes from separated Ojects non-destructively:
This has been suggested before, but as "trace sets" as it's called in other renderers, though you're RCS do have pretty pictures making it clearer what we want :) blender.community/c/rightclickselect/gQvY/
As for the UI, Blender do use collections for similar things (Light Linking for example), so this could be the way to go here as well, putting everything you want in a collection (by ctrl-dragging you can link it in more than one collection) and then select that collection in the material/Principle BSDF somewhere.
Or tbh I'd rather go with a simpler way, just have a field in the Principle BSDF where you type a name ("snow" for example if that's what you're doing) for all the shaders that's supposed to be acting as one.
Btw this is something that should be used by the Ambient Occlusion node as well, because as it is now either everything or just the self object is calculated here. The shader Bevel node could use it as well to have stuff act as one despite being separate objects.
The new experimental solver nodes group assets in 5.2 beta has this "Filter" string socket, which is essentially what you mentionned here :
I'd rather go with a simpler way, just have a field in the Principle BSDF where you type a name ("snow" for example if that's what you're doing) for all the shaders that's supposed to be acting as one.I think just writing any string somewhere, as some sort of ID for materials, could be a great option. However I don't believe it belongs on the shader directly, neither on the materials, but on the Object properties.
A design idea I have is having a "Prepass ID" subpanel under the Shading panel, in the Object Properties. Here's a mockup : imgur.com/a/ATdrth9