Volume maps for Poser?
Has anyone has worked with Volume maps on other platforms, especially Blender, who could give advice on their utility if implemented in Poser (assuming that they're not already – I'm not familiar enough with all of the Cycles nodes)? I'm wondering if they would be the solution to a problem I'm experiencing with trying to transparency map volumes for SuperFly renders giving black output in regions where there is no mesh surface (having been excluded by the (UV) transparency map) to generate the requisite refraction and reflection rays.
We already have procedural volume maps (nodes in the "3D Textures" category) which seem to mostly do what I require:
(image from the Poser manual [Edit to upload image precluded by insufficient privilege on initial thread postings])
giving visibly empty space without black defects, where the 3D texture node output is black.
What I've seen from discussions by users of other platforms which support 3D volume mapping, are UVW mappings created by W slicing the volume into a series of UV maps which are interpolated between the slices, so one axis will necessarily have less specified resolution for memory considerations (just imagine 4096 slices of 4096 x 4096 pixel maps!), but be interpolated using some simple distance metric.
I realise that I may be stuck with needing to modify the geometry of an open mesh to make it manifold, though Poser SuperFly renders don't seem particularly insistent on that (a plane is mostly sufficient for simulating a solid body of water, provided there are enclosing boundary surfaces to provide diffuse rays within the body, as one generally doesn't want glossy water's surface reflections generated at the bottom of a lake). The particular models I'm struggling with are transmapped hair props, which use transmapping not only for the hair strands (which seems to work OK), but for the end profiles, which typically results in black render defects where there should be 100% transparency, with no reflection or refraction.
It occurs to me that the geometry surface UV mapping has no provision for interpolation within the volume of the prop, hence my search for a user-defined volumetric mapping technique in Poser, to "define" those transparency mapped surface transitions in a manner which can generate the necessary reflection and refraction rays.
Of course, there may be just as much, if not more, effort required to generate volume map slices for a non-manifold prop as it would take to offset and weld edges of the existing geometry to make the prop manifold. But that still leaves me thinking that the subsequent transmapping of the new object (assuming that duplicated surfaces retain the original UV mapping) is still likely to exhibit black render defects where the transmap cuts off some part of the enclosed volume, without defining a new surface at the visible/transparent boundary.
Alright, so nobody knows anything about volume maps, in Poser or elsewhere, apparently.
Since that was pretty much what I was expecting, I decided to treat the problem as though it were a nail, and amenable to treatment with the only hammer I have a handle on, namely Python [the mental imagery that statement invokes feels almost biblical - pick up a hammer and it turns into a snake, or vice versa!]. Anyway, I have made some progress on a script which attempts to take an open, non-manifold prop or geometry object, which causes SuperFly to generate black artifacts on volumetric or refracted rays which arrive at the camera having traversed an odd number of surfaces (an unbounded volume), and clone and offset those vertices which do not lie on a boundary edge (defined as belonging to only one facet) and so generate new facets parallel to, and offset from existing, non-boundary facets, plus additional facets joining the boundary edges to the offset facets, thus completing a 2-manifold surface (every edge is shared by exactly two facets) which completely encloses a non-empty volume.
Initial preview render tests imply that such a prop properly transmits refraction rays with have traversed an even number of surfaces and eliminates black render artifacts.
Original hair prop with non-manifold (open) geometry and volumetric water shader
Script generated manifold geometry hair prop with identical volumetric water shader
In both cases, the underlying figure (with enclosed skeleton figure) shares an identical volumetric water shader.
I still need to polish up my morph target transfer from the original hair prop to the manifold prop, as I start to get artifacts when I apply morphs to the manifold hair (which probably means I have some aberrant out-by-one error in the delta indices, somewhere).
OK, fixed the morph target extension to the added vertices (problem was that all Wavefront OBJ format references to vertex indices in the facet definitions are 1-based, i.e. the first vertex is 1, whereas all of Poser's targetGeom delta vertex indices are zero-based, so not only did I have to add 1 to the delta index to get the vertex number to feed into the dict of original vertex index to new clone vertex index, but then I had to subtract 1 from the clone vertex index to get it's delta index to apply the same delta xyz translations to).
Now the morphs no longer distort the new clone facets which close the volume of the prop and make it manifold.
Original non-manifold hair prop with morphs
New manifold hair prop with morphs
Still getting some dark artifacts at the edges, but that may be due to insufficient raytrace bounces between acutely angled facets.
Now, again, with the original underlying figure and it's transmapped hair prop, plus the overlayed volumetric water figure and non-manifold hair props, showing the egregious odd-parity refraction render artifacts:
Should definitely never be seeing the impression of the rear profile of the hair through an opaque figure!
Finally, original underlying figure and transmapped hair prop, plus overlayed volumetric water figure, but new, manifold wet hair prop.
I'll post a larger render when it's done.
Heh, just found that I need to be more careful when I transfer channels from the original prop to the manifold clone. Apparently evaluation order of deformers and targetGeoms matters (despite Poser's arbitrary handling of such when saving and loading props and figures to and from the Library). The hair prop here has upper and lower deformers for the sides of the hair. The upper ones move that whole side, while the lower ones move only the lower halves. Evaluate the deformers in the wrong order, and you get different results!
The result is, that I have to create morphs and deformer channels on the clone prop in reverse order to what the actors.Parameters() list gives, since they get pushed on a stack, apparently.
Just trying to figure out what you're doing here .. wet hair?
@trekkiegrrrl exactly, but the Raytrace Preview renders were all I could spare time for while I was in the development and test cycle. Here's a final BPT SuperFly render, though at half my normal size, with no strand hair grass and only 15 samples, so there are still a swarm of Fireflies evident. If I had micro-polygon displacement, the hair would look much better, and the wet surface of the hair would exhibit displaced droplets.