mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
Merge pull request #536 from ynput/chore/AY-4916_Move-Houdini-client-code-settings-category
Houdini: move houdini client code - Add Settings Category
This commit is contained in:
commit
3658ecaf0c
94 changed files with 416 additions and 380 deletions
|
|
@ -7,6 +7,7 @@ from abc import (
|
||||||
import six
|
import six
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
CreatorError,
|
CreatorError,
|
||||||
LegacyCreator,
|
LegacyCreator,
|
||||||
|
|
@ -14,11 +15,17 @@ from ayon_core.pipeline import (
|
||||||
CreatedInstance,
|
CreatedInstance,
|
||||||
AYON_INSTANCE_ID,
|
AYON_INSTANCE_ID,
|
||||||
AVALON_INSTANCE_ID,
|
AVALON_INSTANCE_ID,
|
||||||
|
load,
|
||||||
|
publish
|
||||||
)
|
)
|
||||||
from ayon_core.lib import BoolDef
|
from ayon_core.lib import BoolDef
|
||||||
|
|
||||||
from .lib import imprint, read, lsattr, add_self_publish_button
|
from .lib import imprint, read, lsattr, add_self_publish_button
|
||||||
|
|
||||||
|
|
||||||
|
SETTINGS_CATEGORY = "houdini"
|
||||||
|
|
||||||
|
|
||||||
class Creator(LegacyCreator):
|
class Creator(LegacyCreator):
|
||||||
"""Creator plugin to create instances in Houdini
|
"""Creator plugin to create instances in Houdini
|
||||||
|
|
||||||
|
|
@ -169,7 +176,7 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase):
|
||||||
settings_name = None
|
settings_name = None
|
||||||
add_publish_button = False
|
add_publish_button = False
|
||||||
|
|
||||||
settings_category = "houdini"
|
settings_category = SETTINGS_CATEGORY
|
||||||
|
|
||||||
def create(self, product_name, instance_data, pre_create_data):
|
def create(self, product_name, instance_data, pre_create_data):
|
||||||
try:
|
try:
|
||||||
|
|
@ -349,3 +356,39 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase):
|
||||||
|
|
||||||
for key, value in settings.items():
|
for key, value in settings.items():
|
||||||
setattr(self, key, value)
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class HoudiniLoader(load.LoaderPlugin):
|
||||||
|
"""Base class for Houdini load plugins."""
|
||||||
|
|
||||||
|
hosts = ["houdini"]
|
||||||
|
settings_category = SETTINGS_CATEGORY
|
||||||
|
|
||||||
|
|
||||||
|
class HoudiniInstancePlugin(pyblish.api.InstancePlugin):
|
||||||
|
"""Base class for Houdini instance publish plugins."""
|
||||||
|
|
||||||
|
hosts = ["houdini"]
|
||||||
|
settings_category = SETTINGS_CATEGORY
|
||||||
|
|
||||||
|
|
||||||
|
class HoudiniContextPlugin(pyblish.api.ContextPlugin):
|
||||||
|
"""Base class for Houdini context publish plugins."""
|
||||||
|
|
||||||
|
hosts = ["houdini"]
|
||||||
|
settings_category = SETTINGS_CATEGORY
|
||||||
|
|
||||||
|
|
||||||
|
class HoudiniExtractorPlugin(publish.Extractor):
|
||||||
|
"""Base class for Houdini extract plugins.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
The `HoudiniExtractorPlugin` is a subclass of `publish.Extractor`,
|
||||||
|
which in turn is a subclass of `pyblish.api.InstancePlugin`.
|
||||||
|
Should there be a requirement to create an extractor that operates
|
||||||
|
as a context plugin, it would be beneficial to incorporate
|
||||||
|
the functionalities present in `publish.Extractor`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
hosts = ["houdini"]
|
||||||
|
settings_category = SETTINGS_CATEGORY
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from ayon_core.pipeline import load
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class SetFrameRangeLoader(load.LoaderPlugin):
|
class SetFrameRangeLoader(plugin.HoudiniLoader):
|
||||||
"""Set frame range excluding pre- and post-handles"""
|
"""Set frame range excluding pre- and post-handles"""
|
||||||
|
|
||||||
product_types = {
|
product_types = {
|
||||||
|
|
@ -42,7 +42,7 @@ class SetFrameRangeLoader(load.LoaderPlugin):
|
||||||
hou.playbar.setPlaybackRange(start, end)
|
hou.playbar.setPlaybackRange(start, end)
|
||||||
|
|
||||||
|
|
||||||
class SetFrameRangeWithHandlesLoader(load.LoaderPlugin):
|
class SetFrameRangeWithHandlesLoader(plugin.HoudiniLoader):
|
||||||
"""Set frame range including pre- and post-handles"""
|
"""Set frame range including pre- and post-handles"""
|
||||||
|
|
||||||
product_types = {
|
product_types = {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import os
|
import os
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class AbcLoader(load.LoaderPlugin):
|
class AbcLoader(plugin.HoudiniLoader):
|
||||||
"""Load Alembic"""
|
"""Load Alembic"""
|
||||||
|
|
||||||
product_types = {"model", "animation", "pointcache", "gpuCache"}
|
product_types = {"model", "animation", "pointcache", "gpuCache"}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class AbcArchiveLoader(load.LoaderPlugin):
|
class AbcArchiveLoader(plugin.HoudiniLoader):
|
||||||
"""Load Alembic as full geometry network hierarchy """
|
"""Load Alembic as full geometry network hierarchy """
|
||||||
|
|
||||||
product_types = {"model", "animation", "pointcache", "gpuCache"}
|
product_types = {"model", "animation", "pointcache", "gpuCache"}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class AssLoader(load.LoaderPlugin):
|
class AssLoader(plugin.HoudiniLoader):
|
||||||
"""Load .ass with Arnold Procedural"""
|
"""Load .ass with Arnold Procedural"""
|
||||||
|
|
||||||
product_types = {"ass"}
|
product_types = {"ass"}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class BgeoLoader(load.LoaderPlugin):
|
class BgeoLoader(plugin.HoudiniLoader):
|
||||||
"""Load bgeo files to Houdini."""
|
"""Load bgeo files to Houdini."""
|
||||||
|
|
||||||
label = "Load bgeo"
|
label = "Load bgeo"
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
from ayon_core.pipeline import (
|
import hou
|
||||||
load,
|
from ayon_core.pipeline import get_representation_path
|
||||||
get_representation_path,
|
|
||||||
)
|
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
from ayon_houdini.api import (
|
||||||
|
pipeline,
|
||||||
|
plugin
|
||||||
|
)
|
||||||
from ayon_houdini.api.lib import (
|
from ayon_houdini.api.lib import (
|
||||||
set_camera_resolution,
|
set_camera_resolution,
|
||||||
get_camera_from_container
|
get_camera_from_container
|
||||||
)
|
)
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
|
||||||
ARCHIVE_EXPRESSION = ('__import__("_alembic_hom_extensions")'
|
ARCHIVE_EXPRESSION = ('__import__("_alembic_hom_extensions")'
|
||||||
'.alembicGetCameraDict')
|
'.alembicGetCameraDict')
|
||||||
|
|
@ -84,7 +83,7 @@ def transfer_non_default_values(src, dest, ignore=None):
|
||||||
dest_parm.setFromParm(parm)
|
dest_parm.setFromParm(parm)
|
||||||
|
|
||||||
|
|
||||||
class CameraLoader(load.LoaderPlugin):
|
class CameraLoader(plugin.HoudiniLoader):
|
||||||
"""Load camera from an Alembic file"""
|
"""Load camera from an Alembic file"""
|
||||||
|
|
||||||
product_types = {"camera"}
|
product_types = {"camera"}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Fbx Loader for houdini. """
|
"""Fbx Loader for houdini. """
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class FbxLoader(load.LoaderPlugin):
|
class FbxLoader(plugin.HoudiniLoader):
|
||||||
"""Load fbx files. """
|
"""Load fbx files. """
|
||||||
|
|
||||||
label = "Load FBX"
|
label = "Load FBX"
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ayon_core.pipeline import load
|
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
from ayon_houdini.api import (
|
||||||
|
pipeline,
|
||||||
|
plugin
|
||||||
|
)
|
||||||
|
|
||||||
class FilePathLoader(load.LoaderPlugin):
|
|
||||||
|
class FilePathLoader(plugin.HoudiniLoader):
|
||||||
"""Load a managed filepath to a null node.
|
"""Load a managed filepath to a null node.
|
||||||
|
|
||||||
This is useful if for a particular workflow there is no existing loader
|
This is useful if for a particular workflow there is no existing loader
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class HdaLoader(load.LoaderPlugin):
|
class HdaLoader(plugin.HoudiniLoader):
|
||||||
"""Load Houdini Digital Asset file."""
|
"""Load Houdini Digital Asset file."""
|
||||||
|
|
||||||
product_types = {"hda"}
|
product_types = {"hda"}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import hou
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
load,
|
|
||||||
get_representation_path,
|
get_representation_path,
|
||||||
AVALON_CONTAINER_ID,
|
AVALON_CONTAINER_ID,
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import lib, pipeline
|
from ayon_houdini.api import (
|
||||||
|
pipeline,
|
||||||
import hou
|
plugin,
|
||||||
|
lib
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_image_avalon_container():
|
def get_image_avalon_container():
|
||||||
|
|
@ -42,7 +44,7 @@ def get_image_avalon_container():
|
||||||
return image_container
|
return image_container
|
||||||
|
|
||||||
|
|
||||||
class ImageLoader(load.LoaderPlugin):
|
class ImageLoader(plugin.HoudiniLoader):
|
||||||
"""Load images into COP2"""
|
"""Load images into COP2"""
|
||||||
|
|
||||||
product_types = {
|
product_types = {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from ayon_core.pipeline import (
|
|
||||||
load,
|
|
||||||
get_representation_path,
|
|
||||||
)
|
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
from ayon_core.pipeline.load import LoadError
|
|
||||||
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
from ayon_core.pipeline import get_representation_path
|
||||||
|
from ayon_core.pipeline.load import LoadError
|
||||||
|
|
||||||
class RedshiftProxyLoader(load.LoaderPlugin):
|
from ayon_houdini.api import (
|
||||||
|
pipeline,
|
||||||
|
plugin
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RedshiftProxyLoader(plugin.HoudiniLoader):
|
||||||
"""Load Redshift Proxy"""
|
"""Load Redshift Proxy"""
|
||||||
|
|
||||||
product_types = {"redshiftproxy"}
|
product_types = {"redshiftproxy"}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
load,
|
|
||||||
get_representation_path,
|
get_representation_path,
|
||||||
AVALON_CONTAINER_ID,
|
AVALON_CONTAINER_ID,
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import (
|
||||||
|
plugin,
|
||||||
|
lib
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class USDSublayerLoader(load.LoaderPlugin):
|
class USDSublayerLoader(plugin.HoudiniLoader):
|
||||||
"""Sublayer USD file in Solaris"""
|
"""Sublayer USD file in Solaris"""
|
||||||
|
|
||||||
product_types = {
|
product_types = {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
load,
|
|
||||||
get_representation_path,
|
get_representation_path,
|
||||||
AVALON_CONTAINER_ID,
|
AVALON_CONTAINER_ID,
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import (
|
||||||
|
plugin,
|
||||||
|
lib
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class USDReferenceLoader(load.LoaderPlugin):
|
class USDReferenceLoader(plugin.HoudiniLoader):
|
||||||
"""Reference USD file in Solaris"""
|
"""Reference USD file in Solaris"""
|
||||||
|
|
||||||
product_types = {
|
product_types = {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from ayon_core.pipeline import load
|
from ayon_houdini.api import (
|
||||||
from ayon_houdini.api import pipeline
|
pipeline,
|
||||||
|
plugin
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SopUsdImportLoader(load.LoaderPlugin):
|
class SopUsdImportLoader(plugin.HoudiniLoader):
|
||||||
"""Load USD to SOPs via `usdimport`"""
|
"""Load USD to SOPs via `usdimport`"""
|
||||||
|
|
||||||
label = "Load USD to SOPs"
|
label = "Load USD to SOPs"
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
load,
|
from ayon_houdini.api import (
|
||||||
get_representation_path,
|
pipeline,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import pipeline
|
|
||||||
|
|
||||||
|
|
||||||
class VdbLoader(load.LoaderPlugin):
|
class VdbLoader(plugin.HoudiniLoader):
|
||||||
"""Load VDB"""
|
"""Load VDB"""
|
||||||
|
|
||||||
product_types = {"vdbcache"}
|
product_types = {"vdbcache"}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@ import platform
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from ayon_core.lib.vendor_bin_utils import find_executable
|
from ayon_core.lib.vendor_bin_utils import find_executable
|
||||||
from ayon_core.pipeline import load
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class ShowInUsdview(load.LoaderPlugin):
|
class ShowInUsdview(plugin.HoudiniLoader):
|
||||||
"""Open USD file in usdview"""
|
"""Open USD file in usdview"""
|
||||||
|
|
||||||
label = "Show in usdview"
|
label = "Show in usdview"
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class CollectInstanceActiveState(pyblish.api.InstancePlugin):
|
|
||||||
|
class CollectInstanceActiveState(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect default active state for instance from its node bypass state.
|
"""Collect default active state for instance from its node bypass state.
|
||||||
|
|
||||||
This is done at the very end of the CollectorOrder so that any required
|
This is done at the very end of the CollectorOrder so that any required
|
||||||
|
|
@ -14,7 +16,6 @@ class CollectInstanceActiveState(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder + 0.299
|
order = pyblish.api.CollectorOrder + 0.299
|
||||||
families = ["*"]
|
families = ["*"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Instance Active State"
|
label = "Instance Active State"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,14 @@ import re
|
||||||
import hou
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_houdini.api import colorspace
|
from ayon_houdini.api import colorspace, plugin
|
||||||
from ayon_houdini.api.lib import (
|
from ayon_houdini.api.lib import (
|
||||||
evalParmNoFrame, get_color_management_preferences)
|
get_color_management_preferences,
|
||||||
|
evalParmNoFrame
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin):
|
class CollectArnoldROPRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Arnold ROP Render Products
|
"""Collect Arnold ROP Render Products
|
||||||
|
|
||||||
Collects the instance.data["files"] for the render products.
|
Collects the instance.data["files"] for the render products.
|
||||||
|
|
@ -23,7 +25,6 @@ class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin):
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectFrames
|
# this plugin runs after CollectFrames
|
||||||
order = pyblish.api.CollectorOrder + 0.11
|
order = pyblish.api.CollectorOrder + 0.11
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["arnold_rop"]
|
families = ["arnold_rop"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Collector plugin for frames data on ROP instances."""
|
"""Collector plugin for frames data on ROP instances."""
|
||||||
import hou # noqa
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.lib import BoolDef
|
from ayon_core.lib import BoolDef
|
||||||
from ayon_core.pipeline import AYONPyblishPluginMixin
|
from ayon_core.pipeline import AYONPyblishPluginMixin
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectAssetHandles(pyblish.api.InstancePlugin,
|
class CollectAssetHandles(plugin.HoudiniInstancePlugin,
|
||||||
AYONPyblishPluginMixin):
|
AYONPyblishPluginMixin):
|
||||||
"""Apply folder handles.
|
"""Apply folder handles.
|
||||||
|
|
||||||
|
|
@ -23,8 +23,6 @@ class CollectAssetHandles(pyblish.api.InstancePlugin,
|
||||||
the exclusive frame range and actual handle ranges.
|
the exclusive frame range and actual handle ranges.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectAnatomyInstanceData
|
# this plugin runs after CollectAnatomyInstanceData
|
||||||
order = pyblish.api.CollectorOrder + 0.499
|
order = pyblish.api.CollectorOrder + 0.499
|
||||||
|
|
@ -32,8 +30,6 @@ class CollectAssetHandles(pyblish.api.InstancePlugin,
|
||||||
label = "Collect Folder Handles"
|
label = "Collect Folder Handles"
|
||||||
use_asset_handles = True
|
use_asset_handles = True
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
# Only process instances without already existing handles data
|
# Only process instances without already existing handles data
|
||||||
# but that do have frameStartHandle and frameEndHandle defined
|
# but that do have frameStartHandle and frameEndHandle defined
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
import os
|
import os
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
from ayon_houdini.api import lib
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import (
|
||||||
|
lib,
|
||||||
|
plugin
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectDataforCache(pyblish.api.InstancePlugin):
|
class CollectDataforCache(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect data for caching to Deadline."""
|
"""Collect data for caching to Deadline."""
|
||||||
|
|
||||||
# Run after Collect Frames
|
# Run after Collect Frames
|
||||||
|
|
@ -12,7 +15,6 @@ class CollectDataforCache(pyblish.api.InstancePlugin):
|
||||||
families = ["ass", "pointcache",
|
families = ["ass", "pointcache",
|
||||||
"mantraifd", "redshiftproxy",
|
"mantraifd", "redshiftproxy",
|
||||||
"vdbcache", "model"]
|
"vdbcache", "model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
label = "Collect Data for Cache"
|
label = "Collect Data for Cache"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.lib import NumberDef
|
from ayon_core.lib import NumberDef
|
||||||
from ayon_core.pipeline import AYONPyblishPluginMixin
|
from ayon_core.pipeline import AYONPyblishPluginMixin
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectChunkSize(pyblish.api.InstancePlugin,
|
class CollectChunkSize(plugin.HoudiniInstancePlugin,
|
||||||
AYONPyblishPluginMixin):
|
AYONPyblishPluginMixin):
|
||||||
"""Collect chunk size for cache submission to Deadline."""
|
"""Collect chunk size for cache submission to Deadline."""
|
||||||
|
|
||||||
|
|
@ -11,13 +12,10 @@ class CollectChunkSize(pyblish.api.InstancePlugin,
|
||||||
families = ["ass", "pointcache",
|
families = ["ass", "pointcache",
|
||||||
"vdbcache", "mantraifd",
|
"vdbcache", "mantraifd",
|
||||||
"redshiftproxy", "model"]
|
"redshiftproxy", "model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
label = "Collect Chunk Size"
|
label = "Collect Chunk Size"
|
||||||
chunk_size = 999999
|
chunk_size = 999999
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
# need to get the chunk size info from the setting
|
# need to get the chunk size info from the setting
|
||||||
attr_values = self.get_attr_values_from_data(instance.data)
|
attr_values = self.get_attr_values_from_data(instance.data)
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@ import os
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectHoudiniCurrentFile(pyblish.api.ContextPlugin):
|
class CollectHoudiniCurrentFile(plugin.HoudiniContextPlugin):
|
||||||
"""Inject the current working file into context"""
|
"""Inject the current working file into context"""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder - 0.1
|
order = pyblish.api.CollectorOrder - 0.1
|
||||||
label = "Houdini Current File"
|
label = "Houdini Current File"
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, context):
|
def process(self, context):
|
||||||
"""Inject the current working file"""
|
"""Inject the current working file"""
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectFarmInstances(pyblish.api.InstancePlugin):
|
class CollectFarmInstances(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect instances for farm render."""
|
"""Collect instances for farm render."""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
|
|
@ -11,7 +12,6 @@ class CollectFarmInstances(pyblish.api.InstancePlugin):
|
||||||
"arnold_rop",
|
"arnold_rop",
|
||||||
"vray_rop"]
|
"vray_rop"]
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
label = "Collect farm instances"
|
label = "Collect farm instances"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,10 @@ import re
|
||||||
|
|
||||||
import hou # noqa
|
import hou # noqa
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectFrames(pyblish.api.InstancePlugin):
|
class CollectFrames(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect all frames which would be saved from the ROP nodes"""
|
"""Collect all frames which would be saved from the ROP nodes"""
|
||||||
|
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import registered_host
|
from ayon_core.pipeline import registered_host
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
def get_container_members(container):
|
def get_container_members(container):
|
||||||
|
|
@ -80,7 +80,7 @@ def iter_upstream(node):
|
||||||
collected.update(ancestors)
|
collected.update(ancestors)
|
||||||
|
|
||||||
|
|
||||||
class CollectUpstreamInputs(pyblish.api.InstancePlugin):
|
class CollectUpstreamInputs(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect source input containers used for this publish.
|
"""Collect source input containers used for this publish.
|
||||||
|
|
||||||
This will include `inputs` data of which loaded publishes were used in the
|
This will include `inputs` data of which loaded publishes were used in the
|
||||||
|
|
@ -91,7 +91,6 @@ class CollectUpstreamInputs(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
label = "Collect Inputs"
|
label = "Collect Inputs"
|
||||||
order = pyblish.api.CollectorOrder + 0.4
|
order = pyblish.api.CollectorOrder + 0.4
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
# We can't get the "inputAncestors" directly from the ROP
|
# We can't get the "inputAncestors" directly from the ROP
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ class CollectPointcacheType(pyblish.api.InstancePlugin):
|
||||||
"""Collect data type for different instances."""
|
"""Collect data type for different instances."""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["pointcache", "model"]
|
families = ["pointcache", "model"]
|
||||||
label = "Collect instances types"
|
label = "Collect instances types"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import hou
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_houdini.api import lib
|
|
||||||
import ayon_houdini.api.usd as hou_usdlib
|
|
||||||
from ayon_core.pipeline import usdlib
|
from ayon_core.pipeline import usdlib
|
||||||
|
from ayon_houdini.api import lib, plugin
|
||||||
|
import ayon_houdini.api.usd as hou_usdlib
|
||||||
|
|
||||||
|
|
||||||
class CollectInstancesUsdLayered(pyblish.api.ContextPlugin):
|
class CollectInstancesUsdLayered(plugin.HoudiniContextPlugin):
|
||||||
"""Collect Instances from a ROP Network and its configured layer paths.
|
"""Collect Instances from a ROP Network and its configured layer paths.
|
||||||
|
|
||||||
The output nodes of the ROP node will only be published when *any* of the
|
The output nodes of the ROP node will only be published when *any* of the
|
||||||
|
|
@ -32,7 +32,6 @@ class CollectInstancesUsdLayered(pyblish.api.ContextPlugin):
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder - 0.01
|
order = pyblish.api.CollectorOrder - 0.01
|
||||||
label = "Collect Instances (USD Configured Layers)"
|
label = "Collect Instances (USD Configured Layers)"
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, context):
|
def process(self, context):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@ from ayon_houdini.api.lib import (
|
||||||
get_color_management_preferences
|
get_color_management_preferences
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import (
|
from ayon_houdini.api import (
|
||||||
colorspace
|
colorspace,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin):
|
class CollectKarmaROPRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Karma Render Products
|
"""Collect Karma Render Products
|
||||||
|
|
||||||
Collects the instance.data["files"] for the multipart render product.
|
Collects the instance.data["files"] for the multipart render product.
|
||||||
|
|
@ -27,7 +28,6 @@ class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin):
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectFrames
|
# this plugin runs after CollectFrames
|
||||||
order = pyblish.api.CollectorOrder + 0.11
|
order = pyblish.api.CollectorOrder + 0.11
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["karma_rop"]
|
families = ["karma_rop"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@ from ayon_core.pipeline.publish import (
|
||||||
get_plugin_settings,
|
get_plugin_settings,
|
||||||
apply_plugin_settings_automatically
|
apply_plugin_settings_automatically
|
||||||
)
|
)
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectLocalRenderInstances(pyblish.api.InstancePlugin):
|
class CollectLocalRenderInstances(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect instances for local render.
|
"""Collect instances for local render.
|
||||||
|
|
||||||
Agnostic Local Render Collector.
|
Agnostic Local Render Collector.
|
||||||
|
|
@ -22,11 +23,8 @@ class CollectLocalRenderInstances(pyblish.api.InstancePlugin):
|
||||||
"arnold_rop",
|
"arnold_rop",
|
||||||
"vray_rop"]
|
"vray_rop"]
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Collect local render instances"
|
label = "Collect local render instances"
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
use_deadline_aov_filter = False
|
use_deadline_aov_filter = False
|
||||||
aov_filter = {"host_name": "houdini",
|
aov_filter = {"host_name": "houdini",
|
||||||
"value": [".*([Bb]eauty).*"]}
|
"value": [".*([Bb]eauty).*"]}
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@ from ayon_houdini.api.lib import (
|
||||||
get_color_management_preferences
|
get_color_management_preferences
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import (
|
from ayon_houdini.api import (
|
||||||
colorspace
|
colorspace,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin):
|
class CollectMantraROPRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Mantra Render Products
|
"""Collect Mantra Render Products
|
||||||
|
|
||||||
Collects the instance.data["files"] for the render products.
|
Collects the instance.data["files"] for the render products.
|
||||||
|
|
@ -27,7 +28,6 @@ class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin):
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectFrames
|
# this plugin runs after CollectFrames
|
||||||
order = pyblish.api.CollectorOrder + 0.11
|
order = pyblish.api.CollectorOrder + 0.11
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["mantra_rop"]
|
families = ["mantra_rop"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline.publish import KnownPublishError
|
from ayon_core.pipeline.publish import KnownPublishError
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectOutputSOPPath(pyblish.api.InstancePlugin):
|
class CollectOutputSOPPath(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect the out node's SOP/COP Path value."""
|
"""Collect the out node's SOP/COP Path value."""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
|
|
@ -19,7 +19,6 @@ class CollectOutputSOPPath(pyblish.api.InstancePlugin):
|
||||||
"model"
|
"model"
|
||||||
]
|
]
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Collect Output Node Path"
|
label = "Collect Output Node Path"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@ from ayon_houdini.api.lib import (
|
||||||
get_color_management_preferences
|
get_color_management_preferences
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import (
|
from ayon_houdini.api import (
|
||||||
colorspace
|
colorspace,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin):
|
class CollectRedshiftROPRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect USD Render Products
|
"""Collect USD Render Products
|
||||||
|
|
||||||
Collects the instance.data["files"] for the render products.
|
Collects the instance.data["files"] for the render products.
|
||||||
|
|
@ -27,7 +28,6 @@ class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin):
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectFrames
|
# this plugin runs after CollectFrames
|
||||||
order = pyblish.api.CollectorOrder + 0.11
|
order = pyblish.api.CollectorOrder + 0.11
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["redshift_rop"]
|
families = ["redshift_rop"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
import hou
|
|
||||||
from ayon_core.pipeline.publish import RepairAction
|
from ayon_core.pipeline.publish import RepairAction
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectRemotePublishSettings(pyblish.api.ContextPlugin):
|
class CollectRemotePublishSettings(plugin.HoudiniContextPlugin):
|
||||||
"""Collect custom settings of the Remote Publish node."""
|
"""Collect custom settings of the Remote Publish node."""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
families = ["*"]
|
families = ["*"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["deadline"]
|
targets = ["deadline"]
|
||||||
label = "Remote Publish Submission Settings"
|
label = "Remote Publish Submission Settings"
|
||||||
actions = [RepairAction]
|
actions = [RepairAction]
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import hou
|
||||||
import pxr.UsdRender
|
import pxr.UsdRender
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
def get_var_changed(variable=None):
|
def get_var_changed(variable=None):
|
||||||
|
|
@ -41,12 +42,11 @@ def get_var_changed(variable=None):
|
||||||
return changed
|
return changed
|
||||||
|
|
||||||
|
|
||||||
class CollectRenderProducts(pyblish.api.InstancePlugin):
|
class CollectRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect USD Render Products."""
|
"""Collect USD Render Products."""
|
||||||
|
|
||||||
label = "Collect Render Products"
|
label = "Collect Render Products"
|
||||||
order = pyblish.api.CollectorOrder + 0.4
|
order = pyblish.api.CollectorOrder + 0.4
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usdrender"]
|
families = ["usdrender"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import hou
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectHoudiniReviewData(pyblish.api.InstancePlugin):
|
class CollectHoudiniReviewData(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Review Data."""
|
"""Collect Review Data."""
|
||||||
|
|
||||||
label = "Collect Review Data"
|
label = "Collect Review Data"
|
||||||
|
|
@ -10,7 +11,6 @@ class CollectHoudiniReviewData(pyblish.api.InstancePlugin):
|
||||||
# this plugin runs after CollectRopFrameRange
|
# this plugin runs after CollectRopFrameRange
|
||||||
# Also after CollectLocalRenderInstances
|
# Also after CollectLocalRenderInstances
|
||||||
order = pyblish.api.CollectorOrder + 0.13
|
order = pyblish.api.CollectorOrder + 0.13
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["review"]
|
families = ["review"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectReviewableInstances(pyblish.api.InstancePlugin):
|
class CollectReviewableInstances(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Reviewable Instances.
|
"""Collect Reviewable Instances.
|
||||||
|
|
||||||
Basically, all instances of the specified families
|
Basically, all instances of the specified families
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,12 @@
|
||||||
"""Collector plugin for frames data on ROP instances."""
|
"""Collector plugin for frames data on ROP instances."""
|
||||||
import hou # noqa
|
import hou # noqa
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectRopFrameRange(pyblish.api.InstancePlugin):
|
class CollectRopFrameRange(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect all frames which would be saved from the ROP nodes"""
|
"""Collect all frames which would be saved from the ROP nodes"""
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
label = "Collect RopNode Frame Range"
|
label = "Collect RopNode Frame Range"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
"""Collector for staticMesh types. """
|
"""Collector for staticMesh types. """
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectStaticMeshType(pyblish.api.InstancePlugin):
|
class CollectStaticMeshType(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect data type for fbx instance."""
|
"""Collect data type for fbx instance."""
|
||||||
|
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["staticMesh"]
|
families = ["staticMesh"]
|
||||||
label = "Collect type of staticMesh"
|
label = "Collect type of staticMesh"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
import ayon_api
|
import ayon_api
|
||||||
|
|
||||||
from ayon_core.pipeline import usdlib, KnownPublishError
|
from ayon_core.pipeline import usdlib, KnownPublishError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class CollectUsdBootstrap(pyblish.api.InstancePlugin):
|
class CollectUsdBootstrap(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect special Asset/Shot bootstrap instances if those are needed.
|
"""Collect special Asset/Shot bootstrap instances if those are needed.
|
||||||
|
|
||||||
Some specific products are intended to be part of the default structure
|
Some specific products are intended to be part of the default structure
|
||||||
|
|
@ -21,7 +21,6 @@ class CollectUsdBootstrap(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder + 0.35
|
order = pyblish.api.CollectorOrder + 0.35
|
||||||
label = "Collect USD Bootstrap"
|
label = "Collect USD Bootstrap"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usd", "usd.layered"]
|
families = ["usd", "usd.layered"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,15 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
import ayon_houdini.api.usd as usdlib
|
import ayon_houdini.api.usd as usdlib
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class CollectUsdLayers(plugin.HoudiniInstancePlugin):
|
||||||
class CollectUsdLayers(pyblish.api.InstancePlugin):
|
|
||||||
"""Collect the USD Layers that have configured save paths."""
|
"""Collect the USD Layers that have configured save paths."""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder + 0.35
|
order = pyblish.api.CollectorOrder + 0.35
|
||||||
label = "Collect USD Layers"
|
label = "Collect USD Layers"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usd"]
|
families = ["usd"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@ from ayon_houdini.api.lib import (
|
||||||
get_color_management_preferences
|
get_color_management_preferences
|
||||||
)
|
)
|
||||||
from ayon_houdini.api import (
|
from ayon_houdini.api import (
|
||||||
colorspace
|
colorspace,
|
||||||
|
plugin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin):
|
class CollectVrayROPRenderProducts(plugin.HoudiniInstancePlugin):
|
||||||
"""Collect Vray Render Products
|
"""Collect Vray Render Products
|
||||||
|
|
||||||
Collects the instance.data["files"] for the render products.
|
Collects the instance.data["files"] for the render products.
|
||||||
|
|
@ -27,7 +28,6 @@ class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin):
|
||||||
# This specific order value is used so that
|
# This specific order value is used so that
|
||||||
# this plugin runs after CollectFrames
|
# this plugin runs after CollectFrames
|
||||||
order = pyblish.api.CollectorOrder + 0.11
|
order = pyblish.api.CollectorOrder + 0.11
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["vray_rop"]
|
families = ["vray_rop"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
class CollectWorkfile(plugin.HoudiniInstancePlugin):
|
||||||
class CollectWorkfile(pyblish.api.InstancePlugin):
|
|
||||||
"""Inject workfile representation into instance"""
|
"""Inject workfile representation into instance"""
|
||||||
|
|
||||||
order = pyblish.api.CollectorOrder - 0.01
|
order = pyblish.api.CollectorOrder - 0.01
|
||||||
label = "Houdini Workfile Data"
|
label = "Houdini Workfile Data"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["workfile"]
|
families = ["workfile"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class CollectWorksceneFPS(pyblish.api.ContextPlugin):
|
class CollectWorksceneFPS(plugin.HoudiniContextPlugin):
|
||||||
"""Get the FPS of the work scene."""
|
"""Get the FPS of the work scene."""
|
||||||
|
|
||||||
label = "Workscene FPS"
|
label = "Workscene FPS"
|
||||||
order = pyblish.api.CollectorOrder
|
order = pyblish.api.CollectorOrder
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, context):
|
def process(self, context):
|
||||||
fps = hou.fps()
|
fps = hou.fps()
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import pyblish.api
|
|
||||||
import tempfile
|
import tempfile
|
||||||
from ayon_core.pipeline import publish
|
import pyblish.api
|
||||||
from ayon_houdini.api import lib
|
from ayon_houdini.api import lib, plugin
|
||||||
from ayon_houdini.api.pipeline import IS_HEADLESS
|
from ayon_houdini.api.pipeline import IS_HEADLESS
|
||||||
|
|
||||||
|
|
||||||
class ExtractActiveViewThumbnail(publish.Extractor):
|
class ExtractActiveViewThumbnail(plugin.HoudiniExtractorPlugin):
|
||||||
"""Set instance thumbnail to a screengrab of current active viewport.
|
"""Set instance thumbnail to a screengrab of current active viewport.
|
||||||
|
|
||||||
This makes it so that if an instance does not have a thumbnail set yet that
|
This makes it so that if an instance does not have a thumbnail set yet that
|
||||||
|
|
@ -16,7 +15,6 @@ class ExtractActiveViewThumbnail(publish.Extractor):
|
||||||
order = pyblish.api.ExtractorOrder + 0.49
|
order = pyblish.api.ExtractorOrder + 0.49
|
||||||
label = "Extract Active View Thumbnail"
|
label = "Extract Active View Thumbnail"
|
||||||
families = ["workfile"]
|
families = ["workfile"]
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
if IS_HEADLESS:
|
if IS_HEADLESS:
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractAlembic(plugin.HoudiniExtractorPlugin):
|
||||||
class ExtractAlembic(publish.Extractor):
|
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract Alembic"
|
label = "Extract Alembic"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["abc", "camera"]
|
families = ["abc", "camera"]
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,17 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractAss(plugin.HoudiniExtractorPlugin):
|
||||||
class ExtractAss(publish.Extractor):
|
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder + 0.1
|
order = pyblish.api.ExtractorOrder + 0.1
|
||||||
label = "Extract Ass"
|
label = "Extract Ass"
|
||||||
families = ["ass"]
|
families = ["ass"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import lib, plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
|
||||||
from ayon_houdini.api import lib
|
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
|
||||||
class ExtractBGEO(publish.Extractor):
|
class ExtractBGEO(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract BGEO"
|
label = "Extract BGEO"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["bgeo"]
|
families = ["bgeo"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
@ -32,7 +28,7 @@ class ExtractBGEO(publish.Extractor):
|
||||||
file_name, staging_dir))
|
file_name, staging_dir))
|
||||||
|
|
||||||
# write files
|
# write files
|
||||||
render_rop(ropnode)
|
lib.render_rop(ropnode)
|
||||||
|
|
||||||
output = instance.data["frames"]
|
output = instance.data["frames"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,17 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_core.pipeline import publish
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop, splitext
|
from ayon_houdini.api.lib import render_rop, splitext
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractComposite(plugin.HoudiniExtractorPlugin,
|
||||||
class ExtractComposite(publish.Extractor,
|
|
||||||
publish.ColormanagedPyblishPluginMixin):
|
publish.ColormanagedPyblishPluginMixin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract Composite (Image Sequence)"
|
label = "Extract Composite (Image Sequence)"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["imagesequence"]
|
families = ["imagesequence"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,16 @@
|
||||||
"""Fbx Extractor for houdini. """
|
"""Fbx Extractor for houdini. """
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractFBX(plugin.HoudiniExtractorPlugin):
|
||||||
class ExtractFBX(publish.Extractor):
|
|
||||||
|
|
||||||
label = "Extract FBX"
|
label = "Extract FBX"
|
||||||
families = ["fbx"]
|
families = ["fbx"]
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder + 0.1
|
order = pyblish.api.ExtractorOrder + 0.1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
import pyblish.api
|
|
||||||
from ayon_core.pipeline import publish
|
|
||||||
import hou
|
import hou
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class ExtractHDA(publish.Extractor):
|
class ExtractHDA(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract HDA"
|
label = "Extract HDA"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["hda"]
|
families = ["hda"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,15 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
|
||||||
class ExtractMantraIFD(publish.Extractor):
|
class ExtractMantraIFD(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract Mantra ifd"
|
label = "Extract Mantra ifd"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["mantraifd"]
|
families = ["mantraifd"]
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_core.pipeline import publish
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractOpenGL(plugin.HoudiniExtractorPlugin,
|
||||||
class ExtractOpenGL(publish.Extractor,
|
|
||||||
publish.ColormanagedPyblishPluginMixin):
|
publish.ColormanagedPyblishPluginMixin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder - 0.01
|
order = pyblish.api.ExtractorOrder - 0.01
|
||||||
label = "Extract OpenGL"
|
label = "Extract OpenGL"
|
||||||
families = ["review"]
|
families = ["review"]
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
ropnode = hou.node(instance.data.get("instance_node"))
|
ropnode = hou.node(instance.data.get("instance_node"))
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,17 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractRedshiftProxy(plugin.HoudiniExtractorPlugin):
|
||||||
class ExtractRedshiftProxy(publish.Extractor):
|
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder + 0.1
|
order = pyblish.api.ExtractorOrder + 0.1
|
||||||
label = "Extract Redshift Proxy"
|
label = "Extract Redshift Proxy"
|
||||||
families = ["redshiftproxy"]
|
families = ["redshiftproxy"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["local", "remote"]
|
targets = ["local", "remote"]
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
import hou
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
class ExtractRender(publish.Extractor):
|
class ExtractRender(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract Render"
|
label = "Extract Render"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["mantra_rop",
|
families = ["mantra_rop",
|
||||||
"karma_rop",
|
"karma_rop",
|
||||||
"redshift_rop",
|
"redshift_rop",
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
class ExtractUSD(publish.Extractor):
|
class ExtractUSD(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract USD"
|
label = "Extract USD"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usd",
|
families = ["usd",
|
||||||
"usdModel",
|
"usdModel",
|
||||||
"usdSetDress"]
|
"usdSetDress"]
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,8 @@ import hou
|
||||||
import ayon_api
|
import ayon_api
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import get_representation_path
|
||||||
get_representation_path,
|
from ayon_houdini.api import plugin
|
||||||
publish,
|
|
||||||
)
|
|
||||||
import ayon_houdini.api.usd as hou_usdlib
|
import ayon_houdini.api.usd as hou_usdlib
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
|
|
@ -154,11 +152,10 @@ def parm_values(overrides):
|
||||||
parm.set(value)
|
parm.set(value)
|
||||||
|
|
||||||
|
|
||||||
class ExtractUSDLayered(publish.Extractor):
|
class ExtractUSDLayered(plugin.HoudiniExtractorPlugin):
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder
|
order = pyblish.api.ExtractorOrder
|
||||||
label = "Extract Layered USD"
|
label = "Extract Layered USD"
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usdLayered", "usdShade"]
|
families = ["usdLayered", "usdShade"]
|
||||||
|
|
||||||
# Force Output Processors so it will always save any file
|
# Force Output Processors so it will always save any file
|
||||||
|
|
@ -312,3 +309,14 @@ class ExtractUSDLayered(publish.Extractor):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return filecmp.cmp(old_file, new_file)
|
return filecmp.cmp(old_file, new_file)
|
||||||
|
|
||||||
|
def staging_dir(self, instance):
|
||||||
|
"""Provide a temporary directory in which to store extracted files
|
||||||
|
|
||||||
|
Upon calling this method the staging directory is stored inside
|
||||||
|
the instance.data['stagingDir']
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ayon_core.pipeline.publish import get_instance_staging_dir
|
||||||
|
|
||||||
|
return get_instance_staging_dir(instance)
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,17 @@
|
||||||
import os
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import publish
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import render_rop
|
from ayon_houdini.api.lib import render_rop
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ExtractVDBCache(plugin.HoudiniExtractorPlugin):
|
||||||
class ExtractVDBCache(publish.Extractor):
|
|
||||||
|
|
||||||
order = pyblish.api.ExtractorOrder + 0.1
|
order = pyblish.api.ExtractorOrder + 0.1
|
||||||
label = "Extract VDB Cache"
|
label = "Extract VDB Cache"
|
||||||
families = ["vdbcache"]
|
families = ["vdbcache"]
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
if instance.data.get("farm"):
|
if instance.data.get("farm"):
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,15 @@ import pyblish.api
|
||||||
|
|
||||||
from ayon_core.lib import version_up
|
from ayon_core.lib import version_up
|
||||||
from ayon_core.pipeline import registered_host
|
from ayon_core.pipeline import registered_host
|
||||||
from ayon_core.pipeline.publish import get_errored_plugins_from_context
|
from ayon_core.pipeline.publish import (
|
||||||
from ayon_core.pipeline.publish import KnownPublishError
|
get_errored_plugins_from_context,
|
||||||
|
KnownPublishError
|
||||||
|
)
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class IncrementCurrentFile(pyblish.api.ContextPlugin):
|
class IncrementCurrentFile(plugin.HoudiniContextPlugin):
|
||||||
"""Increment the current file.
|
"""Increment the current file.
|
||||||
|
|
||||||
Saves the current scene with an increased version number.
|
Saves the current scene with an increased version number.
|
||||||
|
|
@ -15,7 +19,6 @@ class IncrementCurrentFile(pyblish.api.ContextPlugin):
|
||||||
|
|
||||||
label = "Increment current file"
|
label = "Increment current file"
|
||||||
order = pyblish.api.IntegratorOrder + 9.0
|
order = pyblish.api.IntegratorOrder + 9.0
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["workfile",
|
families = ["workfile",
|
||||||
"usdrender",
|
"usdrender",
|
||||||
"mantra_rop",
|
"mantra_rop",
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,14 @@ import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import registered_host
|
from ayon_core.pipeline import registered_host
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class SaveCurrentScene(pyblish.api.ContextPlugin):
|
|
||||||
|
class SaveCurrentScene(plugin.HoudiniContextPlugin):
|
||||||
"""Save current scene"""
|
"""Save current scene"""
|
||||||
|
|
||||||
label = "Save current file"
|
label = "Save current file"
|
||||||
order = pyblish.api.ExtractorOrder - 0.49
|
order = pyblish.api.ExtractorOrder - 0.49
|
||||||
hosts = ["houdini"]
|
|
||||||
|
|
||||||
def process(self, context):
|
def process(self, context):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateAbcPrimitiveToDetail(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate Alembic ROP Primitive to Detail attribute is consistent.
|
"""Validate Alembic ROP Primitive to Detail attribute is consistent.
|
||||||
|
|
||||||
The Alembic ROP crashes Houdini whenever an attribute in the "Primitive to
|
The Alembic ROP crashes Houdini whenever an attribute in the "Primitive to
|
||||||
|
|
@ -18,7 +20,6 @@ class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder + 0.1
|
order = pyblish.api.ValidatorOrder + 0.1
|
||||||
families = ["abc"]
|
families = ["abc"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Primitive to Detail (Abc)"
|
label = "Validate Primitive to Detail (Abc)"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateAlembicROPFaceSets(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate Face Sets are disabled for extraction to pointcache.
|
"""Validate Face Sets are disabled for extraction to pointcache.
|
||||||
|
|
||||||
When groups are saved as Face Sets with the Alembic these show up
|
When groups are saved as Face Sets with the Alembic these show up
|
||||||
|
|
@ -19,7 +21,6 @@ class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder + 0.1
|
order = pyblish.api.ValidatorOrder + 0.1
|
||||||
families = ["abc"]
|
families = ["abc"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Alembic ROP Face Sets"
|
label = "Validate Alembic ROP Face Sets"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import hou
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
import hou
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class ValidateAlembicInputNode(pyblish.api.InstancePlugin):
|
class ValidateAlembicInputNode(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate that the node connected to the output is correct.
|
"""Validate that the node connected to the output is correct.
|
||||||
|
|
||||||
The connected node cannot be of the following types for Alembic:
|
The connected node cannot be of the following types for Alembic:
|
||||||
|
|
@ -15,7 +17,6 @@ class ValidateAlembicInputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder + 0.1
|
order = pyblish.api.ValidatorOrder + 0.1
|
||||||
families = ["abc"]
|
families = ["abc"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Input Node (Abc)"
|
label = "Validate Input Node (Abc)"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
from ayon_core.pipeline.publish import PublishValidationError
|
|
||||||
from ayon_houdini.api import lib
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline.publish import PublishValidationError
|
||||||
|
|
||||||
class ValidateAnimationSettings(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateAnimationSettings(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate if the unexpanded string contains the frame ('$F') token
|
"""Validate if the unexpanded string contains the frame ('$F') token
|
||||||
|
|
||||||
This validator will only check the output parameter of the node if
|
This validator will only check the output parameter of the node if
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
import hou
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateBypassed(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateBypassed(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate all primitives build hierarchy from attribute when enabled.
|
"""Validate all primitives build hierarchy from attribute when enabled.
|
||||||
|
|
||||||
The name of the attribute must exist on the prims and have the same name
|
The name of the attribute must exist on the prims and have the same name
|
||||||
|
|
@ -15,7 +18,6 @@ class ValidateBypassed(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder - 0.1
|
order = pyblish.api.ValidatorOrder - 0.1
|
||||||
families = ["*"]
|
families = ["*"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate ROP Bypass"
|
label = "Validate ROP Bypass"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,14 @@
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateCameraROP(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateCameraROP(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate Camera ROP settings."""
|
"""Validate Camera ROP settings."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["camera"]
|
families = ["camera"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Camera ROP"
|
label = "Camera ROP"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import hou
|
import hou
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateCopOutputNode(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateCopOutputNode(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the instance COP Output Node.
|
"""Validate the instance COP Output Node.
|
||||||
|
|
||||||
This will ensure:
|
This will ensure:
|
||||||
|
|
@ -17,7 +19,6 @@ class ValidateCopOutputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["imagesequence"]
|
families = ["imagesequence"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate COP Output Node"
|
label = "Validate COP Output Node"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ class ValidateSingleFrame(pyblish.api.InstancePlugin,
|
||||||
"""
|
"""
|
||||||
|
|
||||||
families = ["model"]
|
families = ["model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Single Frame"
|
label = "Validate Single Frame"
|
||||||
order = ValidateContentsOrder + 0.1
|
order = ValidateContentsOrder + 0.1
|
||||||
actions = [SelectInvalidAction]
|
actions = [SelectInvalidAction]
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,12 @@ from ayon_houdini.api.action import (
|
||||||
SelectInvalidAction,
|
SelectInvalidAction,
|
||||||
SelectROPAction,
|
SelectROPAction,
|
||||||
)
|
)
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.lib import get_obj_node_output
|
from ayon_houdini.api.lib import get_obj_node_output
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
|
||||||
class ValidateFBXOutputNode(pyblish.api.InstancePlugin):
|
class ValidateFBXOutputNode(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the instance Output Node.
|
"""Validate the instance Output Node.
|
||||||
|
|
||||||
This will ensure:
|
This will ensure:
|
||||||
|
|
@ -22,7 +23,6 @@ class ValidateFBXOutputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["fbx"]
|
families = ["fbx"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate FBX Output Node"
|
label = "Validate FBX Output Node"
|
||||||
actions = [SelectROPAction, SelectInvalidAction]
|
actions = [SelectROPAction, SelectInvalidAction]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
from ayon_houdini.api import lib
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
|
||||||
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
class ValidateFileExtension(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateFileExtension(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the output file extension fits the output family.
|
"""Validate the output file extension fits the output family.
|
||||||
|
|
||||||
File extensions:
|
File extensions:
|
||||||
|
|
@ -20,7 +20,6 @@ class ValidateFileExtension(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["camera", "vdbcache"]
|
families = ["camera", "vdbcache"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Output File Extension"
|
label = "Output File Extension"
|
||||||
|
|
||||||
family_extensions = {
|
family_extensions = {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
from ayon_core.pipeline.publish import RepairAction
|
from ayon_core.pipeline.publish import RepairAction
|
||||||
from ayon_houdini.api.action import SelectInvalidAction
|
|
||||||
|
|
||||||
import hou
|
from ayon_houdini.api.action import SelectInvalidAction
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DisableUseFolderHandlesAction(RepairAction):
|
class DisableUseFolderHandlesAction(RepairAction):
|
||||||
|
|
@ -12,7 +15,7 @@ class DisableUseFolderHandlesAction(RepairAction):
|
||||||
icon = "mdi.toggle-switch-off"
|
icon = "mdi.toggle-switch-off"
|
||||||
|
|
||||||
|
|
||||||
class ValidateFrameRange(pyblish.api.InstancePlugin):
|
class ValidateFrameRange(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate Frame Range.
|
"""Validate Frame Range.
|
||||||
|
|
||||||
Due to the usage of start and end handles,
|
Due to the usage of start and end handles,
|
||||||
|
|
@ -21,7 +24,6 @@ class ValidateFrameRange(pyblish.api.InstancePlugin):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder - 0.1
|
order = pyblish.api.ValidatorOrder - 0.1
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Frame Range"
|
label = "Validate Frame Range"
|
||||||
actions = [DisableUseFolderHandlesAction, SelectInvalidAction]
|
actions = [DisableUseFolderHandlesAction, SelectInvalidAction]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
from ayon_houdini.api import lib
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
|
||||||
class ValidateFrameToken(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateFrameToken(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate if the unexpanded string contains the frame ('$F') token.
|
"""Validate if the unexpanded string contains the frame ('$F') token.
|
||||||
|
|
||||||
This validator will *only* check the output parameter of the node if
|
This validator will *only* check the output parameter of the node if
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
class ValidateHoudiniNotApprenticeLicense(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateHoudiniNotApprenticeLicense(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the Houdini instance runs a non Apprentice license.
|
"""Validate the Houdini instance runs a non Apprentice license.
|
||||||
|
|
||||||
USD ROPs:
|
USD ROPs:
|
||||||
|
|
@ -21,7 +24,6 @@ class ValidateHoudiniNotApprenticeLicense(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usd", "abc", "fbx", "camera"]
|
families = ["usd", "abc", "fbx", "camera"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Houdini Apprentice License"
|
label = "Houdini Apprentice License"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Validate if instance asset is the same as context asset."""
|
"""Validate if instance asset is the same as context asset."""
|
||||||
|
|
||||||
import pyblish.api
|
|
||||||
from ayon_houdini.api.action import SelectROPAction
|
|
||||||
from ayon_core.pipeline.publish import (
|
from ayon_core.pipeline.publish import (
|
||||||
RepairAction,
|
RepairAction,
|
||||||
ValidateContentsOrder,
|
ValidateContentsOrder,
|
||||||
|
|
@ -10,8 +7,11 @@ from ayon_core.pipeline.publish import (
|
||||||
OptionalPyblishPluginMixin
|
OptionalPyblishPluginMixin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
from ayon_houdini.api.action import SelectROPAction
|
||||||
|
|
||||||
class ValidateInstanceInContextHoudini(pyblish.api.InstancePlugin,
|
|
||||||
|
class ValidateInstanceInContextHoudini(plugin.HoudiniInstancePlugin,
|
||||||
OptionalPyblishPluginMixin):
|
OptionalPyblishPluginMixin):
|
||||||
"""Validator to check if instance asset match context asset.
|
"""Validator to check if instance asset match context asset.
|
||||||
|
|
||||||
|
|
@ -24,11 +24,8 @@ class ValidateInstanceInContextHoudini(pyblish.api.InstancePlugin,
|
||||||
order = ValidateContentsOrder
|
order = ValidateContentsOrder
|
||||||
label = "Instance in same Context"
|
label = "Instance in same Context"
|
||||||
optional = True
|
optional = True
|
||||||
hosts = ["houdini"]
|
|
||||||
actions = [SelectROPAction, RepairAction]
|
actions = [SelectROPAction, RepairAction]
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
if not self.is_active(instance.data):
|
if not self.is_active(instance.data):
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Validator for correct naming of Static Meshes."""
|
"""Validator for correct naming of Static Meshes."""
|
||||||
import pyblish.api
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
OptionalPyblishPluginMixin
|
OptionalPyblishPluginMixin
|
||||||
)
|
)
|
||||||
from ayon_core.pipeline.publish import ValidateContentsOrder
|
from ayon_core.pipeline.publish import ValidateContentsOrder
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.action import SelectInvalidAction
|
from ayon_houdini.api.action import SelectInvalidAction
|
||||||
from ayon_houdini.api.lib import get_output_children
|
from ayon_houdini.api.lib import get_output_children
|
||||||
|
|
||||||
|
|
||||||
class ValidateMeshIsStatic(pyblish.api.InstancePlugin,
|
class ValidateMeshIsStatic(plugin.HoudiniInstancePlugin,
|
||||||
OptionalPyblishPluginMixin):
|
OptionalPyblishPluginMixin):
|
||||||
"""Validate mesh is static.
|
"""Validate mesh is static.
|
||||||
|
|
||||||
|
|
@ -23,13 +23,10 @@ class ValidateMeshIsStatic(pyblish.api.InstancePlugin,
|
||||||
|
|
||||||
families = ["staticMesh",
|
families = ["staticMesh",
|
||||||
"model"]
|
"model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Mesh is Static"
|
label = "Validate Mesh is Static"
|
||||||
order = ValidateContentsOrder + 0.1
|
order = ValidateContentsOrder + 0.1
|
||||||
actions = [SelectInvalidAction]
|
actions = [SelectInvalidAction]
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
||||||
invalid = self.get_invalid(instance)
|
invalid = self.get_invalid(instance)
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateIntermediateDirectoriesChecked(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateIntermediateDirectoriesChecked(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate Create Intermediate Directories is enabled on ROP node."""
|
"""Validate Create Intermediate Directories is enabled on ROP node."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["pointcache", "camera", "vdbcache", "model"]
|
families = ["pointcache", "camera", "vdbcache", "model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Create Intermediate Directories Checked"
|
label = "Create Intermediate Directories Checked"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
def cook_in_range(node, start, end):
|
def cook_in_range(node, start, end):
|
||||||
current = hou.intFrame()
|
current = hou.intFrame()
|
||||||
|
|
@ -26,11 +29,10 @@ def get_errors(node):
|
||||||
return node.errors()
|
return node.errors()
|
||||||
|
|
||||||
|
|
||||||
class ValidateNoErrors(pyblish.api.InstancePlugin):
|
class ValidateNoErrors(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the Instance has no current cooking errors."""
|
"""Validate the Instance has no current cooking errors."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate no errors"
|
label = "Validate no errors"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
import hou
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
from ayon_core.pipeline.publish import (
|
from ayon_core.pipeline.publish import (
|
||||||
ValidateContentsOrder,
|
ValidateContentsOrder,
|
||||||
RepairAction,
|
RepairAction,
|
||||||
)
|
)
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
|
||||||
class AddDefaultPathAction(RepairAction):
|
class AddDefaultPathAction(RepairAction):
|
||||||
label = "Add a default path attribute"
|
label = "Add a default path attribute"
|
||||||
icon = "mdi.pencil-plus-outline"
|
icon = "mdi.pencil-plus-outline"
|
||||||
|
|
||||||
|
|
||||||
class ValidatePrimitiveHierarchyPaths(pyblish.api.InstancePlugin):
|
class ValidatePrimitiveHierarchyPaths(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate all primitives build hierarchy from attribute when enabled.
|
"""Validate all primitives build hierarchy from attribute when enabled.
|
||||||
|
|
||||||
The name of the attribute must exist on the prims and have the same name
|
The name of the attribute must exist on the prims and have the same name
|
||||||
|
|
@ -25,7 +25,6 @@ class ValidatePrimitiveHierarchyPaths(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = ValidateContentsOrder + 0.1
|
order = ValidateContentsOrder + 0.1
|
||||||
families = ["abc"]
|
families = ["abc"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Prims Hierarchy Path"
|
label = "Validate Prims Hierarchy Path"
|
||||||
actions = [AddDefaultPathAction]
|
actions = [AddDefaultPathAction]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
# -*-coding: utf-8 -*-
|
# -*-coding: utf-8 -*-
|
||||||
import pyblish.api
|
import hou
|
||||||
|
|
||||||
from ayon_houdini.api import lib
|
import pyblish.api
|
||||||
from ayon_core.pipeline.publish import RepairContextAction
|
from ayon_core.pipeline.publish import RepairContextAction
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
import hou
|
from ayon_houdini.api import lib, plugin
|
||||||
|
|
||||||
|
|
||||||
class ValidateRemotePublishOutNode(pyblish.api.ContextPlugin):
|
class ValidateRemotePublishOutNode(plugin.HoudiniContextPlugin):
|
||||||
"""Validate the remote publish out node exists for Deadline to trigger."""
|
"""Validate the remote publish out node exists for Deadline to trigger."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder - 0.4
|
order = pyblish.api.ValidatorOrder - 0.4
|
||||||
families = ["*"]
|
families = ["*"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["deadline"]
|
targets = ["deadline"]
|
||||||
label = "Remote Publish ROP node"
|
label = "Remote Publish ROP node"
|
||||||
actions = [RepairContextAction]
|
actions = [RepairContextAction]
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,18 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline.publish import RepairContextAction
|
from ayon_core.pipeline.publish import RepairContextAction
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateRemotePublishEnabled(pyblish.api.ContextPlugin):
|
|
||||||
|
class ValidateRemotePublishEnabled(plugin.HoudiniContextPlugin):
|
||||||
"""Validate the remote publish node is *not* bypassed."""
|
"""Validate the remote publish node is *not* bypassed."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder - 0.39
|
order = pyblish.api.ValidatorOrder - 0.39
|
||||||
families = ["*"]
|
families = ["*"]
|
||||||
hosts = ["houdini"]
|
|
||||||
targets = ["deadline"]
|
targets = ["deadline"]
|
||||||
label = "Remote Publish ROP enabled"
|
label = "Remote Publish ROP enabled"
|
||||||
actions = [RepairContextAction]
|
actions = [RepairContextAction]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
|
|
@ -9,10 +12,9 @@ from ayon_core.pipeline.publish import (
|
||||||
get_plugin_settings,
|
get_plugin_settings,
|
||||||
apply_plugin_settings_automatically
|
apply_plugin_settings_automatically
|
||||||
)
|
)
|
||||||
from ayon_houdini.api.action import SelectROPAction
|
|
||||||
|
|
||||||
import os
|
from ayon_houdini.api import plugin
|
||||||
import hou
|
from ayon_houdini.api.action import SelectROPAction
|
||||||
|
|
||||||
|
|
||||||
class ResetViewSpaceAction(RepairAction):
|
class ResetViewSpaceAction(RepairAction):
|
||||||
|
|
@ -20,7 +22,7 @@ class ResetViewSpaceAction(RepairAction):
|
||||||
icon = "mdi.monitor"
|
icon = "mdi.monitor"
|
||||||
|
|
||||||
|
|
||||||
class ValidateReviewColorspace(pyblish.api.InstancePlugin,
|
class ValidateReviewColorspace(plugin.HoudiniInstancePlugin,
|
||||||
OptionalPyblishPluginMixin):
|
OptionalPyblishPluginMixin):
|
||||||
"""Validate Review Colorspace parameters.
|
"""Validate Review Colorspace parameters.
|
||||||
|
|
||||||
|
|
@ -29,15 +31,12 @@ class ValidateReviewColorspace(pyblish.api.InstancePlugin,
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder + 0.1
|
order = pyblish.api.ValidatorOrder + 0.1
|
||||||
families = ["review"]
|
families = ["review"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Review Colorspace"
|
label = "Validate Review Colorspace"
|
||||||
actions = [ResetViewSpaceAction, SelectROPAction]
|
actions = [ResetViewSpaceAction, SelectROPAction]
|
||||||
|
|
||||||
optional = True
|
optional = True
|
||||||
review_color_space = ""
|
review_color_space = ""
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def apply_settings(cls, project_settings):
|
def apply_settings(cls, project_settings):
|
||||||
# Preserve automatic settings applying logic
|
# Preserve automatic settings applying logic
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
class ValidateSceneReview(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateSceneReview(plugin.HoudiniInstancePlugin):
|
||||||
"""Validator Some Scene Settings before publishing the review
|
"""Validator Some Scene Settings before publishing the review
|
||||||
1. Scene Path
|
1. Scene Path
|
||||||
2. Resolution
|
2. Resolution
|
||||||
|
|
@ -12,7 +15,6 @@ class ValidateSceneReview(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["review"]
|
families = ["review"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Scene Setting for review"
|
label = "Scene Setting for review"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.action import (
|
from ayon_houdini.api.action import (
|
||||||
SelectInvalidAction,
|
SelectInvalidAction,
|
||||||
SelectROPAction,
|
SelectROPAction,
|
||||||
)
|
)
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ValidateSopOutputNode(plugin.HoudiniInstancePlugin):
|
||||||
class ValidateSopOutputNode(pyblish.api.InstancePlugin):
|
|
||||||
"""Validate the instance SOP Output Node.
|
"""Validate the instance SOP Output Node.
|
||||||
|
|
||||||
This will ensure:
|
This will ensure:
|
||||||
|
|
@ -23,7 +25,6 @@ class ValidateSopOutputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["pointcache", "vdbcache", "model"]
|
families = ["pointcache", "vdbcache", "model"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Output Node (SOP)"
|
label = "Validate Output Node (SOP)"
|
||||||
actions = [SelectROPAction, SelectInvalidAction]
|
actions = [SelectROPAction, SelectInvalidAction]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Validator for correct naming of Static Meshes."""
|
"""Validator for correct naming of Static Meshes."""
|
||||||
import pyblish.api
|
import hou
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
OptionalPyblishPluginMixin
|
OptionalPyblishPluginMixin
|
||||||
|
|
@ -9,30 +10,28 @@ from ayon_core.pipeline.publish import (
|
||||||
ValidateContentsOrder,
|
ValidateContentsOrder,
|
||||||
RepairAction,
|
RepairAction,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.action import SelectInvalidAction
|
from ayon_houdini.api.action import SelectInvalidAction
|
||||||
from ayon_core.pipeline.create import get_product_name
|
from ayon_core.pipeline.create import get_product_name
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
|
||||||
class FixProductNameAction(RepairAction):
|
class FixProductNameAction(RepairAction):
|
||||||
label = "Fix Product Name"
|
label = "Fix Product Name"
|
||||||
|
|
||||||
|
|
||||||
class ValidateSubsetName(pyblish.api.InstancePlugin,
|
class ValidateSubsetName(plugin.HoudiniInstancePlugin,
|
||||||
OptionalPyblishPluginMixin):
|
OptionalPyblishPluginMixin):
|
||||||
"""Validate Product name.
|
"""Validate Product name.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
families = ["staticMesh"]
|
families = ["staticMesh"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Product Name"
|
label = "Validate Product Name"
|
||||||
order = ValidateContentsOrder + 0.1
|
order = ValidateContentsOrder + 0.1
|
||||||
actions = [FixProductNameAction, SelectInvalidAction]
|
actions = [FixProductNameAction, SelectInvalidAction]
|
||||||
|
|
||||||
optional = True
|
optional = True
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Validator for correct naming of Static Meshes."""
|
"""Validator for correct naming of Static Meshes."""
|
||||||
import pyblish.api
|
import hou
|
||||||
|
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
OptionalPyblishPluginMixin
|
OptionalPyblishPluginMixin
|
||||||
)
|
)
|
||||||
from ayon_core.pipeline.publish import ValidateContentsOrder
|
from ayon_core.pipeline.publish import ValidateContentsOrder
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.action import SelectInvalidAction
|
from ayon_houdini.api.action import SelectInvalidAction
|
||||||
from ayon_houdini.api.lib import get_output_children
|
from ayon_houdini.api.lib import get_output_children
|
||||||
|
|
||||||
import hou
|
|
||||||
|
|
||||||
|
class ValidateUnrealStaticMeshName(plugin.HoudiniInstancePlugin,
|
||||||
class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin,
|
|
||||||
OptionalPyblishPluginMixin):
|
OptionalPyblishPluginMixin):
|
||||||
"""Validate name of Unreal Static Mesh.
|
"""Validate name of Unreal Static Mesh.
|
||||||
|
|
||||||
|
|
@ -29,7 +29,6 @@ class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin,
|
||||||
"""
|
"""
|
||||||
|
|
||||||
families = ["staticMesh"]
|
families = ["staticMesh"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Unreal Static Mesh Name (FBX)"
|
label = "Unreal Static Mesh Name (FBX)"
|
||||||
order = ValidateContentsOrder + 0.1
|
order = ValidateContentsOrder + 0.1
|
||||||
actions = [SelectInvalidAction]
|
actions = [SelectInvalidAction]
|
||||||
|
|
@ -38,8 +37,6 @@ class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin,
|
||||||
collision_prefixes = []
|
collision_prefixes = []
|
||||||
static_mesh_prefix = ""
|
static_mesh_prefix = ""
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def apply_settings(cls, project_settings):
|
def apply_settings(cls, project_settings):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
import ayon_houdini.api.usd as hou_usdlib
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
|
||||||
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
class ValidateUSDLayerPathBackslashes(pyblish.api.InstancePlugin):
|
from ayon_houdini.api import plugin
|
||||||
|
import ayon_houdini.api.usd as hou_usdlib
|
||||||
|
|
||||||
|
|
||||||
|
class ValidateUSDLayerPathBackslashes(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate USD loaded paths have no backslashes.
|
"""Validate USD loaded paths have no backslashes.
|
||||||
|
|
||||||
This is a crucial validation for HUSK USD rendering as Houdini's
|
This is a crucial validation for HUSK USD rendering as Houdini's
|
||||||
|
|
@ -22,7 +23,6 @@ class ValidateUSDLayerPathBackslashes(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usdSetDress", "usdShade", "usd", "usdrender"]
|
families = ["usdSetDress", "usdShade", "usd", "usdrender"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "USD Layer path backslashes"
|
label = "USD Layer path backslashes"
|
||||||
optional = True
|
optional = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
import hou
|
||||||
|
|
||||||
import ayon_houdini.api.usd as hou_usdlib
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
|
||||||
|
|
||||||
from pxr import UsdShade, UsdRender, UsdLux
|
from pxr import UsdShade, UsdRender, UsdLux
|
||||||
|
|
||||||
import hou
|
import pyblish.api
|
||||||
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
import ayon_houdini.api.usd as hou_usdlib
|
||||||
|
|
||||||
|
|
||||||
def fullname(o):
|
def fullname(o):
|
||||||
|
|
@ -17,7 +17,7 @@ def fullname(o):
|
||||||
return module + "." + o.__name__
|
return module + "." + o.__name__
|
||||||
|
|
||||||
|
|
||||||
class ValidateUsdModel(pyblish.api.InstancePlugin):
|
class ValidateUsdModel(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate USD Model.
|
"""Validate USD Model.
|
||||||
|
|
||||||
Disallow Shaders, Render settings, products and vars and Lux lights.
|
Disallow Shaders, Render settings, products and vars and Lux lights.
|
||||||
|
|
@ -26,7 +26,6 @@ class ValidateUsdModel(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usdModel"]
|
families = ["usdModel"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate USD Model"
|
label = "Validate USD Model"
|
||||||
optional = True
|
optional = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateUSDOutputNode(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateUSDOutputNode(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the instance USD LOPs Output Node.
|
"""Validate the instance USD LOPs Output Node.
|
||||||
|
|
||||||
This will ensure:
|
This will ensure:
|
||||||
|
|
@ -15,7 +18,6 @@ class ValidateUSDOutputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usd"]
|
families = ["usd"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Output Node (USD)"
|
label = "Validate Output Node (USD)"
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import os
|
import os
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateUSDRenderProductNames(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateUSDRenderProductNames(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate USD Render Product names are correctly set absolute paths."""
|
"""Validate USD Render Product names are correctly set absolute paths."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usdrender"]
|
families = ["usdrender"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate USD Render Product Names"
|
label = "Validate USD Render Product Names"
|
||||||
optional = True
|
optional = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
|
|
||||||
import ayon_houdini.api.usd as hou_usdlib
|
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
import ayon_houdini.api.usd as hou_usdlib
|
||||||
|
|
||||||
class ValidateUsdSetDress(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateUsdSetDress(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate USD Set Dress.
|
"""Validate USD Set Dress.
|
||||||
|
|
||||||
Must only have references or payloads. May not generate new mesh or
|
Must only have references or payloads. May not generate new mesh or
|
||||||
|
|
@ -15,14 +16,13 @@ class ValidateUsdSetDress(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["usdSetDress"]
|
families = ["usdSetDress"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate USD Set Dress"
|
label = "Validate USD Set Dress"
|
||||||
optional = True
|
optional = True
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
|
|
||||||
from pxr import UsdGeom
|
|
||||||
import hou
|
import hou
|
||||||
|
from pxr import UsdGeom
|
||||||
|
|
||||||
rop = hou.node(instance.data.get("instance_node"))
|
rop = hou.node(instance.data.get("instance_node"))
|
||||||
lop_path = hou_usdlib.get_usd_rop_loppath(rop)
|
lop_path = hou_usdlib.get_usd_rop_loppath(rop)
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,19 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import ayon_api
|
import ayon_api
|
||||||
import pyblish.api
|
|
||||||
|
|
||||||
from ayon_core.pipeline.publish import (
|
from ayon_core.pipeline.publish import (
|
||||||
ValidateContentsOrder,
|
ValidateContentsOrder,
|
||||||
KnownPublishError,
|
KnownPublishError,
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
class ValidateUSDShadeModelExists(pyblish.api.InstancePlugin):
|
|
||||||
|
class ValidateUSDShadeModelExists(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate the Instance has no current cooking errors."""
|
"""Validate the Instance has no current cooking errors."""
|
||||||
|
|
||||||
order = ValidateContentsOrder
|
order = ValidateContentsOrder
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usdShade"]
|
families = ["usdShade"]
|
||||||
label = "USD Shade model exists"
|
label = "USD Shade model exists"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
import hou
|
||||||
|
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishValidationError
|
from ayon_core.pipeline import PublishValidationError
|
||||||
|
|
||||||
import hou
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class ValidateUsdShadeWorkspace(pyblish.api.InstancePlugin):
|
class ValidateUsdShadeWorkspace(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate USD Shading Workspace is correct version.
|
"""Validate USD Shading Workspace is correct version.
|
||||||
|
|
||||||
There have been some issues with outdated/erroneous Shading Workspaces
|
There have been some issues with outdated/erroneous Shading Workspaces
|
||||||
|
|
@ -14,7 +16,6 @@ class ValidateUsdShadeWorkspace(pyblish.api.InstancePlugin):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
hosts = ["houdini"]
|
|
||||||
families = ["usdShade"]
|
families = ["usdShade"]
|
||||||
label = "USD Shade Workspace"
|
label = "USD Shade Workspace"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import contextlib
|
import contextlib
|
||||||
|
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import PublishXmlValidationError
|
from ayon_core.pipeline import PublishXmlValidationError
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
from ayon_houdini.api.action import SelectInvalidAction
|
from ayon_houdini.api.action import SelectInvalidAction
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -60,7 +61,7 @@ def get_geometry_at_frame(sop_node, frame, force=True):
|
||||||
return sop_node.geometryAtFrame(frame)
|
return sop_node.geometryAtFrame(frame)
|
||||||
|
|
||||||
|
|
||||||
class ValidateVDBOutputNode(pyblish.api.InstancePlugin):
|
class ValidateVDBOutputNode(plugin.HoudiniInstancePlugin):
|
||||||
"""Validate that the node connected to the output node is of type VDB.
|
"""Validate that the node connected to the output node is of type VDB.
|
||||||
|
|
||||||
All primitives of the output geometry must be VDBs, no other primitive
|
All primitives of the output geometry must be VDBs, no other primitive
|
||||||
|
|
@ -81,7 +82,6 @@ class ValidateVDBOutputNode(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder + 0.1
|
order = pyblish.api.ValidatorOrder + 0.1
|
||||||
families = ["vdbcache"]
|
families = ["vdbcache"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Output Node (VDB)"
|
label = "Validate Output Node (VDB)"
|
||||||
actions = [SelectInvalidAction]
|
actions = [SelectInvalidAction]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,22 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import pyblish.api
|
|
||||||
import hou
|
import hou
|
||||||
|
|
||||||
|
import pyblish.api
|
||||||
from ayon_core.pipeline import (
|
from ayon_core.pipeline import (
|
||||||
PublishValidationError,
|
PublishValidationError,
|
||||||
OptionalPyblishPluginMixin
|
OptionalPyblishPluginMixin
|
||||||
)
|
)
|
||||||
from ayon_core.pipeline.publish import RepairAction
|
from ayon_core.pipeline.publish import RepairAction
|
||||||
|
|
||||||
|
from ayon_houdini.api import plugin
|
||||||
|
|
||||||
|
|
||||||
class ValidateWorkfilePaths(
|
class ValidateWorkfilePaths(
|
||||||
pyblish.api.InstancePlugin, OptionalPyblishPluginMixin):
|
plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin):
|
||||||
"""Validate workfile paths so they are absolute."""
|
"""Validate workfile paths so they are absolute."""
|
||||||
|
|
||||||
order = pyblish.api.ValidatorOrder
|
order = pyblish.api.ValidatorOrder
|
||||||
families = ["workfile"]
|
families = ["workfile"]
|
||||||
hosts = ["houdini"]
|
|
||||||
label = "Validate Workfile Paths"
|
label = "Validate Workfile Paths"
|
||||||
actions = [RepairAction]
|
actions = [RepairAction]
|
||||||
optional = True
|
optional = True
|
||||||
|
|
@ -22,8 +24,6 @@ class ValidateWorkfilePaths(
|
||||||
node_types = ["file", "alembic"]
|
node_types = ["file", "alembic"]
|
||||||
prohibited_vars = ["$HIP", "$JOB"]
|
prohibited_vars = ["$HIP", "$JOB"]
|
||||||
|
|
||||||
settings_category = "houdini"
|
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
if not self.is_active(instance.data):
|
if not self.is_active(instance.data):
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue