Hi! I'm trying to do something like deffered rendering in 2D but am unsure on how to compose my nodes and how to render my sprites using a different shader to each viewport.

Intended use: I have a map of square sprites where each pixel in sprite texture stores material and height (imagine voxels or cellular automata). I want to make custom lighting and need the whole screen so that different sprites affect eachother. I need more data than I can fit into one viewport texture.
Problem: I have one working Viewport and a TextureRect that reads the viewport texture. I use ViewportContainer to render at lower resolution. One issue I have is that the viewport seems to render on screen as well as into texture, the screen is then overwritten by the TextureRect but still I would like it to write only into texture. The second issue is I don't know how I would write different data into a second viewport without duplicating the whole scene (in Unity there are replacement shaders). My scene tree: 
Any idea how to do this? Is it even possible? Thanks for answers!