Volume Absorption Render Artifacts in SuperFly
There is a perfectly self-contained thread in this forum called Light Splitting, which closely relates to the refraction and absorption effects in SuperFly I am trying to achieve, but without any reference to transparency (or alpha) mapping. Having looked through the Blender Cycles documentation, it appears in that cycles implementation as though one should be able to alpha or transparency map an object and still have volumetric absorption applied to it.
The difficulty I'm finding, is that I'm seeing (virtually) black artifacts in parts of the object which I'm trying to make completely invisible.
To ensure I understood which part of the shader was generating the artifacts, I started with @bagginsbill 's Shadow Ray Light Path trick to attenuate near-tangential refractive shadows and rendered with caustics on a simple sphere prop with GlassBsdf diffuse shader and Absorption Volume and get exactly what I expect. Before I started to complicate matters with transparency mapping, I decided to chop off the bottom of the sphere (Grouping Tool add some facets to a new group and spawn prop), so it is no longer a closed surface and look at the root node inputs separately to see how they behaved.
With the truncated sphere set to 100% transparent, I just have the Absorption Volume connected and already see a problem, but I can't find any of the Light Path outputs which will let me distinguish between the single surface and dual surface light paths which define where the volume shader has defaulted to opaque with only one object surface to pass through.
[Well Phooey, now I don't have enough privileges to upload an image!]
[Fixed by Submitting the post and then editing immediately to add the image, but ran out of editing time to update the post]
The original intent of this exercise was to add a second, slightly inflated copy of a transmapped hair object to simulate the hair being wet, with bump mapped droplets and full (faked) dispersion and volumetric effects (in case the fluid doesn't happen to be pure H2O).
Transmapping works sufficiently well with anything plugged into the diffuse inputs on the root node, that I assumed [ha ha, insert standard joke here] that there would be some light path related trick to just turn off absorption for the rays which don't have an even number of surface transmissions. Blender cycles documents imply that such tricks are indeed used to overcome extinction effects when too few volumetric bounces are set in the render settings.
Here's what I'm preview ray tracing with:
Since my iMac's AMD HD 6970 GPU is only OpenCL 1.2 rated and not supported for GPU rendering in Poser or Blender (according to Blender's AMD GPU Support link(https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units#Radeon_HD_6000_Series), I just resorted to the Ultra Quality (caustics) preset and knocked the pixel samples down.
And the closed sphere water glass with attenuated shadow, absorption and caustics.
Truncated, open sphere. Same shader, but absorption artifacts at opening.
@anomalaus I'd use four volume bounces.
anomalaus last edited by anomalaus
@seachnasaigh T' be sure (sorry, couldn't resist. Just found out how to pronounce your name ;-)
I noticed that immediately after I posted that screen shot and threw 16 volume bounces at it, which is what is actually seen in the last image above. The actual problem there is that there is no geometry at that spot to bounce off. The bottom of the sphere isn't flattened, it's actually cut off, and the mesh is open. Hence my question, because alpha or transparency mapping cannot replace missing geometry, or invent it where it is being mapped out.
My only solution, so far, is to turn off the volume absorption (density zero) and plug the colour into the GlassBsdf node, but that's not quite the same effect.
ghostship last edited by
@anomalaus isn't this the same problem with refractive objects needing to be whole for light to pass through to the other side? A one sided square with refract does not pass light though to the other side (just makes a shadow) but a cube does. Same issues with SSS needs an enclosed object to work right.
anomalaus last edited by anomalaus
@ghostship I believe that to be the case, but with purely refractive objects, I was able to kill the black artifacts with appropriate alpha/trans-mapping, but trying, for instance, to mask the absorption density with the transparency, doesn't work. I can turn the absorption off with a zero in the density input and I get no absorption and no artifacts, but plugging the scaled (to match the required density) transparency in there, which I imagined could turn off absorption for just the transparent parts doesn't work, because rays passing through one of the masked transparent facets may subsequently pass through another, non-transparent facet on the object giving the unbalanced, odd transition parity artifacts.
In the particular case I started with, where the absorption surface closely overlies a parallel diffuse surface within, I was quite prepared to overlook any issues with shadowing, as opaque, though transmapped shadows would be cast by the underlying hair object. Similarly with caustics. But the black artifacts appear despite the intervening internal opacity, as though tunneling through the figure's head to meet the absorption surface on the camera-facing side. So suddenly the wet hair has streaks of engine oil at the transmapped tips. Not what I was after.
If the light path transparency depth or transition depth worked in Poser the way I thought was being implied by the Blender Cycles documentation, I assumed I would be able to extract the parity from the depth and MixClosure a TransparentBsdf node in to hide the artifacts, but I don't get values I can use from those outputs.
ghostship last edited by
@anomalaus In the past I've been successful at using the 3d clouds texture to modify volume scatter density. Maybe it does not like the 2d-ness of an image file.