mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
Harmony Handles implementation
This commit is contained in:
parent
e97f90854c
commit
05bd3efcff
7 changed files with 53 additions and 30 deletions
|
|
@ -42,8 +42,8 @@ PypeHarmony.setSceneSettings = function(settings) {
|
|||
scene.setFrameRate(settings.fps);
|
||||
}
|
||||
|
||||
if (settings.frameStart && settings.frameEnd) {
|
||||
var duration = settings.frameEnd - settings.frameStart + 1;
|
||||
if (settings.frameStartHandle && settings.frameEndHandle) {
|
||||
var duration = settings.frameEndHandle - settings.frameStartHandle + 1;
|
||||
|
||||
if (frame.numberOf() > duration) {
|
||||
frame.remove(duration, frame.numberOf() - duration);
|
||||
|
|
|
|||
|
|
@ -52,8 +52,8 @@ class CollectFarmRender(pype.lib.abstract_collect_render.
|
|||
This returns full path with file name determined by Write node
|
||||
settings.
|
||||
"""
|
||||
start = render_instance.frameStart
|
||||
end = render_instance.frameEnd
|
||||
start = render_instance.frameStart - render_instance.handleStart
|
||||
end = render_instance.frameEnd + render_instance.handleEnd
|
||||
node = render_instance.setMembers[0]
|
||||
self_name = self.__class__.__name__
|
||||
# 0 - filename / 1 - type / 2 - zeros / 3 - start
|
||||
|
|
@ -90,7 +90,7 @@ class CollectFarmRender(pype.lib.abstract_collect_render.
|
|||
ext
|
||||
)
|
||||
)
|
||||
self.log.info("expected_files::{}".format(expected_files))
|
||||
self.log.debug("expected_files::{}".format(expected_files))
|
||||
return expected_files
|
||||
|
||||
def get_instances(self, context):
|
||||
|
|
@ -131,7 +131,21 @@ class CollectFarmRender(pype.lib.abstract_collect_render.
|
|||
# capitalized task name
|
||||
subset_name = node.split("/")[1].replace(
|
||||
'Farm',
|
||||
context.data["task"].capitalize())
|
||||
context.data["anatomyData"]["task"].capitalize())
|
||||
|
||||
# harmony always starts from 1. frame
|
||||
# 1001 - 10010 >> 1 - 10
|
||||
offset = context.data["frameStart"] - 1
|
||||
frame_start = context.data["frameStart"] - offset
|
||||
frame_end = context.data["frameEnd"] - \
|
||||
context.data["frameStart"] + 1
|
||||
|
||||
# increase by handleStart - real frame range
|
||||
# frameStart != frameStartHandle with handle presence
|
||||
context.data["frameStart"] = int(frame_start) + \
|
||||
context.data["handleStart"]
|
||||
context.data["frameEnd"] = int(frame_end) + \
|
||||
context.data["handleStart"]
|
||||
render_instance = HarmonyRenderInstance(
|
||||
version=version,
|
||||
time=api.time(),
|
||||
|
|
@ -160,8 +174,8 @@ class CollectFarmRender(pype.lib.abstract_collect_render.
|
|||
convertToScanline=False,
|
||||
|
||||
# time settings
|
||||
frameStart=context.data["frameStart"], # from timeline
|
||||
frameEnd=context.data["frameEnd"], # from timeline
|
||||
frameStart=context.data["frameStart"],
|
||||
frameEnd=context.data["frameEnd"],
|
||||
handleStart=context.data["handleStart"], # from DB
|
||||
handleEnd=context.data["handleEnd"], # from DB
|
||||
frameStep=1,
|
||||
|
|
@ -169,7 +183,8 @@ class CollectFarmRender(pype.lib.abstract_collect_render.
|
|||
outputFormat=info[1],
|
||||
outputStartFrame=info[3],
|
||||
leadingZeros=info[2],
|
||||
toBeRenderedOn='deadline'
|
||||
toBeRenderedOn='deadline',
|
||||
ignoreFrameHandleCheck=True
|
||||
|
||||
)
|
||||
self.log.debug(render_instance)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class CollectInstances(pyblish.api.ContextPlugin):
|
|||
order = pyblish.api.CollectorOrder
|
||||
hosts = ["harmony"]
|
||||
families_mapping = {
|
||||
"render": ["imagesequence", "review", "ftrack"],
|
||||
"render": ["review", "ftrack"],
|
||||
"harmony.template": [],
|
||||
"palette": ["palette", "ftrack"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,8 +254,8 @@ class HarmonySubmitDeadline(
|
|||
job_info.Name = self._instance.data["name"]
|
||||
job_info.Plugin = "HarmonyPype"
|
||||
job_info.Frames = "{}-{}".format(
|
||||
self._instance.data["frameStart"],
|
||||
self._instance.data["frameEnd"]
|
||||
self._instance.data["frameStartHandle"],
|
||||
self._instance.data["frameEndHandle"]
|
||||
)
|
||||
# for now, get those from presets. Later on it should be
|
||||
# configurable in Harmony UI directly.
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class ValidateSceneSettingsRepair(pyblish.api.Action):
|
|||
|
||||
def process(self, context, plugin):
|
||||
"""Repair action entry point."""
|
||||
asset_settings = _update_frames_with_handles(
|
||||
asset_settings = _update_frames(
|
||||
pype.hosts.harmony.get_asset_settings())
|
||||
pype.hosts.harmony.set_scene_settings(asset_settings)
|
||||
if not os.path.exists(context.data["scenePath"]):
|
||||
|
|
@ -48,10 +48,9 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin):
|
|||
expected_settings = pype.hosts.harmony.get_asset_settings()
|
||||
self.log.info(expected_settings)
|
||||
|
||||
# Harmony is expected to start at 1.
|
||||
expected_settings = _update_frames_with_handles(expected_settings)
|
||||
|
||||
self.log.info(instance.context.data['anatomyData']['asset'])
|
||||
expected_settings = _update_frames(dict.copy(expected_settings))
|
||||
expected_settings["frameEndHandle"] = expected_settings["frameEnd"] +\
|
||||
expected_settings["handleEnd"]
|
||||
|
||||
if any(string in instance.context.data['anatomyData']['asset']
|
||||
for string in self.frame_check_filter):
|
||||
|
|
@ -70,16 +69,19 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin):
|
|||
expected_settings.pop("resolutionWidth")
|
||||
expected_settings.pop("resolutionHeight")
|
||||
|
||||
# values on instance.context collected by collect_scene.py
|
||||
self.log.debug(expected_settings)
|
||||
|
||||
current_settings = {
|
||||
"fps": fps,
|
||||
"frameStart": instance.context.data.get("frameStart"),
|
||||
"frameEnd": instance.context.data.get("frameEnd"),
|
||||
"frameStart": instance.context.data["frameStart"],
|
||||
"frameEnd": instance.context.data["frameEnd"],
|
||||
"handleStart": instance.context.data.get("handleStart"),
|
||||
"handleEnd": instance.context.data.get("handleEnd"),
|
||||
"frameEndHandle": instance.context.data.get("frameEndHandle"),
|
||||
"resolutionWidth": instance.context.data.get("resolutionWidth"),
|
||||
"resolutionHeight": instance.context.data.get("resolutionHeight"),
|
||||
}
|
||||
self.log.debug("curr:: {}".format(current_settings))
|
||||
|
||||
invalid_settings = []
|
||||
for key, value in expected_settings.items():
|
||||
|
|
@ -93,7 +95,9 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin):
|
|||
if ((expected_settings["handleStart"]
|
||||
or expected_settings["handleEnd"])
|
||||
and invalid_settings):
|
||||
invalid_settings[-1]["reason"] = "Handles included in calculation"
|
||||
msg = "Handles included in calculation. Remove handles in DB " +\
|
||||
"or extend frame range in timeline."
|
||||
invalid_settings[-1]["reason"] = msg
|
||||
|
||||
msg = "Found invalid settings:\n{}".format(
|
||||
json.dumps(invalid_settings, sort_keys=True, indent=4)
|
||||
|
|
@ -104,7 +108,7 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin):
|
|||
)
|
||||
|
||||
|
||||
def _update_frames_with_handles(expected_settings):
|
||||
def _update_frames(expected_settings):
|
||||
"""
|
||||
Calculate proper frame range including handles set in DB.
|
||||
|
||||
|
|
@ -116,11 +120,10 @@ def _update_frames_with_handles(expected_settings):
|
|||
Returns:
|
||||
modified expected_setting (dict)
|
||||
"""
|
||||
frame_start = expected_settings["frameStart"] - \
|
||||
expected_settings["handleStart"]
|
||||
frame_end = expected_settings["frameEnd"] + \
|
||||
expected_settings["handleEnd"]
|
||||
expected_settings["frameEnd"] = frame_end - frame_start + 1
|
||||
expected_settings["frameStart"] = 1
|
||||
frame_end = expected_settings["frameEnd"] - \
|
||||
expected_settings["frameStart"]
|
||||
|
||||
expected_settings["frameStart"] = 1.0 + expected_settings["handleStart"]
|
||||
expected_settings["frameEnd"] = \
|
||||
frame_end + 1 + expected_settings["handleStart"]
|
||||
return expected_settings
|
||||
|
|
|
|||
|
|
@ -49,6 +49,10 @@ class RenderInstance(object):
|
|||
handleStart = attr.ib() # start frame
|
||||
handleEnd = attr.ib() # start frame
|
||||
|
||||
# for softwares (like Harmony) where frame range cannot be set by DB
|
||||
# handles need to be propagated if exist
|
||||
ignoreFrameHandleCheck = attr.ib(default=False)
|
||||
|
||||
# --------------------
|
||||
# With default values
|
||||
# metadata
|
||||
|
|
@ -157,8 +161,8 @@ class AbstractCollectRender(pyblish.api.ContextPlugin):
|
|||
|
||||
frame_start_render = int(render_instance.frameStart)
|
||||
frame_end_render = int(render_instance.frameEnd)
|
||||
|
||||
if (int(context.data['frameStartHandle']) == frame_start_render
|
||||
if (render_instance.ignoreFrameHandleCheck or
|
||||
int(context.data['frameStartHandle']) == frame_start_render
|
||||
and int(context.data['frameEndHandle']) == frame_end_render): # noqa: W503, E501
|
||||
|
||||
handle_start = context.data['handleStart']
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ def any_outdated():
|
|||
"database".format(**container))
|
||||
|
||||
checked.add(representation)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue