Skip to content

collect_vrayscene

Collect Vray Scene and prepare it for extraction and publishing.

CollectVrayScene

Bases: MayaInstancePlugin

Collect Vray Scene.

If export on farm is checked, job is created to export it.

Source code in client/ayon_maya/plugins/publish/collect_vrayscene.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class CollectVrayScene(plugin.MayaInstancePlugin):
    """Collect Vray Scene.

    If export on farm is checked, job is created to export it.
    """

    order = pyblish.api.CollectorOrder + 0.01
    label = "Collect Vray Scene"
    families = ["vrayscene"]

    def process(self, instance):
        """Collector entry point."""

        context = instance.context

        layer = instance.data["transientData"]["layer"]
        layer_name = layer.name()

        renderer = self.get_render_attribute("currentRenderer",
                                             layer=layer_name)
        if renderer != "vray":
            self.log.warning("Layer '{}' renderer is not set to V-Ray".format(
                layer_name
            ))

        # collect all frames we are expecting to be rendered
        frame_start_render = int(self.get_render_attribute(
            "startFrame", layer=layer_name))
        frame_end_render = int(self.get_render_attribute(
            "endFrame", layer=layer_name))

        if (int(context.data['frameStartHandle']) == frame_start_render
                and int(context.data['frameEndHandle']) == frame_end_render):  # noqa: W503, E501

            handle_start = context.data['handleStart']
            handle_end = context.data['handleEnd']
            frame_start = context.data['frameStart']
            frame_end = context.data['frameEnd']
            frame_start_handle = context.data['frameStartHandle']
            frame_end_handle = context.data['frameEndHandle']
        else:
            handle_start = 0
            handle_end = 0
            frame_start = frame_start_render
            frame_end = frame_end_render
            frame_start_handle = frame_start_render
            frame_end_handle = frame_end_render

        # Get layer specific settings, might be overrides
        i_product_type = instance.data.get("productType")
        i_product_base_type = instance.data.get("productBaseType")
        product_base_type = "vrayscene_layer"
        product_type = product_base_type
        if i_product_type != i_product_base_type:
            product_type = i_product_type

        data = {
            "productName": layer_name,
            "layer": layer_name,
            # TODO: This likely needs fixing now
            # Before refactor: cmds.sets(layer, q=True) or ["*"]
            "setMembers": ["*"],
            "review": False,
            "publish": True,
            "handleStart": handle_start,
            "handleEnd": handle_end,
            "frameStart": frame_start,
            "frameEnd": frame_end,
            "frameStartHandle": frame_start_handle,
            "frameEndHandle": frame_end_handle,
            "byFrameStep": int(
                self.get_render_attribute("byFrameStep",
                                          layer=layer_name)),
            "renderer": renderer,
            "productType": product_type,
            # instance product base type
            "productBaseType": product_base_type,
            "family": product_base_type,
            "families": [product_base_type],
            "time": get_formatted_current_time(),
            "author": context.data["user"],
            # Add source to allow tracing back to the scene from
            # which was submitted originally
            "source": context.data["currentFile"].replace("\\", "/"),
            "resolutionWidth": lib.get_attr_in_layer(
                "defaultResolution.height", layer=layer_name
            ),
            "resolutionHeight": lib.get_attr_in_layer(
                "defaultResolution.width", layer=layer_name
            ),
            "pixelAspect": lib.get_attr_in_layer(
                "defaultResolution.pixelAspect", layer=layer_name
            ),
            "priority": instance.data.get("priority"),
            "useMultipleSceneFiles": instance.data.get(
                "vraySceneMultipleFiles")
        }

        instance.data.update(data)

        # Define nice label
        label = "{0} ({1})".format(layer_name, instance.data["folderPath"])
        label += "  [{0}-{1}]".format(
            int(data["frameStartHandle"]), int(data["frameEndHandle"])
        )
        instance.data["label"] = label

    def get_render_attribute(self, attr, layer):
        """Get attribute from render options.

        Args:
            attr (str): name of attribute to be looked up.

        Returns:
            Attribute value

        """
        return lib.get_attr_in_layer(
            "defaultRenderGlobals.{}".format(attr), layer=layer
        )

