Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Nuke: update rendered frames in latest version #4362

Merged

Conversation

kalisp
Copy link
Member

@kalisp kalisp commented Jan 24, 2023

Brief description

Introduced new field to insert frame(s) to rerender only.

Description

Rendering is expensive, sometimes it is helpful only to re-render changed frames and reuse existing.
Artists can in Publisher fill which frame(s) should be re-rendered.
2023-01-24 17_10_45-OpenPype publisher

If there is already published version of currently publishing subset, all representation files are collected (currently for render family only) and then when Nuke is rendering (locally only for now), old published files are copied into into temporary render folder where will be rewritten only by frames explicitly set in new field.

That way review/burnin process could also reuse old files and recreate reviews/burnins.

New version is produced during this process!

Additional info

Currently only implemented for Nuke's local render as a proof of concept. Farm rendering will be implemented afterwards.

Only other host where this workflow can work is for now AfterEffects as they have Publisher implemented.

It might be useful to create abstract extractor class and use it in host extractor as multiple inheritance to highlight that this extractor implements this functionality (kinda trait - expect some specific fields, does something)...

Contains fix for AE found during testing, didn't want to create new PR for this (expected to implement AE first, decided for Nuke instead after commits were done.)

Testing notes:

  1. publish sequence of frames in Nuke
  2. change specific frame in Nuke workfile (to see change)
  3. fill frame of changed frame into text field
  4. publish again - check published frame, review etc.

Collector should get triggered for render family and offer field to input frames that should be re-rendered and replaced ones in latest version
If frames_to_fix is filled, use this to render only these frames, use 'last_version_published_files' for other
New host implementation should be added to hosts filter
@kalisp kalisp added host: Nuke sponsored Client endorsed or requested labels Jan 24, 2023
@kalisp kalisp self-assigned this Jan 24, 2023
@jakubjezek001
Copy link
Member

This plugin should run only on local (eg not no farm - no one to fill valu in UI).
Without it it will always use version from anatomy, even if it logs that it uses old version.
Allows to rewrite latest version, eg. not duplicating files.
@kalisp
Copy link
Member Author

kalisp commented Jan 24, 2023

Added new toggle to overwrite files of last version.

Fixed version overwriting in integrate.py!!!

(Currently it is not possible to add UISeparatorDef to plugin attributes to separate.)

Base automatically changed from release/3.15.x to develop January 25, 2023 14:56
Copy link
Member

@jakubjezek001 jakubjezek001 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nuke and integration into OP works well, but Ftrack reviewable component is not updating.

@BigRoy
Copy link
Collaborator

BigRoy commented Jan 26, 2023

Why are we writing it into an existing version instead of generating a new version for which we ONLY render the 'to fix' frames and copy the other frames?

To me personally it'd make much more sense to increment a version number if we're changing it.

I feel like writing into an existing version will only start complicating thing more and feels kind of counter-intuitive to the whole versioning aspect we'd like to follow, but if we really want to write into an existing publish:

  • What if the files are in use?
  • Does site sync correctly identify that it needs to resync the files?
  • Do hero versions get correctly updated too? (and also for hero version site sync?)

@jakubjezek001
Copy link
Member

Why are we writing it into an existing version instead of generating a new version for which we ONLY render the 'to fix' frames and copy the other frames?

To me personally it'd make much more sense to increment a version number if we're changing it.

I feel like writing into an existing version will only start complicating thing more and feels kind of counter-intuitive to the whole versioning aspect we'd like to follow, but if we really want to write into an existing publish:

  • What if the files are in use?
  • Does site sync correctly identify that it needs to resync the files?
  • Do hero versions get correctly updated too? (and also for hero version site sync?)

This was clients requested feature. Not something you want to use everyday. An issue they were facing were huge resolutions of rendered files - so they didn't want to accumulate frames which were not changed.

frames_to_render = []

for frame_range in frames_to_fix.split(","):
if isinstance(frame_range, int) or frame_range.isdigit():
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this do frame_range = frame_range.strip() too? Just so that if the user ever typed a space it'd be ignored?

Co-authored-by: Roy Nieterau <roy_nieterau@hotmail.com>
Co-authored-by: Roy Nieterau <roy_nieterau@hotmail.com>
@kalisp kalisp merged commit 816a2c4 into develop Jan 27, 2023
@kalisp kalisp deleted the feature/OP-4617_Global-Update-rendered-frames-in-latest-version branch January 27, 2023 13:51
@github-actions github-actions bot added this to the next-patch milestone Jan 27, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
host: Nuke sponsored Client endorsed or requested
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants