New slots system in render view

Hi everyone,

I would like to bring something to Blender, a new slots management in the render view.

I think the current one is not practical : for example if my render view is closed and I want to render into a new slot, I have to open a render view, change the slot and then render the new image. (tell me if I am wrong here of course)

We should at least be able to choose the slot from the render settings maybe. But I would like to propose a more standard way of handling that part. Just being able to save the current rendered image, and have a slider or something else to walk through all these images. After that, those two proposals could be added, with a button to add the displayed image as a background :
https://blender.community/c/rightclickselect/7cbbbc/retain-previous-render-while-rendering-with-render-border
https://blender.community/c/rightclickselect/yybbbc/comparison-slider-for-slot-in-render-result

Please let me know if I said something that is not clear.

So I would like to ask you if you are interested of something like that ? Or maybe it is already planned ?

And if yes, as I am pretty much a beginner with the Blender development, would it be a really hard task for me ? Or do you have a clue about where to start that is to not so obvious ?

Well hope that I can help with that :slight_smile:

Cheers !

Thanks a lot for what you do !

16 Likes

I wonder if dev’s are considering making a true frame Buffer?

In the new defaults for 2.8, renders are on a new windows, so it could be great to make a true frame beffer area to deal with renders and in that case add better slot system.

But I think this post will be closed since it’s a request.

I thought it was the right place to propose to develop something myself ? Isn’t it ? :confused:

Indeed, my bad, I read too fast, I’m sorry :wink:

1 Like

Improvements to the render slots system would be welcome. To implement them you need good experience coding in C and the ability to read and search through a complex code base.

What does saving the current rendered image mean exactly? Would it be effectively pushing back the render slots to free up the first slots for the new render? I think some other software does this automatically before rendering again? Though it’s not always what you want, so maybe it needs to be an option.

Keep memory usage under control is also important, so perhaps caching to disk would need to be added.

A clear design proposal for how it would work and handles the various use cases is needed.

Great, should be ok with the C code :slight_smile:

I will work on a first design during the next couple of days, in the meantime I will try the best to quickly answer your questions.

Let’s say you just rendered an image in a temp slot, that would be overwritten if you do nothing before rendering again (it is the current behavior if you don’t change the slot).

Now, you have a render displayed on your render view (still UV/Image editor at the moment), there would be a button to push this render in the frame buffer. That way the Slots list would expand as you push a new render in the buffer.

Renderman Image Tool does that automatically for example, having that as an option could be useful.

Does everything make sense ?

2 Likes

Yes, that’s clear now.

Here is my complete proposal, with two different designs, please let me know if you find something weird or if you have other ideas.

This proposal is aiming to improve the Render Slots System in Blender 2.8, by creating a more standard and practicle frame buffer.

WHY ?
The current system works fine but it has a few limitations :

  • It has a limit of 10 Slots
  • You have to change the Slots you want to render to before actually rendering
    Also the render view is missing a few features, like being able to easily compare two of your renders and being able to quickly adjust the exposure of the render. (maybe this has to be part of another proposal ?)



PROPOSAL
The idea is to implement a frame buffer that resize dynamically :
Each time you render an image, it overwrites the previous one if you do nothing.
While the rendered image is displayed, you can at any time click a button to add it to the frame buffer. The list of images in the frame buffer would expand automatically so you can have as many images as you want.
An option is available in the user preferences (or in the render view) to put automatically every render in the frame buffer.

At any time, it is possible to walk through all the images stored in the frame buffer.


If one of the images of the frame buffer is displayed in the render view, you can click a button to set is as background, so that you can put any other image on top in order to compare the two.
Then, you can choose the comparison mode in a list (alpha over, slider, substraction …).
In the frame buffer list, icons inform you of which image is set as background, and which one is displayed.


To adjust the exposure, a slider is available in the header of the render view, with a button to switch between the original value and and the modified value.

DESIGN (comparison between images and exposure tweaks do not appear here)

