Merge branch 'develop' into enchancement/OP-2630_acescg_maya

This commit is contained in:
Jakub Ježek 2023-02-23 21:50:02 +01:00 committed by GitHub
commit 0ce2d86397
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 14 deletions

View file

@ -43,14 +43,15 @@ def parse_layers_data(data):
layer_id, group_id, visible, position, opacity, name,
layer_type,
frame_start, frame_end, prelighttable, postlighttable,
selected, editable, sencil_state
selected, editable, sencil_state, is_current
) = layer_raw.split("|")
layer = {
"layer_id": int(layer_id),
"group_id": int(group_id),
"visible": visible == "ON",
"position": int(position),
"opacity": int(opacity),
# Opacity from 'tv_layerinfo' is always set to '0' so it's unusable
# "opacity": int(opacity),
"name": name,
"type": layer_type,
"frame_start": int(frame_start),
@ -59,7 +60,8 @@ def parse_layers_data(data):
"postlighttable": postlighttable == "1",
"selected": selected == "1",
"editable": editable == "1",
"sencil_state": sencil_state
"sencil_state": sencil_state,
"is_current": is_current == "1"
}
layers.append(layer)
return layers
@ -87,15 +89,17 @@ def get_layers_data_george_script(output_filepath, layer_ids=None):
" selected editable sencilState"
),
# Check if layer ID match `tv_LayerCurrentID`
"is_current=0",
"IF CMP(current_layer_id, layer_id)==1",
# - mark layer as selected if layer id match to current layer id
"is_current=1",
"selected=1",
"END",
# Prepare line with data separated by "|"
(
"line = layer_id'|'group_id'|'visible'|'position'|'opacity'|'"
"name'|'type'|'startFrame'|'endFrame'|'prelighttable'|'"
"postlighttable'|'selected'|'editable'|'sencilState"
"postlighttable'|'selected'|'editable'|'sencilState'|'is_current"
),
# Write data to output file
"tv_writetextfile \"strict\" \"append\" '\"'output_path'\"' line",

View file

@ -41,6 +41,7 @@ from openpype.client import get_asset_by_name
from openpype.lib import (
prepare_template_data,
AbstractAttrDef,
UILabelDef,
UISeparatorDef,
EnumDef,
TextDef,
@ -66,7 +67,7 @@ RENDER_LAYER_DETAILED_DESCRIPTIONS = (
Be aware Render Layer <b>is not</b> TVPaint layer.
All TVPaint layers in the scene with the color group id are rendered in the
beauty pass. To create sub passes use Render Layer creator which is
beauty pass. To create sub passes use Render Pass creator which is
dependent on existence of render layer instance.
The group can represent an asset (tree) or different part of scene that consist
@ -82,8 +83,8 @@ could be Render Layer which has 'Arm', 'Head' and 'Body' as Render Passes.
RENDER_PASS_DETAILED_DESCRIPTIONS = (
"""Render Pass is sub part of Render Layer.
Render Pass can consist of one or more TVPaint layers. Render Layers must
belong to a Render Layer. Marker TVPaint layers will change it's group color
Render Pass can consist of one or more TVPaint layers. Render Pass must
belong to a Render Layer. Marked TVPaint layers will change it's group color
to match group color of Render Layer.
"""
)
@ -461,7 +462,10 @@ class CreateRenderPass(TVPaintCreator):
"render_layer_instance_id"
)
if not render_layer_instance_id:
raise CreatorError("Missing RenderLayer instance")
raise CreatorError((
"You cannot create a Render Pass without a Render Layer."
" Please select one first"
))
render_layer_instance = self.create_context.instances_by_id.get(
render_layer_instance_id
@ -598,12 +602,45 @@ class CreateRenderPass(TVPaintCreator):
]
def get_pre_create_attr_defs(self):
# Find available Render Layers
# - instances are created after creators reset
current_instances = self.host.list_instances()
render_layers = [
{
"value": instance["instance_id"],
"label": instance["subset"]
}
for instance in current_instances
if instance["creator_identifier"] == CreateRenderlayer.identifier
]
if not render_layers:
render_layers.append({"value": None, "label": "N/A"})
return [
EnumDef(
"render_layer_instance_id",
label="Render Layer",
items=render_layers
),
UILabelDef(
"NOTE: Try to hit refresh if you don't see a Render Layer"
),
BoolDef(
"mark_for_review",
label="Review",
default=self.mark_for_review
)
]
def get_instance_attr_defs(self):
# Find available Render Layers
current_instances = self.create_context.instances
render_layers = [
{
"value": instance.id,
"label": instance.label
}
for instance in self.create_context.instances
for instance in current_instances
if instance.creator_identifier == CreateRenderlayer.identifier
]
if not render_layers:
@ -615,6 +652,9 @@ class CreateRenderPass(TVPaintCreator):
label="Render Layer",
items=render_layers
),
UILabelDef(
"NOTE: Try to hit refresh if you don't see a Render Layer"
),
BoolDef(
"mark_for_review",
label="Review",
@ -622,9 +662,6 @@ class CreateRenderPass(TVPaintCreator):
)
]
def get_instance_attr_defs(self):
return self.get_pre_create_attr_defs()
class TVPaintAutoDetectRenderCreator(TVPaintCreator):
"""Create Render Layer and Render Pass instances based on scene data.

View file

@ -31,13 +31,13 @@
"default_variants": []
},
"create_render_layer": {
"mark_for_review": true,
"mark_for_review": false,
"default_pass_name": "beauty",
"default_variant": "Main",
"default_variants": []
},
"create_render_pass": {
"mark_for_review": true,
"mark_for_review": false,
"default_variant": "Main",
"default_variants": []
},