After working intensively with the draw module and having an idea about the future we want to make a list with requirements that we would like to have in a new drawing pipeline. This drawing pipeline will be a evolution of the current draw manager.
More control between the draw_scene methods
- EEVEE render passes are currently post processed on the CPU. Due to this, we are not showing the render passes in the 3d view. We could postprocess the render passes using a screen space shader so we don't need additional round trips. When having a more flexible pipeline we could also improve performance when the combined pass is not needed.
- Currently workbench does not draw all objects in the depth buffer. Transparent objects in the deferred render pipeline are discarded. This design choice introduced several workarounds for overlays that needed the full depth buffer. Having a more flexible pipeline will save code complexity and when doing on a request basis should not have that much of an impact.
- Camera background images introduces render artifacts as they are rendered after the scene. The drawing needs to take account of the background color and existing transparency of the scene. The artifacts could be solved when we would have an order of drawing of passes. The transparent film checkerboard could also benefit from this.
Support for view2d drawing
- Some spaces have benefits when they would be drawn using a GPU pipeline, (Image/UV editor, Sequencer). It will enable features like Life unwrapped baking, remove the UV stretching batch fetching, GPU powered Sequencer. Note that the Sequencer Scene Strip would benefit some sort of on demand rendering of workbench/EEVEE scenes.
- Support for partial updating of existing batches.
- When doing viewport rendering the overlay engines are using the Scene reference color space, but have been implemented to use display color space. This leads to differences between viewport display and viewport render. This is also the case for grease pencil.
- Would be good to have (a set of) ocio transform functions available in the shaders. Most needed would be the scene reference space to display space and display space to scene reference space. But when we add the sequencer we would also need the sequencer space.
This topic is not complete and under discussion. Any "How" that can be read in between the requirements are not intended :-).