Addition to the current design :

  • Add button (+) : Enable when the displayed image is not in the frame buffer, allows you to put it in the frame buffer.

  • Delete button (-) : Enable when the displayed image is already in the frame buffer, allows you to delete the displayed image from the frame buffer.
    These two buttons could work like the design of William Reynish maybe ? https://dev-files.blender.org/file/data/bc7rfdyh6y7qb3azutdw/PHID-FILE-enjhhtnnwt6xkm7tpcgr/menus_with_add_delete.gif

  • Set as background button : Enable when the displayed image is already in the frame buffer, sticks the displayed image as a background, after that if you render a new image or change the displayed image by another slot, this one appears in background (can be used for that https://blender.community/c/rightclickselect/7cbbbc/)
    If the displayed image is the one that is set as background, the button can be used to remove the image as background.

If the displayed render is not in the frame buffer, it can be in a temp slot, named explicitly so that we know that it is not in the frame buffer.

The last render putted in the frame buffer has always the highest number (do the slots can be renamed ?)

IDEA 1 :


This first idea keeps the current design. The idea is just to add the buttons in the header.

IDEA 2 :


This design is a bit more practical, it is better if there is a lot of images in the frame buffer, and it is more accessible.

What I’m missing in the design is the efficiency of what we have now. You just press J to render to the other slot, then J to quickly compare. No need to add a slot, clean up old slots to save memory, set a background. It should be possible to keep that quick workflow within a new design, though I’m not immediately sure what the best solution is.

Other points:

  • I think there should be a limit on the number of slots, otherwise memory usage will keep going up. I don’t think users will remember to manually remove renders to save memory, or even want to do this management. The limit could be adjusted in the user preferences if needed. Working with a very high number of slots is probably not a good idea as long as closing the .blend removes all that data? I’m kind of wondering what the practical use cases are for working with more than 2 or 3 slots and how that should influence the design.
  • For comparisons, probably we should just name the operator “compare with” or something more direct like that, instead of “set as background”. I don’t think we need a lot of comparison modes, maybe just a slider and flipping like J key would be ok?
  • It’s not clear to me why exposure is part of this design, assuming that’s the same exposure as found in color management. I can see it would be useful to compare different color management settings, but also not always and there’s more settings than exposure.
  • I guess users will want a panel or region where it shows all the slots with little preview images, so a separate panel in the N key properties may be a good step towards that. If we do that there should still be an indication of which slot is being shown when the panel is not visible though, maybe just in the render info text.
  • Pressing J could be kept to have a quick comparison between the image we are comparing with and the last rendered image (or with the last selected image in the list ?)
  • Yes I agree that it is not necessary to keep a lot of images in memory, so it could be a first in first out type of list, so that after for example 5 images in the frame buffer, the older image would be deleted as you push a new one. No the images are not saved with the .blend.
  • For comparison I agree with the name (I didn’t really find something good haha). For the modes I would suggest four modes :
    • quick mode (switch between the to images)
    • slider mode
    • alpha over ? (to be able the render a region and have the previous image staying behind, but it doesn’t have to be a mode maybe ?)
    • difference mode (absolute(B-A), can be useful for some fx for example to spot easily slight differences, I know it is a comparison mode available in sone other softwares)
  • For the exposure, I think it can be useful just to see some parts of image that are in the dark, or to quickly have a good preview of the Z pass ? Doesn’t have to do with color management. It is not necessary but it can be useful, but maybe if it is something to do, it can be done in an addon.
  • Ok, so should we have the list in the header and the list in N panel ? Or just the list in N panel, and the name of the image in the header ?

It seems Lukas was working on improvements in this area as well, patch here to add/remove slots:
https://developer.blender.org/D3474

Still only a first step towards what is being proposed here though.

Right. If we have only 2 slots by default, I guess the second slot would automatically be selected for comparison and J key would work as before without any slot.

The other thing it allowed you to do is select which slot to render to, but perhaps that can be replaced with a shortcut key to push the last render to the second slot and set if for comparison.

Quick/slider/difference seems ok. For alpha over, I think render a region while keeping the rest is a different feature, not really related to slots, it should work with a single slot too.

Exposure controls in the image editor instead of having to go to the scene properties could be convenient, but seems unrelated to render slots.

Probably it’s fine if we have the list in both the header and N panel.

Great ! Thanks a lot for taking the time to answer my question. I think that I have all the informations I need to a more complete design and start trying some things with the code. Should I publish the design as a task on developer.blender.org or keep it here ?

It’s fine here I think, once you have some code to submit you can put it in the differential revision summary.

1 Like

PROPOSAL UPDATE
The idea is to implement a frame buffer that resize dynamically :
Each time you render an image, it renders on a “Render” slot which you can not delete.
While the rendered image is displayed, you can at any time click a “Push” button to add it to the frame buffer.
An option is available in the user preferences (or in the render view) to put automatically every render in the frame buffer.

At any time, it is possible to walk through all the images stored in the frame buffer.

If one of the images of the frame buffer is displayed in the render view, you can click a toggle to compare this image with any other image of the frame buffer.
Then, you can choose the comparison mode in a list :

In the frame buffer list, icons inform you of which image is compared, and which one is displayed.

By default, the comparison mode will be set on Quick mode, and the Slot 1 (see design below) will have his “Compare With” toggle ON.

DESIGN

Addition to the current design :

  • Push button : When you click, if there is an image in the last slot, it is deleted, all the images of the frame buffer are offset by 1 slot, and a copy of the rendered image is pushed in the first slot of the frame buffer.

  • Compare With toggle : Enable when the displayed image is already in the frame buffer, sticks the displayed image as a background, after that if you render a new image or change the displayed image by another slot, this one appears in background (can be used for that https://blender.community/c/rightclickselect/7cbbbc/)
    If the displayed image is the one that is set as background, the button can be used to remove the image as background.

  • Comparison Mode menu : Choose between the three different comparison mode (quick, slider and difference)

I added thumbnails in the slot list, so we can have a quick preview of what is inside each slot.

7 Likes

It all seems quite reasonable.

I’d put the Compare With setting in the Render Slots panel, doesn’t need to be always visible in the header I think. The push button could be next to the slots menu in the header to make the relation clear, and should probably get an icon.

1 Like

What do you think about having an option to have the slots saved to disk (multilayer EXR of course)? so they could be retrieved also when re-opening the file.
It could work very similar to how caching does in other areas (particles, physics…). A simple “Save to disk” check-mark would enable this. A Clear All button would be the equivalent of Free all bakes.
Or as an alternative: next to each render slot, we may have a selectable harddrive icon, which of course would make that slot written onto disk. edit: anyway it should be clearly readable that files get written on the hard drive, making the user aware, and giving the opportunity to easily erase them.
Folder destination as you wish: automatic as caches, next to file, temp folder (with a hash to know which file each slot belongs to), or just settable.

We need the possibility to see passes directly in the renderview.

image

1 Like

That could be a good idea, I am gonna try to get this first part done before starting anything a bit bigger. But I keep the idea in mind. Brecht already mentioned saving the images on the disk :

It is already available, it is on “Combined” by default but if you enable passes in your renderlayer settings you can access them here.

1 Like

Unless you mean in the rendered viewport, which would be very cool, but not related with this task

@thornydre ok thanks