pi3d in two processes here:
https://www.raspberrypi.org/forums/viewtopic.php?p=1056401#p1056401 In the background process you would need to set the Display.create(... layer=-1) (I think -ve is behind, otherwise try other way round!) If you didn't want to change the background image you could simply make the background process wait for a quit signal to be queued from the foreground process. If you wanted to be able to change the background you could wait for instructions in the queue in the same way, the main thing would be to not keep redrawing the background. An alternative, possibly simpler, way would be to subprocess.call() a simple image display program that would appear behind the pi3d display surface (or maybe use Tk or pygame
However, I'm not sure how much CPU or GPU time is spent re-drawing the background every frame. What is the specific problem you are having?