Plan - gregzaal/Progressive-Animation-Renderer GitHub Wiki

Premise:

Sometimes you only have a certain amount of time available to render your animation in, but either the full quality render would take too long, or you actually don't know how long it will take. If you could render the whole animation progressively (getting higher and higher quality over time), you could stop it when you run out of time or are happy with the quality.

Other advantages of progressive rendering include:

  • Being able to see any errors or mistakes in the render quickly, before you waste tons of render time on it.
  • Allowing a compositing artist to work with the low quality render while the higher quality is still busy.

Finally, it would be trivial to use such a system for network rendering: Using multiple computers to render the same animation (or even the same single image) quicker than a single computer could.

Thought dump:

External app that calls blender from the command line.

Must support file output nodes too.

Both branched path tracing and normal path tracing should work.

Do not try to support animation and still rendering separately, user can just do animation with 1 frame length if needed.


Renders to temporary folder (customizable, can be a network drive so multiple PCs render to it at once with placeholders), to be later moved (when merging seeds) to the final output folder(s) set in the blend file.

At any time (even during render), user can merge seeds and save the result to the final render folder. Placeholder files should be detected and skipped (these will be there during rendering, and also if anything crashed mid-frame).

When user clicks 'Render' button, save all settings to a file in case of crash, and as a simple history. Let user save settings to a file manually too for later reuse.

Buttons to stop render either immediately or after the current frame.

Keep UI active at all times (in separate thread), showing progress in real time (current frame, total samples done...)

Settings:

  • Final samples (or infinite)
  • Samples per step
  • GPU/CPU (+number of threads)

Don't allow override, always get from blend (but maybe show them for information purposes):

  • Resolution
  • Frame range
  • Output path
  • Path for all file output nodes
  • File format

Might be nice: Simple network management...

User selects a special 'Client' mode that disables the UI and listens in the background for requests from other computers to render something. Can be started from a command line flag (e.g. progressive_renderer.exe --start-client), maybe the user can have this run on startup.

On the master PC, user enables "use network" or something, so when they hit the render button it will send a request to all PCs on the network. Have a list of clients available and allow user to enable/disable certain ones, or set the device (GPU/CPU) and number of threads for them to render with.

Stopping the render on the master should stop it on the clients too.

Possibly:

Include image viewer that dynamically merges seeds, so user can check the quality without actually hitting the Merge button.

Option for super sampling (render at 200% with 1/4 samples), resize when merge.