If you can ask about rasters & offscreen I would be deep in your debt. ;-)
Depth rasters can be used for drawing and/or readback. It does give you a separate Z value for each pixel, but you can't currently use a Raster with both RASTER_DEPTH and RASTER_COLOR at the same time (OpenGL doesn't support that directly so it was never implemented). This means you can't really have a separate Z per pixel while you are drawing the raster. As long as you only have one of these mattes, and draw it before everything else in the scene, it shouldn't matter. I recommend that you try to use two raster objects, one with RASTER_DEPTH and the other with RASTER_COLOR. Draw the depth raster first. Draw the color-only raster second, with depth test and depth write enable disabled. Draw all 3D objects after this and they should be correctly Z-buffered with the image.
For Canvas3D capture, it depends on what you need to do. If all you want is to take a snapshot of the current window at the actual resolution, and if you aren't worried about other windows occluding the Canvas3D, then you don't need offscreen rendering. Just read the contents of the window from the postSwap method, and you have your image. If you want to render it at a higher resolution than the current window/screen will allow, or if you don't want the problem of occluding windows, you will need to use offscreen. Take a look at the PrintCanvas3D example program (you can get it from the https://j3d-examples.dev.java.net