mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
Allow to define department layers scoped only to a particular department layer type, e.g. "shot" versus "asset". This way, you can scope same layer names for both shot and asset at different orders if they have differing target scopes
This commit is contained in:
parent
31e6b5a139
commit
4eece5e6e9
2 changed files with 57 additions and 31 deletions
|
|
@ -2,6 +2,7 @@ from operator import attrgetter
|
|||
import dataclasses
|
||||
import os
|
||||
import platform
|
||||
from collections import defaultdict
|
||||
from typing import Any, Dict, List
|
||||
|
||||
import pyblish.api
|
||||
|
|
@ -278,19 +279,23 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
# level, you can add itdirectly from the publisher at that particular
|
||||
# order. Future publishes will then see the existing contribution and will
|
||||
# persist adding it to future bootstraps at that order
|
||||
contribution_layers: Dict[str, int] = {
|
||||
contribution_layers: Dict[str, Dict[str, int]] = {
|
||||
# asset layers
|
||||
"model": 100,
|
||||
"assembly": 150,
|
||||
"groom": 175,
|
||||
"look": 200,
|
||||
"rig": 300,
|
||||
"asset": {
|
||||
"model": 100,
|
||||
"assembly": 150,
|
||||
"groom": 175,
|
||||
"look": 200,
|
||||
"rig": 300,
|
||||
},
|
||||
# shot layers
|
||||
"layout": 200,
|
||||
"animation": 300,
|
||||
"simulation": 400,
|
||||
"fx": 500,
|
||||
"lighting": 600,
|
||||
"shot": {
|
||||
"layout": 200,
|
||||
"animation": 300,
|
||||
"simulation": 400,
|
||||
"fx": 500,
|
||||
"lighting": 600,
|
||||
}
|
||||
}
|
||||
# Default profiles to set certain instance attribute defaults based on
|
||||
# profiles in settings
|
||||
|
|
@ -305,12 +310,13 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
|
||||
cls.enabled = plugin_settings.get("enabled", cls.enabled)
|
||||
|
||||
# Define contribution layers via settings
|
||||
contribution_layers = {}
|
||||
# Define contribution layers via settings by their scope
|
||||
contribution_layers = defaultdict(dict)
|
||||
for entry in plugin_settings.get("contribution_layers", []):
|
||||
contribution_layers[entry["name"]] = int(entry["order"])
|
||||
for scope in entry.get("scope", []):
|
||||
contribution_layers[scope][entry["name"]] = int(entry["order"])
|
||||
if contribution_layers:
|
||||
cls.contribution_layers = contribution_layers
|
||||
cls.contribution_layers = dict(contribution_layers)
|
||||
|
||||
cls.profiles = plugin_settings.get("profiles", [])
|
||||
|
||||
|
|
@ -489,14 +495,14 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
profile = {}
|
||||
|
||||
# Define defaults
|
||||
default_enabled = profile.get("contribution_enabled", True)
|
||||
default_enabled: bool = profile.get("contribution_enabled", True)
|
||||
default_contribution_layer = profile.get(
|
||||
"contribution_layer", None)
|
||||
default_apply_as_variant = profile.get(
|
||||
default_apply_as_variant: bool = profile.get(
|
||||
"contribution_apply_as_variant", False)
|
||||
default_target_product = profile.get(
|
||||
default_target_product: str = profile.get(
|
||||
"contribution_target_product", "usdAsset")
|
||||
default_init_as = (
|
||||
default_init_as: str = (
|
||||
"asset"
|
||||
if profile.get("contribution_target_product") == "usdAsset"
|
||||
else "shot")
|
||||
|
|
@ -509,6 +515,12 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
visible = publish_attributes.get("contribution_enabled", True)
|
||||
variant_visible = visible and publish_attributes.get(
|
||||
"contribution_apply_as_variant", True)
|
||||
init_as: str = publish_attributes.get(
|
||||
"contribution_target_product_init", default_init_as)
|
||||
|
||||
contribution_layers = cls.contribution_layers.get(
|
||||
init_as, {}
|
||||
)
|
||||
|
||||
return [
|
||||
UISeparatorDef("usd_container_settings1"),
|
||||
|
|
@ -558,7 +570,7 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
"predefined ordering.\nA higher order (further down "
|
||||
"the list) will contribute as a stronger opinion."
|
||||
),
|
||||
items=list(cls.contribution_layers.keys()),
|
||||
items=list(contribution_layers.keys()),
|
||||
default=default_contribution_layer,
|
||||
visible=visible),
|
||||
BoolDef("contribution_apply_as_variant",
|
||||
|
|
@ -606,7 +618,11 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin,
|
|||
|
||||
# Update attributes if any of the following plug-in attributes
|
||||
# change:
|
||||
keys = ["contribution_enabled", "contribution_apply_as_variant"]
|
||||
keys = {
|
||||
"contribution_enabled",
|
||||
"contribution_apply_as_variant",
|
||||
"contribution_target_product_init",
|
||||
}
|
||||
|
||||
for instance_change in event["changes"]:
|
||||
instance = instance_change["instance"]
|
||||
|
|
|
|||
|
|
@ -74,9 +74,19 @@ class CollectFramesFixDefModel(BaseSettingsModel):
|
|||
)
|
||||
|
||||
|
||||
def usd_contribution_layer_types():
|
||||
return [
|
||||
{"value": "asset", "label": "Asset"},
|
||||
{"value": "shot", "label": "Shot"},
|
||||
]
|
||||
|
||||
|
||||
class ContributionLayersModel(BaseSettingsModel):
|
||||
_layout = "compact"
|
||||
name: str = SettingsField(title="Name")
|
||||
scope: list[str] = SettingsField(
|
||||
title="Scope",
|
||||
enum_resolver=usd_contribution_layer_types)
|
||||
order: str = SettingsField(
|
||||
title="Order",
|
||||
description="Higher order means a higher strength and stacks the "
|
||||
|
|
@ -1345,17 +1355,17 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
"enabled": True,
|
||||
"contribution_layers": [
|
||||
# Asset layers
|
||||
{"name": "model", "order": 100},
|
||||
{"name": "assembly", "order": 150},
|
||||
{"name": "groom", "order": 175},
|
||||
{"name": "look", "order": 200},
|
||||
{"name": "rig", "order": 300},
|
||||
{"name": "model", "order": 100, "scope": ["asset"]},
|
||||
{"name": "assembly", "order": 150, "scope": ["asset"]},
|
||||
{"name": "groom", "order": 175, "scope": ["asset"]},
|
||||
{"name": "look", "order": 200, "scope": ["asset"]},
|
||||
{"name": "rig", "order": 300, "scope": ["asset"]},
|
||||
# Shot layers
|
||||
{"name": "layout", "order": 200},
|
||||
{"name": "animation", "order": 300},
|
||||
{"name": "simulation", "order": 400},
|
||||
{"name": "fx", "order": 500},
|
||||
{"name": "lighting", "order": 600},
|
||||
{"name": "layout", "order": 200, "scope": ["shot"]},
|
||||
{"name": "animation", "order": 300, "scope": ["shot"]},
|
||||
{"name": "simulation", "order": 400, "scope": ["shot"]},
|
||||
{"name": "fx", "order": 500, "scope": ["shot"]},
|
||||
{"name": "lighting", "order": 600, "scope": ["shot"]},
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue