mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Nuke: baking with multiple reposition nodes
also with settings and defaults
This commit is contained in:
parent
6ad3421f7f
commit
2e07aa33fa
3 changed files with 144 additions and 34 deletions
|
|
@ -558,9 +558,7 @@ class ExporterReview(object):
|
|||
self.path_in = self.instance.data.get("path", None)
|
||||
self.staging_dir = self.instance.data["stagingDir"]
|
||||
self.collection = self.instance.data.get("collection", None)
|
||||
self.data = dict({
|
||||
"representations": list()
|
||||
})
|
||||
self.data = {"representations": []}
|
||||
|
||||
def get_file_info(self):
|
||||
if self.collection:
|
||||
|
|
@ -626,7 +624,7 @@ class ExporterReview(object):
|
|||
nuke_imageio = opnlib.get_nuke_imageio_settings()
|
||||
|
||||
# TODO: this is only securing backward compatibility lets remove
|
||||
# this once all projects's anotomy are updated to newer config
|
||||
# this once all projects's anatomy are updated to newer config
|
||||
if "baking" in nuke_imageio.keys():
|
||||
return nuke_imageio["baking"]["viewerProcess"]
|
||||
else:
|
||||
|
|
@ -823,8 +821,41 @@ class ExporterReviewMov(ExporterReview):
|
|||
add_tags = []
|
||||
self.publish_on_farm = farm
|
||||
read_raw = kwargs["read_raw"]
|
||||
|
||||
# TODO: remove this when `reformat_nodes_config`
|
||||
# is changed in settings
|
||||
reformat_node_add = kwargs["reformat_node_add"]
|
||||
reformat_node_config = kwargs["reformat_node_config"]
|
||||
|
||||
# TODO: make this required in future
|
||||
reformat_nodes_config = kwargs.get("reformat_nodes_config", {})
|
||||
|
||||
# TODO: remove this once deprecated is removed
|
||||
# make sure only reformat_nodes_config is used in future
|
||||
if reformat_node_add and reformat_nodes_config.get("enabled"):
|
||||
self.log.warning(
|
||||
"`reformat_node_add` is deprecated. "
|
||||
"Please use only `reformat_nodes_config` instead.")
|
||||
reformat_nodes_config = None
|
||||
|
||||
# TODO: reformat code when backward compatibility is not needed
|
||||
# warning if reformat_nodes_config is not set
|
||||
if not reformat_nodes_config:
|
||||
self.log.warning(
|
||||
"Please set `reformat_nodes_config` in settings.")
|
||||
self.log.warning(
|
||||
"Using `reformat_node_config` instead.")
|
||||
reformat_nodes_config = {
|
||||
"enabled": reformat_node_add,
|
||||
"reposition_nodes": [
|
||||
{
|
||||
"node_class": "Reformat",
|
||||
"knobs": reformat_node_config
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
bake_viewer_process = kwargs["bake_viewer_process"]
|
||||
bake_viewer_input_process_node = kwargs[
|
||||
"bake_viewer_input_process"]
|
||||
|
|
@ -846,7 +877,6 @@ class ExporterReviewMov(ExporterReview):
|
|||
|
||||
subset = self.instance.data["subset"]
|
||||
self._temp_nodes[subset] = []
|
||||
# ---------- start nodes creation
|
||||
|
||||
# Read node
|
||||
r_node = nuke.createNode("Read")
|
||||
|
|
@ -860,44 +890,39 @@ class ExporterReviewMov(ExporterReview):
|
|||
if read_raw:
|
||||
r_node["raw"].setValue(1)
|
||||
|
||||
# connect
|
||||
self._temp_nodes[subset].append(r_node)
|
||||
self.previous_node = r_node
|
||||
self.log.debug("Read... `{}`".format(self._temp_nodes[subset]))
|
||||
# connect to Read node
|
||||
self._shift_to_previous_node_and_temp(subset, r_node, "Read... `{}`")
|
||||
|
||||
# add reformat node
|
||||
if reformat_node_add:
|
||||
if reformat_nodes_config["enabled"]:
|
||||
reposition_nodes = reformat_nodes_config["reposition_nodes"]
|
||||
for reposition_node in reposition_nodes:
|
||||
node_class = reposition_node["node_class"]
|
||||
knobs = reposition_node["knobs"]
|
||||
node = nuke.createNode(node_class)
|
||||
set_node_knobs_from_settings(node, knobs)
|
||||
|
||||
# connect in order
|
||||
self._connect_to_above_nodes(
|
||||
node, subset, "Reposition node... `{}`"
|
||||
)
|
||||
# append reformated tag
|
||||
add_tags.append("reformated")
|
||||
|
||||
rf_node = nuke.createNode("Reformat")
|
||||
set_node_knobs_from_settings(rf_node, reformat_node_config)
|
||||
|
||||
# connect
|
||||
rf_node.setInput(0, self.previous_node)
|
||||
self._temp_nodes[subset].append(rf_node)
|
||||
self.previous_node = rf_node
|
||||
self.log.debug(
|
||||
"Reformat... `{}`".format(self._temp_nodes[subset]))
|
||||
|
||||
# only create colorspace baking if toggled on
|
||||
if bake_viewer_process:
|
||||
if bake_viewer_input_process_node:
|
||||
# View Process node
|
||||
ipn = get_view_process_node()
|
||||
if ipn is not None:
|
||||
# connect
|
||||
ipn.setInput(0, self.previous_node)
|
||||
self._temp_nodes[subset].append(ipn)
|
||||
self.previous_node = ipn
|
||||
self.log.debug(
|
||||
"ViewProcess... `{}`".format(
|
||||
self._temp_nodes[subset]))
|
||||
# connect to ViewProcess node
|
||||
self._connect_to_above_nodes(ipn, subset, "ViewProcess... `{}`")
|
||||
|
||||
if not self.viewer_lut_raw:
|
||||
# OCIODisplay
|
||||
dag_node = nuke.createNode("OCIODisplay")
|
||||
|
||||
# assign display
|
||||
display, viewer = get_viewer_config_from_string(
|
||||
str(baking_view_profile)
|
||||
)
|
||||
|
|
@ -907,13 +932,7 @@ class ExporterReviewMov(ExporterReview):
|
|||
# assign viewer
|
||||
dag_node["view"].setValue(viewer)
|
||||
|
||||
# connect
|
||||
dag_node.setInput(0, self.previous_node)
|
||||
self._temp_nodes[subset].append(dag_node)
|
||||
self.previous_node = dag_node
|
||||
self.log.debug("OCIODisplay... `{}`".format(
|
||||
self._temp_nodes[subset]))
|
||||
|
||||
self._connect_to_above_nodes(dag_node, subset, "OCIODisplay... `{}`")
|
||||
# Write node
|
||||
write_node = nuke.createNode("Write")
|
||||
self.log.debug("Path: {}".format(self.path))
|
||||
|
|
@ -967,6 +986,15 @@ class ExporterReviewMov(ExporterReview):
|
|||
|
||||
return self.data
|
||||
|
||||
def _shift_to_previous_node_and_temp(self, subset, node, message):
|
||||
self._temp_nodes[subset].append(node)
|
||||
self.previous_node = node
|
||||
self.log.debug(message.format(self._temp_nodes[subset]))
|
||||
|
||||
def _connect_to_above_nodes(self, node, subset, message):
|
||||
node.setInput(0, self.previous_node)
|
||||
self._shift_to_previous_node_and_temp(subset, node, message)
|
||||
|
||||
|
||||
@deprecated("openpype.hosts.nuke.api.plugin.NukeWriteCreator")
|
||||
class AbstractWriteRender(OpenPypeCreator):
|
||||
|
|
|
|||
|
|
@ -446,6 +446,41 @@
|
|||
"value": false
|
||||
}
|
||||
],
|
||||
"reformat_nodes_config": {
|
||||
"enabled": false,
|
||||
"reposition_nodes": [
|
||||
{
|
||||
"node_class": "Reformat",
|
||||
"knobs": [
|
||||
{
|
||||
"type": "text",
|
||||
"name": "type",
|
||||
"value": "to format"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"name": "format",
|
||||
"value": "HD_1080"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"name": "filter",
|
||||
"value": "Lanczos6"
|
||||
},
|
||||
{
|
||||
"type": "bool",
|
||||
"name": "black_outside",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"type": "bool",
|
||||
"name": "pbb",
|
||||
"value": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"extension": "mov",
|
||||
"add_custom_tags": []
|
||||
}
|
||||
|
|
|
|||
|
|
@ -271,6 +271,10 @@
|
|||
{
|
||||
"type": "separator"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"label": "Currently we are supporting also multiple reposition nodes. <br/>Older single reformat node is still supported <br/>and if it is activated then preference will <br/>be on it. If you want to use multiple reformat <br/>nodes then you need to disable single reformat <br/>node and enable multiple <b>Reformat nodes</b> <a href=\"settings://project_settings/nuke/publish/ExtractReviewDataMov/outputs/baking/reformat_nodes_config/enabled\"><b>here</b></a>."
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"key": "reformat_node_add",
|
||||
|
|
@ -287,6 +291,49 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "reformat_nodes_config",
|
||||
"type": "dict",
|
||||
"label": "Reformat Nodes",
|
||||
"collapsible": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
{
|
||||
"type": "boolean",
|
||||
"key": "enabled",
|
||||
"label": "Enabled"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"label": "Reposition knobs supported only.<br/>You can add multiple reformat nodes <br/>and set their knobs. Order of reformat <br/>nodes is important. First reformat node <br/>will be applied first and last reformat <br/>node will be applied last."
|
||||
},
|
||||
{
|
||||
"key": "reposition_nodes",
|
||||
"type": "list",
|
||||
"label": "Reposition nodes",
|
||||
"object_type": {
|
||||
"type": "dict",
|
||||
"children": [
|
||||
{
|
||||
"key": "node_class",
|
||||
"label": "Node class",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"type": "schema_template",
|
||||
"name": "template_nuke_knob_inputs",
|
||||
"template_data": [
|
||||
{
|
||||
"label": "Node knobs",
|
||||
"key": "knobs"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "separator"
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue