Skip to content

collect_review

CollectReview

Bases: BlenderInstancePlugin

Collect Review data

Source code in client/ayon_blender/plugins/publish/collect_review.py
 6
 7
 8
 9
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
class CollectReview(plugin.BlenderInstancePlugin):
    """Collect Review data

    """

    order = pyblish.api.CollectorOrder + 0.3
    label = "Collect Review Data"
    families = ["review"]

    def process(self, instance):

        self.log.debug(f"instance: {instance}")

        datablock = instance.data["transientData"]["instance_node"]

        # get cameras
        cameras = [
            obj
            for obj in datablock.all_objects
            if isinstance(obj, bpy.types.Object) and obj.type == "CAMERA"
        ]

        assert len(cameras) == 1, (
            f"Not a single camera found in extraction: {cameras}"
        )
        camera = cameras[0].name
        self.log.debug(f"camera: {camera}")

        focal_length = cameras[0].data.lens

        # get isolate objects list from meshes instance members.
        types = {"MESH", "GPENCIL"}
        isolate_objects = [
            obj
            for obj in instance
            if isinstance(obj, bpy.types.Object) and obj.type in types
        ]

        # Store focal length in `burninDataMembers`
        burninData = instance.data.setdefault("burninDataMembers", {})
        burninData["focalLength"] = focal_length

        instance.data.update({
            "review_camera": camera,
            "fps": instance.context.data["fps"],
            "isolate": isolate_objects,
        })

        self.log.debug(f"instance data: {instance.data}")