get_render_attribute(attr, layer)

Get attribute from render options.

Parameters:

Name Type Description Default
attr str

name of attribute to be looked up.

required

Returns:

Type Description

Attribute value

Source code in client/ayon_maya/plugins/publish/collect_vrayscene.py
117
118
119
120
121
122
123
124
125
126
127
128
129
def get_render_attribute(self, attr, layer):
    """Get attribute from render options.

    Args:
        attr (str): name of attribute to be looked up.

    Returns:
        Attribute value

    """
    return lib.get_attr_in_layer(
        "defaultRenderGlobals.{}".format(attr), layer=layer
    )

process(instance)

Collector entry point.

Source code in client/ayon_maya/plugins/publish/collect_vrayscene.py
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
def process(self, instance):
    """Collector entry point."""

    context = instance.context

    layer = instance.data["transientData"]["layer"]
    layer_name = layer.name()

    renderer = self.get_render_attribute("currentRenderer",
                                         layer=layer_name)
    if renderer != "vray":
        self.log.warning("Layer '{}' renderer is not set to V-Ray".format(
            layer_name
        ))

    # collect all frames we are expecting to be rendered
    frame_start_render = int(self.get_render_attribute(
        "startFrame", layer=layer_name))
    frame_end_render = int(self.get_render_attribute(
        "endFrame", layer=layer_name))

    if (int(context.data['frameStartHandle']) == frame_start_render
            and int(context.data['frameEndHandle']) == frame_end_render):  # noqa: W503, E501

        handle_start = context.data['handleStart']
        handle_end = context.data['handleEnd']
        frame_start = context.data['frameStart']
        frame_end = context.data['frameEnd']
        frame_start_handle = context.data['frameStartHandle']
        frame_end_handle = context.data['frameEndHandle']
    else:
        handle_start = 0
        handle_end = 0
        frame_start = frame_start_render
        frame_end = frame_end_render
        frame_start_handle = frame_start_render
        frame_end_handle = frame_end_render

    # Get layer specific settings, might be overrides
    i_product_type = instance.data.get("productType")
    i_product_base_type = instance.data.get("productBaseType")
    product_base_type = "vrayscene_layer"
    product_type = product_base_type
    if i_product_type != i_product_base_type:
        product_type = i_product_type

    data = {
        "productName": layer_name,
        "layer": layer_name,
        # TODO: This likely needs fixing now
        # Before refactor: cmds.sets(layer, q=True) or ["*"]
        "setMembers": ["*"],
        "review": False,
        "publish": True,
        "handleStart": handle_start,
        "handleEnd": handle_end,
        "frameStart": frame_start,
        "frameEnd": frame_end,
        "frameStartHandle": frame_start_handle,
        "frameEndHandle": frame_end_handle,
        "byFrameStep": int(
            self.get_render_attribute("byFrameStep",
                                      layer=layer_name)),
        "renderer": renderer,
        "productType": product_type,
        # instance product base type
        "productBaseType": product_base_type,
        "family": product_base_type,
        "families": [product_base_type],
        "time": get_formatted_current_time(),
        "author": context.data["user"],
        # Add source to allow tracing back to the scene from
        # which was submitted originally
        "source": context.data["currentFile"].replace("\\", "/"),
        "resolutionWidth": lib.get_attr_in_layer(
            "defaultResolution.height", layer=layer_name
        ),
        "resolutionHeight": lib.get_attr_in_layer(
            "defaultResolution.width", layer=layer_name
        ),
        "pixelAspect": lib.get_attr_in_layer(
            "defaultResolution.pixelAspect", layer=layer_name
        ),
        "priority": instance.data.get("priority"),
        "useMultipleSceneFiles": instance.data.get(
            "vraySceneMultipleFiles")
    }

    instance.data.update(data)

    # Define nice label
    label = "{0} ({1})".format(layer_name, instance.data["folderPath"])
    label += "  [{0}-{1}]".format(
        int(data["frameStartHandle"]), int(data["frameEndHandle"])
    )
    instance.data["label"] = label