Thanks, Chris. I don't know how that would work but have not used substrata in assemblies at all so I may not be fully seeing what you guys see. But the way I understand that, the assembly would create its own top surface and then create it's substrata off of that. My sediment surface is not flat/evenly-sloped but is more of a naturalized surface of its own, so I don't think I could make an assembly that had a top that acurately represented the uneven sediment surface... and then substrat would be (?) distances below that top - not necessarily specified elevations. Hard to explain and I may be missing what you're describing.
To get the project done I went ahead with this procedure, kind of bull moosing it:
1. Copy sediment surface in place
2. Rename new copy "Sediment 461"
3. Surface properties - "don't include elevations greater than" = 461.00, rebuild
4. Insert copy of original 2d boundary
5. Break boundary to only leave boundary area not included by the new clipped surface
6. Set new clipped pline elev to 461
7. Add that as a breakline to "Sediment 461" surface
8. In surface definition, delete "transform by 0,0,0" and push original surface boundary to the end of the list
9. Rebuild
10. Create vol surface from "basin" and "Sediment 461"
11. Repeat for a dozen more elevations...
I'll look in to asemblies with multiple datums, tho - I should anyway
I don't think that's giving the volumes the OP is after, but I think the general approach might work...
I think it would even be possible to create a custom assembly that creates a bunch of shapes, similar to the way the Lane subassemblies... Then you could use the QTO stuff to get volumes for all layers all at once. That might be the easiest approach, given the current capabilities of C3D...